/* Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 *
 * DO NOT EDIT
 * Auto-generated _blink library.
 */
library dart.dom._blink;

import 'dart:async';
import 'dart:js' as js;
import 'dart:html' show DomException;
import 'dart:_internal' as internal;

// This is a place to put custom renames if we need them.
final resolverMap = {};

dynamic resolver(String s) {
  if (s == "ANGLEInstancedArrays") return BlinkANGLEInstancedArrays.instance;
  if (s == "AbstractWorker") return BlinkAbstractWorker.instance;
  if (s == "AnalyserNode") return BlinkAnalyserNode.instance;
  if (s == "Animation") return BlinkAnimation.instance;
  if (s == "AnimationEffectReadOnly")
    return BlinkAnimationEffectReadOnly.instance;
  if (s == "AnimationEffectTiming") return BlinkAnimationEffectTiming.instance;
  if (s == "AnimationEvent") return BlinkAnimationEvent.instance;
  if (s == "AnimationPlayerEvent") return BlinkAnimationPlayerEvent.instance;
  if (s == "AnimationTimeline") return BlinkAnimationTimeline.instance;
  if (s == "AppBannerPromptResult") return BlinkAppBannerPromptResult.instance;
  if (s == "ApplicationCache") return BlinkApplicationCache.instance;
  if (s == "ApplicationCacheErrorEvent")
    return BlinkApplicationCacheErrorEvent.instance;
  if (s == "ArrayBuffer") return BlinkArrayBuffer.instance;
  if (s == "ArrayBufferView") return BlinkArrayBufferView.instance;
  if (s == "Attr") return BlinkAttr.instance;
  if (s == "AudioBuffer") return BlinkAudioBuffer.instance;
  if (s == "AudioBufferCallback") return BlinkAudioBufferCallback.instance;
  if (s == "AudioBufferSourceNode") return BlinkAudioBufferSourceNode.instance;
  if (s == "AudioContext") return BlinkAudioContext.instance;
  if (s == "AudioDestinationNode") return BlinkAudioDestinationNode.instance;
  if (s == "AudioListener") return BlinkAudioListener.instance;
  if (s == "AudioNode") return BlinkAudioNode.instance;
  if (s == "AudioParam") return BlinkAudioParam.instance;
  if (s == "AudioProcessingEvent") return BlinkAudioProcessingEvent.instance;
  if (s == "AudioSourceNode") return BlinkAudioSourceNode.instance;
  if (s == "AudioTrack") return BlinkAudioTrack.instance;
  if (s == "AudioTrackList") return BlinkAudioTrackList.instance;
  if (s == "AutocompleteErrorEvent")
    return BlinkAutocompleteErrorEvent.instance;
  if (s == "BarProp") return BlinkBarProp.instance;
  if (s == "BatteryManager") return BlinkBatteryManager.instance;
  if (s == "BeforeInstallPromptEvent")
    return BlinkBeforeInstallPromptEvent.instance;
  if (s == "BeforeUnloadEvent") return BlinkBeforeUnloadEvent.instance;
  if (s == "BiquadFilterNode") return BlinkBiquadFilterNode.instance;
  if (s == "Blob") return BlinkBlob.instance;
  if (s == "BlobCallback") return BlinkBlobCallback.instance;
  if (s == "BlobEvent") return BlinkBlobEvent.instance;
  if (s == "Bluetooth") return BlinkBluetooth.instance;
  if (s == "BluetoothAdvertisingData")
    return BlinkBluetoothAdvertisingData.instance;
  if (s == "BluetoothCharacteristicProperties")
    return BlinkBluetoothCharacteristicProperties.instance;
  if (s == "BluetoothDevice") return BlinkBluetoothDevice.instance;
  if (s == "BluetoothRemoteGATTCharacteristic")
    return BlinkBluetoothRemoteGATTCharacteristic.instance;
  if (s == "BluetoothRemoteGATTServer")
    return BlinkBluetoothRemoteGATTServer.instance;
  if (s == "BluetoothRemoteGATTService")
    return BlinkBluetoothRemoteGATTService.instance;
  if (s == "BluetoothUUID") return BlinkBluetoothUUID.instance;
  if (s == "Body") return BlinkBody.instance;
  if (s == "CDATASection") return BlinkCDATASection.instance;
  if (s == "CHROMIUMSubscribeUniform")
    return BlinkCHROMIUMSubscribeUniform.instance;
  if (s == "CHROMIUMValuebuffer") return BlinkCHROMIUMValuebuffer.instance;
  if (s == "CSS") return BlinkCSS.instance;
  if (s == "CSSCharsetRule") return BlinkCSSCharsetRule.instance;
  if (s == "CSSFontFaceRule") return BlinkCSSFontFaceRule.instance;
  if (s == "CSSGroupingRule") return BlinkCSSGroupingRule.instance;
  if (s == "CSSImportRule") return BlinkCSSImportRule.instance;
  if (s == "CSSKeyframeRule") return BlinkCSSKeyframeRule.instance;
  if (s == "CSSKeyframesRule") return BlinkCSSKeyframesRule.instance;
  if (s == "CSSMediaRule") return BlinkCSSMediaRule.instance;
  if (s == "CSSNamespaceRule") return BlinkCSSNamespaceRule.instance;
  if (s == "CSSPageRule") return BlinkCSSPageRule.instance;
  if (s == "CSSRule") return BlinkCSSRule.instance;
  if (s == "CSSRuleList") return BlinkCSSRuleList.instance;
  if (s == "CSSStyleDeclaration") return BlinkCSSStyleDeclaration.instance;
  if (s == "CSSStyleRule") return BlinkCSSStyleRule.instance;
  if (s == "CSSStyleSheet") return BlinkCSSStyleSheet.instance;
  if (s == "CSSSupportsRule") return BlinkCSSSupportsRule.instance;
  if (s == "CSSViewportRule") return BlinkCSSViewportRule.instance;
  if (s == "Cache") return BlinkCache.instance;
  if (s == "CacheStorage") return BlinkCacheStorage.instance;
  if (s == "CalcLength") return BlinkCalcLength.instance;
  if (s == "CanvasCaptureMediaStreamTrack")
    return BlinkCanvasCaptureMediaStreamTrack.instance;
  if (s == "CanvasGradient") return BlinkCanvasGradient.instance;
  if (s == "CanvasPathMethods") return BlinkCanvasPathMethods.instance;
  if (s == "CanvasPattern") return BlinkCanvasPattern.instance;
  if (s == "CanvasRenderingContext2D")
    return BlinkCanvasRenderingContext2D.instance;
  if (s == "ChannelMergerNode") return BlinkChannelMergerNode.instance;
  if (s == "ChannelSplitterNode") return BlinkChannelSplitterNode.instance;
  if (s == "CharacterData") return BlinkCharacterData.instance;
  if (s == "ChildNode") return BlinkChildNode.instance;
  if (s == "CircularGeofencingRegion")
    return BlinkCircularGeofencingRegion.instance;
  if (s == "Client") return BlinkClient.instance;
  if (s == "ClientRect") return BlinkClientRect.instance;
  if (s == "ClientRectList") return BlinkClientRectList.instance;
  if (s == "Clients") return BlinkClients.instance;
  if (s == "ClipboardEvent") return BlinkClipboardEvent.instance;
  if (s == "CloseEvent") return BlinkCloseEvent.instance;
  if (s == "Comment") return BlinkComment.instance;
  if (s == "CompositionEvent") return BlinkCompositionEvent.instance;
  if (s == "CompositorProxy") return BlinkCompositorProxy.instance;
  if (s == "CompositorWorker") return BlinkCompositorWorker.instance;
  if (s == "CompositorWorkerGlobalScope")
    return BlinkCompositorWorkerGlobalScope.instance;
  if (s == "Console") return BlinkConsole.instance;
  if (s == "ConsoleBase") return BlinkConsoleBase.instance;
  if (s == "ConvolverNode") return BlinkConvolverNode.instance;
  if (s == "Coordinates") return BlinkCoordinates.instance;
  if (s == "Credential") return BlinkCredential.instance;
  if (s == "CredentialsContainer") return BlinkCredentialsContainer.instance;
  if (s == "CrossOriginServiceWorkerClient")
    return BlinkCrossOriginServiceWorkerClient.instance;
  if (s == "Crypto") return BlinkCrypto.instance;
  if (s == "CryptoKey") return BlinkCryptoKey.instance;
  if (s == "CustomEvent") return BlinkCustomEvent.instance;
  if (s == "DOMError") return BlinkDOMError.instance;
  if (s == "DOMException") return BlinkDOMException.instance;
  if (s == "DOMFileSystem") return BlinkDOMFileSystem.instance;
  if (s == "DOMFileSystemSync") return BlinkDOMFileSystemSync.instance;
  if (s == "DOMImplementation") return BlinkDOMImplementation.instance;
  if (s == "DOMMatrix") return BlinkDOMMatrix.instance;
  if (s == "DOMMatrixReadOnly") return BlinkDOMMatrixReadOnly.instance;
  if (s == "DOMParser") return BlinkDOMParser.instance;
  if (s == "DOMPoint") return BlinkDOMPoint.instance;
  if (s == "DOMPointReadOnly") return BlinkDOMPointReadOnly.instance;
  if (s == "DOMRect") return BlinkDOMRect.instance;
  if (s == "DOMRectReadOnly") return BlinkDOMRectReadOnly.instance;
  if (s == "DOMStringList") return BlinkDOMStringList.instance;
  if (s == "DOMStringMap") return BlinkDOMStringMap.instance;
  if (s == "DOMTokenList") return BlinkDOMTokenList.instance;
  if (s == "DataTransfer") return BlinkDataTransfer.instance;
  if (s == "DataTransferItem") return BlinkDataTransferItem.instance;
  if (s == "DataTransferItemList") return BlinkDataTransferItemList.instance;
  if (s == "DataView") return BlinkDataView.instance;
  if (s == "Database") return BlinkDatabase.instance;
  if (s == "DatabaseCallback") return BlinkDatabaseCallback.instance;
  if (s == "DedicatedWorkerGlobalScope")
    return BlinkDedicatedWorkerGlobalScope.instance;
  if (s == "DelayNode") return BlinkDelayNode.instance;
  if (s == "DeprecatedStorageInfo") return BlinkDeprecatedStorageInfo.instance;
  if (s == "DeprecatedStorageQuota")
    return BlinkDeprecatedStorageQuota.instance;
  if (s == "DeviceAcceleration") return BlinkDeviceAcceleration.instance;
  if (s == "DeviceLightEvent") return BlinkDeviceLightEvent.instance;
  if (s == "DeviceMotionEvent") return BlinkDeviceMotionEvent.instance;
  if (s == "DeviceOrientationEvent")
    return BlinkDeviceOrientationEvent.instance;
  if (s == "DeviceRotationRate") return BlinkDeviceRotationRate.instance;
  if (s == "DirectoryEntry") return BlinkDirectoryEntry.instance;
  if (s == "DirectoryEntrySync") return BlinkDirectoryEntrySync.instance;
  if (s == "DirectoryReader") return BlinkDirectoryReader.instance;
  if (s == "DirectoryReaderSync") return BlinkDirectoryReaderSync.instance;
  if (s == "Document") return BlinkDocument.instance;
  if (s == "DocumentFragment") return BlinkDocumentFragment.instance;
  if (s == "DocumentType") return BlinkDocumentType.instance;
  if (s == "DynamicsCompressorNode")
    return BlinkDynamicsCompressorNode.instance;
  if (s == "EXTBlendMinMax") return BlinkEXTBlendMinMax.instance;
  if (s == "EXTColorBufferFloat") return BlinkEXTColorBufferFloat.instance;
  if (s == "EXTDisjointTimerQuery") return BlinkEXTDisjointTimerQuery.instance;
  if (s == "EXTFragDepth") return BlinkEXTFragDepth.instance;
  if (s == "EXTShaderTextureLOD") return BlinkEXTShaderTextureLOD.instance;
  if (s == "EXTTextureFilterAnisotropic")
    return BlinkEXTTextureFilterAnisotropic.instance;
  if (s == "EXTsRGB") return BlinkEXTsRGB.instance;
  if (s == "EffectModel") return BlinkEffectModel.instance;
  if (s == "Element") return BlinkElement.instance;
  if (s == "EntriesCallback") return BlinkEntriesCallback.instance;
  if (s == "Entry") return BlinkEntry.instance;
  if (s == "EntryCallback") return BlinkEntryCallback.instance;
  if (s == "EntrySync") return BlinkEntrySync.instance;
  if (s == "ErrorCallback") return BlinkErrorCallback.instance;
  if (s == "ErrorEvent") return BlinkErrorEvent.instance;
  if (s == "Event") return BlinkEvent.instance;
  if (s == "EventListener") return BlinkEventListener.instance;
  if (s == "EventSource") return BlinkEventSource.instance;
  if (s == "EventTarget") return BlinkEventTarget.instance;
  if (s == "ExtendableEvent") return BlinkExtendableEvent.instance;
  if (s == "ExtendableMessageEvent")
    return BlinkExtendableMessageEvent.instance;
  if (s == "FederatedCredential") return BlinkFederatedCredential.instance;
  if (s == "FetchEvent") return BlinkFetchEvent.instance;
  if (s == "File") return BlinkFile.instance;
  if (s == "FileEntry") return BlinkFileEntry.instance;
  if (s == "FileEntrySync") return BlinkFileEntrySync.instance;
  if (s == "FileError") return BlinkFileError.instance;
  if (s == "FileList") return BlinkFileList.instance;
  if (s == "FileReader") return BlinkFileReader.instance;
  if (s == "FileReaderSync") return BlinkFileReaderSync.instance;
  if (s == "FileSystemCallback") return BlinkFileSystemCallback.instance;
  if (s == "FileWriter") return BlinkFileWriter.instance;
  if (s == "FileWriterCallback") return BlinkFileWriterCallback.instance;
  if (s == "FileWriterSync") return BlinkFileWriterSync.instance;
  if (s == "Float32Array") return BlinkFloat32Array.instance;
  if (s == "Float64Array") return BlinkFloat64Array.instance;
  if (s == "FocusEvent") return BlinkFocusEvent.instance;
  if (s == "FontFace") return BlinkFontFace.instance;
  if (s == "FontFaceSet") return BlinkFontFaceSet.instance;
  if (s == "FontFaceSetLoadEvent") return BlinkFontFaceSetLoadEvent.instance;
  if (s == "FormData") return BlinkFormData.instance;
  if (s == "FrameRequestCallback") return BlinkFrameRequestCallback.instance;
  if (s == "GainNode") return BlinkGainNode.instance;
  if (s == "Gamepad") return BlinkGamepad.instance;
  if (s == "GamepadButton") return BlinkGamepadButton.instance;
  if (s == "GamepadEvent") return BlinkGamepadEvent.instance;
  if (s == "GamepadList") return BlinkGamepadList.instance;
  if (s == "Geofencing") return BlinkGeofencing.instance;
  if (s == "GeofencingEvent") return BlinkGeofencingEvent.instance;
  if (s == "GeofencingRegion") return BlinkGeofencingRegion.instance;
  if (s == "Geolocation") return BlinkGeolocation.instance;
  if (s == "Geoposition") return BlinkGeoposition.instance;
  if (s == "GlobalEventHandlers") return BlinkGlobalEventHandlers.instance;
  if (s == "HMDVRDevice") return BlinkHMDVRDevice.instance;
  if (s == "HTMLAllCollection") return BlinkHTMLAllCollection.instance;
  if (s == "HTMLAnchorElement") return BlinkHTMLAnchorElement.instance;
  if (s == "HTMLAreaElement") return BlinkHTMLAreaElement.instance;
  if (s == "HTMLAudioElement") return BlinkHTMLAudioElement.instance;
  if (s == "HTMLBRElement") return BlinkHTMLBRElement.instance;
  if (s == "HTMLBaseElement") return BlinkHTMLBaseElement.instance;
  if (s == "HTMLBodyElement") return BlinkHTMLBodyElement.instance;
  if (s == "HTMLButtonElement") return BlinkHTMLButtonElement.instance;
  if (s == "HTMLCanvasElement") return BlinkHTMLCanvasElement.instance;
  if (s == "HTMLCollection") return BlinkHTMLCollection.instance;
  if (s == "HTMLContentElement") return BlinkHTMLContentElement.instance;
  if (s == "HTMLDListElement") return BlinkHTMLDListElement.instance;
  if (s == "HTMLDataListElement") return BlinkHTMLDataListElement.instance;
  if (s == "HTMLDetailsElement") return BlinkHTMLDetailsElement.instance;
  if (s == "HTMLDialogElement") return BlinkHTMLDialogElement.instance;
  if (s == "HTMLDirectoryElement") return BlinkHTMLDirectoryElement.instance;
  if (s == "HTMLDivElement") return BlinkHTMLDivElement.instance;
  if (s == "HTMLDocument") return BlinkHTMLDocument.instance;
  if (s == "HTMLElement") return BlinkHTMLElement.instance;
  if (s == "HTMLEmbedElement") return BlinkHTMLEmbedElement.instance;
  if (s == "HTMLFieldSetElement") return BlinkHTMLFieldSetElement.instance;
  if (s == "HTMLFontElement") return BlinkHTMLFontElement.instance;
  if (s == "HTMLFormControlsCollection")
    return BlinkHTMLFormControlsCollection.instance;
  if (s == "HTMLFormElement") return BlinkHTMLFormElement.instance;
  if (s == "HTMLFrameElement") return BlinkHTMLFrameElement.instance;
  if (s == "HTMLFrameSetElement") return BlinkHTMLFrameSetElement.instance;
  if (s == "HTMLHRElement") return BlinkHTMLHRElement.instance;
  if (s == "HTMLHeadElement") return BlinkHTMLHeadElement.instance;
  if (s == "HTMLHeadingElement") return BlinkHTMLHeadingElement.instance;
  if (s == "HTMLHtmlElement") return BlinkHTMLHtmlElement.instance;
  if (s == "HTMLIFrameElement") return BlinkHTMLIFrameElement.instance;
  if (s == "HTMLImageElement") return BlinkHTMLImageElement.instance;
  if (s == "HTMLInputElement") return BlinkHTMLInputElement.instance;
  if (s == "HTMLKeygenElement") return BlinkHTMLKeygenElement.instance;
  if (s == "HTMLLIElement") return BlinkHTMLLIElement.instance;
  if (s == "HTMLLabelElement") return BlinkHTMLLabelElement.instance;
  if (s == "HTMLLegendElement") return BlinkHTMLLegendElement.instance;
  if (s == "HTMLLinkElement") return BlinkHTMLLinkElement.instance;
  if (s == "HTMLMapElement") return BlinkHTMLMapElement.instance;
  if (s == "HTMLMarqueeElement") return BlinkHTMLMarqueeElement.instance;
  if (s == "HTMLMediaElement") return BlinkHTMLMediaElement.instance;
  if (s == "HTMLMenuElement") return BlinkHTMLMenuElement.instance;
  if (s == "HTMLMenuItemElement") return BlinkHTMLMenuItemElement.instance;
  if (s == "HTMLMetaElement") return BlinkHTMLMetaElement.instance;
  if (s == "HTMLMeterElement") return BlinkHTMLMeterElement.instance;
  if (s == "HTMLModElement") return BlinkHTMLModElement.instance;
  if (s == "HTMLOListElement") return BlinkHTMLOListElement.instance;
  if (s == "HTMLObjectElement") return BlinkHTMLObjectElement.instance;
  if (s == "HTMLOptGroupElement") return BlinkHTMLOptGroupElement.instance;
  if (s == "HTMLOptionElement") return BlinkHTMLOptionElement.instance;
  if (s == "HTMLOptionsCollection") return BlinkHTMLOptionsCollection.instance;
  if (s == "HTMLOutputElement") return BlinkHTMLOutputElement.instance;
  if (s == "HTMLParagraphElement") return BlinkHTMLParagraphElement.instance;
  if (s == "HTMLParamElement") return BlinkHTMLParamElement.instance;
  if (s == "HTMLPictureElement") return BlinkHTMLPictureElement.instance;
  if (s == "HTMLPreElement") return BlinkHTMLPreElement.instance;
  if (s == "HTMLProgressElement") return BlinkHTMLProgressElement.instance;
  if (s == "HTMLQuoteElement") return BlinkHTMLQuoteElement.instance;
  if (s == "HTMLScriptElement") return BlinkHTMLScriptElement.instance;
  if (s == "HTMLSelectElement") return BlinkHTMLSelectElement.instance;
  if (s == "HTMLShadowElement") return BlinkHTMLShadowElement.instance;
  if (s == "HTMLSlotElement") return BlinkHTMLSlotElement.instance;
  if (s == "HTMLSourceElement") return BlinkHTMLSourceElement.instance;
  if (s == "HTMLSpanElement") return BlinkHTMLSpanElement.instance;
  if (s == "HTMLStyleElement") return BlinkHTMLStyleElement.instance;
  if (s == "HTMLTableCaptionElement")
    return BlinkHTMLTableCaptionElement.instance;
  if (s == "HTMLTableCellElement") return BlinkHTMLTableCellElement.instance;
  if (s == "HTMLTableColElement") return BlinkHTMLTableColElement.instance;
  if (s == "HTMLTableElement") return BlinkHTMLTableElement.instance;
  if (s == "HTMLTableRowElement") return BlinkHTMLTableRowElement.instance;
  if (s == "HTMLTableSectionElement")
    return BlinkHTMLTableSectionElement.instance;
  if (s == "HTMLTemplateElement") return BlinkHTMLTemplateElement.instance;
  if (s == "HTMLTextAreaElement") return BlinkHTMLTextAreaElement.instance;
  if (s == "HTMLTitleElement") return BlinkHTMLTitleElement.instance;
  if (s == "HTMLTrackElement") return BlinkHTMLTrackElement.instance;
  if (s == "HTMLUListElement") return BlinkHTMLUListElement.instance;
  if (s == "HTMLUnknownElement") return BlinkHTMLUnknownElement.instance;
  if (s == "HTMLVideoElement") return BlinkHTMLVideoElement.instance;
  if (s == "HashChangeEvent") return BlinkHashChangeEvent.instance;
  if (s == "Headers") return BlinkHeaders.instance;
  if (s == "History") return BlinkHistory.instance;
  if (s == "IDBCursor") return BlinkIDBCursor.instance;
  if (s == "IDBCursorWithValue") return BlinkIDBCursorWithValue.instance;
  if (s == "IDBDatabase") return BlinkIDBDatabase.instance;
  if (s == "IDBFactory") return BlinkIDBFactory.instance;
  if (s == "IDBIndex") return BlinkIDBIndex.instance;
  if (s == "IDBKeyRange") return BlinkIDBKeyRange.instance;
  if (s == "IDBObjectStore") return BlinkIDBObjectStore.instance;
  if (s == "IDBOpenDBRequest") return BlinkIDBOpenDBRequest.instance;
  if (s == "IDBRequest") return BlinkIDBRequest.instance;
  if (s == "IDBTransaction") return BlinkIDBTransaction.instance;
  if (s == "IDBVersionChangeEvent") return BlinkIDBVersionChangeEvent.instance;
  if (s == "IIRFilterNode") return BlinkIIRFilterNode.instance;
  if (s == "IdleDeadline") return BlinkIdleDeadline.instance;
  if (s == "IdleRequestCallback") return BlinkIdleRequestCallback.instance;
  if (s == "ImageBitmap") return BlinkImageBitmap.instance;
  if (s == "ImageBitmapRenderingContext")
    return BlinkImageBitmapRenderingContext.instance;
  if (s == "ImageData") return BlinkImageData.instance;
  if (s == "InjectedScriptHost") return BlinkInjectedScriptHost.instance;
  if (s == "InputDeviceCapabilities")
    return BlinkInputDeviceCapabilities.instance;
  if (s == "InstallEvent") return BlinkInstallEvent.instance;
  if (s == "Int16Array") return BlinkInt16Array.instance;
  if (s == "Int32Array") return BlinkInt32Array.instance;
  if (s == "Int8Array") return BlinkInt8Array.instance;
  if (s == "IntersectionObserver") return BlinkIntersectionObserver.instance;
  if (s == "IntersectionObserverEntry")
    return BlinkIntersectionObserverEntry.instance;
  if (s == "Iterator") return BlinkIterator.instance;
  if (s == "KeyboardEvent") return BlinkKeyboardEvent.instance;
  if (s == "KeyframeEffect") return BlinkKeyframeEffect.instance;
  if (s == "KeywordValue") return BlinkKeywordValue.instance;
  if (s == "LengthValue") return BlinkLengthValue.instance;
  if (s == "Location") return BlinkLocation.instance;
  if (s == "MIDIAccess") return BlinkMIDIAccess.instance;
  if (s == "MIDIConnectionEvent") return BlinkMIDIConnectionEvent.instance;
  if (s == "MIDIInput") return BlinkMIDIInput.instance;
  if (s == "MIDIInputMap") return BlinkMIDIInputMap.instance;
  if (s == "MIDIMessageEvent") return BlinkMIDIMessageEvent.instance;
  if (s == "MIDIOutput") return BlinkMIDIOutput.instance;
  if (s == "MIDIOutputMap") return BlinkMIDIOutputMap.instance;
  if (s == "MIDIPort") return BlinkMIDIPort.instance;
  if (s == "Matrix") return BlinkMatrix.instance;
  if (s == "MediaDeviceInfo") return BlinkMediaDeviceInfo.instance;
  if (s == "MediaDevices") return BlinkMediaDevices.instance;
  if (s == "MediaElementAudioSourceNode")
    return BlinkMediaElementAudioSourceNode.instance;
  if (s == "MediaEncryptedEvent") return BlinkMediaEncryptedEvent.instance;
  if (s == "MediaError") return BlinkMediaError.instance;
  if (s == "MediaKeyMessageEvent") return BlinkMediaKeyMessageEvent.instance;
  if (s == "MediaKeySession") return BlinkMediaKeySession.instance;
  if (s == "MediaKeyStatusMap") return BlinkMediaKeyStatusMap.instance;
  if (s == "MediaKeySystemAccess") return BlinkMediaKeySystemAccess.instance;
  if (s == "MediaKeys") return BlinkMediaKeys.instance;
  if (s == "MediaList") return BlinkMediaList.instance;
  if (s == "MediaMetadata") return BlinkMediaMetadata.instance;
  if (s == "MediaQueryList") return BlinkMediaQueryList.instance;
  if (s == "MediaQueryListEvent") return BlinkMediaQueryListEvent.instance;
  if (s == "MediaRecorder") return BlinkMediaRecorder.instance;
  if (s == "MediaSession") return BlinkMediaSession.instance;
  if (s == "MediaSource") return BlinkMediaSource.instance;
  if (s == "MediaStream") return BlinkMediaStream.instance;
  if (s == "MediaStreamAudioDestinationNode")
    return BlinkMediaStreamAudioDestinationNode.instance;
  if (s == "MediaStreamAudioSourceNode")
    return BlinkMediaStreamAudioSourceNode.instance;
  if (s == "MediaStreamEvent") return BlinkMediaStreamEvent.instance;
  if (s == "MediaStreamTrack") return BlinkMediaStreamTrack.instance;
  if (s == "MediaStreamTrackEvent") return BlinkMediaStreamTrackEvent.instance;
  if (s == "MediaStreamTrackSourcesCallback")
    return BlinkMediaStreamTrackSourcesCallback.instance;
  if (s == "MemoryInfo") return BlinkMemoryInfo.instance;
  if (s == "MessageCallback") return BlinkMessageCallback.instance;
  if (s == "MessageChannel") return BlinkMessageChannel.instance;
  if (s == "MessageEvent") return BlinkMessageEvent.instance;
  if (s == "MessagePort") return BlinkMessagePort.instance;
  if (s == "Metadata") return BlinkMetadata.instance;
  if (s == "MetadataCallback") return BlinkMetadataCallback.instance;
  if (s == "MimeType") return BlinkMimeType.instance;
  if (s == "MimeTypeArray") return BlinkMimeTypeArray.instance;
  if (s == "MouseEvent") return BlinkMouseEvent.instance;
  if (s == "MutationCallback") return BlinkMutationCallback.instance;
  if (s == "MutationObserver") return BlinkMutationObserver.instance;
  if (s == "MutationRecord") return BlinkMutationRecord.instance;
  if (s == "NFC") return BlinkNFC.instance;
  if (s == "NamedNodeMap") return BlinkNamedNodeMap.instance;
  if (s == "Navigator") return BlinkNavigator.instance;
  if (s == "NavigatorCPU") return BlinkNavigatorCPU.instance;
  if (s == "NavigatorID") return BlinkNavigatorID.instance;
  if (s == "NavigatorLanguage") return BlinkNavigatorLanguage.instance;
  if (s == "NavigatorOnLine") return BlinkNavigatorOnLine.instance;
  if (s == "NavigatorStorageUtils") return BlinkNavigatorStorageUtils.instance;
  if (s == "NavigatorUserMediaError")
    return BlinkNavigatorUserMediaError.instance;
  if (s == "NavigatorUserMediaErrorCallback")
    return BlinkNavigatorUserMediaErrorCallback.instance;
  if (s == "NavigatorUserMediaSuccessCallback")
    return BlinkNavigatorUserMediaSuccessCallback.instance;
  if (s == "NetworkInformation") return BlinkNetworkInformation.instance;
  if (s == "Node") return BlinkNode.instance;
  if (s == "NodeFilter") return BlinkNodeFilter.instance;
  if (s == "NodeIterator") return BlinkNodeIterator.instance;
  if (s == "NodeList") return BlinkNodeList.instance;
  if (s == "NonDocumentTypeChildNode")
    return BlinkNonDocumentTypeChildNode.instance;
  if (s == "NonElementParentNode") return BlinkNonElementParentNode.instance;
  if (s == "Notification") return BlinkNotification.instance;
  if (s == "NotificationEvent") return BlinkNotificationEvent.instance;
  if (s == "NotificationPermissionCallback")
    return BlinkNotificationPermissionCallback.instance;
  if (s == "NumberValue") return BlinkNumberValue.instance;
  if (s == "OESElementIndexUint") return BlinkOESElementIndexUint.instance;
  if (s == "OESStandardDerivatives")
    return BlinkOESStandardDerivatives.instance;
  if (s == "OESTextureFloat") return BlinkOESTextureFloat.instance;
  if (s == "OESTextureFloatLinear") return BlinkOESTextureFloatLinear.instance;
  if (s == "OESTextureHalfFloat") return BlinkOESTextureHalfFloat.instance;
  if (s == "OESTextureHalfFloatLinear")
    return BlinkOESTextureHalfFloatLinear.instance;
  if (s == "OESVertexArrayObject") return BlinkOESVertexArrayObject.instance;
  if (s == "OfflineAudioCompletionEvent")
    return BlinkOfflineAudioCompletionEvent.instance;
  if (s == "OfflineAudioContext") return BlinkOfflineAudioContext.instance;
  if (s == "OffscreenCanvas") return BlinkOffscreenCanvas.instance;
  if (s == "OscillatorNode") return BlinkOscillatorNode.instance;
  if (s == "PagePopupController") return BlinkPagePopupController.instance;
  if (s == "PageTransitionEvent") return BlinkPageTransitionEvent.instance;
  if (s == "PannerNode") return BlinkPannerNode.instance;
  if (s == "ParentNode") return BlinkParentNode.instance;
  if (s == "PasswordCredential") return BlinkPasswordCredential.instance;
  if (s == "Path2D") return BlinkPath2D.instance;
  if (s == "Performance") return BlinkPerformance.instance;
  if (s == "PerformanceCompositeTiming")
    return BlinkPerformanceCompositeTiming.instance;
  if (s == "PerformanceEntry") return BlinkPerformanceEntry.instance;
  if (s == "PerformanceMark") return BlinkPerformanceMark.instance;
  if (s == "PerformanceMeasure") return BlinkPerformanceMeasure.instance;
  if (s == "PerformanceNavigation") return BlinkPerformanceNavigation.instance;
  if (s == "PerformanceObserver") return BlinkPerformanceObserver.instance;
  if (s == "PerformanceObserverEntryList")
    return BlinkPerformanceObserverEntryList.instance;
  if (s == "PerformanceRenderTiming")
    return BlinkPerformanceRenderTiming.instance;
  if (s == "PerformanceResourceTiming")
    return BlinkPerformanceResourceTiming.instance;
  if (s == "PerformanceTiming") return BlinkPerformanceTiming.instance;
  if (s == "PeriodicWave") return BlinkPeriodicWave.instance;
  if (s == "PermissionStatus") return BlinkPermissionStatus.instance;
  if (s == "Permissions") return BlinkPermissions.instance;
  if (s == "Perspective") return BlinkPerspective.instance;
  if (s == "Plugin") return BlinkPlugin.instance;
  if (s == "PluginArray") return BlinkPluginArray.instance;
  if (s == "PointerEvent") return BlinkPointerEvent.instance;
  if (s == "PopStateEvent") return BlinkPopStateEvent.instance;
  if (s == "PositionCallback") return BlinkPositionCallback.instance;
  if (s == "PositionError") return BlinkPositionError.instance;
  if (s == "PositionErrorCallback") return BlinkPositionErrorCallback.instance;
  if (s == "PositionSensorVRDevice")
    return BlinkPositionSensorVRDevice.instance;
  if (s == "PositionValue") return BlinkPositionValue.instance;
  if (s == "Presentation") return BlinkPresentation.instance;
  if (s == "PresentationAvailability")
    return BlinkPresentationAvailability.instance;
  if (s == "PresentationConnection")
    return BlinkPresentationConnection.instance;
  if (s == "PresentationConnectionAvailableEvent")
    return BlinkPresentationConnectionAvailableEvent.instance;
  if (s == "PresentationConnectionCloseEvent")
    return BlinkPresentationConnectionCloseEvent.instance;
  if (s == "PresentationReceiver") return BlinkPresentationReceiver.instance;
  if (s == "PresentationRequest") return BlinkPresentationRequest.instance;
  if (s == "ProcessingInstruction") return BlinkProcessingInstruction.instance;
  if (s == "ProgressEvent") return BlinkProgressEvent.instance;
  if (s == "PromiseRejectionEvent") return BlinkPromiseRejectionEvent.instance;
  if (s == "PushEvent") return BlinkPushEvent.instance;
  if (s == "PushManager") return BlinkPushManager.instance;
  if (s == "PushMessageData") return BlinkPushMessageData.instance;
  if (s == "PushSubscription") return BlinkPushSubscription.instance;
  if (s == "RTCCertificate") return BlinkRTCCertificate.instance;
  if (s == "RTCDTMFSender") return BlinkRTCDTMFSender.instance;
  if (s == "RTCDTMFToneChangeEvent")
    return BlinkRTCDTMFToneChangeEvent.instance;
  if (s == "RTCDataChannel") return BlinkRTCDataChannel.instance;
  if (s == "RTCDataChannelEvent") return BlinkRTCDataChannelEvent.instance;
  if (s == "RTCIceCandidate") return BlinkRTCIceCandidate.instance;
  if (s == "RTCIceCandidateEvent") return BlinkRTCIceCandidateEvent.instance;
  if (s == "RTCPeerConnection") return BlinkRTCPeerConnection.instance;
  if (s == "RTCPeerConnectionErrorCallback")
    return BlinkRTCPeerConnectionErrorCallback.instance;
  if (s == "RTCSessionDescription") return BlinkRTCSessionDescription.instance;
  if (s == "RTCSessionDescriptionCallback")
    return BlinkRTCSessionDescriptionCallback.instance;
  if (s == "RTCStatsCallback") return BlinkRTCStatsCallback.instance;
  if (s == "RTCStatsReport") return BlinkRTCStatsReport.instance;
  if (s == "RTCStatsResponse") return BlinkRTCStatsResponse.instance;
  if (s == "RadioNodeList") return BlinkRadioNodeList.instance;
  if (s == "Range") return BlinkRange.instance;
  if (s == "ReadableByteStream") return BlinkReadableByteStream.instance;
  if (s == "ReadableByteStreamReader")
    return BlinkReadableByteStreamReader.instance;
  if (s == "ReadableStreamReader") return BlinkReadableStreamReader.instance;
  if (s == "RelatedEvent") return BlinkRelatedEvent.instance;
  if (s == "Request") return BlinkRequest.instance;
  if (s == "RequestAnimationFrameCallback")
    return BlinkRequestAnimationFrameCallback.instance;
  if (s == "ResourceProgressEvent") return BlinkResourceProgressEvent.instance;
  if (s == "Response") return BlinkResponse.instance;
  if (s == "Rotation") return BlinkRotation.instance;
  if (s == "SQLError") return BlinkSQLError.instance;
  if (s == "SQLResultSet") return BlinkSQLResultSet.instance;
  if (s == "SQLResultSetRowList") return BlinkSQLResultSetRowList.instance;
  if (s == "SQLStatementCallback") return BlinkSQLStatementCallback.instance;
  if (s == "SQLStatementErrorCallback")
    return BlinkSQLStatementErrorCallback.instance;
  if (s == "SQLTransaction") return BlinkSQLTransaction.instance;
  if (s == "SQLTransactionCallback")
    return BlinkSQLTransactionCallback.instance;
  if (s == "SQLTransactionErrorCallback")
    return BlinkSQLTransactionErrorCallback.instance;
  if (s == "SVGAElement") return BlinkSVGAElement.instance;
  if (s == "SVGAngle") return BlinkSVGAngle.instance;
  if (s == "SVGAnimateElement") return BlinkSVGAnimateElement.instance;
  if (s == "SVGAnimateMotionElement")
    return BlinkSVGAnimateMotionElement.instance;
  if (s == "SVGAnimateTransformElement")
    return BlinkSVGAnimateTransformElement.instance;
  if (s == "SVGAnimatedAngle") return BlinkSVGAnimatedAngle.instance;
  if (s == "SVGAnimatedBoolean") return BlinkSVGAnimatedBoolean.instance;
  if (s == "SVGAnimatedEnumeration")
    return BlinkSVGAnimatedEnumeration.instance;
  if (s == "SVGAnimatedInteger") return BlinkSVGAnimatedInteger.instance;
  if (s == "SVGAnimatedLength") return BlinkSVGAnimatedLength.instance;
  if (s == "SVGAnimatedLengthList") return BlinkSVGAnimatedLengthList.instance;
  if (s == "SVGAnimatedNumber") return BlinkSVGAnimatedNumber.instance;
  if (s == "SVGAnimatedNumberList") return BlinkSVGAnimatedNumberList.instance;
  if (s == "SVGAnimatedPreserveAspectRatio")
    return BlinkSVGAnimatedPreserveAspectRatio.instance;
  if (s == "SVGAnimatedRect") return BlinkSVGAnimatedRect.instance;
  if (s == "SVGAnimatedString") return BlinkSVGAnimatedString.instance;
  if (s == "SVGAnimatedTransformList")
    return BlinkSVGAnimatedTransformList.instance;
  if (s == "SVGAnimationElement") return BlinkSVGAnimationElement.instance;
  if (s == "SVGCircleElement") return BlinkSVGCircleElement.instance;
  if (s == "SVGClipPathElement") return BlinkSVGClipPathElement.instance;
  if (s == "SVGComponentTransferFunctionElement")
    return BlinkSVGComponentTransferFunctionElement.instance;
  if (s == "SVGCursorElement") return BlinkSVGCursorElement.instance;
  if (s == "SVGDefsElement") return BlinkSVGDefsElement.instance;
  if (s == "SVGDescElement") return BlinkSVGDescElement.instance;
  if (s == "SVGDiscardElement") return BlinkSVGDiscardElement.instance;
  if (s == "SVGElement") return BlinkSVGElement.instance;
  if (s == "SVGEllipseElement") return BlinkSVGEllipseElement.instance;
  if (s == "SVGFEBlendElement") return BlinkSVGFEBlendElement.instance;
  if (s == "SVGFEColorMatrixElement")
    return BlinkSVGFEColorMatrixElement.instance;
  if (s == "SVGFEComponentTransferElement")
    return BlinkSVGFEComponentTransferElement.instance;
  if (s == "SVGFECompositeElement") return BlinkSVGFECompositeElement.instance;
  if (s == "SVGFEConvolveMatrixElement")
    return BlinkSVGFEConvolveMatrixElement.instance;
  if (s == "SVGFEDiffuseLightingElement")
    return BlinkSVGFEDiffuseLightingElement.instance;
  if (s == "SVGFEDisplacementMapElement")
    return BlinkSVGFEDisplacementMapElement.instance;
  if (s == "SVGFEDistantLightElement")
    return BlinkSVGFEDistantLightElement.instance;
  if (s == "SVGFEDropShadowElement")
    return BlinkSVGFEDropShadowElement.instance;
  if (s == "SVGFEFloodElement") return BlinkSVGFEFloodElement.instance;
  if (s == "SVGFEFuncAElement") return BlinkSVGFEFuncAElement.instance;
  if (s == "SVGFEFuncBElement") return BlinkSVGFEFuncBElement.instance;
  if (s == "SVGFEFuncGElement") return BlinkSVGFEFuncGElement.instance;
  if (s == "SVGFEFuncRElement") return BlinkSVGFEFuncRElement.instance;
  if (s == "SVGFEGaussianBlurElement")
    return BlinkSVGFEGaussianBlurElement.instance;
  if (s == "SVGFEImageElement") return BlinkSVGFEImageElement.instance;
  if (s == "SVGFEMergeElement") return BlinkSVGFEMergeElement.instance;
  if (s == "SVGFEMergeNodeElement") return BlinkSVGFEMergeNodeElement.instance;
  if (s == "SVGFEMorphologyElement")
    return BlinkSVGFEMorphologyElement.instance;
  if (s == "SVGFEOffsetElement") return BlinkSVGFEOffsetElement.instance;
  if (s == "SVGFEPointLightElement")
    return BlinkSVGFEPointLightElement.instance;
  if (s == "SVGFESpecularLightingElement")
    return BlinkSVGFESpecularLightingElement.instance;
  if (s == "SVGFESpotLightElement") return BlinkSVGFESpotLightElement.instance;
  if (s == "SVGFETileElement") return BlinkSVGFETileElement.instance;
  if (s == "SVGFETurbulenceElement")
    return BlinkSVGFETurbulenceElement.instance;
  if (s == "SVGFilterElement") return BlinkSVGFilterElement.instance;
  if (s == "SVGFilterPrimitiveStandardAttributes")
    return BlinkSVGFilterPrimitiveStandardAttributes.instance;
  if (s == "SVGFitToViewBox") return BlinkSVGFitToViewBox.instance;
  if (s == "SVGForeignObjectElement")
    return BlinkSVGForeignObjectElement.instance;
  if (s == "SVGGElement") return BlinkSVGGElement.instance;
  if (s == "SVGGeometryElement") return BlinkSVGGeometryElement.instance;
  if (s == "SVGGradientElement") return BlinkSVGGradientElement.instance;
  if (s == "SVGGraphicsElement") return BlinkSVGGraphicsElement.instance;
  if (s == "SVGImageElement") return BlinkSVGImageElement.instance;
  if (s == "SVGLength") return BlinkSVGLength.instance;
  if (s == "SVGLengthList") return BlinkSVGLengthList.instance;
  if (s == "SVGLineElement") return BlinkSVGLineElement.instance;
  if (s == "SVGLinearGradientElement")
    return BlinkSVGLinearGradientElement.instance;
  if (s == "SVGMPathElement") return BlinkSVGMPathElement.instance;
  if (s == "SVGMarkerElement") return BlinkSVGMarkerElement.instance;
  if (s == "SVGMaskElement") return BlinkSVGMaskElement.instance;
  if (s == "SVGMatrix") return BlinkSVGMatrix.instance;
  if (s == "SVGMetadataElement") return BlinkSVGMetadataElement.instance;
  if (s == "SVGNumber") return BlinkSVGNumber.instance;
  if (s == "SVGNumberList") return BlinkSVGNumberList.instance;
  if (s == "SVGPathElement") return BlinkSVGPathElement.instance;
  if (s == "SVGPatternElement") return BlinkSVGPatternElement.instance;
  if (s == "SVGPoint") return BlinkSVGPoint.instance;
  if (s == "SVGPointList") return BlinkSVGPointList.instance;
  if (s == "SVGPolygonElement") return BlinkSVGPolygonElement.instance;
  if (s == "SVGPolylineElement") return BlinkSVGPolylineElement.instance;
  if (s == "SVGPreserveAspectRatio")
    return BlinkSVGPreserveAspectRatio.instance;
  if (s == "SVGRadialGradientElement")
    return BlinkSVGRadialGradientElement.instance;
  if (s == "SVGRect") return BlinkSVGRect.instance;
  if (s == "SVGRectElement") return BlinkSVGRectElement.instance;
  if (s == "SVGSVGElement") return BlinkSVGSVGElement.instance;
  if (s == "SVGScriptElement") return BlinkSVGScriptElement.instance;
  if (s == "SVGSetElement") return BlinkSVGSetElement.instance;
  if (s == "SVGStopElement") return BlinkSVGStopElement.instance;
  if (s == "SVGStringList") return BlinkSVGStringList.instance;
  if (s == "SVGStyleElement") return BlinkSVGStyleElement.instance;
  if (s == "SVGSwitchElement") return BlinkSVGSwitchElement.instance;
  if (s == "SVGSymbolElement") return BlinkSVGSymbolElement.instance;
  if (s == "SVGTSpanElement") return BlinkSVGTSpanElement.instance;
  if (s == "SVGTests") return BlinkSVGTests.instance;
  if (s == "SVGTextContentElement") return BlinkSVGTextContentElement.instance;
  if (s == "SVGTextElement") return BlinkSVGTextElement.instance;
  if (s == "SVGTextPathElement") return BlinkSVGTextPathElement.instance;
  if (s == "SVGTextPositioningElement")
    return BlinkSVGTextPositioningElement.instance;
  if (s == "SVGTitleElement") return BlinkSVGTitleElement.instance;
  if (s == "SVGTransform") return BlinkSVGTransform.instance;
  if (s == "SVGTransformList") return BlinkSVGTransformList.instance;
  if (s == "SVGURIReference") return BlinkSVGURIReference.instance;
  if (s == "SVGUnitTypes") return BlinkSVGUnitTypes.instance;
  if (s == "SVGUseElement") return BlinkSVGUseElement.instance;
  if (s == "SVGViewElement") return BlinkSVGViewElement.instance;
  if (s == "SVGViewSpec") return BlinkSVGViewSpec.instance;
  if (s == "SVGZoomAndPan") return BlinkSVGZoomAndPan.instance;
  if (s == "SVGZoomEvent") return BlinkSVGZoomEvent.instance;
  if (s == "Screen") return BlinkScreen.instance;
  if (s == "ScreenOrientation") return BlinkScreenOrientation.instance;
  if (s == "ScriptProcessorNode") return BlinkScriptProcessorNode.instance;
  if (s == "ScrollState") return BlinkScrollState.instance;
  if (s == "ScrollStateCallback") return BlinkScrollStateCallback.instance;
  if (s == "SecurityPolicyViolationEvent")
    return BlinkSecurityPolicyViolationEvent.instance;
  if (s == "Selection") return BlinkSelection.instance;
  if (s == "ServicePort") return BlinkServicePort.instance;
  if (s == "ServicePortCollection") return BlinkServicePortCollection.instance;
  if (s == "ServicePortConnectEvent")
    return BlinkServicePortConnectEvent.instance;
  if (s == "ServiceWorker") return BlinkServiceWorker.instance;
  if (s == "ServiceWorkerContainer")
    return BlinkServiceWorkerContainer.instance;
  if (s == "ServiceWorkerGlobalScope")
    return BlinkServiceWorkerGlobalScope.instance;
  if (s == "ServiceWorkerMessageEvent")
    return BlinkServiceWorkerMessageEvent.instance;
  if (s == "ServiceWorkerRegistration")
    return BlinkServiceWorkerRegistration.instance;
  if (s == "ShadowRoot") return BlinkShadowRoot.instance;
  if (s == "SharedArrayBuffer") return BlinkSharedArrayBuffer.instance;
  if (s == "SharedWorker") return BlinkSharedWorker.instance;
  if (s == "SharedWorkerGlobalScope")
    return BlinkSharedWorkerGlobalScope.instance;
  if (s == "SimpleLength") return BlinkSimpleLength.instance;
  if (s == "Skew") return BlinkSkew.instance;
  if (s == "SourceBuffer") return BlinkSourceBuffer.instance;
  if (s == "SourceBufferList") return BlinkSourceBufferList.instance;
  if (s == "SourceInfo") return BlinkSourceInfo.instance;
  if (s == "SpeechGrammar") return BlinkSpeechGrammar.instance;
  if (s == "SpeechGrammarList") return BlinkSpeechGrammarList.instance;
  if (s == "SpeechRecognition") return BlinkSpeechRecognition.instance;
  if (s == "SpeechRecognitionAlternative")
    return BlinkSpeechRecognitionAlternative.instance;
  if (s == "SpeechRecognitionError")
    return BlinkSpeechRecognitionError.instance;
  if (s == "SpeechRecognitionEvent")
    return BlinkSpeechRecognitionEvent.instance;
  if (s == "SpeechRecognitionResult")
    return BlinkSpeechRecognitionResult.instance;
  if (s == "SpeechRecognitionResultList")
    return BlinkSpeechRecognitionResultList.instance;
  if (s == "SpeechSynthesis") return BlinkSpeechSynthesis.instance;
  if (s == "SpeechSynthesisEvent") return BlinkSpeechSynthesisEvent.instance;
  if (s == "SpeechSynthesisUtterance")
    return BlinkSpeechSynthesisUtterance.instance;
  if (s == "SpeechSynthesisVoice") return BlinkSpeechSynthesisVoice.instance;
  if (s == "StereoPannerNode") return BlinkStereoPannerNode.instance;
  if (s == "Storage") return BlinkStorage.instance;
  if (s == "StorageErrorCallback") return BlinkStorageErrorCallback.instance;
  if (s == "StorageEvent") return BlinkStorageEvent.instance;
  if (s == "StorageInfo") return BlinkStorageInfo.instance;
  if (s == "StorageManager") return BlinkStorageManager.instance;
  if (s == "StorageQuota") return BlinkStorageQuota.instance;
  if (s == "StorageQuotaCallback") return BlinkStorageQuotaCallback.instance;
  if (s == "StorageUsageCallback") return BlinkStorageUsageCallback.instance;
  if (s == "Stream") return BlinkStream.instance;
  if (s == "StringCallback") return BlinkStringCallback.instance;
  if (s == "StyleMedia") return BlinkStyleMedia.instance;
  if (s == "StylePropertyMap") return BlinkStylePropertyMap.instance;
  if (s == "StyleSheet") return BlinkStyleSheet.instance;
  if (s == "StyleSheetList") return BlinkStyleSheetList.instance;
  if (s == "StyleValue") return BlinkStyleValue.instance;
  if (s == "SubtleCrypto") return BlinkSubtleCrypto.instance;
  if (s == "SyncEvent") return BlinkSyncEvent.instance;
  if (s == "SyncManager") return BlinkSyncManager.instance;
  if (s == "Text") return BlinkText.instance;
  if (s == "TextEvent") return BlinkTextEvent.instance;
  if (s == "TextMetrics") return BlinkTextMetrics.instance;
  if (s == "TextTrack") return BlinkTextTrack.instance;
  if (s == "TextTrackCue") return BlinkTextTrackCue.instance;
  if (s == "TextTrackCueList") return BlinkTextTrackCueList.instance;
  if (s == "TextTrackList") return BlinkTextTrackList.instance;
  if (s == "TimeRanges") return BlinkTimeRanges.instance;
  if (s == "TimeoutHandler") return BlinkTimeoutHandler.instance;
  if (s == "Touch") return BlinkTouch.instance;
  if (s == "TouchEvent") return BlinkTouchEvent.instance;
  if (s == "TouchList") return BlinkTouchList.instance;
  if (s == "TrackDefault") return BlinkTrackDefault.instance;
  if (s == "TrackDefaultList") return BlinkTrackDefaultList.instance;
  if (s == "TrackEvent") return BlinkTrackEvent.instance;
  if (s == "TransformComponent") return BlinkTransformComponent.instance;
  if (s == "TransformValue") return BlinkTransformValue.instance;
  if (s == "TransitionEvent") return BlinkTransitionEvent.instance;
  if (s == "Translation") return BlinkTranslation.instance;
  if (s == "TreeWalker") return BlinkTreeWalker.instance;
  if (s == "UIEvent") return BlinkUIEvent.instance;
  if (s == "URL") return BlinkURL.instance;
  if (s == "URLSearchParams") return BlinkURLSearchParams.instance;
  if (s == "URLUtils") return BlinkURLUtils.instance;
  if (s == "URLUtilsReadOnly") return BlinkURLUtilsReadOnly.instance;
  if (s == "USB") return BlinkUSB.instance;
  if (s == "USBAlternateInterface") return BlinkUSBAlternateInterface.instance;
  if (s == "USBConfiguration") return BlinkUSBConfiguration.instance;
  if (s == "USBConnectionEvent") return BlinkUSBConnectionEvent.instance;
  if (s == "USBDevice") return BlinkUSBDevice.instance;
  if (s == "USBEndpoint") return BlinkUSBEndpoint.instance;
  if (s == "USBInTransferResult") return BlinkUSBInTransferResult.instance;
  if (s == "USBInterface") return BlinkUSBInterface.instance;
  if (s == "USBIsochronousInTransferPacket")
    return BlinkUSBIsochronousInTransferPacket.instance;
  if (s == "USBIsochronousInTransferResult")
    return BlinkUSBIsochronousInTransferResult.instance;
  if (s == "USBIsochronousOutTransferPacket")
    return BlinkUSBIsochronousOutTransferPacket.instance;
  if (s == "USBIsochronousOutTransferResult")
    return BlinkUSBIsochronousOutTransferResult.instance;
  if (s == "USBOutTransferResult") return BlinkUSBOutTransferResult.instance;
  if (s == "Uint16Array") return BlinkUint16Array.instance;
  if (s == "Uint32Array") return BlinkUint32Array.instance;
  if (s == "Uint8Array") return BlinkUint8Array.instance;
  if (s == "Uint8ClampedArray") return BlinkUint8ClampedArray.instance;
  if (s == "UnderlyingSourceBase") return BlinkUnderlyingSourceBase.instance;
  if (s == "VRDevice") return BlinkVRDevice.instance;
  if (s == "VREyeParameters") return BlinkVREyeParameters.instance;
  if (s == "VRFieldOfView") return BlinkVRFieldOfView.instance;
  if (s == "VRPositionState") return BlinkVRPositionState.instance;
  if (s == "VTTCue") return BlinkVTTCue.instance;
  if (s == "VTTRegion") return BlinkVTTRegion.instance;
  if (s == "VTTRegionList") return BlinkVTTRegionList.instance;
  if (s == "ValidityState") return BlinkValidityState.instance;
  if (s == "VideoPlaybackQuality") return BlinkVideoPlaybackQuality.instance;
  if (s == "VideoTrack") return BlinkVideoTrack.instance;
  if (s == "VideoTrackList") return BlinkVideoTrackList.instance;
  if (s == "VoidCallback") return BlinkVoidCallback.instance;
  if (s == "WaveShaperNode") return BlinkWaveShaperNode.instance;
  if (s == "WebGL2RenderingContext")
    return BlinkWebGL2RenderingContext.instance;
  if (s == "WebGL2RenderingContextBase")
    return BlinkWebGL2RenderingContextBase.instance;
  if (s == "WebGLActiveInfo") return BlinkWebGLActiveInfo.instance;
  if (s == "WebGLBuffer") return BlinkWebGLBuffer.instance;
  if (s == "WebGLCompressedTextureASTC")
    return BlinkWebGLCompressedTextureASTC.instance;
  if (s == "WebGLCompressedTextureATC")
    return BlinkWebGLCompressedTextureATC.instance;
  if (s == "WebGLCompressedTextureETC1")
    return BlinkWebGLCompressedTextureETC1.instance;
  if (s == "WebGLCompressedTexturePVRTC")
    return BlinkWebGLCompressedTexturePVRTC.instance;
  if (s == "WebGLCompressedTextureS3TC")
    return BlinkWebGLCompressedTextureS3TC.instance;
  if (s == "WebGLContextEvent") return BlinkWebGLContextEvent.instance;
  if (s == "WebGLDebugRendererInfo")
    return BlinkWebGLDebugRendererInfo.instance;
  if (s == "WebGLDebugShaders") return BlinkWebGLDebugShaders.instance;
  if (s == "WebGLDepthTexture") return BlinkWebGLDepthTexture.instance;
  if (s == "WebGLDrawBuffers") return BlinkWebGLDrawBuffers.instance;
  if (s == "WebGLFramebuffer") return BlinkWebGLFramebuffer.instance;
  if (s == "WebGLLoseContext") return BlinkWebGLLoseContext.instance;
  if (s == "WebGLProgram") return BlinkWebGLProgram.instance;
  if (s == "WebGLQuery") return BlinkWebGLQuery.instance;
  if (s == "WebGLRenderbuffer") return BlinkWebGLRenderbuffer.instance;
  if (s == "WebGLRenderingContext") return BlinkWebGLRenderingContext.instance;
  if (s == "WebGLRenderingContextBase")
    return BlinkWebGLRenderingContextBase.instance;
  if (s == "WebGLSampler") return BlinkWebGLSampler.instance;
  if (s == "WebGLShader") return BlinkWebGLShader.instance;
  if (s == "WebGLShaderPrecisionFormat")
    return BlinkWebGLShaderPrecisionFormat.instance;
  if (s == "WebGLSync") return BlinkWebGLSync.instance;
  if (s == "WebGLTexture") return BlinkWebGLTexture.instance;
  if (s == "WebGLTimerQueryEXT") return BlinkWebGLTimerQueryEXT.instance;
  if (s == "WebGLTransformFeedback")
    return BlinkWebGLTransformFeedback.instance;
  if (s == "WebGLUniformLocation") return BlinkWebGLUniformLocation.instance;
  if (s == "WebGLVertexArrayObject")
    return BlinkWebGLVertexArrayObject.instance;
  if (s == "WebGLVertexArrayObjectOES")
    return BlinkWebGLVertexArrayObjectOES.instance;
  if (s == "WebKitCSSMatrix") return BlinkWebKitCSSMatrix.instance;
  if (s == "WebSocket") return BlinkWebSocket.instance;
  if (s == "WheelEvent") return BlinkWheelEvent.instance;
  if (s == "Window") return BlinkWindow.instance;
  if (s == "WindowBase64") return BlinkWindowBase64.instance;
  if (s == "WindowClient") return BlinkWindowClient.instance;
  if (s == "WindowEventHandlers") return BlinkWindowEventHandlers.instance;
  if (s == "WindowTimers") return BlinkWindowTimers.instance;
  if (s == "Worker") return BlinkWorker.instance;
  if (s == "WorkerConsole") return BlinkWorkerConsole.instance;
  if (s == "WorkerGlobalScope") return BlinkWorkerGlobalScope.instance;
  if (s == "WorkerLocation") return BlinkWorkerLocation.instance;
  if (s == "WorkerNavigator") return BlinkWorkerNavigator.instance;
  if (s == "WorkerPerformance") return BlinkWorkerPerformance.instance;
  if (s == "Worklet") return BlinkWorklet.instance;
  if (s == "WorkletGlobalScope") return BlinkWorkletGlobalScope.instance;
  if (s == "XMLDocument") return BlinkXMLDocument.instance;
  if (s == "XMLHttpRequest") return BlinkXMLHttpRequest.instance;
  if (s == "XMLHttpRequestEventTarget")
    return BlinkXMLHttpRequestEventTarget.instance;
  if (s == "XMLHttpRequestUpload") return BlinkXMLHttpRequestUpload.instance;
  if (s == "XMLSerializer") return BlinkXMLSerializer.instance;
  if (s == "XPathEvaluator") return BlinkXPathEvaluator.instance;
  if (s == "XPathExpression") return BlinkXPathExpression.instance;
  if (s == "XPathNSResolver") return BlinkXPathNSResolver.instance;
  if (s == "XPathResult") return BlinkXPathResult.instance;
  if (s == "XSLTProcessor") return BlinkXSLTProcessor.instance;

  // Failed to find it, check for custom renames
  dynamic obj = resolverMap[s];
  if (obj != null) return obj;
  throw ("No such interface exposed in blink: ${s}");
}

class BlinkANGLEInstancedArrays {
  static final instance = new BlinkANGLEInstancedArrays();

  drawArraysInstancedANGLE_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */,
          "drawArraysInstancedANGLE", [__arg_0, __arg_1]);

  drawArraysInstancedANGLE_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */,
          "drawArraysInstancedANGLE", [__arg_0, __arg_1, __arg_2]);

  drawArraysInstancedANGLE_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */,
          "drawArraysInstancedANGLE", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstancedANGLE_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */,
          "drawElementsInstancedANGLE", [__arg_0, __arg_1, __arg_2]);

  drawElementsInstancedANGLE_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */,
          "drawElementsInstancedANGLE", [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstancedANGLE_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ANGLEInstancedArrays */,
          "drawElementsInstancedANGLE",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribDivisorANGLE_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ANGLEInstancedArrays */, "vertexAttribDivisorANGLE", []);

  vertexAttribDivisorANGLE_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */,
          "vertexAttribDivisorANGLE", [__arg_0]);

  vertexAttribDivisorANGLE_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* ANGLEInstancedArrays */,
          "vertexAttribDivisorANGLE", [__arg_0, __arg_1]);
}

class BlinkAbstractWorker {
  static final instance = new BlinkAbstractWorker();

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AbstractWorker */, "onerror", __arg_0);
}

class BlinkAnalyserNode extends BlinkAudioNode {
  static final instance = new BlinkAnalyserNode();

  fftSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnalyserNode */, "fftSize");

  fftSize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnalyserNode */, "fftSize", __arg_0);

  frequencyBinCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnalyserNode */, "frequencyBinCount");

  maxDecibels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnalyserNode */, "maxDecibels");

  maxDecibels_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AnalyserNode */, "maxDecibels", __arg_0);

  minDecibels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnalyserNode */, "minDecibels");

  minDecibels_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AnalyserNode */, "minDecibels", __arg_0);

  smoothingTimeConstant_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* AnalyserNode */, "smoothingTimeConstant");

  smoothingTimeConstant_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AnalyserNode */, "smoothingTimeConstant", __arg_0);

  getByteFrequencyData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AnalyserNode */, "getByteFrequencyData", []);

  getByteFrequencyData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AnalyserNode */, "getByteFrequencyData", [__arg_0]);

  getByteTimeDomainData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AnalyserNode */, "getByteTimeDomainData", []);

  getByteTimeDomainData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AnalyserNode */, "getByteTimeDomainData", [__arg_0]);

  getFloatFrequencyData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AnalyserNode */, "getFloatFrequencyData", []);

  getFloatFrequencyData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AnalyserNode */, "getFloatFrequencyData", [__arg_0]);

  getFloatTimeDomainData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AnalyserNode */, "getFloatTimeDomainData", []);

  getFloatTimeDomainData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AnalyserNode */, "getFloatTimeDomainData", [__arg_0]);
}

class BlinkAnimation extends BlinkEventTarget {
  static final instance = new BlinkAnimation();

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Animation */, "currentTime");

  currentTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Animation */, "currentTime", __arg_0);

  effect_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Animation */, "effect");

  effect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Animation */, "effect", __arg_0);

  finished_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Animation */, "finished");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Animation */, "id");

  id_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Animation */, "id", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Animation */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Animation */, "oncancel", __arg_0);

  onfinish_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Animation */, "onfinish");

  onfinish_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Animation */, "onfinish", __arg_0);

  playState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Animation */, "playState");

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Animation */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Animation */, "playbackRate", __arg_0);

  ready_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Animation */, "ready");

  startTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Animation */, "startTime");

  startTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Animation */, "startTime", __arg_0);

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Animation */, "cancel", []);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Animation */, "finish", []);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Animation */, "pause", []);

  play_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Animation */, "play", []);

  reverse_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Animation */, "reverse", []);
}

class BlinkAnimationEffectReadOnly {
  static final instance = new BlinkAnimationEffectReadOnly();

  computedTiming_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectReadOnly */, "computedTiming");

  timing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectReadOnly */, "timing");
}

class BlinkAnimationEffectTiming {
  static final instance = new BlinkAnimationEffectTiming();

  delay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "delay");

  delay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnimationEffectTiming */, "delay", __arg_0);

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "direction");

  direction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnimationEffectTiming */, "direction", __arg_0);

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "duration");

  duration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnimationEffectTiming */, "duration", __arg_0);

  easing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "easing");

  easing_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnimationEffectTiming */, "easing", __arg_0);

  endDelay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "endDelay");

  endDelay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnimationEffectTiming */, "endDelay", __arg_0);

  fill_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "fill");

  fill_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnimationEffectTiming */, "fill", __arg_0);

  iterationStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "iterationStart");

  iterationStart_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* AnimationEffectTiming */, "iterationStart", __arg_0);

  iterations_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "iterations");

  iterations_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AnimationEffectTiming */, "iterations", __arg_0);

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEffectTiming */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AnimationEffectTiming */, "playbackRate", __arg_0);
}

class BlinkAnimationEvent extends BlinkEvent {
  static final instance = new BlinkAnimationEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("AnimationEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("AnimationEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("AnimationEvent", [__arg_0, __arg_1]);

  animationName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEvent */, "animationName");

  elapsedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationEvent */, "elapsedTime");
}

class BlinkAnimationPlayerEvent extends BlinkEvent {
  static final instance = new BlinkAnimationPlayerEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("AnimationPlayerEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("AnimationPlayerEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("AnimationPlayerEvent", [__arg_0, __arg_1]);

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationPlayerEvent */, "currentTime");

  timelineTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationPlayerEvent */, "timelineTime");
}

class BlinkAnimationTimeline {
  static final instance = new BlinkAnimationTimeline();

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationTimeline */, "currentTime");

  currentTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AnimationTimeline */, "currentTime", __arg_0);

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AnimationTimeline */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AnimationTimeline */, "playbackRate", __arg_0);

  getAnimations_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AnimationTimeline */, "getAnimations", []);

  play_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AnimationTimeline */, "play", []);

  play_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AnimationTimeline */, "play", [__arg_0]);
}

class BlinkAppBannerPromptResult {
  static final instance = new BlinkAppBannerPromptResult();

  outcome_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AppBannerPromptResult */, "outcome");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AppBannerPromptResult */, "platform");
}

class BlinkApplicationCache extends BlinkEventTarget {
  static final instance = new BlinkApplicationCache();

  oncached_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "oncached");

  oncached_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ApplicationCache */, "oncached", __arg_0);

  onchecking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "onchecking");

  onchecking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ApplicationCache */, "onchecking", __arg_0);

  ondownloading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "ondownloading");

  ondownloading_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* ApplicationCache */, "ondownloading", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ApplicationCache */, "onerror", __arg_0);

  onnoupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "onnoupdate");

  onnoupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ApplicationCache */, "onnoupdate", __arg_0);

  onobsolete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "onobsolete");

  onobsolete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ApplicationCache */, "onobsolete", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ApplicationCache */, "onprogress", __arg_0);

  onupdateready_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "onupdateready");

  onupdateready_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* ApplicationCache */, "onupdateready", __arg_0);

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCache */, "status");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ApplicationCache */, "abort", []);

  swapCache_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ApplicationCache */, "swapCache", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ApplicationCache */, "update", []);
}

class BlinkApplicationCacheErrorEvent extends BlinkEvent {
  static final instance = new BlinkApplicationCacheErrorEvent();

  constructorCallback_0_() => Blink_JsNative_DomException
      .callConstructor0("ApplicationCacheErrorEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("ApplicationCacheErrorEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("ApplicationCacheErrorEvent", [__arg_0, __arg_1]);

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCacheErrorEvent */, "message");

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCacheErrorEvent */, "reason");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCacheErrorEvent */, "status");

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ApplicationCacheErrorEvent */, "url");
}

class BlinkArrayBuffer {
  static final instance = new BlinkArrayBuffer();

  byteLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ArrayBuffer */, "byteLength");
}

class BlinkArrayBufferView {
  static final instance = new BlinkArrayBufferView();

  buffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ArrayBufferView */, "buffer");

  byteLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ArrayBufferView */, "byteLength");

  byteOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ArrayBufferView */, "byteOffset");
}

class BlinkAttr extends BlinkNode {
  static final instance = new BlinkAttr();

  localName_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "localName");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "name");

  namespaceURI_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "namespaceURI");

  nodeValue_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "nodeValue");

  nodeValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Attr */, "nodeValue", __arg_0);

  ownerElement_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "ownerElement");

  prefix_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "prefix");

  specified_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "specified");

  textContent_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "textContent");

  textContent_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Attr */, "textContent", __arg_0);

  value_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Attr */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Attr */, "value", __arg_0);
}

class BlinkAudioBuffer {
  static final instance = new BlinkAudioBuffer();

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBuffer */, "duration");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBuffer */, "length");

  numberOfChannels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBuffer */, "numberOfChannels");

  sampleRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBuffer */, "sampleRate");

  copyFromChannel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBuffer */, "copyFromChannel", []);

  copyFromChannel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBuffer */, "copyFromChannel", [__arg_0]);

  copyFromChannel_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioBuffer */, "copyFromChannel", [__arg_0, __arg_1]);

  copyFromChannel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */,
          "copyFromChannel", [__arg_0, __arg_1, __arg_2]);

  copyToChannel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBuffer */, "copyToChannel", []);

  copyToChannel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBuffer */, "copyToChannel", [__arg_0]);

  copyToChannel_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioBuffer */, "copyToChannel", [__arg_0, __arg_1]);

  copyToChannel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioBuffer */,
          "copyToChannel", [__arg_0, __arg_1, __arg_2]);

  getChannelData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBuffer */, "getChannelData", []);

  getChannelData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBuffer */, "getChannelData", [__arg_0]);
}

class BlinkAudioBufferCallback {
  static final instance = new BlinkAudioBufferCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBufferCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBufferCallback */, "handleEvent", [__arg_0]);
}

class BlinkAudioBufferSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkAudioBufferSourceNode();

  buffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBufferSourceNode */, "buffer");

  buffer_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioBufferSourceNode */, "buffer", __arg_0);

  detune_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBufferSourceNode */, "detune");

  loop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBufferSourceNode */, "loop");

  loop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioBufferSourceNode */, "loop", __arg_0);

  loopEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBufferSourceNode */, "loopEnd");

  loopEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioBufferSourceNode */, "loopEnd", __arg_0);

  loopStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBufferSourceNode */, "loopStart");

  loopStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioBufferSourceNode */, "loopStart", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBufferSourceNode */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioBufferSourceNode */, "onended", __arg_0);

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioBufferSourceNode */, "playbackRate");

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBufferSourceNode */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBufferSourceNode */, "start", [__arg_0]);

  start_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioBufferSourceNode */, "start", [__arg_0, __arg_1]);

  start_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioBufferSourceNode */,
          "start", [__arg_0, __arg_1, __arg_2]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBufferSourceNode */, "stop", []);

  stop_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioBufferSourceNode */, "stop", [__arg_0]);
}

class BlinkAudioContext extends BlinkEventTarget {
  static final instance = new BlinkAudioContext();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("AudioContext");

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioContext */, "currentTime");

  destination_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioContext */, "destination");

  listener_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioContext */, "listener");

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioContext */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AudioContext */, "onstatechange", __arg_0);

  sampleRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioContext */, "sampleRate");

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioContext */, "state");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "close", []);

  createAnalyser_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createAnalyser", []);

  createBiquadFilter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createBiquadFilter", []);

  createBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createBuffer", [__arg_0]);

  createBuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "createBuffer", [__arg_0, __arg_1]);

  createBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioContext */,
          "createBuffer", [__arg_0, __arg_1, __arg_2]);

  createBufferSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createBufferSource", []);

  createChannelMerger_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createChannelMerger", []);

  createChannelMerger_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createChannelMerger", [__arg_0]);

  createChannelSplitter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createChannelSplitter", []);

  createChannelSplitter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "createChannelSplitter", [__arg_0]);

  createConvolver_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createConvolver", []);

  createDelay_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createDelay", []);

  createDelay_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createDelay", [__arg_0]);

  createDynamicsCompressor_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createDynamicsCompressor", []);

  createGain_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createGain", []);

  createIIRFilter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createIIRFilter", []);

  createIIRFilter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createIIRFilter", [__arg_0]);

  createIIRFilter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "createIIRFilter", [__arg_0, __arg_1]);

  createMediaElementSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createMediaElementSource", []);

  createMediaElementSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "createMediaElementSource", [__arg_0]);

  createMediaStreamDestination_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createMediaStreamDestination", []);

  createMediaStreamSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createMediaStreamSource", []);

  createMediaStreamSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "createMediaStreamSource", [__arg_0]);

  createOscillator_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createOscillator", []);

  createPanner_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createPanner", []);

  createPeriodicWave_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createPeriodicWave", []);

  createPeriodicWave_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createPeriodicWave", [__arg_0]);

  createPeriodicWave_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "createPeriodicWave", [__arg_0, __arg_1]);

  createPeriodicWave_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioContext */,
          "createPeriodicWave", [__arg_0, __arg_1, __arg_2]);

  createScriptProcessor_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createScriptProcessor", []);

  createScriptProcessor_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "createScriptProcessor", [__arg_0]);

  createScriptProcessor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioContext */,
          "createScriptProcessor", [__arg_0, __arg_1]);

  createScriptProcessor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioContext */,
          "createScriptProcessor", [__arg_0, __arg_1, __arg_2]);

  createStereoPanner_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createStereoPanner", []);

  createWaveShaper_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "createWaveShaper", []);

  decodeAudioData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "decodeAudioData", []);

  decodeAudioData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "decodeAudioData", [__arg_0]);

  decodeAudioData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioContext */, "decodeAudioData", [__arg_0, __arg_1]);

  decodeAudioData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioContext */,
          "decodeAudioData", [__arg_0, __arg_1, __arg_2]);

  resume_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "resume", []);

  suspend_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioContext */, "suspend", []);
}

class BlinkAudioDestinationNode extends BlinkAudioNode {
  static final instance = new BlinkAudioDestinationNode();

  maxChannelCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioDestinationNode */, "maxChannelCount");
}

class BlinkAudioListener {
  static final instance = new BlinkAudioListener();

  dopplerFactor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioListener */, "dopplerFactor");

  dopplerFactor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AudioListener */, "dopplerFactor", __arg_0);

  speedOfSound_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioListener */, "speedOfSound");

  speedOfSound_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AudioListener */, "speedOfSound", __arg_0);

  setOrientation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioListener */,
          "setOrientation", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setOrientation_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioListener */,
          "setOrientation", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  setOrientation_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioListener */,
          "setOrientation",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  setPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioListener */, "setPosition", [__arg_0]);

  setPosition_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioListener */, "setPosition", [__arg_0, __arg_1]);

  setPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioListener */,
          "setPosition", [__arg_0, __arg_1, __arg_2]);

  setVelocity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioListener */, "setVelocity", [__arg_0]);

  setVelocity_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioListener */, "setVelocity", [__arg_0, __arg_1]);

  setVelocity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioListener */,
          "setVelocity", [__arg_0, __arg_1, __arg_2]);
}

class BlinkAudioNode extends BlinkEventTarget {
  static final instance = new BlinkAudioNode();

  channelCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioNode */, "channelCount");

  channelCount_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AudioNode */, "channelCount", __arg_0);

  channelCountMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioNode */, "channelCountMode");

  channelCountMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AudioNode */, "channelCountMode", __arg_0);

  channelInterpretation_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* AudioNode */, "channelInterpretation");

  channelInterpretation_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AudioNode */, "channelInterpretation", __arg_0);

  context_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* AudioNode */, "context");

  numberOfInputs_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioNode */, "numberOfInputs");

  numberOfOutputs_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioNode */, "numberOfOutputs");

  connect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioNode */, "connect", []);

  connect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioNode */, "connect", [__arg_0]);

  connect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioNode */, "connect", [__arg_0, __arg_1]);

  connect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioNode */, "connect", [__arg_0, __arg_1, __arg_2]);

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioNode */, "disconnect", []);

  disconnect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioNode */, "disconnect", [__arg_0]);

  disconnect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioNode */, "disconnect", [__arg_0, __arg_1]);

  disconnect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioNode */, "disconnect", [__arg_0, __arg_1, __arg_2]);
}

class BlinkAudioParam {
  static final instance = new BlinkAudioParam();

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioParam */, "defaultValue");

  value_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* AudioParam */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioParam */, "value", __arg_0);

  cancelScheduledValues_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioParam */, "cancelScheduledValues", []);

  cancelScheduledValues_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioParam */, "cancelScheduledValues", [__arg_0]);

  exponentialRampToValueAtTime_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioParam */, "exponentialRampToValueAtTime", []);

  exponentialRampToValueAtTime_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioParam */, "exponentialRampToValueAtTime", [__arg_0]);

  exponentialRampToValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioParam */,
          "exponentialRampToValueAtTime", [__arg_0, __arg_1]);

  linearRampToValueAtTime_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioParam */, "linearRampToValueAtTime", []);

  linearRampToValueAtTime_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioParam */, "linearRampToValueAtTime", [__arg_0]);

  linearRampToValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioParam */,
          "linearRampToValueAtTime", [__arg_0, __arg_1]);

  setTargetAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioParam */, "setTargetAtTime", [__arg_0]);

  setTargetAtTime_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioParam */, "setTargetAtTime", [__arg_0, __arg_1]);

  setTargetAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioParam */,
          "setTargetAtTime", [__arg_0, __arg_1, __arg_2]);

  setValueAtTime_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioParam */, "setValueAtTime", []);

  setValueAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioParam */, "setValueAtTime", [__arg_0]);

  setValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioParam */, "setValueAtTime", [__arg_0, __arg_1]);

  setValueCurveAtTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioParam */, "setValueCurveAtTime", [__arg_0]);

  setValueCurveAtTime_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* AudioParam */, "setValueCurveAtTime", [__arg_0, __arg_1]);

  setValueCurveAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* AudioParam */,
          "setValueCurveAtTime", [__arg_0, __arg_1, __arg_2]);
}

class BlinkAudioProcessingEvent extends BlinkEvent {
  static final instance = new BlinkAudioProcessingEvent();

  inputBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioProcessingEvent */, "inputBuffer");

  outputBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioProcessingEvent */, "outputBuffer");

  playbackTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioProcessingEvent */, "playbackTime");
}

class BlinkAudioSourceNode extends BlinkAudioNode {
  static final instance = new BlinkAudioSourceNode();
}

class BlinkAudioTrack {
  static final instance = new BlinkAudioTrack();

  enabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioTrack */, "enabled");

  enabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioTrack */, "enabled", __arg_0);

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "id");

  kind_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "kind");

  label_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* AudioTrack */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioTrack */, "language");
}

class BlinkAudioTrackList extends BlinkEventTarget {
  static final instance = new BlinkAudioTrackList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioTrackList */, "length");

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioTrackList */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioTrackList */, "onaddtrack", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioTrackList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AudioTrackList */, "onchange", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AudioTrackList */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* AudioTrackList */, "onremovetrack", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioTrackList */, "__getter__", [__arg_0]);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioTrackList */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* AudioTrackList */, "getTrackById", [__arg_0]);
}

class BlinkAutocompleteErrorEvent extends BlinkEvent {
  static final instance = new BlinkAutocompleteErrorEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("AutocompleteErrorEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("AutocompleteErrorEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("AutocompleteErrorEvent", [__arg_0, __arg_1]);

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AutocompleteErrorEvent */, "reason");
}

class BlinkBarProp {
  static final instance = new BlinkBarProp();

  visible_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* BarProp */, "visible");
}

class BlinkBatteryManager extends BlinkEventTarget {
  static final instance = new BlinkBatteryManager();

  charging_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BatteryManager */, "charging");

  chargingTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BatteryManager */, "chargingTime");

  dischargingTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BatteryManager */, "dischargingTime");

  level_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BatteryManager */, "level");

  onchargingchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BatteryManager */, "onchargingchange");

  onchargingchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* BatteryManager */, "onchargingchange", __arg_0);

  onchargingtimechange_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* BatteryManager */, "onchargingtimechange");

  onchargingtimechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* BatteryManager */, "onchargingtimechange", __arg_0);

  ondischargingtimechange_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* BatteryManager */, "ondischargingtimechange");

  ondischargingtimechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* BatteryManager */, "ondischargingtimechange", __arg_0);

  onlevelchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BatteryManager */, "onlevelchange");

  onlevelchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* BatteryManager */, "onlevelchange", __arg_0);
}

class BlinkBeforeInstallPromptEvent extends BlinkEvent {
  static final instance = new BlinkBeforeInstallPromptEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("BeforeInstallPromptEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("BeforeInstallPromptEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("BeforeInstallPromptEvent", [__arg_0, __arg_1]);

  platforms_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BeforeInstallPromptEvent */, "platforms");

  userChoice_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BeforeInstallPromptEvent */, "userChoice");

  prompt_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* BeforeInstallPromptEvent */, "prompt", []);
}

class BlinkBeforeUnloadEvent extends BlinkEvent {
  static final instance = new BlinkBeforeUnloadEvent();

  returnValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BeforeUnloadEvent */, "returnValue");

  returnValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* BeforeUnloadEvent */, "returnValue", __arg_0);
}

class BlinkBiquadFilterNode extends BlinkAudioNode {
  static final instance = new BlinkBiquadFilterNode();

  Q_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BiquadFilterNode */, "Q");

  detune_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BiquadFilterNode */, "detune");

  frequency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BiquadFilterNode */, "frequency");

  gain_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BiquadFilterNode */, "gain");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BiquadFilterNode */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* BiquadFilterNode */, "type", __arg_0);

  getFrequencyResponse_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BiquadFilterNode */, "getFrequencyResponse", [__arg_0]);

  getFrequencyResponse_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* BiquadFilterNode */,
          "getFrequencyResponse", [__arg_0, __arg_1]);

  getFrequencyResponse_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* BiquadFilterNode */,
          "getFrequencyResponse", [__arg_0, __arg_1, __arg_2]);
}

class BlinkBlob {
  static final instance = new BlinkBlob();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Blob");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Blob", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("Blob", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("Blob", [__arg_0, __arg_1, __arg_2]);

  size_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Blob */, "size");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Blob */, "type");

  close_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Blob */, "close", []);

  slice_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Blob */, "slice", []);

  slice_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Blob */, "slice", [__arg_0]);

  slice_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Blob */, "slice", [__arg_0, __arg_1]);

  slice_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Blob */, "slice", [__arg_0, __arg_1, __arg_2]);
}

class BlinkBlobCallback {
  static final instance = new BlinkBlobCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* BlobCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* BlobCallback */, "handleEvent", [__arg_0]);
}

class BlinkBlobEvent extends BlinkEvent {
  static final instance = new BlinkBlobEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("BlobEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("BlobEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("BlobEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* BlobEvent */, "data");
}

class BlinkBluetooth {
  static final instance = new BlinkBluetooth();

  requestDevice_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Bluetooth */, "requestDevice", []);

  requestDevice_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Bluetooth */, "requestDevice", [__arg_0]);
}

class BlinkBluetoothAdvertisingData {
  static final instance = new BlinkBluetoothAdvertisingData();

  rssi_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothAdvertisingData */, "rssi");

  txPower_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothAdvertisingData */, "txPower");
}

class BlinkBluetoothCharacteristicProperties {
  static final instance = new BlinkBluetoothCharacteristicProperties();

  authenticatedSignedWrites_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* BluetoothCharacteristicProperties */,
          "authenticatedSignedWrites");

  broadcast_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothCharacteristicProperties */, "broadcast");

  indicate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothCharacteristicProperties */, "indicate");

  notify_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothCharacteristicProperties */, "notify");

  read_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothCharacteristicProperties */, "read");

  reliableWrite_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothCharacteristicProperties */, "reliableWrite");

  writableAuxiliaries_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothCharacteristicProperties */, "writableAuxiliaries");

  write_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothCharacteristicProperties */, "write");

  writeWithoutResponse_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* BluetoothCharacteristicProperties */,
          "writeWithoutResponse");
}

class BlinkBluetoothDevice extends BlinkEventTarget {
  static final instance = new BlinkBluetoothDevice();

  adData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "adData");

  deviceClass_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "deviceClass");

  gatt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "gatt");

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "id");

  instanceID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "instanceID");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "name");

  ongattserverdisconnected_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* BluetoothDevice */, "ongattserverdisconnected");

  ongattserverdisconnected_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* BluetoothDevice */, "ongattserverdisconnected", __arg_0);

  productID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "productID");

  productVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "productVersion");

  vendorID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "vendorID");

  vendorIDSource_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothDevice */, "vendorIDSource");

  connectGATT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* BluetoothDevice */, "connectGATT", []);
}

class BlinkBluetoothRemoteGATTCharacteristic extends BlinkEventTarget {
  static final instance = new BlinkBluetoothRemoteGATTCharacteristic();

  oncharacteristicvaluechanged_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* BluetoothRemoteGATTCharacteristic */,
          "oncharacteristicvaluechanged");

  oncharacteristicvaluechanged_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* BluetoothRemoteGATTCharacteristic */,
          "oncharacteristicvaluechanged",
          __arg_0);

  properties_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothRemoteGATTCharacteristic */, "properties");

  uuid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothRemoteGATTCharacteristic */, "uuid");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothRemoteGATTCharacteristic */, "value");

  readValue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* BluetoothRemoteGATTCharacteristic */, "readValue", []);

  startNotifications_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTCharacteristic */,
          "startNotifications", []);

  stopNotifications_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTCharacteristic */,
          "stopNotifications", []);

  writeValue_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* BluetoothRemoteGATTCharacteristic */, "writeValue", []);

  writeValue_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTCharacteristic */,
          "writeValue",
          [__arg_0]);
}

class BlinkBluetoothRemoteGATTServer {
  static final instance = new BlinkBluetoothRemoteGATTServer();

  connected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothRemoteGATTServer */, "connected");

  device_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothRemoteGATTServer */, "device");

  connect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* BluetoothRemoteGATTServer */, "connect", []);

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* BluetoothRemoteGATTServer */, "disconnect", []);

  getPrimaryService_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTServer */, "getPrimaryService", []);

  getPrimaryService_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTServer */,
          "getPrimaryService",
          [__arg_0]);
}

class BlinkBluetoothRemoteGATTService {
  static final instance = new BlinkBluetoothRemoteGATTService();

  isPrimary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothRemoteGATTService */, "isPrimary");

  uuid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* BluetoothRemoteGATTService */, "uuid");

  getCharacteristic_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTService */, "getCharacteristic", []);

  getCharacteristic_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTService */,
          "getCharacteristic",
          [__arg_0]);

  getCharacteristics_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTService */, "getCharacteristics", []);

  getCharacteristics_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* BluetoothRemoteGATTService */,
          "getCharacteristics",
          [__arg_0]);
}

class BlinkBluetoothUUID {
  static final instance = new BlinkBluetoothUUID();

  canonicalUUID_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "BluetoothUUID") /* BluetoothUUID */,
      "canonicalUUID",
      []);

  canonicalUUID_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "BluetoothUUID") /* BluetoothUUID */,
      "canonicalUUID",
      [__arg_0]);

  getCharacteristic_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "BluetoothUUID") /* BluetoothUUID */,
      "getCharacteristic",
      []);

  getCharacteristic_Callback_1_(__arg_0) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "BluetoothUUID") /* BluetoothUUID */,
          "getCharacteristic",
          [__arg_0]);

  getDescriptor_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "BluetoothUUID") /* BluetoothUUID */,
      "getDescriptor",
      []);

  getDescriptor_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "BluetoothUUID") /* BluetoothUUID */,
      "getDescriptor",
      [__arg_0]);

  getService_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "BluetoothUUID") /* BluetoothUUID */,
      "getService",
      []);

  getService_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "BluetoothUUID") /* BluetoothUUID */,
      "getService",
      [__arg_0]);
}

class BlinkBody {
  static final instance = new BlinkBody();

  bodyUsed_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Body */, "bodyUsed");

  arrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Body */, "arrayBuffer", []);

  blob_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Body */, "blob", []);

  json_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Body */, "json", []);

  text_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Body */, "text", []);
}

class BlinkCDATASection extends BlinkText {
  static final instance = new BlinkCDATASection();
}

class BlinkCHROMIUMSubscribeUniform {
  static final instance = new BlinkCHROMIUMSubscribeUniform();

  bindValuebufferCHROMIUM_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */, "bindValuebufferCHROMIUM", []);

  bindValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "bindValuebufferCHROMIUM",
          [__arg_0]);

  bindValuebufferCHROMIUM_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "bindValuebufferCHROMIUM",
          [__arg_0, __arg_1]);

  createValuebufferCHROMIUM_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "createValuebufferCHROMIUM", []);

  deleteValuebufferCHROMIUM_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "deleteValuebufferCHROMIUM", []);

  deleteValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "deleteValuebufferCHROMIUM",
          [__arg_0]);

  isValuebufferCHROMIUM_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */, "isValuebufferCHROMIUM", []);

  isValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "isValuebufferCHROMIUM",
          [__arg_0]);

  populateSubscribedValuesCHROMIUM_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "populateSubscribedValuesCHROMIUM", []);

  populateSubscribedValuesCHROMIUM_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "populateSubscribedValuesCHROMIUM",
          [__arg_0]);

  subscribeValueCHROMIUM_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */, "subscribeValueCHROMIUM", []);

  subscribeValueCHROMIUM_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "subscribeValueCHROMIUM",
          [__arg_0]);

  subscribeValueCHROMIUM_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "subscribeValueCHROMIUM",
          [__arg_0, __arg_1]);

  uniformValuebufferCHROMIUM_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "uniformValuebufferCHROMIUM",
          [__arg_0]);

  uniformValuebufferCHROMIUM_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "uniformValuebufferCHROMIUM",
          [__arg_0, __arg_1]);

  uniformValuebufferCHROMIUM_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CHROMIUMSubscribeUniform */,
          "uniformValuebufferCHROMIUM",
          [__arg_0, __arg_1, __arg_2]);
}

class BlinkCHROMIUMValuebuffer {
  static final instance = new BlinkCHROMIUMValuebuffer();
}

class BlinkCSS {
  static final instance = new BlinkCSS();

  escape_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */,
      "escape", []);

  escape_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */,
      "escape",
      [__arg_0]);

  supports_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */,
      "supports", []);

  supports_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */,
      "supports",
      [__arg_0]);

  supports_Callback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(js.context, "CSS") /* CSS */,
          "supports",
          [__arg_0, __arg_1]);
}

class BlinkCSSCharsetRule extends BlinkCSSRule {
  static final instance = new BlinkCSSCharsetRule();

  encoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSCharsetRule */, "encoding");

  encoding_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CSSCharsetRule */, "encoding", __arg_0);
}

class BlinkCSSFontFaceRule extends BlinkCSSRule {
  static final instance = new BlinkCSSFontFaceRule();

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSFontFaceRule */, "style");
}

class BlinkCSSGroupingRule extends BlinkCSSRule {
  static final instance = new BlinkCSSGroupingRule();

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSGroupingRule */, "cssRules");

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSGroupingRule */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSGroupingRule */, "deleteRule", [__arg_0]);

  insertRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSGroupingRule */, "insertRule", []);

  insertRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSGroupingRule */, "insertRule", [__arg_0]);

  insertRule_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CSSGroupingRule */, "insertRule", [__arg_0, __arg_1]);
}

class BlinkCSSImportRule extends BlinkCSSRule {
  static final instance = new BlinkCSSImportRule();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSImportRule */, "href");

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSImportRule */, "media");

  styleSheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSImportRule */, "styleSheet");
}

class BlinkCSSKeyframeRule extends BlinkCSSRule {
  static final instance = new BlinkCSSKeyframeRule();

  keyText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSKeyframeRule */, "keyText");

  keyText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CSSKeyframeRule */, "keyText", __arg_0);

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSKeyframeRule */, "style");
}

class BlinkCSSKeyframesRule extends BlinkCSSRule {
  static final instance = new BlinkCSSKeyframesRule();

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSKeyframesRule */, "cssRules");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSKeyframesRule */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CSSKeyframesRule */, "name", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSKeyframesRule */, "__getter__", [__arg_0]);

  appendRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSKeyframesRule */, "appendRule", []);

  appendRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSKeyframesRule */, "appendRule", [__arg_0]);

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSKeyframesRule */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSKeyframesRule */, "deleteRule", [__arg_0]);

  findRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSKeyframesRule */, "findRule", []);

  findRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSKeyframesRule */, "findRule", [__arg_0]);
}

class BlinkCSSMediaRule extends BlinkCSSGroupingRule {
  static final instance = new BlinkCSSMediaRule();

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSMediaRule */, "media");
}

class BlinkCSSNamespaceRule extends BlinkCSSRule {
  static final instance = new BlinkCSSNamespaceRule();

  namespaceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSNamespaceRule */, "namespaceURI");

  prefix_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSNamespaceRule */, "prefix");
}

class BlinkCSSPageRule extends BlinkCSSRule {
  static final instance = new BlinkCSSPageRule();

  selectorText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSPageRule */, "selectorText");

  selectorText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* CSSPageRule */, "selectorText", __arg_0);

  style_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CSSPageRule */, "style");
}

class BlinkCSSRule {
  static final instance = new BlinkCSSRule();

  cssText_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CSSRule */, "cssText");

  cssText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CSSRule */, "cssText", __arg_0);

  parentRule_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSRule */, "parentRule");

  parentStyleSheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSRule */, "parentStyleSheet");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CSSRule */, "type");
}

class BlinkCSSRuleList {
  static final instance = new BlinkCSSRuleList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSRuleList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSRuleList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSRuleList */, "item", [__arg_0]);
}

class BlinkCSSStyleDeclaration {
  static final instance = new BlinkCSSStyleDeclaration();

  cssFloat_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleDeclaration */, "cssFloat");

  cssFloat_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CSSStyleDeclaration */, "cssFloat", __arg_0);

  cssText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleDeclaration */, "cssText");

  cssText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CSSStyleDeclaration */, "cssText", __arg_0);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleDeclaration */, "length");

  parentRule_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleDeclaration */, "parentRule");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleDeclaration */, "__getter__", [__arg_0]);

  $__propertyQuery___Callback_1_(mthis, __arg_0)
      native "Blink_Operation_PQ_CSSStyleDeclaration";

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CSSStyleDeclaration */, "__setter__", [__arg_0, __arg_1]);

  getPropertyPriority_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleDeclaration */, "getPropertyPriority", []);

  getPropertyPriority_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CSSStyleDeclaration */, "getPropertyPriority", [__arg_0]);

  getPropertyValue_Callback_0_(mthis)
      native "Blink_Operation_0_CSSStyleDeclaration_getPropertyValue";

  getPropertyValue_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_CSSStyleDeclaration_getPropertyValue"; /* __arg_0 */

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleDeclaration */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleDeclaration */, "item", [__arg_0]);

  removeProperty_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleDeclaration */, "removeProperty", []);

  removeProperty_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleDeclaration */, "removeProperty", [__arg_0]);

  setProperty_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_CSSStyleDeclaration_setProperty"; /* __arg_0 */

  setProperty_Callback_2_(mthis, __arg_0, __arg_1)
      native "Blink_Operation_CSSStyleDeclaration_setProperty"; /* __arg_0, __arg_1 */

  setProperty_Callback_3_(mthis, __arg_0, __arg_1, __arg_2)
      native "Blink_Operation_CSSStyleDeclaration_setProperty"; /* __arg_0, __arg_1, __arg_2 */

  $__get___propertyIsEnumerable_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CSSStyleDeclaration */, "propertyIsEnumerable", [__arg_0]);
}

class BlinkCSSStyleRule extends BlinkCSSRule {
  static final instance = new BlinkCSSStyleRule();

  selectorText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleRule */, "selectorText");

  selectorText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* CSSStyleRule */, "selectorText", __arg_0);

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleRule */, "style");
}

class BlinkCSSStyleSheet extends BlinkStyleSheet {
  static final instance = new BlinkCSSStyleSheet();

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleSheet */, "cssRules");

  ownerRule_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleSheet */, "ownerRule");

  rules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSStyleSheet */, "rules");

  addRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "addRule", []);

  addRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "addRule", [__arg_0]);

  addRule_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "addRule", [__arg_0, __arg_1]);

  addRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CSSStyleSheet */, "addRule", [__arg_0, __arg_1, __arg_2]);

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "deleteRule", [__arg_0]);

  insertRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "insertRule", []);

  insertRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "insertRule", [__arg_0]);

  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "insertRule", [__arg_0, __arg_1]);

  removeRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "removeRule", []);

  removeRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSStyleSheet */, "removeRule", [__arg_0]);
}

class BlinkCSSSupportsRule extends BlinkCSSRule {
  static final instance = new BlinkCSSSupportsRule();

  conditionText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSSupportsRule */, "conditionText");

  cssRules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSSupportsRule */, "cssRules");

  deleteRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSSupportsRule */, "deleteRule", []);

  deleteRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSSupportsRule */, "deleteRule", [__arg_0]);

  insertRule_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSSupportsRule */, "insertRule", []);

  insertRule_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CSSSupportsRule */, "insertRule", [__arg_0]);

  insertRule_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CSSSupportsRule */, "insertRule", [__arg_0, __arg_1]);
}

class BlinkCSSViewportRule extends BlinkCSSRule {
  static final instance = new BlinkCSSViewportRule();

  style_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CSSViewportRule */, "style");
}

class BlinkCache {
  static final instance = new BlinkCache();

  add_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Cache */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "add", [__arg_0]);

  addAll_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Cache */, "addAll", []);

  addAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "addAll", [__arg_0]);

  delete_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Cache */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "delete", [__arg_0]);

  delete_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "delete", [__arg_0, __arg_1]);

  keys_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Cache */, "keys", []);

  keys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "keys", [__arg_0]);

  keys_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "keys", [__arg_0, __arg_1]);

  match_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Cache */, "match", []);

  match_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "match", [__arg_0]);

  match_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "match", [__arg_0, __arg_1]);

  matchAll_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Cache */, "matchAll", []);

  matchAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "matchAll", [__arg_0]);

  matchAll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "matchAll", [__arg_0, __arg_1]);

  put_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Cache */, "put", []);

  put_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "put", [__arg_0]);

  put_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Cache */, "put", [__arg_0, __arg_1]);
}

class BlinkCacheStorage {
  static final instance = new BlinkCacheStorage();

  delete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "delete", [__arg_0]);

  has_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "has", [__arg_0]);

  keys_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "keys", []);

  match_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "match", []);

  match_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "match", [__arg_0]);

  match_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "match", [__arg_0, __arg_1]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CacheStorage */, "open", [__arg_0]);
}

class BlinkCalcLength extends BlinkLengthValue {
  static final instance = new BlinkCalcLength();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("CalcLength");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("CalcLength", [__arg_0]);

  ch_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "ch");

  cm_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "cm");

  em_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "em");

  ex_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "ex");

  in_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "in");

  mm_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "mm");

  pc_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "pc");

  percent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CalcLength */, "percent");

  pt_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "pt");

  px_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "px");

  rem_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "rem");

  vh_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "vh");

  vmax_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "vmax");

  vmin_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "vmin");

  vw_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CalcLength */, "vw");
}

class BlinkCanvasCaptureMediaStreamTrack extends BlinkMediaStreamTrack {
  static final instance = new BlinkCanvasCaptureMediaStreamTrack();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasCaptureMediaStreamTrack */, "canvas");

  requestFrame_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* CanvasCaptureMediaStreamTrack */, "requestFrame", []);
}

class BlinkCanvasGradient {
  static final instance = new BlinkCanvasGradient();

  addColorStop_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasGradient */, "addColorStop", []);

  addColorStop_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasGradient */, "addColorStop", [__arg_0]);

  addColorStop_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasGradient */, "addColorStop", [__arg_0, __arg_1]);
}

class BlinkCanvasPathMethods {
  static final instance = new BlinkCanvasPathMethods();

  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  arc_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2]);

  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bezierCurveTo_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */,
          "bezierCurveTo",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  closePath_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "closePath", []);

  ellipse_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */,
          "ellipse",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "ellipse", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  lineTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", []);

  lineTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0]);

  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1, __arg_2]);

  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  rect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1]);

  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2]);

  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "rect", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkCanvasPattern {
  static final instance = new BlinkCanvasPattern();

  setTransform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPattern */, "setTransform", []);

  setTransform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPattern */, "setTransform", [__arg_0]);
}

class BlinkCanvasRenderingContext2D {
  static final instance = new BlinkCanvasRenderingContext2D();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "canvas");

  currentTransform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "currentTransform");

  currentTransform_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "currentTransform", __arg_0);

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "direction");

  direction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "direction", __arg_0);

  fillStyle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "fillStyle");

  fillStyle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "fillStyle", __arg_0);

  filter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "filter");

  filter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "filter", __arg_0);

  font_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "font");

  font_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "font", __arg_0);

  globalAlpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "globalAlpha");

  globalAlpha_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "globalAlpha", __arg_0);

  globalCompositeOperation_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* CanvasRenderingContext2D */, "globalCompositeOperation");

  globalCompositeOperation_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */,
          "globalCompositeOperation",
          __arg_0);

  imageSmoothingEnabled_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* CanvasRenderingContext2D */, "imageSmoothingEnabled");

  imageSmoothingEnabled_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */,
          "imageSmoothingEnabled",
          __arg_0);

  imageSmoothingQuality_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* CanvasRenderingContext2D */, "imageSmoothingQuality");

  imageSmoothingQuality_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */,
          "imageSmoothingQuality",
          __arg_0);

  lineCap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "lineCap");

  lineCap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "lineCap", __arg_0);

  lineDashOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "lineDashOffset");

  lineDashOffset_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "lineDashOffset", __arg_0);

  lineJoin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "lineJoin");

  lineJoin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "lineJoin", __arg_0);

  lineWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "lineWidth");

  lineWidth_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "lineWidth", __arg_0);

  miterLimit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "miterLimit");

  miterLimit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "miterLimit", __arg_0);

  shadowBlur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "shadowBlur");

  shadowBlur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "shadowBlur", __arg_0);

  shadowColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "shadowColor");

  shadowColor_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "shadowColor", __arg_0);

  shadowOffsetX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "shadowOffsetX");

  shadowOffsetX_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "shadowOffsetX", __arg_0);

  shadowOffsetY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "shadowOffsetY");

  shadowOffsetY_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "shadowOffsetY", __arg_0);

  strokeStyle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "strokeStyle");

  strokeStyle_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "strokeStyle", __arg_0);

  textAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "textAlign");

  textAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CanvasRenderingContext2D */, "textAlign", __arg_0);

  textBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CanvasRenderingContext2D */, "textBaseline");

  textBaseline_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */, "textBaseline", __arg_0);

  webkitImageSmoothingEnabled_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* CanvasRenderingContext2D */, "webkitImageSmoothingEnabled");

  webkitImageSmoothingEnabled_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* CanvasRenderingContext2D */,
          "webkitImageSmoothingEnabled",
          __arg_0);

  addHitRegion_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "addHitRegion", []);

  addHitRegion_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "addHitRegion", [__arg_0]);

  beginPath_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "beginPath", []);

  clearHitRegions_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "clearHitRegions", []);

  clearRect_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "clearRect",
          [__arg_0, __arg_1]);

  clearRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "clearRect",
          [__arg_0, __arg_1, __arg_2]);

  clearRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "clearRect",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  clip_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "clip", []);

  clip_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "clip", [__arg_0]);

  clip_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "clip", [__arg_0, __arg_1]);

  createImageData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "createImageData", []);

  createImageData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "createImageData", [__arg_0]);

  createImageData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createImageData",
          [__arg_0, __arg_1]);

  createLinearGradient_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createLinearGradient",
          [__arg_0, __arg_1]);

  createLinearGradient_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createLinearGradient",
          [__arg_0, __arg_1, __arg_2]);

  createLinearGradient_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createLinearGradient",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  createPattern_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "createPattern", []);

  createPattern_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "createPattern", [__arg_0]);

  createPattern_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createPattern",
          [__arg_0, __arg_1]);

  createRadialGradient_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createRadialGradient",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  createRadialGradient_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createRadialGradient",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  createRadialGradient_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "createRadialGradient",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  drawFocusIfNeeded_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "drawFocusIfNeeded", []);

  drawFocusIfNeeded_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "drawFocusIfNeeded", [__arg_0]);

  drawFocusIfNeeded_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "drawFocusIfNeeded",
          [__arg_0, __arg_1]);

  drawImage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "drawImage", [__arg_0]);

  drawImage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "drawImage",
          [__arg_0, __arg_1]);

  drawImage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "drawImage",
          [__arg_0, __arg_1, __arg_2]);

  drawImage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "drawImage",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawImage_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "drawImage",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawImage_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "drawImage",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  drawImage_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "drawImage",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  drawImage_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "drawImage", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  drawImage_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "drawImage", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  fill_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "fill", []);

  fill_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "fill", [__arg_0]);

  fill_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "fill", [__arg_0, __arg_1]);

  fillRect_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "fillRect", [__arg_0, __arg_1]);

  fillRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "fillRect",
          [__arg_0, __arg_1, __arg_2]);

  fillRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "fillRect",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  fillText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "fillText", [__arg_0]);

  fillText_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "fillText", [__arg_0, __arg_1]);

  fillText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "fillText",
          [__arg_0, __arg_1, __arg_2]);

  fillText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "fillText",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  getContextAttributes_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "getContextAttributes", []);

  getImageData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "getImageData",
          [__arg_0, __arg_1]);

  getImageData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "getImageData",
          [__arg_0, __arg_1, __arg_2]);

  getImageData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "getImageData",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  getLineDash_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "getLineDash", []);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "isContextLost", []);

  isPointInPath_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "isPointInPath", []);

  isPointInPath_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "isPointInPath", [__arg_0]);

  isPointInPath_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "isPointInPath",
          [__arg_0, __arg_1]);

  isPointInPath_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "isPointInPath",
          [__arg_0, __arg_1, __arg_2]);

  isPointInPath_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "isPointInPath",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  isPointInStroke_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "isPointInStroke", []);

  isPointInStroke_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "isPointInStroke", [__arg_0]);

  isPointInStroke_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "isPointInStroke",
          [__arg_0, __arg_1]);

  isPointInStroke_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "isPointInStroke",
          [__arg_0, __arg_1, __arg_2]);

  measureText_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "measureText", []);

  measureText_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "measureText", [__arg_0]);

  putImageData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "putImageData", [__arg_0]);

  putImageData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "putImageData",
          [__arg_0, __arg_1]);

  putImageData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "putImageData",
          [__arg_0, __arg_1, __arg_2]);

  putImageData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "putImageData",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  putImageData_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "putImageData",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  putImageData_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "putImageData",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  putImageData_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "putImageData",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  removeHitRegion_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "removeHitRegion", []);

  removeHitRegion_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "removeHitRegion", [__arg_0]);

  resetTransform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "resetTransform", []);

  restore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "restore", []);

  rotate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "rotate", []);

  rotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "rotate", [__arg_0]);

  save_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "save", []);

  scale_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "scale", []);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "scale", [__arg_0]);

  scale_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "scale", [__arg_0, __arg_1]);

  scrollPathIntoView_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "scrollPathIntoView", []);

  scrollPathIntoView_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "scrollPathIntoView",
          [__arg_0]);

  setLineDash_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "setLineDash", []);

  setLineDash_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "setLineDash", [__arg_0]);

  setTransform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "setTransform",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  setTransform_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "setTransform",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  setTransform_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "setTransform",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  stroke_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "stroke", []);

  stroke_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "stroke", [__arg_0]);

  strokeRect_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "strokeRect",
          [__arg_0, __arg_1]);

  strokeRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "strokeRect",
          [__arg_0, __arg_1, __arg_2]);

  strokeRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "strokeRect",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  strokeText_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */, "strokeText", [__arg_0]);

  strokeText_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "strokeText",
          [__arg_0, __arg_1]);

  strokeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "strokeText",
          [__arg_0, __arg_1, __arg_2]);

  strokeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "strokeText",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  transform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "transform",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  transform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "transform",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  transform_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "transform",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  translate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "translate", []);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasRenderingContext2D */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasRenderingContext2D */,
          "translate",
          [__arg_0, __arg_1]);

  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  arc_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2]);

  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bezierCurveTo_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */,
          "bezierCurveTo",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  closePath_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "closePath", []);

  ellipse_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */,
          "ellipse",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "ellipse", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  lineTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", []);

  lineTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0]);

  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1, __arg_2]);

  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  rect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1]);

  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2]);

  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "rect", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkChannelMergerNode extends BlinkAudioNode {
  static final instance = new BlinkChannelMergerNode();
}

class BlinkChannelSplitterNode extends BlinkAudioNode {
  static final instance = new BlinkChannelSplitterNode();
}

class BlinkCharacterData extends BlinkNode {
  static final instance = new BlinkCharacterData();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CharacterData */, "data");

  data_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CharacterData */, "data", __arg_0);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CharacterData */, "length");

  appendData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "appendData", []);

  appendData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "appendData", [__arg_0]);

  deleteData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "deleteData", []);

  deleteData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "deleteData", [__arg_0]);

  deleteData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "deleteData", [__arg_0, __arg_1]);

  insertData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "insertData", []);

  insertData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "insertData", [__arg_0]);

  insertData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "insertData", [__arg_0, __arg_1]);

  replaceData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "replaceData", [__arg_0]);

  replaceData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CharacterData */, "replaceData", [__arg_0, __arg_1]);

  replaceData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* CharacterData */,
          "replaceData", [__arg_0, __arg_1, __arg_2]);

  substringData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "substringData", []);

  substringData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CharacterData */, "substringData", [__arg_0]);

  substringData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CharacterData */, "substringData", [__arg_0, __arg_1]);

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";

  nextElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NonDocumentTypeChildNode */, "nextElementSibling");

  previousElementSibling_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* NonDocumentTypeChildNode */, "previousElementSibling");
}

class BlinkChildNode {
  static final instance = new BlinkChildNode();

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";
}

class BlinkCircularGeofencingRegion extends BlinkGeofencingRegion {
  static final instance = new BlinkCircularGeofencingRegion();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("CircularGeofencingRegion");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("CircularGeofencingRegion", [__arg_0]);

  latitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CircularGeofencingRegion */, "latitude");

  longitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CircularGeofencingRegion */, "longitude");

  radius_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CircularGeofencingRegion */, "radius");
}

class BlinkClient {
  static final instance = new BlinkClient();

  frameType_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Client */, "frameType");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Client */, "id");

  url_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Client */, "url");

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Client */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Client */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Client */, "postMessage", [__arg_0, __arg_1]);
}

class BlinkClientRect {
  static final instance = new BlinkClientRect();

  bottom_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "bottom");

  height_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "height");

  left_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "left");

  right_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "right");

  top_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "top");

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ClientRect */, "width");
}

class BlinkClientRectList {
  static final instance = new BlinkClientRectList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ClientRectList */, "length");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ClientRectList */, "__getter__", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ClientRectList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ClientRectList */, "item", [__arg_0]);
}

class BlinkClients {
  static final instance = new BlinkClients();

  claim_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Clients */, "claim", []);

  get_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Clients */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Clients */, "get", [__arg_0]);

  matchAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Clients */, "matchAll", []);

  matchAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Clients */, "matchAll", [__arg_0]);

  openWindow_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Clients */, "openWindow", []);

  openWindow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Clients */, "openWindow", [__arg_0]);
}

class BlinkClipboardEvent extends BlinkEvent {
  static final instance = new BlinkClipboardEvent();

  clipboardData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ClipboardEvent */, "clipboardData");
}

class BlinkCloseEvent extends BlinkEvent {
  static final instance = new BlinkCloseEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("CloseEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("CloseEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("CloseEvent", [__arg_0, __arg_1]);

  code_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CloseEvent */, "code");

  reason_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CloseEvent */, "reason");

  wasClean_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CloseEvent */, "wasClean");
}

class BlinkComment extends BlinkCharacterData {
  static final instance = new BlinkComment();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Comment");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Comment", [__arg_0]);
}

class BlinkCompositionEvent extends BlinkUIEvent {
  static final instance = new BlinkCompositionEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("CompositionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("CompositionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("CompositionEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CompositionEvent */, "data");

  initCompositionEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* CompositionEvent */,
          "initCompositionEvent", [__arg_0, __arg_1, __arg_2]);

  initCompositionEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CompositionEvent */,
          "initCompositionEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  initCompositionEvent_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositionEvent */,
          "initCompositionEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);
}

class BlinkCompositorProxy {
  static final instance = new BlinkCompositorProxy();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("CompositorProxy");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("CompositorProxy", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("CompositorProxy", [__arg_0, __arg_1]);

  opacity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CompositorProxy */, "opacity");

  opacity_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CompositorProxy */, "opacity", __arg_0);

  scrollLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CompositorProxy */, "scrollLeft");

  scrollLeft_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CompositorProxy */, "scrollLeft", __arg_0);

  scrollTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CompositorProxy */, "scrollTop");

  scrollTop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CompositorProxy */, "scrollTop", __arg_0);

  transform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CompositorProxy */, "transform");

  transform_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CompositorProxy */, "transform", __arg_0);

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CompositorProxy */, "disconnect", []);

  supports_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CompositorProxy */, "supports", []);

  supports_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CompositorProxy */, "supports", [__arg_0]);
}

class BlinkCompositorWorker extends BlinkEventTarget {
  static final instance = new BlinkCompositorWorker();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("CompositorWorker");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("CompositorWorker", [__arg_0]);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CompositorWorker */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CompositorWorker */, "onmessage", __arg_0);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CompositorWorker */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CompositorWorker */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositorWorker */, "postMessage", [__arg_0, __arg_1]);

  terminate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CompositorWorker */, "terminate", []);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AbstractWorker */, "onerror", __arg_0);
}

class BlinkCompositorWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkCompositorWorkerGlobalScope();

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CompositorWorkerGlobalScope */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* CompositorWorkerGlobalScope */, "onmessage", __arg_0);

  cancelAnimationFrame_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositorWorkerGlobalScope */, "cancelAnimationFrame", []);

  cancelAnimationFrame_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositorWorkerGlobalScope */,
          "cancelAnimationFrame",
          [__arg_0]);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CompositorWorkerGlobalScope */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositorWorkerGlobalScope */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositorWorkerGlobalScope */,
          "postMessage",
          [__arg_0, __arg_1]);

  requestAnimationFrame_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositorWorkerGlobalScope */, "requestAnimationFrame", []);

  requestAnimationFrame_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CompositorWorkerGlobalScope */,
          "requestAnimationFrame",
          [__arg_0]);
}

class BlinkConsole extends BlinkConsoleBase {
  static final instance = new BlinkConsole();

  memory_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Console */, "memory");

  memory_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Console */, "memory", __arg_0);
}

class BlinkConsoleBase {
  static final instance = new BlinkConsoleBase();

  assert_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "assert", []);

  assert_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "assert", [__arg_0]);

  assert_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "assert", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "clear", [__arg_0]);

  count_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "count", []);

  count_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "count", [__arg_0]);

  debug_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "debug", []);

  debug_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "debug", [__arg_0]);

  dir_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "dir", []);

  dir_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "dir", [__arg_0]);

  dirxml_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "dirxml", []);

  dirxml_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "dirxml", [__arg_0]);

  error_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "error", []);

  error_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "error", [__arg_0]);

  group_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "group", []);

  group_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "group", [__arg_0]);

  groupCollapsed_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "groupCollapsed", []);

  groupCollapsed_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "groupCollapsed", [__arg_0]);

  groupEnd_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "groupEnd", []);

  info_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "info", []);

  info_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "info", [__arg_0]);

  log_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "log", []);

  log_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "log", [__arg_0]);

  markTimeline_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "markTimeline", []);

  markTimeline_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "markTimeline", [__arg_0]);

  profile_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "profile", []);

  profile_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "profile", [__arg_0]);

  profileEnd_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "profileEnd", []);

  profileEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "profileEnd", [__arg_0]);

  table_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "table", []);

  table_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "table", [__arg_0]);

  time_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "time", []);

  time_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "time", [__arg_0]);

  timeEnd_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timeEnd", []);

  timeEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timeEnd", [__arg_0]);

  timeStamp_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timeStamp", []);

  timeStamp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timeStamp", [__arg_0]);

  timeline_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timeline", []);

  timeline_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timeline", [__arg_0]);

  timelineEnd_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timelineEnd", []);

  timelineEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "timelineEnd", [__arg_0]);

  trace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "trace", []);

  trace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "trace", [__arg_0]);

  warn_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "warn", []);

  warn_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ConsoleBase */, "warn", [__arg_0]);
}

class BlinkConvolverNode extends BlinkAudioNode {
  static final instance = new BlinkConvolverNode();

  buffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ConvolverNode */, "buffer");

  buffer_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ConvolverNode */, "buffer", __arg_0);

  normalize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ConvolverNode */, "normalize");

  normalize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ConvolverNode */, "normalize", __arg_0);
}

class BlinkCoordinates {
  static final instance = new BlinkCoordinates();

  accuracy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Coordinates */, "accuracy");

  altitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Coordinates */, "altitude");

  altitudeAccuracy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Coordinates */, "altitudeAccuracy");

  heading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Coordinates */, "heading");

  latitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Coordinates */, "latitude");

  longitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Coordinates */, "longitude");

  speed_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Coordinates */, "speed");
}

class BlinkCredential {
  static final instance = new BlinkCredential();

  iconURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Credential */, "iconURL");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Credential */, "id");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Credential */, "name");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Credential */, "type");
}

class BlinkCredentialsContainer {
  static final instance = new BlinkCredentialsContainer();

  get_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CredentialsContainer */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CredentialsContainer */, "get", [__arg_0]);

  requireUserMediation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CredentialsContainer */, "requireUserMediation", []);

  store_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CredentialsContainer */, "store", []);

  store_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CredentialsContainer */, "store", [__arg_0]);
}

class BlinkCrossOriginServiceWorkerClient extends BlinkEventTarget {
  static final instance = new BlinkCrossOriginServiceWorkerClient();

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CrossOriginServiceWorkerClient */, "origin");

  targetUrl_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CrossOriginServiceWorkerClient */, "targetUrl");

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* CrossOriginServiceWorkerClient */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CrossOriginServiceWorkerClient */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CrossOriginServiceWorkerClient */,
          "postMessage",
          [__arg_0, __arg_1]);
}

class BlinkCrypto {
  static final instance = new BlinkCrypto();

  subtle_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Crypto */, "subtle");

  getRandomValues_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Crypto */, "getRandomValues", []);

  getRandomValues_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Crypto */, "getRandomValues", [__arg_0]);
}

class BlinkCryptoKey {
  static final instance = new BlinkCryptoKey();

  algorithm_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CryptoKey */, "algorithm");

  extractable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CryptoKey */, "extractable");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CryptoKey */, "type");

  usages_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* CryptoKey */, "usages");
}

class BlinkCustomEvent extends BlinkEvent {
  static final instance = new BlinkCustomEvent();

  detail_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* CustomEvent */, "detail");

  initCustomEvent_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CustomEvent */, "initCustomEvent", [__arg_0, __arg_1]);

  initCustomEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* CustomEvent */,
          "initCustomEvent", [__arg_0, __arg_1, __arg_2]);

  initCustomEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CustomEvent */,
          "initCustomEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkDOMError {
  static final instance = new BlinkDOMError();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DOMError");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("DOMError", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("DOMError", [__arg_0, __arg_1]);

  message_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMError */, "message");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMError */, "name");
}

class BlinkDOMException {
  static final instance = new BlinkDOMException();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DOMException");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("DOMException", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("DOMException", [__arg_0, __arg_1]);

  code_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMException */, "code");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMException */, "message");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMException */, "name");

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMException */, "toString", []);
}

class BlinkDOMFileSystem {
  static final instance = new BlinkDOMFileSystem();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMFileSystem */, "name");

  root_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMFileSystem */, "root");
}

class BlinkDOMFileSystemSync {
  static final instance = new BlinkDOMFileSystemSync();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMFileSystemSync */, "name");

  root_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMFileSystemSync */, "root");
}

class BlinkDOMImplementation {
  static final instance = new BlinkDOMImplementation();

  createDocument_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMImplementation */, "createDocument", [__arg_0]);

  createDocument_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMImplementation */, "createDocument", [__arg_0, __arg_1]);

  createDocument_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */,
          "createDocument", [__arg_0, __arg_1, __arg_2]);

  createDocumentType_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMImplementation */, "createDocumentType", [__arg_0]);

  createDocumentType_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */,
          "createDocumentType", [__arg_0, __arg_1]);

  createDocumentType_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMImplementation */,
          "createDocumentType", [__arg_0, __arg_1, __arg_2]);

  createHTMLDocument_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMImplementation */, "createHTMLDocument", []);

  createHTMLDocument_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMImplementation */, "createHTMLDocument", [__arg_0]);

  hasFeature_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMImplementation */, "hasFeature", []);
}

class BlinkDOMMatrix extends BlinkDOMMatrixReadOnly {
  static final instance = new BlinkDOMMatrix();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DOMMatrix");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("DOMMatrix", [__arg_0]);

  a_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "a");

  a_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "a", __arg_0);

  b_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "b");

  b_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "b", __arg_0);

  c_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "c");

  c_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "c", __arg_0);

  d_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "d");

  d_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "d", __arg_0);

  e_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "e");

  e_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "e", __arg_0);

  f_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "f");

  f_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "f", __arg_0);

  m11_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m11");

  m11_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m11", __arg_0);

  m12_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m12");

  m12_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m12", __arg_0);

  m13_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m13");

  m13_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m13", __arg_0);

  m14_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m14");

  m14_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m14", __arg_0);

  m21_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m21");

  m21_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m21", __arg_0);

  m22_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m22");

  m22_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m22", __arg_0);

  m23_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m23");

  m23_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m23", __arg_0);

  m24_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m24");

  m24_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m24", __arg_0);

  m31_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m31");

  m31_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m31", __arg_0);

  m32_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m32");

  m32_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m32", __arg_0);

  m33_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m33");

  m33_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m33", __arg_0);

  m34_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m34");

  m34_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m34", __arg_0);

  m41_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m41");

  m41_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m41", __arg_0);

  m42_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m42");

  m42_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m42", __arg_0);

  m43_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m43");

  m43_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m43", __arg_0);

  m44_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMMatrix */, "m44");

  m44_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMMatrix */, "m44", __arg_0);

  multiplySelf_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "multiplySelf", []);

  multiplySelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "multiplySelf", [__arg_0]);

  preMultiplySelf_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "preMultiplySelf", []);

  preMultiplySelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "preMultiplySelf", [__arg_0]);

  scale3dSelf_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "scale3dSelf", []);

  scale3dSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "scale3dSelf", [__arg_0]);

  scale3dSelf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* DOMMatrix */, "scale3dSelf", [__arg_0, __arg_1]);

  scale3dSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrix */, "scale3dSelf", [__arg_0, __arg_1, __arg_2]);

  scale3dSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */,
          "scale3dSelf", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniformSelf_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", []);

  scaleNonUniformSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0]);

  scaleNonUniformSelf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrix */, "scaleNonUniformSelf", [__arg_0, __arg_1]);

  scaleNonUniformSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */,
          "scaleNonUniformSelf", [__arg_0, __arg_1, __arg_2]);

  scaleNonUniformSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */,
          "scaleNonUniformSelf", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniformSelf_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrix */,
          "scaleNonUniformSelf", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  scaleNonUniformSelf_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrix */,
          "scaleNonUniformSelf",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  scaleSelf_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "scaleSelf", []);

  scaleSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "scaleSelf", [__arg_0]);

  scaleSelf_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "scaleSelf", [__arg_0, __arg_1]);

  scaleSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrix */, "scaleSelf", [__arg_0, __arg_1, __arg_2]);

  translateSelf_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "translateSelf", []);

  translateSelf_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrix */, "translateSelf", [__arg_0]);

  translateSelf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrix */, "translateSelf", [__arg_0, __arg_1]);

  translateSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrix */, "translateSelf", [__arg_0, __arg_1, __arg_2]);
}

class BlinkDOMMatrixReadOnly {
  static final instance = new BlinkDOMMatrixReadOnly();

  a_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "a");

  b_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "b");

  c_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "c");

  d_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "d");

  e_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "e");

  f_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "f");

  is2D_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "is2D");

  isIdentity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "isIdentity");

  m11_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m11");

  m12_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m12");

  m13_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m13");

  m14_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m14");

  m21_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m21");

  m22_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m22");

  m23_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m23");

  m24_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m24");

  m31_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m31");

  m32_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m32");

  m33_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m33");

  m34_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m34");

  m41_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m41");

  m42_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m42");

  m43_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m43");

  m44_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMMatrixReadOnly */, "m44");

  multiply_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "multiply", []);

  multiply_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "multiply", [__arg_0]);

  scale_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scale", []);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scale", [__arg_0]);

  scale_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scale", [__arg_0, __arg_1]);

  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrixReadOnly */, "scale", [__arg_0, __arg_1, __arg_2]);

  scale3d_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", []);

  scale3d_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", [__arg_0]);

  scale3d_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scale3d", [__arg_0, __arg_1]);

  scale3d_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */,
          "scale3d", [__arg_0, __arg_1, __arg_2]);

  scale3d_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */,
          "scale3d", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", []);

  scaleNonUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0]);

  scaleNonUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrixReadOnly */, "scaleNonUniform", [__arg_0, __arg_1]);

  scaleNonUniform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */,
          "scaleNonUniform", [__arg_0, __arg_1, __arg_2]);

  scaleNonUniform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */,
          "scaleNonUniform", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scaleNonUniform_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */,
          "scaleNonUniform", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  scaleNonUniform_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrixReadOnly */,
          "scaleNonUniform",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  toFloat32Array_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "toFloat32Array", []);

  toFloat64Array_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "toFloat64Array", []);

  translate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "translate", []);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMMatrixReadOnly */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMMatrixReadOnly */, "translate", [__arg_0, __arg_1]);

  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DOMMatrixReadOnly */,
          "translate", [__arg_0, __arg_1, __arg_2]);
}

class BlinkDOMParser {
  static final instance = new BlinkDOMParser();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DOMParser");

  parseFromString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMParser */, "parseFromString", []);

  parseFromString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMParser */, "parseFromString", [__arg_0]);

  parseFromString_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMParser */, "parseFromString", [__arg_0, __arg_1]);
}

class BlinkDOMPoint extends BlinkDOMPointReadOnly {
  static final instance = new BlinkDOMPoint();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DOMPoint");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("DOMPoint", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("DOMPoint", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("DOMPoint", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException
          .callConstructor("DOMPoint", [__arg_0, __arg_1, __arg_2, __arg_3]);

  w_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "w");

  w_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMPoint */, "w", __arg_0);

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMPoint */, "x", __arg_0);

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMPoint */, "y", __arg_0);

  z_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMPoint */, "z");

  z_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMPoint */, "z", __arg_0);
}

class BlinkDOMPointReadOnly {
  static final instance = new BlinkDOMPointReadOnly();

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("DOMPointReadOnly", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("DOMPointReadOnly", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callConstructor(
          "DOMPointReadOnly", [__arg_0, __arg_1, __arg_2, __arg_3]);

  w_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMPointReadOnly */, "w");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMPointReadOnly */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMPointReadOnly */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMPointReadOnly */, "z");
}

class BlinkDOMRect extends BlinkDOMRectReadOnly {
  static final instance = new BlinkDOMRect();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DOMRect");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("DOMRect", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("DOMRect", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("DOMRect", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException
          .callConstructor("DOMRect", [__arg_0, __arg_1, __arg_2, __arg_3]);

  height_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMRect */, "height", __arg_0);

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMRect */, "width", __arg_0);

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMRect */, "x", __arg_0);

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMRect */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMRect */, "y", __arg_0);
}

class BlinkDOMRectReadOnly {
  static final instance = new BlinkDOMRectReadOnly();

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("DOMRectReadOnly", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("DOMRectReadOnly", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callConstructor(
          "DOMRectReadOnly", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bottom_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMRectReadOnly */, "bottom");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMRectReadOnly */, "height");

  left_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMRectReadOnly */, "left");

  right_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMRectReadOnly */, "right");

  top_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMRectReadOnly */, "top");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMRectReadOnly */, "width");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DOMRectReadOnly */, "y");
}

class BlinkDOMStringList {
  static final instance = new BlinkDOMStringList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMStringList */, "length");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringList */, "__getter__", [__arg_0]);

  contains_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringList */, "contains", []);

  contains_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringList */, "contains", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringList */, "item", [__arg_0]);
}

class BlinkDOMStringMap {
  static final instance = new BlinkDOMStringMap();

  $__delete___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringMap */, "__delete__", [__arg_0]);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringMap */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DOMStringMap */, "__setter__", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringMap */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMStringMap */, "item", [__arg_0]);
}

class BlinkDOMTokenList {
  static final instance = new BlinkDOMTokenList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMTokenList */, "length");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DOMTokenList */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DOMTokenList */, "value", __arg_0);

  add_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "add", [__arg_0]);

  contains_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "contains", []);

  contains_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "contains", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "item", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "remove", [__arg_0]);

  supports_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "supports", []);

  supports_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "supports", [__arg_0]);

  toggle_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "toggle", []);

  toggle_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "toggle", [__arg_0]);

  toggle_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* DOMTokenList */, "toggle", [__arg_0, __arg_1]);
}

class BlinkDataTransfer {
  static final instance = new BlinkDataTransfer();

  dropEffect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransfer */, "dropEffect");

  dropEffect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DataTransfer */, "dropEffect", __arg_0);

  effectAllowed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransfer */, "effectAllowed");

  effectAllowed_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* DataTransfer */, "effectAllowed", __arg_0);

  files_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransfer */, "files");

  items_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransfer */, "items");

  types_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransfer */, "types");

  clearData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "clearData", []);

  clearData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "clearData", [__arg_0]);

  getData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "getData", []);

  getData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "getData", [__arg_0]);

  setData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "setData", []);

  setData_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "setData", [__arg_0]);

  setData_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "setData", [__arg_0, __arg_1]);

  setDragImage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransfer */, "setDragImage", [__arg_0]);

  setDragImage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DataTransfer */, "setDragImage", [__arg_0, __arg_1]);

  setDragImage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DataTransfer */,
          "setDragImage", [__arg_0, __arg_1, __arg_2]);
}

class BlinkDataTransferItem {
  static final instance = new BlinkDataTransferItem();

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransferItem */, "kind");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransferItem */, "type");

  getAsFile_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItem */, "getAsFile", []);

  getAsString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItem */, "getAsString", []);

  getAsString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItem */, "getAsString", [__arg_0]);

  webkitGetAsEntry_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItem */, "webkitGetAsEntry", []);
}

class BlinkDataTransferItemList {
  static final instance = new BlinkDataTransferItemList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DataTransferItemList */, "length");

  add_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "add", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "clear", []);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "item", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DataTransferItemList */, "remove", [__arg_0]);
}

class BlinkDataView extends BlinkArrayBufferView {
  static final instance = new BlinkDataView();
}

class BlinkDatabase {
  static final instance = new BlinkDatabase();

  version_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Database */, "version");

  changeVersion_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Database */, "changeVersion", []);

  changeVersion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Database */, "changeVersion", [__arg_0]);

  changeVersion_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Database */, "changeVersion", [__arg_0, __arg_1]);

  changeVersion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Database */, "changeVersion", [__arg_0, __arg_1, __arg_2]);

  changeVersion_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* Database */,
          "changeVersion", [__arg_0, __arg_1, __arg_2, __arg_3]);

  changeVersion_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* Database */,
          "changeVersion", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readTransaction_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Database */, "readTransaction", []);

  readTransaction_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Database */, "readTransaction", [__arg_0]);

  readTransaction_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Database */, "readTransaction", [__arg_0, __arg_1]);

  readTransaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Database */, "readTransaction", [__arg_0, __arg_1, __arg_2]);

  transaction_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Database */, "transaction", []);

  transaction_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Database */, "transaction", [__arg_0]);

  transaction_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Database */, "transaction", [__arg_0, __arg_1]);

  transaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Database */, "transaction", [__arg_0, __arg_1, __arg_2]);
}

class BlinkDatabaseCallback {
  static final instance = new BlinkDatabaseCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DatabaseCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DatabaseCallback */, "handleEvent", [__arg_0]);
}

class BlinkDedicatedWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkDedicatedWorkerGlobalScope();

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DedicatedWorkerGlobalScope */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* DedicatedWorkerGlobalScope */, "onmessage", __arg_0);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DedicatedWorkerGlobalScope */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "postMessage",
          [__arg_0, __arg_1]);

  webkitRequestFileSystem_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystem", []);

  webkitRequestFileSystem_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0]);

  webkitRequestFileSystem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0, __arg_1]);

  webkitRequestFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0, __arg_1, __arg_2]);

  webkitRequestFileSystem_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  webkitRequestFileSystemSync_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystemSync", []);

  webkitRequestFileSystemSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystemSync",
          [__arg_0]);

  webkitRequestFileSystemSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitRequestFileSystemSync",
          [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemSyncURL_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemSyncURL", []);

  webkitResolveLocalFileSystemSyncURL_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemSyncURL",
          [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL", []);

  webkitResolveLocalFileSystemURL_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL",
          [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL",
          [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemURL_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DedicatedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL",
          [__arg_0, __arg_1, __arg_2]);
}

class BlinkDelayNode extends BlinkAudioNode {
  static final instance = new BlinkDelayNode();

  delayTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DelayNode */, "delayTime");
}

class BlinkDeprecatedStorageInfo {
  static final instance = new BlinkDeprecatedStorageInfo();

  queryUsageAndQuota_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DeprecatedStorageInfo */, "queryUsageAndQuota", []);

  queryUsageAndQuota_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeprecatedStorageInfo */, "queryUsageAndQuota", [__arg_0]);

  queryUsageAndQuota_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */,
          "queryUsageAndQuota", [__arg_0, __arg_1]);

  queryUsageAndQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */,
          "queryUsageAndQuota", [__arg_0, __arg_1, __arg_2]);

  requestQuota_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DeprecatedStorageInfo */, "requestQuota", []);

  requestQuota_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DeprecatedStorageInfo */, "requestQuota", [__arg_0]);

  requestQuota_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */,
          "requestQuota", [__arg_0, __arg_1]);

  requestQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */,
          "requestQuota", [__arg_0, __arg_1, __arg_2]);

  requestQuota_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageInfo */,
          "requestQuota", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkDeprecatedStorageQuota {
  static final instance = new BlinkDeprecatedStorageQuota();

  queryUsageAndQuota_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DeprecatedStorageQuota */, "queryUsageAndQuota", []);

  queryUsageAndQuota_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeprecatedStorageQuota */, "queryUsageAndQuota", [__arg_0]);

  queryUsageAndQuota_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */,
          "queryUsageAndQuota", [__arg_0, __arg_1]);

  requestQuota_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DeprecatedStorageQuota */, "requestQuota", []);

  requestQuota_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeprecatedStorageQuota */, "requestQuota", [__arg_0]);

  requestQuota_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */,
          "requestQuota", [__arg_0, __arg_1]);

  requestQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DeprecatedStorageQuota */,
          "requestQuota", [__arg_0, __arg_1, __arg_2]);
}

class BlinkDeviceAcceleration {
  static final instance = new BlinkDeviceAcceleration();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceAcceleration */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceAcceleration */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceAcceleration */, "z");
}

class BlinkDeviceLightEvent extends BlinkEvent {
  static final instance = new BlinkDeviceLightEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DeviceLightEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("DeviceLightEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("DeviceLightEvent", [__arg_0, __arg_1]);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceLightEvent */, "value");
}

class BlinkDeviceMotionEvent extends BlinkEvent {
  static final instance = new BlinkDeviceMotionEvent();

  acceleration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceMotionEvent */, "acceleration");

  accelerationIncludingGravity_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* DeviceMotionEvent */, "accelerationIncludingGravity");

  interval_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceMotionEvent */, "interval");

  rotationRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceMotionEvent */, "rotationRate");

  initDeviceMotionEvent_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeviceMotionEvent */,
          "initDeviceMotionEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  initDeviceMotionEvent_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeviceMotionEvent */,
          "initDeviceMotionEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initDeviceMotionEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeviceMotionEvent */,
          "initDeviceMotionEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);
}

class BlinkDeviceOrientationEvent extends BlinkEvent {
  static final instance = new BlinkDeviceOrientationEvent();

  absolute_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceOrientationEvent */, "absolute");

  alpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceOrientationEvent */, "alpha");

  beta_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceOrientationEvent */, "beta");

  gamma_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceOrientationEvent */, "gamma");

  initDeviceOrientationEvent_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeviceOrientationEvent */,
          "initDeviceOrientationEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  initDeviceOrientationEvent_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeviceOrientationEvent */,
          "initDeviceOrientationEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initDeviceOrientationEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2,
          __arg_3, __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DeviceOrientationEvent */,
          "initDeviceOrientationEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);
}

class BlinkDeviceRotationRate {
  static final instance = new BlinkDeviceRotationRate();

  alpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceRotationRate */, "alpha");

  beta_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceRotationRate */, "beta");

  gamma_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DeviceRotationRate */, "gamma");
}

class BlinkDirectoryEntry extends BlinkEntry {
  static final instance = new BlinkDirectoryEntry();

  createReader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "createReader", []);

  getDirectory_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "getDirectory", []);

  getDirectory_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "getDirectory", [__arg_0]);

  getDirectory_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DirectoryEntry */, "getDirectory", [__arg_0, __arg_1]);

  getDirectory_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */,
          "getDirectory", [__arg_0, __arg_1, __arg_2]);

  getDirectory_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */,
          "getDirectory", [__arg_0, __arg_1, __arg_2, __arg_3]);

  getFile_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "getFile", []);

  getFile_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "getFile", [__arg_0]);

  getFile_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "getFile", [__arg_0, __arg_1]);

  getFile_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DirectoryEntry */, "getFile", [__arg_0, __arg_1, __arg_2]);

  getFile_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* DirectoryEntry */,
          "getFile", [__arg_0, __arg_1, __arg_2, __arg_3]);

  removeRecursively_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "removeRecursively", []);

  removeRecursively_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntry */, "removeRecursively", [__arg_0]);

  removeRecursively_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DirectoryEntry */, "removeRecursively", [__arg_0, __arg_1]);
}

class BlinkDirectoryEntrySync extends BlinkEntrySync {
  static final instance = new BlinkDirectoryEntrySync();

  createReader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntrySync */, "createReader", []);

  getDirectory_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntrySync */, "getDirectory", []);

  getDirectory_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntrySync */, "getDirectory", [__arg_0]);

  getDirectory_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DirectoryEntrySync */, "getDirectory", [__arg_0, __arg_1]);

  getFile_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntrySync */, "getFile", []);

  getFile_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntrySync */, "getFile", [__arg_0]);

  getFile_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DirectoryEntrySync */, "getFile", [__arg_0, __arg_1]);

  removeRecursively_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryEntrySync */, "removeRecursively", []);
}

class BlinkDirectoryReader {
  static final instance = new BlinkDirectoryReader();

  readEntries_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryReader */, "readEntries", []);

  readEntries_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryReader */, "readEntries", [__arg_0]);

  readEntries_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* DirectoryReader */, "readEntries", [__arg_0, __arg_1]);
}

class BlinkDirectoryReaderSync {
  static final instance = new BlinkDirectoryReaderSync();

  readEntries_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* DirectoryReaderSync */, "readEntries", []);
}

class BlinkDocument extends BlinkNode {
  static final instance = new BlinkDocument();

  URL_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "URL");

  activeElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "activeElement");

  anchors_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "anchors");

  applets_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "applets");

  body_Getter_(mthis) native "Blink_Getter_Document_body";

  body_Setter_(mthis, __arg_0) native "Blink_Setter_Document_body";

  characterSet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "characterSet");

  charset_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "charset");

  compatMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "compatMode");

  contentType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "contentType");

  cookie_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "cookie");

  cookie_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "cookie", __arg_0);

  currentScript_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "currentScript");

  defaultView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "defaultView");

  designMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "designMode");

  designMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "designMode", __arg_0);

  dir_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "dir");

  dir_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "dir", __arg_0);

  doctype_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "doctype");

  documentElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "documentElement");

  documentURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "documentURI");

  domain_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "domain");

  domain_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "domain", __arg_0);

  embeds_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "embeds");

  fonts_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "fonts");

  forms_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "forms");

  fullscreenElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "fullscreenElement");

  fullscreenEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "fullscreenEnabled");

  head_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "head");

  hidden_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "hidden");

  images_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "images");

  implementation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "implementation");

  inputEncoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "inputEncoding");

  lastModified_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "lastModified");

  links_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "links");

  location_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "location");

  onbeforecopy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onbeforecopy");

  onbeforecopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onbeforecopy", __arg_0);

  onbeforecut_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onbeforecut");

  onbeforecut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onbeforecut", __arg_0);

  onbeforepaste_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onbeforepaste");

  onbeforepaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onbeforepaste", __arg_0);

  oncopy_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "oncopy");

  oncopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "oncopy", __arg_0);

  oncut_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "oncut");

  oncut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "oncut", __arg_0);

  onfullscreenchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onfullscreenchange");

  onfullscreenchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onfullscreenchange", __arg_0);

  onfullscreenerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onfullscreenerror");

  onfullscreenerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onfullscreenerror", __arg_0);

  onpaste_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "onpaste");

  onpaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "onpaste", __arg_0);

  onpointerlockchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onpointerlockchange");

  onpointerlockchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onpointerlockchange", __arg_0);

  onpointerlockerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onpointerlockerror");

  onpointerlockerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onpointerlockerror", __arg_0);

  onreadystatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onreadystatechange");

  onreadystatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onreadystatechange", __arg_0);

  onsearch_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "onsearch");

  onsearch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "onsearch", __arg_0);

  onsecuritypolicyviolation_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "onsecuritypolicyviolation");

  onsecuritypolicyviolation_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* Document */, "onsecuritypolicyviolation", __arg_0);

  onselectionchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onselectionchange");

  onselectionchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onselectionchange", __arg_0);

  onselectstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "onselectstart");

  onselectstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onselectstart", __arg_0);

  onwebkitfullscreenchange_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "onwebkitfullscreenchange");

  onwebkitfullscreenchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* Document */, "onwebkitfullscreenchange", __arg_0);

  onwebkitfullscreenerror_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "onwebkitfullscreenerror");

  onwebkitfullscreenerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "onwebkitfullscreenerror", __arg_0);

  onwheel_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "onwheel");

  onwheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "onwheel", __arg_0);

  origin_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "origin");

  plugins_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "plugins");

  pointerLockElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "pointerLockElement");

  preferredStylesheetSet_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "preferredStylesheetSet");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "readyState");

  referrer_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "referrer");

  rootElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "rootElement");

  scripts_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "scripts");

  scrollingElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "scrollingElement");

  selectedStylesheetSet_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "selectedStylesheetSet");

  selectedStylesheetSet_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "selectedStylesheetSet", __arg_0);

  styleSheets_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "styleSheets");

  suborigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "suborigin");

  timeline_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "timeline");

  title_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Document */, "title");

  title_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "title", __arg_0);

  visibilityState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "visibilityState");

  webkitCurrentFullScreenElement_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "webkitCurrentFullScreenElement");

  webkitFullscreenElement_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "webkitFullscreenElement");

  webkitFullscreenEnabled_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "webkitFullscreenEnabled");

  webkitHidden_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "webkitHidden");

  webkitIsFullScreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "webkitIsFullScreen");

  webkitVisibilityState_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Document */, "webkitVisibilityState");

  xmlEncoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "xmlEncoding");

  xmlStandalone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "xmlStandalone");

  xmlStandalone_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Document */, "xmlStandalone", __arg_0);

  xmlVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Document */, "xmlVersion");

  xmlVersion_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Document */, "xmlVersion", __arg_0);

  adoptNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "adoptNode", []);

  adoptNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "adoptNode", [__arg_0]);

  caretRangeFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "caretRangeFromPoint", []);

  caretRangeFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "caretRangeFromPoint", [__arg_0]);

  caretRangeFromPoint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "caretRangeFromPoint", [__arg_0, __arg_1]);

  close_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */, "close", []);

  createAttribute_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createAttribute", []);

  createAttribute_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createAttribute", [__arg_0]);

  createAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createAttributeNS", []);

  createAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createAttributeNS", [__arg_0]);

  createAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createAttributeNS", [__arg_0, __arg_1]);

  createCDATASection_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createCDATASection", []);

  createCDATASection_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createCDATASection", [__arg_0]);

  createComment_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createComment", []);

  createComment_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createComment", [__arg_0]);

  createDocumentFragment_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createDocumentFragment", []);

  createElement_Callback_0_(mthis)
      native "Blink_Operation_0_Document_createElement";

  createElement_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Document_createElement"; /* __arg_0 */

  createElement_Callback_2_(mthis, __arg_0, __arg_1)
      native "Blink_Operation_Document_createElement"; /* __arg_0, __arg_1 */

  createElementNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createElementNS", []);

  createElementNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createElementNS", [__arg_0]);

  createElementNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createElementNS", [__arg_0, __arg_1]);

  createElementNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createElementNS", [__arg_0, __arg_1, __arg_2]);

  createEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createEvent", []);

  createEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createEvent", [__arg_0]);

  createExpression_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createExpression", []);

  createExpression_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createExpression", [__arg_0]);

  createExpression_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createExpression", [__arg_0, __arg_1]);

  createNSResolver_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createNSResolver", []);

  createNSResolver_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createNSResolver", [__arg_0]);

  createNodeIterator_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createNodeIterator", []);

  createNodeIterator_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createNodeIterator", [__arg_0]);

  createNodeIterator_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createNodeIterator", [__arg_0, __arg_1]);

  createNodeIterator_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */,
          "createNodeIterator", [__arg_0, __arg_1, __arg_2]);

  createProcessingInstruction_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createProcessingInstruction", []);

  createProcessingInstruction_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createProcessingInstruction", [__arg_0]);

  createProcessingInstruction_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */,
          "createProcessingInstruction", [__arg_0, __arg_1]);

  createRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createRange", []);

  createTextNode_Callback_0_(mthis)
      native "Blink_Operation_0_Document_createTextNode";

  createTextNode_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Document_createTextNode"; /* __arg_0 */

  createTouch_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createTouch", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  createTouch_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Document */, "createTouch", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  createTouch_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Document */, "createTouch", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10
      ]);

  createTouchList_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createTouchList", []);

  createTouchList_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createTouchList", [__arg_0]);

  createTreeWalker_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createTreeWalker", []);

  createTreeWalker_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "createTreeWalker", [__arg_0]);

  createTreeWalker_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "createTreeWalker", [__arg_0, __arg_1]);

  createTreeWalker_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */,
          "createTreeWalker", [__arg_0, __arg_1, __arg_2]);

  elementFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "elementFromPoint", []);

  elementFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "elementFromPoint", [__arg_0]);

  elementFromPoint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "elementFromPoint", [__arg_0, __arg_1]);

  elementsFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "elementsFromPoint", []);

  elementsFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "elementsFromPoint", [__arg_0]);

  elementsFromPoint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "elementsFromPoint", [__arg_0, __arg_1]);

  evaluate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "evaluate", [__arg_0]);

  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "evaluate", [__arg_0, __arg_1]);

  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "evaluate", [__arg_0, __arg_1, __arg_2]);

  evaluate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */, "evaluate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  evaluate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */, "evaluate",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  execCommand_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "execCommand", []);

  execCommand_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "execCommand", [__arg_0]);

  execCommand_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Document */, "execCommand", [__arg_0, __arg_1]);

  execCommand_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "execCommand", [__arg_0, __arg_1, __arg_2]);

  exitFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "exitFullscreen", []);

  exitPointerLock_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "exitPointerLock", []);

  getElementsByClassName_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "getElementsByClassName", []);

  getElementsByClassName_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "getElementsByClassName", [__arg_0]);

  getElementsByName_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "getElementsByName", []);

  getElementsByName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "getElementsByName", [__arg_0]);

  getElementsByTagName_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "getElementsByTagName", []);

  getElementsByTagName_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Document */, "getElementsByTagName", [__arg_0]);

  getElementsByTagNameNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "getElementsByTagNameNS", []);

  getElementsByTagNameNS_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "getElementsByTagNameNS", [__arg_0]);

  getElementsByTagNameNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "getElementsByTagNameNS", [__arg_0, __arg_1]);

  getSelection_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "getSelection", []);

  hasFocus_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "hasFocus", []);

  importNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "importNode", []);

  importNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "importNode", [__arg_0]);

  importNode_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "importNode", [__arg_0, __arg_1]);

  open_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */, "open", []);

  queryCommandEnabled_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandEnabled", []);

  queryCommandEnabled_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandEnabled", [__arg_0]);

  queryCommandIndeterm_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandIndeterm", []);

  queryCommandIndeterm_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Document */, "queryCommandIndeterm", [__arg_0]);

  queryCommandState_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandState", []);

  queryCommandState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandState", [__arg_0]);

  queryCommandSupported_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandSupported", []);

  queryCommandSupported_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Document */, "queryCommandSupported", [__arg_0]);

  queryCommandValue_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandValue", []);

  queryCommandValue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "queryCommandValue", [__arg_0]);

  transformDocumentToTreeView_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "transformDocumentToTreeView", []);

  transformDocumentToTreeView_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Document */, "transformDocumentToTreeView", [__arg_0]);

  webkitCancelFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "webkitCancelFullScreen", []);

  webkitExitFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "webkitExitFullscreen", []);

  write_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Document */, "write", []);

  write_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "write", [__arg_0]);

  writeln_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "writeln", []);

  writeln_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Document */, "writeln", [__arg_0]);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchstart", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_lastElementChild";

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NonElementParentNode */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NonElementParentNode */, "getElementById", [__arg_0]);
}

class BlinkDocumentFragment extends BlinkNode {
  static final instance = new BlinkDocumentFragment();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("DocumentFragment");

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_lastElementChild";

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NonElementParentNode */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NonElementParentNode */, "getElementById", [__arg_0]);
}

class BlinkDocumentType extends BlinkNode {
  static final instance = new BlinkDocumentType();

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* DocumentType */, "name");

  publicId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DocumentType */, "publicId");

  systemId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DocumentType */, "systemId");

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";
}

class BlinkDynamicsCompressorNode extends BlinkAudioNode {
  static final instance = new BlinkDynamicsCompressorNode();

  attack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DynamicsCompressorNode */, "attack");

  knee_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DynamicsCompressorNode */, "knee");

  ratio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DynamicsCompressorNode */, "ratio");

  reduction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DynamicsCompressorNode */, "reduction");

  release_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DynamicsCompressorNode */, "release");

  threshold_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* DynamicsCompressorNode */, "threshold");
}

class BlinkEXTBlendMinMax {
  static final instance = new BlinkEXTBlendMinMax();
}

class BlinkEXTColorBufferFloat {
  static final instance = new BlinkEXTColorBufferFloat();
}

class BlinkEXTDisjointTimerQuery {
  static final instance = new BlinkEXTDisjointTimerQuery();

  beginQueryEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "beginQueryEXT", []);

  beginQueryEXT_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* EXTDisjointTimerQuery */, "beginQueryEXT", [__arg_0]);

  beginQueryEXT_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* EXTDisjointTimerQuery */,
          "beginQueryEXT", [__arg_0, __arg_1]);

  createQueryEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "createQueryEXT", []);

  deleteQueryEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "deleteQueryEXT", []);

  deleteQueryEXT_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* EXTDisjointTimerQuery */, "deleteQueryEXT", [__arg_0]);

  endQueryEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "endQueryEXT", []);

  endQueryEXT_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "endQueryEXT", [__arg_0]);

  getQueryEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "getQueryEXT", []);

  getQueryEXT_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "getQueryEXT", [__arg_0]);

  getQueryEXT_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* EXTDisjointTimerQuery */, "getQueryEXT", [__arg_0, __arg_1]);

  getQueryObjectEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "getQueryObjectEXT", []);

  getQueryObjectEXT_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* EXTDisjointTimerQuery */, "getQueryObjectEXT", [__arg_0]);

  getQueryObjectEXT_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* EXTDisjointTimerQuery */,
          "getQueryObjectEXT", [__arg_0, __arg_1]);

  isQueryEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "isQueryEXT", []);

  isQueryEXT_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "isQueryEXT", [__arg_0]);

  queryCounterEXT_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EXTDisjointTimerQuery */, "queryCounterEXT", []);

  queryCounterEXT_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* EXTDisjointTimerQuery */, "queryCounterEXT", [__arg_0]);

  queryCounterEXT_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* EXTDisjointTimerQuery */,
          "queryCounterEXT", [__arg_0, __arg_1]);
}

class BlinkEXTFragDepth {
  static final instance = new BlinkEXTFragDepth();
}

class BlinkEXTShaderTextureLOD {
  static final instance = new BlinkEXTShaderTextureLOD();
}

class BlinkEXTTextureFilterAnisotropic {
  static final instance = new BlinkEXTTextureFilterAnisotropic();
}

class BlinkEXTsRGB {
  static final instance = new BlinkEXTsRGB();
}

class BlinkEffectModel {
  static final instance = new BlinkEffectModel();
}

class BlinkElement extends BlinkNode {
  static final instance = new BlinkElement();

  assignedSlot_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "assignedSlot");

  attributes_Getter_(mthis) native "Blink_Getter_Element_attributes";

  classList_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "classList");

  className_Getter_(mthis) native "Blink_Getter_Element_className";

  className_Setter_(mthis, __arg_0) native "Blink_Setter_Element_className";

  clientHeight_Getter_(mthis) native "Blink_Getter_Element_clientHeight";

  clientLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "clientLeft");

  clientTop_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "clientTop");

  clientWidth_Getter_(mthis) native "Blink_Getter_Element_clientWidth";

  computedName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "computedName");

  computedRole_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "computedRole");

  id_Getter_(mthis) native "Blink_Getter_Element_id";

  id_Setter_(mthis, __arg_0) native "Blink_Setter_Element_id";

  innerHTML_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "innerHTML");

  innerHTML_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "innerHTML", __arg_0);

  localName_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "localName");

  namespaceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "namespaceURI");

  onbeforecopy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "onbeforecopy");

  onbeforecopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Element */, "onbeforecopy", __arg_0);

  onbeforecut_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "onbeforecut");

  onbeforecut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Element */, "onbeforecut", __arg_0);

  onbeforepaste_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "onbeforepaste");

  onbeforepaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Element */, "onbeforepaste", __arg_0);

  oncopy_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "oncopy");

  oncopy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "oncopy", __arg_0);

  oncut_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "oncut");

  oncut_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "oncut", __arg_0);

  onpaste_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "onpaste");

  onpaste_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "onpaste", __arg_0);

  onsearch_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "onsearch");

  onsearch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "onsearch", __arg_0);

  onselectstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "onselectstart");

  onselectstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Element */, "onselectstart", __arg_0);

  onwebkitfullscreenchange_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Element */, "onwebkitfullscreenchange");

  onwebkitfullscreenchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* Element */, "onwebkitfullscreenchange", __arg_0);

  onwebkitfullscreenerror_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Element */, "onwebkitfullscreenerror");

  onwebkitfullscreenerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Element */, "onwebkitfullscreenerror", __arg_0);

  onwheel_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "onwheel");

  onwheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "onwheel", __arg_0);

  outerHTML_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "outerHTML");

  outerHTML_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "outerHTML", __arg_0);

  prefix_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "prefix");

  scrollHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "scrollHeight");

  scrollLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "scrollLeft");

  scrollLeft_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "scrollLeft", __arg_0);

  scrollTop_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "scrollTop");

  scrollTop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "scrollTop", __arg_0);

  scrollWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "scrollWidth");

  shadowRoot_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Element */, "shadowRoot");

  slot_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Element */, "slot");

  slot_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Element */, "slot", __arg_0);

  tagName_Getter_(mthis) native "Blink_Getter_Element_tagName";

  animate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "animate", []);

  animate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "animate", [__arg_0]);

  animate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "animate", [__arg_0, __arg_1]);

  attachShadow_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "attachShadow", []);

  attachShadow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "attachShadow", [__arg_0]);

  closest_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "closest", []);

  closest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "closest", [__arg_0]);

  createShadowRoot_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "createShadowRoot", []);

  getAnimations_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getAnimations", []);

  getAttribute_Callback_0_(mthis)
      native "Blink_Operation_0_Element_getAttribute";

  getAttribute_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Element_getAttribute"; /* __arg_0 */

  getAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getAttributeNS", []);

  getAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getAttributeNS", [__arg_0]);

  getAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "getAttributeNS", [__arg_0, __arg_1]);

  getAttributeNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getAttributeNode", []);

  getAttributeNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getAttributeNode", [__arg_0]);

  getAttributeNodeNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getAttributeNodeNS", []);

  getAttributeNodeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getAttributeNodeNS", [__arg_0]);

  getAttributeNodeNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "getAttributeNodeNS", [__arg_0, __arg_1]);

  getBoundingClientRect_Callback_0_(mthis)
      native "Blink_Operation_0_Element_getBoundingClientRect";

  getClientRects_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getClientRects", []);

  getDestinationInsertionPoints_Callback_0_(mthis) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Element */, "getDestinationInsertionPoints", []);

  getElementsByClassName_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getElementsByClassName", []);

  getElementsByClassName_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Element */, "getElementsByClassName", [__arg_0]);

  getElementsByTagName_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getElementsByTagName", []);

  getElementsByTagName_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Element */, "getElementsByTagName", [__arg_0]);

  getElementsByTagNameNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "getElementsByTagNameNS", []);

  getElementsByTagNameNS_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Element */, "getElementsByTagNameNS", [__arg_0]);

  getElementsByTagNameNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "getElementsByTagNameNS", [__arg_0, __arg_1]);

  hasAttribute_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "hasAttribute", []);

  hasAttribute_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "hasAttribute", [__arg_0]);

  hasAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "hasAttributeNS", []);

  hasAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "hasAttributeNS", [__arg_0]);

  hasAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "hasAttributeNS", [__arg_0, __arg_1]);

  hasAttributes_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "hasAttributes", []);

  insertAdjacentElement_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "insertAdjacentElement", []);

  insertAdjacentElement_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Element */, "insertAdjacentElement", [__arg_0]);

  insertAdjacentElement_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "insertAdjacentElement", [__arg_0, __arg_1]);

  insertAdjacentHTML_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "insertAdjacentHTML", []);

  insertAdjacentHTML_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "insertAdjacentHTML", [__arg_0]);

  insertAdjacentHTML_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "insertAdjacentHTML", [__arg_0, __arg_1]);

  insertAdjacentText_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "insertAdjacentText", []);

  insertAdjacentText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "insertAdjacentText", [__arg_0]);

  insertAdjacentText_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "insertAdjacentText", [__arg_0, __arg_1]);

  matches_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "matches", []);

  matches_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "matches", [__arg_0]);

  removeAttribute_Callback_0_(mthis)
      native "Blink_Operation_0_Element_removeAttribute";

  removeAttribute_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Element_removeAttribute"; /* __arg_0 */

  removeAttributeNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "removeAttributeNS", []);

  removeAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "removeAttributeNS", [__arg_0]);

  removeAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "removeAttributeNS", [__arg_0, __arg_1]);

  removeAttributeNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "removeAttributeNode", []);

  removeAttributeNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "removeAttributeNode", [__arg_0]);

  requestFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "requestFullscreen", []);

  requestPointerLock_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "requestPointerLock", []);

  scroll_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Element */, "scroll", []);

  scroll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scroll", [__arg_0]);

  scroll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scroll", [__arg_0, __arg_1]);

  scrollBy_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollBy", []);

  scrollBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollBy", [__arg_0]);

  scrollBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollBy", [__arg_0, __arg_1]);

  scrollIntoView_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollIntoView", []);

  scrollIntoView_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollIntoView", [__arg_0]);

  scrollIntoViewIfNeeded_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollIntoViewIfNeeded", []);

  scrollIntoViewIfNeeded_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Element */, "scrollIntoViewIfNeeded", [__arg_0]);

  scrollTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollTo", []);

  scrollTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollTo", [__arg_0]);

  scrollTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "scrollTo", [__arg_0, __arg_1]);

  setApplyScroll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setApplyScroll", []);

  setApplyScroll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setApplyScroll", [__arg_0]);

  setApplyScroll_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "setApplyScroll", [__arg_0, __arg_1]);

  setAttribute_Callback_0_(mthis)
      native "Blink_Operation_0_Element_setAttribute";

  setAttribute_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Element_setAttribute"; /* __arg_0 */

  setAttribute_Callback_2_(mthis, __arg_0, __arg_1)
      native "Blink_Operation_Element_setAttribute"; /* __arg_0, __arg_1 */

  setAttributeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setAttributeNS", [__arg_0]);

  setAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "setAttributeNS", [__arg_0, __arg_1]);

  setAttributeNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "setAttributeNS", [__arg_0, __arg_1, __arg_2]);

  setAttributeNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setAttributeNode", []);

  setAttributeNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setAttributeNode", [__arg_0]);

  setAttributeNodeNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setAttributeNodeNS", []);

  setAttributeNodeNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setAttributeNodeNS", [__arg_0]);

  setDistributeScroll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setDistributeScroll", []);

  setDistributeScroll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "setDistributeScroll", [__arg_0]);

  setDistributeScroll_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Element */, "setDistributeScroll", [__arg_0, __arg_1]);

  webkitMatchesSelector_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "webkitMatchesSelector", []);

  webkitMatchesSelector_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Element */, "webkitMatchesSelector", [__arg_0]);

  webkitRequestFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Element */, "webkitRequestFullScreen", []);

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_lastElementChild";

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);

  remove_Callback_0_(mthis) native "Blink_Operation_0_ChildNode_remove";

  nextElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NonDocumentTypeChildNode */, "nextElementSibling");

  previousElementSibling_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* NonDocumentTypeChildNode */, "previousElementSibling");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchstart", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);
}

class BlinkEntriesCallback {
  static final instance = new BlinkEntriesCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntriesCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EntriesCallback */, "handleEvent", [__arg_0]);
}

class BlinkEntry {
  static final instance = new BlinkEntry();

  filesystem_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Entry */, "filesystem");

  fullPath_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Entry */, "fullPath");

  isDirectory_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Entry */, "isDirectory");

  isFile_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Entry */, "isFile");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Entry */, "name");

  copyTo_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Entry */, "copyTo", []);

  copyTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "copyTo", [__arg_0]);

  copyTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "copyTo", [__arg_0, __arg_1]);

  copyTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Entry */, "copyTo", [__arg_0, __arg_1, __arg_2]);

  copyTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Entry */, "copyTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  getMetadata_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "getMetadata", []);

  getMetadata_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "getMetadata", [__arg_0]);

  getMetadata_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Entry */, "getMetadata", [__arg_0, __arg_1]);

  getParent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "getParent", []);

  getParent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "getParent", [__arg_0]);

  getParent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "getParent", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Entry */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "moveTo", [__arg_0, __arg_1]);

  moveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Entry */, "moveTo", [__arg_0, __arg_1, __arg_2]);

  moveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Entry */, "moveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  remove_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Entry */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "remove", [__arg_0]);

  remove_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Entry */, "remove", [__arg_0, __arg_1]);

  toURL_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Entry */, "toURL", []);
}

class BlinkEntryCallback {
  static final instance = new BlinkEntryCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntryCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EntryCallback */, "handleEvent", [__arg_0]);
}

class BlinkEntrySync {
  static final instance = new BlinkEntrySync();

  filesystem_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EntrySync */, "filesystem");

  fullPath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EntrySync */, "fullPath");

  isDirectory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EntrySync */, "isDirectory");

  isFile_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* EntrySync */, "isFile");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* EntrySync */, "name");

  copyTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "copyTo", []);

  copyTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "copyTo", [__arg_0]);

  copyTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "copyTo", [__arg_0, __arg_1]);

  getMetadata_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "getMetadata", []);

  getParent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "getParent", []);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "moveTo", [__arg_0, __arg_1]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "remove", []);

  toURL_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EntrySync */, "toURL", []);
}

class BlinkErrorCallback {
  static final instance = new BlinkErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ErrorCallback */, "handleEvent", [__arg_0]);
}

class BlinkErrorEvent extends BlinkEvent {
  static final instance = new BlinkErrorEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("ErrorEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("ErrorEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("ErrorEvent", [__arg_0, __arg_1]);

  colno_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "colno");

  error_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "error");

  filename_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ErrorEvent */, "filename");

  lineno_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ErrorEvent */, "lineno");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ErrorEvent */, "message");
}

class BlinkEvent {
  static final instance = new BlinkEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Event");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Event", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("Event", [__arg_0, __arg_1]);

  bubbles_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "bubbles");

  cancelBubble_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Event */, "cancelBubble");

  cancelBubble_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Event */, "cancelBubble", __arg_0);

  cancelable_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "cancelable");

  currentTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Event */, "currentTarget");

  defaultPrevented_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Event */, "defaultPrevented");

  eventPhase_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "eventPhase");

  isTrusted_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "isTrusted");

  path_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "path");

  returnValue_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "returnValue");

  returnValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Event */, "returnValue", __arg_0);

  scoped_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "scoped");

  srcElement_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "srcElement");

  target_Getter_(mthis) native "Blink_Getter_Event_target";

  timeStamp_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "timeStamp");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Event */, "type");

  deepPath_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Event */, "deepPath", []);

  initEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Event */, "initEvent", [__arg_0]);

  initEvent_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Event */, "initEvent", [__arg_0, __arg_1]);

  initEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Event */, "initEvent", [__arg_0, __arg_1, __arg_2]);

  preventDefault_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Event */, "preventDefault", []);

  stopImmediatePropagation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Event */, "stopImmediatePropagation", []);

  stopPropagation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Event */, "stopPropagation", []);
}

class BlinkEventListener {
  static final instance = new BlinkEventListener();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EventListener */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EventListener */, "handleEvent", [__arg_0]);
}

class BlinkEventSource extends BlinkEventTarget {
  static final instance = new BlinkEventSource();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("EventSource");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("EventSource", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("EventSource", [__arg_0, __arg_1]);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EventSource */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* EventSource */, "onerror", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EventSource */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* EventSource */, "onmessage", __arg_0);

  onopen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EventSource */, "onopen");

  onopen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* EventSource */, "onopen", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EventSource */, "readyState");

  url_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* EventSource */, "url");

  withCredentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* EventSource */, "withCredentials");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EventSource */, "close", []);
}

class BlinkEventTarget {
  static final instance = new BlinkEventTarget();

  addEventListener_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EventTarget */, "addEventListener", []);

  addEventListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EventTarget */, "addEventListener", [__arg_0]);

  addEventListener_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* EventTarget */, "addEventListener", [__arg_0, __arg_1]);

  addEventListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* EventTarget */,
          "addEventListener", [__arg_0, __arg_1, __arg_2]);

  dispatchEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EventTarget */, "dispatchEvent", []);

  dispatchEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EventTarget */, "dispatchEvent", [__arg_0]);

  removeEventListener_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* EventTarget */, "removeEventListener", []);

  removeEventListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* EventTarget */, "removeEventListener", [__arg_0]);

  removeEventListener_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* EventTarget */, "removeEventListener", [__arg_0, __arg_1]);

  removeEventListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* EventTarget */,
          "removeEventListener", [__arg_0, __arg_1, __arg_2]);
}

class BlinkExtendableEvent extends BlinkEvent {
  static final instance = new BlinkExtendableEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("ExtendableEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("ExtendableEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("ExtendableEvent", [__arg_0, __arg_1]);

  waitUntil_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ExtendableEvent */, "waitUntil", []);

  waitUntil_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ExtendableEvent */, "waitUntil", [__arg_0]);
}

class BlinkExtendableMessageEvent extends BlinkExtendableEvent {
  static final instance = new BlinkExtendableMessageEvent();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ExtendableMessageEvent */, "data");

  lastEventId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ExtendableMessageEvent */, "lastEventId");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ExtendableMessageEvent */, "origin");

  ports_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ExtendableMessageEvent */, "ports");

  source_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ExtendableMessageEvent */, "source");
}

class BlinkFederatedCredential extends BlinkCredential {
  static final instance = new BlinkFederatedCredential();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("FederatedCredential");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("FederatedCredential", [__arg_0]);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FederatedCredential */, "protocol");

  provider_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FederatedCredential */, "provider");
}

class BlinkFetchEvent extends BlinkExtendableEvent {
  static final instance = new BlinkFetchEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("FetchEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("FetchEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("FetchEvent", [__arg_0, __arg_1]);

  clientId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FetchEvent */, "clientId");

  isReload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FetchEvent */, "isReload");

  request_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FetchEvent */, "request");

  respondWith_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FetchEvent */, "respondWith", []);

  respondWith_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FetchEvent */, "respondWith", [__arg_0]);
}

class BlinkFile extends BlinkBlob {
  static final instance = new BlinkFile();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("File");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("File", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("File", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("File", [__arg_0, __arg_1, __arg_2]);

  lastModified_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* File */, "lastModified");

  lastModifiedDate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* File */, "lastModifiedDate");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* File */, "name");

  webkitRelativePath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* File */, "webkitRelativePath");
}

class BlinkFileEntry extends BlinkEntry {
  static final instance = new BlinkFileEntry();

  createWriter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileEntry */, "createWriter", []);

  createWriter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileEntry */, "createWriter", [__arg_0]);

  createWriter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* FileEntry */, "createWriter", [__arg_0, __arg_1]);

  file_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* FileEntry */, "file", []);

  file_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileEntry */, "file", [__arg_0]);

  file_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FileEntry */, "file", [__arg_0, __arg_1]);
}

class BlinkFileEntrySync extends BlinkEntrySync {
  static final instance = new BlinkFileEntrySync();

  createWriter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileEntrySync */, "createWriter", []);

  file_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileEntrySync */, "file", []);
}

class BlinkFileError extends BlinkDOMError {
  static final instance = new BlinkFileError();

  code_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FileError */, "code");
}

class BlinkFileList {
  static final instance = new BlinkFileList();

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FileList */, "length");

  item_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* FileList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileList */, "item", [__arg_0]);
}

class BlinkFileReader extends BlinkEventTarget {
  static final instance = new BlinkFileReader();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("FileReader");

  error_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "error");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileReader */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileReader */, "onabort", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileReader */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileReader */, "onerror", __arg_0);

  onload_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileReader */, "onload", __arg_0);

  onloadend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileReader */, "onloadend");

  onloadend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileReader */, "onloadend", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileReader */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* FileReader */, "onloadstart", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileReader */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileReader */, "onprogress", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileReader */, "readyState");

  result_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FileReader */, "result");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "abort", []);

  readAsArrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsArrayBuffer", []);

  readAsArrayBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsArrayBuffer", [__arg_0]);

  readAsBinaryString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsBinaryString", []);

  readAsBinaryString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsBinaryString", [__arg_0]);

  readAsDataURL_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsDataURL", []);

  readAsDataURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsDataURL", [__arg_0]);

  readAsText_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsText", []);

  readAsText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsText", [__arg_0]);

  readAsText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReader */, "readAsText", [__arg_0, __arg_1]);
}

class BlinkFileReaderSync {
  static final instance = new BlinkFileReaderSync();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("FileReaderSync");

  readAsArrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsArrayBuffer", []);

  readAsArrayBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsArrayBuffer", [__arg_0]);

  readAsBinaryString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsBinaryString", []);

  readAsBinaryString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsBinaryString", [__arg_0]);

  readAsDataURL_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsDataURL", []);

  readAsDataURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsDataURL", [__arg_0]);

  readAsText_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsText", []);

  readAsText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsText", [__arg_0]);

  readAsText_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FileReaderSync */, "readAsText", [__arg_0, __arg_1]);
}

class BlinkFileSystemCallback {
  static final instance = new BlinkFileSystemCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileSystemCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileSystemCallback */, "handleEvent", [__arg_0]);
}

class BlinkFileWriter extends BlinkEventTarget {
  static final instance = new BlinkFileWriter();

  error_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "error");

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FileWriter */, "length");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileWriter */, "onabort", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileWriter */, "onerror", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileWriter */, "onprogress", __arg_0);

  onwrite_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "onwrite");

  onwrite_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileWriter */, "onwrite", __arg_0);

  onwriteend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "onwriteend");

  onwriteend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FileWriter */, "onwriteend", __arg_0);

  onwritestart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "onwritestart");

  onwritestart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* FileWriter */, "onwritestart", __arg_0);

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "position");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriter */, "readyState");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriter */, "abort", []);

  seek_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriter */, "seek", []);

  seek_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriter */, "seek", [__arg_0]);

  truncate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriter */, "truncate", []);

  truncate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriter */, "truncate", [__arg_0]);

  write_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriter */, "write", []);

  write_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriter */, "write", [__arg_0]);
}

class BlinkFileWriterCallback {
  static final instance = new BlinkFileWriterCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterCallback */, "handleEvent", [__arg_0]);
}

class BlinkFileWriterSync {
  static final instance = new BlinkFileWriterSync();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriterSync */, "length");

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FileWriterSync */, "position");

  seek_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterSync */, "seek", []);

  seek_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterSync */, "seek", [__arg_0]);

  truncate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterSync */, "truncate", []);

  truncate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterSync */, "truncate", [__arg_0]);

  write_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterSync */, "write", []);

  write_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FileWriterSync */, "write", [__arg_0]);
}

class BlinkFloat32Array extends BlinkArrayBufferView {
  static final instance = new BlinkFloat32Array();
}

class BlinkFloat64Array extends BlinkArrayBufferView {
  static final instance = new BlinkFloat64Array();
}

class BlinkFocusEvent extends BlinkUIEvent {
  static final instance = new BlinkFocusEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("FocusEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("FocusEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("FocusEvent", [__arg_0, __arg_1]);

  relatedTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FocusEvent */, "relatedTarget");
}

class BlinkFontFace {
  static final instance = new BlinkFontFace();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("FontFace");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("FontFace", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("FontFace", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("FontFace", [__arg_0, __arg_1, __arg_2]);

  family_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "family");

  family_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FontFace */, "family", __arg_0);

  featureSettings_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FontFace */, "featureSettings");

  featureSettings_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* FontFace */, "featureSettings", __arg_0);

  loaded_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "loaded");

  status_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "status");

  stretch_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "stretch");

  stretch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FontFace */, "stretch", __arg_0);

  style_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "style");

  style_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FontFace */, "style", __arg_0);

  unicodeRange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FontFace */, "unicodeRange");

  unicodeRange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* FontFace */, "unicodeRange", __arg_0);

  variant_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "variant");

  variant_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FontFace */, "variant", __arg_0);

  weight_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFace */, "weight");

  weight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FontFace */, "weight", __arg_0);

  load_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* FontFace */, "load", []);
}

class BlinkFontFaceSet extends BlinkEventTarget {
  static final instance = new BlinkFontFaceSet();

  onloading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FontFaceSet */, "onloading");

  onloading_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* FontFaceSet */, "onloading", __arg_0);

  onloadingdone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FontFaceSet */, "onloadingdone");

  onloadingdone_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* FontFaceSet */, "onloadingdone", __arg_0);

  onloadingerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FontFaceSet */, "onloadingerror");

  onloadingerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* FontFaceSet */, "onloadingerror", __arg_0);

  ready_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "ready");

  size_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* FontFaceSet */, "size");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FontFaceSet */, "status");

  add_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "add", [__arg_0]);

  check_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "check", []);

  check_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "check", [__arg_0]);

  check_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "check", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "clear", []);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "delete", [__arg_0]);

  forEach_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "forEach", []);

  forEach_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "forEach", [__arg_0]);

  forEach_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "forEach", [__arg_0, __arg_1]);

  has_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "has", [__arg_0]);

  load_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "load", []);

  load_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "load", [__arg_0]);

  load_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FontFaceSet */, "load", [__arg_0, __arg_1]);
}

class BlinkFontFaceSetLoadEvent extends BlinkEvent {
  static final instance = new BlinkFontFaceSetLoadEvent();

  fontfaces_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* FontFaceSetLoadEvent */, "fontfaces");
}

class BlinkFormData {
  static final instance = new BlinkFormData();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("FormData");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("FormData", [__arg_0]);

  append_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "append", [__arg_0]);

  append_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "append", [__arg_0, __arg_1]);

  append_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* FormData */, "append", [__arg_0, __arg_1, __arg_2]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "delete", [__arg_0]);

  get_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* FormData */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "getAll", [__arg_0]);

  has_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* FormData */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "has", [__arg_0]);

  set_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* FormData */, "set", []);

  set_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "set", [__arg_0]);

  set_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* FormData */, "set", [__arg_0, __arg_1]);

  set_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* FormData */, "set", [__arg_0, __arg_1, __arg_2]);
}

class BlinkFrameRequestCallback {
  static final instance = new BlinkFrameRequestCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* FrameRequestCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* FrameRequestCallback */, "handleEvent", [__arg_0]);
}

class BlinkGainNode extends BlinkAudioNode {
  static final instance = new BlinkGainNode();

  gain_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* GainNode */, "gain");
}

class BlinkGamepad {
  static final instance = new BlinkGamepad();

  axes_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "axes");

  buttons_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "buttons");

  connected_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "connected");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "id");

  index_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "index");

  mapping_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "mapping");

  timestamp_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Gamepad */, "timestamp");
}

class BlinkGamepadButton {
  static final instance = new BlinkGamepadButton();

  pressed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GamepadButton */, "pressed");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GamepadButton */, "value");
}

class BlinkGamepadEvent extends BlinkEvent {
  static final instance = new BlinkGamepadEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("GamepadEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("GamepadEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("GamepadEvent", [__arg_0, __arg_1]);

  gamepad_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GamepadEvent */, "gamepad");
}

class BlinkGamepadList {
  static final instance = new BlinkGamepadList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GamepadList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* GamepadList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* GamepadList */, "item", [__arg_0]);
}

class BlinkGeofencing {
  static final instance = new BlinkGeofencing();

  getRegisteredRegions_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Geofencing */, "getRegisteredRegions", []);

  registerRegion_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Geofencing */, "registerRegion", []);

  registerRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Geofencing */, "registerRegion", [__arg_0]);

  unregisterRegion_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Geofencing */, "unregisterRegion", []);

  unregisterRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Geofencing */, "unregisterRegion", [__arg_0]);
}

class BlinkGeofencingEvent extends BlinkEvent {
  static final instance = new BlinkGeofencingEvent();

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GeofencingEvent */, "id");

  region_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GeofencingEvent */, "region");
}

class BlinkGeofencingRegion {
  static final instance = new BlinkGeofencingRegion();

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GeofencingRegion */, "id");
}

class BlinkGeolocation {
  static final instance = new BlinkGeolocation();

  clearWatch_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Geolocation */, "clearWatch", []);

  clearWatch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Geolocation */, "clearWatch", [__arg_0]);

  getCurrentPosition_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Geolocation */, "getCurrentPosition", []);

  getCurrentPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Geolocation */, "getCurrentPosition", [__arg_0]);

  getCurrentPosition_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Geolocation */, "getCurrentPosition", [__arg_0, __arg_1]);

  getCurrentPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Geolocation */,
          "getCurrentPosition", [__arg_0, __arg_1, __arg_2]);

  watchPosition_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Geolocation */, "watchPosition", []);

  watchPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Geolocation */, "watchPosition", [__arg_0]);

  watchPosition_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Geolocation */, "watchPosition", [__arg_0, __arg_1]);

  watchPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Geolocation */,
          "watchPosition", [__arg_0, __arg_1, __arg_2]);
}

class BlinkGeoposition {
  static final instance = new BlinkGeoposition();

  coords_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Geoposition */, "coords");

  timestamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Geoposition */, "timestamp");
}

class BlinkGlobalEventHandlers {
  static final instance = new BlinkGlobalEventHandlers();

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchstart", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);
}

class BlinkHMDVRDevice extends BlinkVRDevice {
  static final instance = new BlinkHMDVRDevice();

  getEyeParameters_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HMDVRDevice */, "getEyeParameters", []);

  getEyeParameters_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HMDVRDevice */, "getEyeParameters", [__arg_0]);

  setFieldOfView_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HMDVRDevice */, "setFieldOfView", []);

  setFieldOfView_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HMDVRDevice */, "setFieldOfView", [__arg_0]);

  setFieldOfView_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HMDVRDevice */, "setFieldOfView", [__arg_0, __arg_1]);
}

class BlinkHTMLAllCollection {
  static final instance = new BlinkHTMLAllCollection();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAllCollection */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLAllCollection */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLAllCollection */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLAllCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLAllCollection */, "namedItem", [__arg_0]);
}

class BlinkHTMLAnchorElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAnchorElement();

  charset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "charset");

  charset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "charset", __arg_0);

  coords_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "coords");

  coords_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "coords", __arg_0);

  download_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "download");

  download_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "download", __arg_0);

  hreflang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "hreflang");

  hreflang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "hreflang", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "name", __arg_0);

  ping_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "ping");

  ping_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "ping", __arg_0);

  referrerpolicy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "referrerpolicy");

  referrerpolicy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLAnchorElement */, "referrerpolicy", __arg_0);

  rel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "rel");

  rel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "rel", __arg_0);

  rev_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "rev");

  rev_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "rev", __arg_0);

  shape_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "shape");

  shape_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "shape", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "target", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "text", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAnchorElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAnchorElement */, "type", __arg_0);

  hash_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLUtils */, "toString", []);
}

class BlinkHTMLAreaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAreaElement();

  alt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAreaElement */, "alt");

  alt_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAreaElement */, "alt", __arg_0);

  coords_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAreaElement */, "coords");

  coords_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAreaElement */, "coords", __arg_0);

  noHref_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAreaElement */, "noHref");

  noHref_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAreaElement */, "noHref", __arg_0);

  ping_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAreaElement */, "ping");

  ping_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAreaElement */, "ping", __arg_0);

  referrerpolicy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAreaElement */, "referrerpolicy");

  referrerpolicy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLAreaElement */, "referrerpolicy", __arg_0);

  shape_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAreaElement */, "shape");

  shape_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAreaElement */, "shape", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLAreaElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLAreaElement */, "target", __arg_0);

  hash_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLUtils */, "toString", []);
}

class BlinkHTMLAudioElement extends BlinkHTMLMediaElement {
  static final instance = new BlinkHTMLAudioElement();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Audio");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Audio", [__arg_0]);
}

class BlinkHTMLBRElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBRElement();

  clear_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBRElement */, "clear");

  clear_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBRElement */, "clear", __arg_0);
}

class BlinkHTMLBaseElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBaseElement();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBaseElement */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBaseElement */, "href", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBaseElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBaseElement */, "target", __arg_0);
}

class BlinkHTMLBodyElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBodyElement();

  aLink_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "aLink");

  aLink_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "aLink", __arg_0);

  background_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "background");

  background_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "background", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "bgColor", __arg_0);

  link_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "link");

  link_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "link", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "onblur", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "onfocus", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "onload", __arg_0);

  onorientationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "onorientationchange");

  onorientationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLBodyElement */, "onorientationchange", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "onscroll", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "text", __arg_0);

  vLink_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLBodyElement */, "vLink");

  vLink_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLBodyElement */, "vLink", __arg_0);

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onunload", __arg_0);
}

class BlinkHTMLButtonElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLButtonElement();

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "autofocus", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "form");

  formAction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "formAction");

  formAction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "formAction", __arg_0);

  formEnctype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "formEnctype");

  formEnctype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLButtonElement */, "formEnctype", __arg_0);

  formMethod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "formMethod");

  formMethod_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "formMethod", __arg_0);

  formNoValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "formNoValidate");

  formNoValidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLButtonElement */, "formNoValidate", __arg_0);

  formTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "formTarget");

  formTarget_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "formTarget", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "labels");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "type", __arg_0);

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLButtonElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLButtonElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLButtonElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLButtonElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLButtonElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLButtonElement */, "setCustomValidity", [__arg_0]);
}

class BlinkHTMLCanvasElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLCanvasElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLCanvasElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLCanvasElement */, "height", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLCanvasElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLCanvasElement */, "width", __arg_0);

  captureStream_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "captureStream", []);

  captureStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "captureStream", [__arg_0]);

  getContext_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "getContext", []);

  getContext_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "getContext", [__arg_0]);

  getContext_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLCanvasElement */, "getContext", [__arg_0, __arg_1]);

  toBlob_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "toBlob", []);

  toBlob_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "toBlob", [__arg_0]);

  toBlob_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "toBlob", [__arg_0, __arg_1]);

  toBlob_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLCanvasElement */, "toBlob", [__arg_0, __arg_1, __arg_2]);

  toDataURL_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "toDataURL", []);

  toDataURL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCanvasElement */, "toDataURL", [__arg_0]);

  toDataURL_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLCanvasElement */, "toDataURL", [__arg_0, __arg_1]);
}

class BlinkHTMLCollection {
  static final instance = new BlinkHTMLCollection();

  length_Getter_(mthis) native "Blink_Getter_HTMLCollection_length";

  item_Callback_0_(mthis) native "Blink_Operation_0_HTMLCollection_item";

  item_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_HTMLCollection_item"; /* __arg_0 */

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLCollection */, "namedItem", [__arg_0]);
}

class BlinkHTMLContentElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLContentElement();

  select_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLContentElement */, "select");

  select_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLContentElement */, "select", __arg_0);

  getDistributedNodes_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLContentElement */, "getDistributedNodes", []);
}

class BlinkHTMLDListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDListElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDListElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDListElement */, "compact", __arg_0);
}

class BlinkHTMLDataListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDataListElement();

  options_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDataListElement */, "options");
}

class BlinkHTMLDetailsElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDetailsElement();

  open_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDetailsElement */, "open");

  open_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDetailsElement */, "open", __arg_0);
}

class BlinkHTMLDialogElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDialogElement();

  open_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDialogElement */, "open");

  open_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDialogElement */, "open", __arg_0);

  returnValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDialogElement */, "returnValue");

  returnValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLDialogElement */, "returnValue", __arg_0);

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLDialogElement */, "close", []);

  close_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLDialogElement */, "close", [__arg_0]);

  show_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLDialogElement */, "show", []);

  showModal_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLDialogElement */, "showModal", []);
}

class BlinkHTMLDirectoryElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDirectoryElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDirectoryElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDirectoryElement */, "compact", __arg_0);
}

class BlinkHTMLDivElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDivElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDivElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDivElement */, "align", __arg_0);
}

class BlinkHTMLDocument extends BlinkDocument {
  static final instance = new BlinkHTMLDocument();

  alinkColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDocument */, "alinkColor");

  alinkColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDocument */, "alinkColor", __arg_0);

  all_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* HTMLDocument */, "all");

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDocument */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDocument */, "bgColor", __arg_0);

  fgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDocument */, "fgColor");

  fgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDocument */, "fgColor", __arg_0);

  linkColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDocument */, "linkColor");

  linkColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDocument */, "linkColor", __arg_0);

  vlinkColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLDocument */, "vlinkColor");

  vlinkColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLDocument */, "vlinkColor", __arg_0);

  captureEvents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLDocument */, "captureEvents", []);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLDocument */, "clear", []);

  releaseEvents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLDocument */, "releaseEvents", []);
}

class BlinkHTMLElement extends BlinkElement {
  static final instance = new BlinkHTMLElement();

  accessKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "accessKey");

  accessKey_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "accessKey", __arg_0);

  contentEditable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "contentEditable");

  contentEditable_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLElement */, "contentEditable", __arg_0);

  contextMenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "contextMenu");

  contextMenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLElement */, "contextMenu", __arg_0);

  dataset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "dataset");

  dir_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "dir");

  dir_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "dir", __arg_0);

  draggable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "draggable");

  draggable_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "draggable", __arg_0);

  hidden_Getter_(mthis) native "Blink_Getter_HTMLElement_hidden";

  hidden_Setter_(mthis, __arg_0) native "Blink_Setter_HTMLElement_hidden";

  innerText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "innerText");

  innerText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "innerText", __arg_0);

  isContentEditable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "isContentEditable");

  lang_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "lang");

  lang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "lang", __arg_0);

  offsetHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "offsetHeight");

  offsetLeft_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "offsetLeft");

  offsetParent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "offsetParent");

  offsetTop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "offsetTop");

  offsetWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "offsetWidth");

  outerText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "outerText");

  outerText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "outerText", __arg_0);

  spellcheck_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "spellcheck");

  spellcheck_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "spellcheck", __arg_0);

  style_Getter_(mthis) native "Blink_Getter_HTMLElement_style";

  tabIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "tabIndex");

  tabIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "tabIndex", __arg_0);

  title_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* HTMLElement */, "title");

  title_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "title", __arg_0);

  translate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "translate");

  translate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLElement */, "translate", __arg_0);

  webkitdropzone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLElement */, "webkitdropzone");

  webkitdropzone_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLElement */, "webkitdropzone", __arg_0);

  blur_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLElement */, "blur", []);

  click_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLElement */, "click", []);

  focus_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLElement */, "focus", []);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchstart", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);
}

class BlinkHTMLEmbedElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLEmbedElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLEmbedElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLEmbedElement */, "align", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLEmbedElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLEmbedElement */, "height", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLEmbedElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLEmbedElement */, "name", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLEmbedElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLEmbedElement */, "src", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLEmbedElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLEmbedElement */, "type", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLEmbedElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLEmbedElement */, "width", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLEmbedElement */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLEmbedElement */, "__setter__", [__arg_0, __arg_1]);

  getSVGDocument_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLEmbedElement */, "getSVGDocument", []);
}

class BlinkHTMLFieldSetElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFieldSetElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFieldSetElement */, "disabled", __arg_0);

  elements_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "elements");

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "form");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFieldSetElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "validity");

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFieldSetElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFieldSetElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFieldSetElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFieldSetElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLFieldSetElement */, "setCustomValidity", [__arg_0]);
}

class BlinkHTMLFontElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFontElement();

  color_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFontElement */, "color");

  color_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFontElement */, "color", __arg_0);

  face_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFontElement */, "face");

  face_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFontElement */, "face", __arg_0);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFontElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFontElement */, "size", __arg_0);
}

class BlinkHTMLFormControlsCollection extends BlinkHTMLCollection {
  static final instance = new BlinkHTMLFormControlsCollection();

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormControlsCollection */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormControlsCollection */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormControlsCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLFormControlsCollection */, "namedItem", [__arg_0]);
}

class BlinkHTMLFormElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFormElement();

  acceptCharset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "acceptCharset");

  acceptCharset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLFormElement */, "acceptCharset", __arg_0);

  action_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "action");

  action_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFormElement */, "action", __arg_0);

  autocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "autocomplete");

  autocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLFormElement */, "autocomplete", __arg_0);

  elements_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "elements");

  encoding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "encoding");

  encoding_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFormElement */, "encoding", __arg_0);

  enctype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "enctype");

  enctype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFormElement */, "enctype", __arg_0);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "length");

  method_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "method");

  method_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFormElement */, "method", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFormElement */, "name", __arg_0);

  noValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "noValidate");

  noValidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFormElement */, "noValidate", __arg_0);

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFormElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFormElement */, "target", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "__getter__", [__arg_0]);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "checkValidity", []);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "item", [__arg_0]);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "reportValidity", []);

  requestAutocomplete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "requestAutocomplete", []);

  requestAutocomplete_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLFormElement */, "requestAutocomplete", [__arg_0]);

  reset_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "reset", []);

  submit_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFormElement */, "submit", []);
}

class BlinkHTMLFrameElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFrameElement();

  contentDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "contentDocument");

  contentWindow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "contentWindow");

  frameBorder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "frameBorder");

  frameBorder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLFrameElement */, "frameBorder", __arg_0);

  longDesc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "longDesc");

  longDesc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameElement */, "longDesc", __arg_0);

  marginHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "marginHeight");

  marginHeight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLFrameElement */, "marginHeight", __arg_0);

  marginWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "marginWidth");

  marginWidth_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLFrameElement */, "marginWidth", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameElement */, "name", __arg_0);

  noResize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "noResize");

  noResize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameElement */, "noResize", __arg_0);

  scrolling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "scrolling");

  scrolling_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameElement */, "scrolling", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameElement */, "src", __arg_0);
}

class BlinkHTMLFrameSetElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFrameSetElement();

  cols_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "cols");

  cols_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "cols", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "onblur", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "onfocus", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "onload", __arg_0);

  onorientationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "onorientationchange");

  onorientationchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* HTMLFrameSetElement */, "onorientationchange", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "onscroll", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLFrameSetElement */, "rows");

  rows_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLFrameSetElement */, "rows", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLFrameSetElement */, "__getter__", [__arg_0]);

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onunload", __arg_0);
}

class BlinkHTMLHRElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHRElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLHRElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLHRElement */, "align", __arg_0);

  color_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLHRElement */, "color");

  color_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLHRElement */, "color", __arg_0);

  noShade_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLHRElement */, "noShade");

  noShade_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLHRElement */, "noShade", __arg_0);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLHRElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLHRElement */, "size", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLHRElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLHRElement */, "width", __arg_0);
}

class BlinkHTMLHeadElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHeadElement();
}

class BlinkHTMLHeadingElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHeadingElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLHeadingElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLHeadingElement */, "align", __arg_0);
}

class BlinkHTMLHtmlElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHtmlElement();

  version_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLHtmlElement */, "version");

  version_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLHtmlElement */, "version", __arg_0);
}

class BlinkHTMLIFrameElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLIFrameElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "align", __arg_0);

  allowFullscreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "allowFullscreen");

  allowFullscreen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLIFrameElement */, "allowFullscreen", __arg_0);

  contentDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "contentDocument");

  contentWindow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "contentWindow");

  frameBorder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "frameBorder");

  frameBorder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLIFrameElement */, "frameBorder", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "height", __arg_0);

  longDesc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "longDesc");

  longDesc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "longDesc", __arg_0);

  marginHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "marginHeight");

  marginHeight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLIFrameElement */, "marginHeight", __arg_0);

  marginWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "marginWidth");

  marginWidth_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLIFrameElement */, "marginWidth", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "name", __arg_0);

  referrerpolicy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "referrerpolicy");

  referrerpolicy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLIFrameElement */, "referrerpolicy", __arg_0);

  sandbox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "sandbox");

  scrolling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "scrolling");

  scrolling_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "scrolling", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "src", __arg_0);

  srcdoc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "srcdoc");

  srcdoc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "srcdoc", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLIFrameElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLIFrameElement */, "width", __arg_0);

  getSVGDocument_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLIFrameElement */, "getSVGDocument", []);
}

class BlinkHTMLImageElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLImageElement();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Image");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Image", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("Image", [__arg_0, __arg_1]);

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "align", __arg_0);

  alt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "alt");

  alt_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "alt", __arg_0);

  border_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "border");

  border_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "border", __arg_0);

  complete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "complete");

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLImageElement */, "crossOrigin", __arg_0);

  currentSrc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "currentSrc");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "height", __arg_0);

  hspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "hspace");

  hspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "hspace", __arg_0);

  isMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "isMap");

  isMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "isMap", __arg_0);

  longDesc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "longDesc");

  longDesc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "longDesc", __arg_0);

  lowsrc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "lowsrc");

  lowsrc_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "lowsrc", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "name", __arg_0);

  naturalHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "naturalHeight");

  naturalWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "naturalWidth");

  referrerpolicy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "referrerpolicy");

  referrerpolicy_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLImageElement */, "referrerpolicy", __arg_0);

  sizes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "sizes");

  sizes_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "sizes", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "src", __arg_0);

  srcset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "srcset");

  srcset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "srcset", __arg_0);

  useMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "useMap");

  useMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "useMap", __arg_0);

  vspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "vspace");

  vspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "vspace", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLImageElement */, "width", __arg_0);

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLImageElement */, "y");
}

class BlinkHTMLInputElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLInputElement();

  accept_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "accept");

  accept_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "accept", __arg_0);

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "align", __arg_0);

  alt_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "alt");

  alt_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "alt", __arg_0);

  autocapitalize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "autocapitalize");

  autocapitalize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "autocapitalize", __arg_0);

  autocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "autocomplete");

  autocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "autocomplete", __arg_0);

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "autofocus", __arg_0);

  capture_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "capture");

  capture_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "capture", __arg_0);

  checked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "checked");

  checked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "checked", __arg_0);

  defaultChecked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "defaultChecked");

  defaultChecked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "defaultChecked", __arg_0);

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "defaultValue");

  defaultValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "defaultValue", __arg_0);

  dirName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "dirName");

  dirName_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "dirName", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "disabled", __arg_0);

  files_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "files");

  files_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "files", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "form");

  formAction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "formAction");

  formAction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "formAction", __arg_0);

  formEnctype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "formEnctype");

  formEnctype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "formEnctype", __arg_0);

  formMethod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "formMethod");

  formMethod_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "formMethod", __arg_0);

  formNoValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "formNoValidate");

  formNoValidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "formNoValidate", __arg_0);

  formTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "formTarget");

  formTarget_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "formTarget", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "height", __arg_0);

  incremental_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "incremental");

  incremental_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "incremental", __arg_0);

  indeterminate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "indeterminate");

  indeterminate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "indeterminate", __arg_0);

  inputMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "inputMode");

  inputMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "inputMode", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "labels");

  list_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "list");

  max_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "max");

  max_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "max", __arg_0);

  maxLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "maxLength");

  maxLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "maxLength", __arg_0);

  min_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "min");

  min_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "min", __arg_0);

  minLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "minLength");

  minLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "minLength", __arg_0);

  multiple_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "multiple");

  multiple_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "multiple", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "name", __arg_0);

  pattern_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "pattern");

  pattern_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "pattern", __arg_0);

  placeholder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "placeholder");

  placeholder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "placeholder", __arg_0);

  readOnly_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "readOnly");

  readOnly_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "readOnly", __arg_0);

  required_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "required");

  required_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "required", __arg_0);

  selectionDirection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "selectionDirection");

  selectionDirection_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "selectionDirection", __arg_0);

  selectionEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "selectionEnd");

  selectionEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "selectionEnd", __arg_0);

  selectionStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "selectionStart");

  selectionStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "selectionStart", __arg_0);

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "size", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "src", __arg_0);

  step_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "step");

  step_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "step", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "type", __arg_0);

  useMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "useMap");

  useMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "useMap", __arg_0);

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "value", __arg_0);

  valueAsDate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "valueAsDate");

  valueAsDate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "valueAsDate", __arg_0);

  valueAsNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "valueAsNumber");

  valueAsNumber_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "valueAsNumber", __arg_0);

  webkitEntries_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "webkitEntries");

  webkitdirectory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "webkitdirectory");

  webkitdirectory_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLInputElement */, "webkitdirectory", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLInputElement */, "width", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLInputElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "reportValidity", []);

  select_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "select", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "setCustomValidity", [__arg_0]);

  setRangeText_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "setRangeText", []);

  setRangeText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "setRangeText", [__arg_0]);

  setRangeText_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLInputElement */, "setRangeText", [__arg_0, __arg_1]);

  setRangeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */,
          "setRangeText", [__arg_0, __arg_1, __arg_2]);

  setRangeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */,
          "setRangeText", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setSelectionRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "setSelectionRange", []);

  setSelectionRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "setSelectionRange", [__arg_0]);

  setSelectionRange_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */,
          "setSelectionRange", [__arg_0, __arg_1]);

  setSelectionRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLInputElement */,
          "setSelectionRange", [__arg_0, __arg_1, __arg_2]);

  stepDown_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "stepDown", []);

  stepDown_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "stepDown", [__arg_0]);

  stepUp_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "stepUp", []);

  stepUp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLInputElement */, "stepUp", [__arg_0]);
}

class BlinkHTMLKeygenElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLKeygenElement();

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLKeygenElement */, "autofocus", __arg_0);

  challenge_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "challenge");

  challenge_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLKeygenElement */, "challenge", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLKeygenElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "form");

  keytype_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "keytype");

  keytype_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLKeygenElement */, "keytype", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "labels");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLKeygenElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "validity");

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLKeygenElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLKeygenElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLKeygenElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLKeygenElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLKeygenElement */, "setCustomValidity", [__arg_0]);
}

class BlinkHTMLLIElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLIElement();

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLIElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLIElement */, "type", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLIElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLIElement */, "value", __arg_0);
}

class BlinkHTMLLabelElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLabelElement();

  control_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLabelElement */, "control");

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLabelElement */, "form");

  htmlFor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLabelElement */, "htmlFor");

  htmlFor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLabelElement */, "htmlFor", __arg_0);
}

class BlinkHTMLLegendElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLegendElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLegendElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLegendElement */, "align", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLegendElement */, "form");
}

class BlinkHTMLLinkElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLinkElement();

  as_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "as");

  as_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "as", __arg_0);

  charset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "charset");

  charset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "charset", __arg_0);

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLLinkElement */, "crossOrigin", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "disabled", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "href", __arg_0);

  hreflang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "hreflang");

  hreflang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "hreflang", __arg_0);

  import_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "import");

  integrity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "integrity");

  integrity_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "integrity", __arg_0);

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "media", __arg_0);

  rel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "rel");

  rel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "rel", __arg_0);

  relList_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "relList");

  rev_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "rev");

  rev_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "rev", __arg_0);

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "sheet");

  sizes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "sizes");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "target");

  target_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "target", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLLinkElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLLinkElement */, "type", __arg_0);
}

class BlinkHTMLMapElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMapElement();

  areas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMapElement */, "areas");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMapElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMapElement */, "name", __arg_0);
}

class BlinkHTMLMarqueeElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMarqueeElement();

  behavior_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "behavior");

  behavior_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "behavior", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "bgColor", __arg_0);

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "direction");

  direction_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "direction", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "height", __arg_0);

  hspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "hspace");

  hspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "hspace", __arg_0);

  loop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "loop");

  loop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "loop", __arg_0);

  scrollAmount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "scrollAmount");

  scrollAmount_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLMarqueeElement */, "scrollAmount", __arg_0);

  scrollDelay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "scrollDelay");

  scrollDelay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLMarqueeElement */, "scrollDelay", __arg_0);

  trueSpeed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "trueSpeed");

  trueSpeed_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "trueSpeed", __arg_0);

  vspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "vspace");

  vspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "vspace", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMarqueeElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMarqueeElement */, "width", __arg_0);

  attachedCallback_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMarqueeElement */, "attachedCallback", []);

  attributeChangedCallback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */,
          "attributeChangedCallback", [__arg_0]);

  attributeChangedCallback_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */,
          "attributeChangedCallback", [__arg_0, __arg_1]);

  attributeChangedCallback_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLMarqueeElement */,
          "attributeChangedCallback", [__arg_0, __arg_1, __arg_2]);

  createdCallback_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMarqueeElement */, "createdCallback", []);

  detachedCallback_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMarqueeElement */, "detachedCallback", []);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMarqueeElement */, "start", []);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMarqueeElement */, "stop", []);
}

class BlinkHTMLMediaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMediaElement();

  audioTracks_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "audioTracks");

  autoplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "autoplay");

  autoplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "autoplay", __arg_0);

  buffered_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "buffered");

  controls_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "controls");

  controls_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "controls", __arg_0);

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLMediaElement */, "crossOrigin", __arg_0);

  currentSrc_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "currentSrc");

  currentTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "currentTime");

  currentTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLMediaElement */, "currentTime", __arg_0);

  defaultMuted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "defaultMuted");

  defaultMuted_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLMediaElement */, "defaultMuted", __arg_0);

  defaultPlaybackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "defaultPlaybackRate");

  defaultPlaybackRate_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* HTMLMediaElement */, "defaultPlaybackRate", __arg_0);

  disableRemotePlayback_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* HTMLMediaElement */, "disableRemotePlayback");

  disableRemotePlayback_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* HTMLMediaElement */, "disableRemotePlayback", __arg_0);

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "duration");

  ended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "ended");

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "error");

  loop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "loop");

  loop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "loop", __arg_0);

  mediaKeys_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "mediaKeys");

  muted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "muted");

  muted_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "muted", __arg_0);

  networkState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "networkState");

  onencrypted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "onencrypted");

  onencrypted_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLMediaElement */, "onencrypted", __arg_0);

  paused_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "paused");

  playbackRate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "playbackRate");

  playbackRate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLMediaElement */, "playbackRate", __arg_0);

  played_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "played");

  preload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "preload");

  preload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "preload", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "readyState");

  seekable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "seekable");

  seeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "seeking");

  session_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "session");

  session_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "session", __arg_0);

  sinkId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "sinkId");

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "src", __arg_0);

  textTracks_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "textTracks");

  videoTracks_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "videoTracks");

  volume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMediaElement */, "volume");

  volume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMediaElement */, "volume", __arg_0);

  webkitAudioDecodedByteCount_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* HTMLMediaElement */, "webkitAudioDecodedByteCount");

  webkitVideoDecodedByteCount_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* HTMLMediaElement */, "webkitVideoDecodedByteCount");

  addTextTrack_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "addTextTrack", []);

  addTextTrack_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "addTextTrack", [__arg_0]);

  addTextTrack_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLMediaElement */, "addTextTrack", [__arg_0, __arg_1]);

  addTextTrack_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLMediaElement */,
          "addTextTrack", [__arg_0, __arg_1, __arg_2]);

  canPlayType_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "canPlayType", []);

  canPlayType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "canPlayType", [__arg_0]);

  canPlayType_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLMediaElement */, "canPlayType", [__arg_0, __arg_1]);

  captureStream_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "captureStream", []);

  load_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "load", []);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "pause", []);

  play_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "play", []);

  setMediaKeys_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "setMediaKeys", []);

  setMediaKeys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "setMediaKeys", [__arg_0]);

  setSinkId_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "setSinkId", []);

  setSinkId_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLMediaElement */, "setSinkId", [__arg_0]);
}

class BlinkHTMLMenuElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMenuElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuElement */, "compact", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuElement */, "label", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuElement */, "type", __arg_0);
}

class BlinkHTMLMenuItemElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMenuItemElement();

  checked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuItemElement */, "checked");

  checked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuItemElement */, "checked", __arg_0);

  default_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuItemElement */, "default");

  default_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuItemElement */, "default", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuItemElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuItemElement */, "disabled", __arg_0);

  icon_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuItemElement */, "icon");

  icon_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuItemElement */, "icon", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuItemElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuItemElement */, "label", __arg_0);

  radiogroup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuItemElement */, "radiogroup");

  radiogroup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuItemElement */, "radiogroup", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMenuItemElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMenuItemElement */, "type", __arg_0);
}

class BlinkHTMLMetaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMetaElement();

  content_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMetaElement */, "content");

  content_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMetaElement */, "content", __arg_0);

  httpEquiv_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMetaElement */, "httpEquiv");

  httpEquiv_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMetaElement */, "httpEquiv", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMetaElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMetaElement */, "name", __arg_0);

  scheme_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMetaElement */, "scheme");

  scheme_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMetaElement */, "scheme", __arg_0);
}

class BlinkHTMLMeterElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMeterElement();

  high_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMeterElement */, "high");

  high_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMeterElement */, "high", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMeterElement */, "labels");

  low_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMeterElement */, "low");

  low_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMeterElement */, "low", __arg_0);

  max_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMeterElement */, "max");

  max_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMeterElement */, "max", __arg_0);

  min_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMeterElement */, "min");

  min_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMeterElement */, "min", __arg_0);

  optimum_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMeterElement */, "optimum");

  optimum_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMeterElement */, "optimum", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLMeterElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLMeterElement */, "value", __arg_0);
}

class BlinkHTMLModElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLModElement();

  cite_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLModElement */, "cite");

  cite_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLModElement */, "cite", __arg_0);

  dateTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLModElement */, "dateTime");

  dateTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLModElement */, "dateTime", __arg_0);
}

class BlinkHTMLOListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOListElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOListElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOListElement */, "compact", __arg_0);

  reversed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOListElement */, "reversed");

  reversed_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOListElement */, "reversed", __arg_0);

  start_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOListElement */, "start");

  start_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOListElement */, "start", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOListElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOListElement */, "type", __arg_0);
}

class BlinkHTMLObjectElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLObjectElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "align", __arg_0);

  archive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "archive");

  archive_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "archive", __arg_0);

  border_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "border");

  border_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "border", __arg_0);

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "code");

  code_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "code", __arg_0);

  codeBase_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "codeBase");

  codeBase_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "codeBase", __arg_0);

  codeType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "codeType");

  codeType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "codeType", __arg_0);

  contentDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "contentDocument");

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "data");

  data_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "data", __arg_0);

  declare_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "declare");

  declare_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "declare", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "form");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "height", __arg_0);

  hspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "hspace");

  hspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "hspace", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "name", __arg_0);

  standby_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "standby");

  standby_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "standby", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "type", __arg_0);

  useMap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "useMap");

  useMap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "useMap", __arg_0);

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "validity");

  vspace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "vspace");

  vspace_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "vspace", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLObjectElement */, "width", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLObjectElement */, "willValidate");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLObjectElement */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLObjectElement */, "__setter__", [__arg_0, __arg_1]);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLObjectElement */, "checkValidity", []);

  getSVGDocument_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLObjectElement */, "getSVGDocument", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLObjectElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLObjectElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLObjectElement */, "setCustomValidity", [__arg_0]);
}

class BlinkHTMLOptGroupElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOptGroupElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptGroupElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptGroupElement */, "disabled", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptGroupElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptGroupElement */, "label", __arg_0);
}

class BlinkHTMLOptionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOptionElement();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Option");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Option", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("Option", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("Option", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException
          .callConstructor("Option", [__arg_0, __arg_1, __arg_2, __arg_3]);

  defaultSelected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "defaultSelected");

  defaultSelected_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLOptionElement */, "defaultSelected", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptionElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "form");

  index_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "index");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptionElement */, "label", __arg_0);

  selected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "selected");

  selected_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptionElement */, "selected", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptionElement */, "text", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptionElement */, "value", __arg_0);
}

class BlinkHTMLOptionsCollection extends BlinkHTMLCollection {
  static final instance = new BlinkHTMLOptionsCollection();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionsCollection */, "length");

  length_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOptionsCollection */, "length", __arg_0);

  selectedIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOptionsCollection */, "selectedIndex");

  selectedIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLOptionsCollection */, "selectedIndex", __arg_0);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLOptionsCollection */, "__setter__", [__arg_0, __arg_1]);

  add_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "add", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "namedItem", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOptionsCollection */, "remove", [__arg_0]);
}

class BlinkHTMLOutputElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOutputElement();

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "defaultValue");

  defaultValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLOutputElement */, "defaultValue", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "form");

  htmlFor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "htmlFor");

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "labels");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOutputElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLOutputElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLOutputElement */, "willValidate");

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOutputElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOutputElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLOutputElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLOutputElement */, "setCustomValidity", [__arg_0]);
}

class BlinkHTMLParagraphElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLParagraphElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLParagraphElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLParagraphElement */, "align", __arg_0);
}

class BlinkHTMLParamElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLParamElement();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLParamElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLParamElement */, "name", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLParamElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLParamElement */, "type", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLParamElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLParamElement */, "value", __arg_0);

  valueType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLParamElement */, "valueType");

  valueType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLParamElement */, "valueType", __arg_0);
}

class BlinkHTMLPictureElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLPictureElement();
}

class BlinkHTMLPreElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLPreElement();

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLPreElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLPreElement */, "width", __arg_0);
}

class BlinkHTMLProgressElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLProgressElement();

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLProgressElement */, "labels");

  max_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLProgressElement */, "max");

  max_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLProgressElement */, "max", __arg_0);

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLProgressElement */, "position");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLProgressElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLProgressElement */, "value", __arg_0);
}

class BlinkHTMLQuoteElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLQuoteElement();

  cite_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLQuoteElement */, "cite");

  cite_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLQuoteElement */, "cite", __arg_0);
}

class BlinkHTMLScriptElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLScriptElement();

  async_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "async");

  async_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "async", __arg_0);

  charset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "charset");

  charset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "charset", __arg_0);

  crossOrigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "crossOrigin");

  crossOrigin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLScriptElement */, "crossOrigin", __arg_0);

  defer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "defer");

  defer_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "defer", __arg_0);

  event_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "event");

  event_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "event", __arg_0);

  htmlFor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "htmlFor");

  htmlFor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "htmlFor", __arg_0);

  integrity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "integrity");

  integrity_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "integrity", __arg_0);

  nonce_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "nonce");

  nonce_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "nonce", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "src", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "text", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLScriptElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLScriptElement */, "type", __arg_0);
}

class BlinkHTMLSelectElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSelectElement();

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "autofocus", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "form");

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "labels");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "length");

  length_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "length", __arg_0);

  multiple_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "multiple");

  multiple_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "multiple", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "name", __arg_0);

  options_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "options");

  required_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "required");

  required_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "required", __arg_0);

  selectedIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "selectedIndex");

  selectedIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLSelectElement */, "selectedIndex", __arg_0);

  selectedOptions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "selectedOptions");

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "size", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSelectElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSelectElement */, "willValidate");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLSelectElement */, "__setter__", [__arg_0, __arg_1]);

  add_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "add", [__arg_0, __arg_1]);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "checkValidity", []);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "namedItem", [__arg_0]);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "reportValidity", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSelectElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLSelectElement */, "setCustomValidity", [__arg_0]);
}

class BlinkHTMLShadowElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLShadowElement();

  getDistributedNodes_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLShadowElement */, "getDistributedNodes", []);
}

class BlinkHTMLSlotElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSlotElement();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSlotElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSlotElement */, "name", __arg_0);

  getAssignedNodes_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSlotElement */, "getAssignedNodes", []);

  getAssignedNodes_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLSlotElement */, "getAssignedNodes", [__arg_0]);
}

class BlinkHTMLSourceElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSourceElement();

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSourceElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSourceElement */, "media", __arg_0);

  sizes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSourceElement */, "sizes");

  sizes_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSourceElement */, "sizes", __arg_0);

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSourceElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSourceElement */, "src", __arg_0);

  srcset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSourceElement */, "srcset");

  srcset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSourceElement */, "srcset", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLSourceElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLSourceElement */, "type", __arg_0);
}

class BlinkHTMLSpanElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSpanElement();
}

class BlinkHTMLStyleElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLStyleElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLStyleElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLStyleElement */, "disabled", __arg_0);

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLStyleElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLStyleElement */, "media", __arg_0);

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLStyleElement */, "sheet");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLStyleElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLStyleElement */, "type", __arg_0);
}

class BlinkHTMLTableCaptionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableCaptionElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCaptionElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCaptionElement */, "align", __arg_0);
}

class BlinkHTMLTableCellElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableCellElement();

  abbr_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "abbr");

  abbr_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "abbr", __arg_0);

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "align", __arg_0);

  axis_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "axis");

  axis_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "axis", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "bgColor", __arg_0);

  cellIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "cellIndex");

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "chOff", __arg_0);

  colSpan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "colSpan");

  colSpan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "colSpan", __arg_0);

  headers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "headers");

  headers_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "headers", __arg_0);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "height", __arg_0);

  noWrap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "noWrap");

  noWrap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "noWrap", __arg_0);

  rowSpan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "rowSpan");

  rowSpan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "rowSpan", __arg_0);

  scope_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "scope");

  scope_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "scope", __arg_0);

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "vAlign", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableCellElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableCellElement */, "width", __arg_0);
}

class BlinkHTMLTableColElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableColElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableColElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableColElement */, "align", __arg_0);

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableColElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableColElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableColElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableColElement */, "chOff", __arg_0);

  span_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableColElement */, "span");

  span_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableColElement */, "span", __arg_0);

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableColElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableColElement */, "vAlign", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableColElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableColElement */, "width", __arg_0);
}

class BlinkHTMLTableElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "align", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "bgColor", __arg_0);

  border_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "border");

  border_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "border", __arg_0);

  caption_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "caption");

  caption_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "caption", __arg_0);

  cellPadding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "cellPadding");

  cellPadding_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLTableElement */, "cellPadding", __arg_0);

  cellSpacing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "cellSpacing");

  cellSpacing_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLTableElement */, "cellSpacing", __arg_0);

  frame_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "frame");

  frame_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "frame", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "rows");

  rules_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "rules");

  rules_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "rules", __arg_0);

  summary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "summary");

  summary_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "summary", __arg_0);

  tBodies_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "tBodies");

  tFoot_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "tFoot");

  tFoot_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "tFoot", __arg_0);

  tHead_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "tHead");

  tHead_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "tHead", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableElement */, "width", __arg_0);

  createCaption_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "createCaption", []);

  createTBody_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "createTBody", []);

  createTFoot_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "createTFoot", []);

  createTHead_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "createTHead", []);

  deleteCaption_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "deleteCaption", []);

  deleteRow_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "deleteRow", []);

  deleteRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "deleteRow", [__arg_0]);

  deleteTFoot_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "deleteTFoot", []);

  deleteTHead_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "deleteTHead", []);

  insertRow_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "insertRow", []);

  insertRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableElement */, "insertRow", [__arg_0]);
}

class BlinkHTMLTableRowElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableRowElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableRowElement */, "align", __arg_0);

  bgColor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "bgColor");

  bgColor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableRowElement */, "bgColor", __arg_0);

  cells_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "cells");

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableRowElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableRowElement */, "chOff", __arg_0);

  rowIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "rowIndex");

  sectionRowIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "sectionRowIndex");

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableRowElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableRowElement */, "vAlign", __arg_0);

  deleteCell_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableRowElement */, "deleteCell", []);

  deleteCell_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableRowElement */, "deleteCell", [__arg_0]);

  insertCell_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableRowElement */, "insertCell", []);

  insertCell_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableRowElement */, "insertCell", [__arg_0]);
}

class BlinkHTMLTableSectionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableSectionElement();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableSectionElement */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableSectionElement */, "align", __arg_0);

  ch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableSectionElement */, "ch");

  ch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableSectionElement */, "ch", __arg_0);

  chOff_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableSectionElement */, "chOff");

  chOff_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableSectionElement */, "chOff", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableSectionElement */, "rows");

  vAlign_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTableSectionElement */, "vAlign");

  vAlign_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTableSectionElement */, "vAlign", __arg_0);

  deleteRow_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableSectionElement */, "deleteRow", []);

  deleteRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableSectionElement */, "deleteRow", [__arg_0]);

  insertRow_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableSectionElement */, "insertRow", []);

  insertRow_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTableSectionElement */, "insertRow", [__arg_0]);
}

class BlinkHTMLTemplateElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTemplateElement();

  content_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTemplateElement */, "content");
}

class BlinkHTMLTextAreaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTextAreaElement();

  autocapitalize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "autocapitalize");

  autocapitalize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLTextAreaElement */, "autocapitalize", __arg_0);

  autofocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "autofocus");

  autofocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "autofocus", __arg_0);

  cols_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "cols");

  cols_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "cols", __arg_0);

  defaultValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "defaultValue");

  defaultValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLTextAreaElement */, "defaultValue", __arg_0);

  dirName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "dirName");

  dirName_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "dirName", __arg_0);

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "disabled", __arg_0);

  form_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "form");

  inputMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "inputMode");

  inputMode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "inputMode", __arg_0);

  labels_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "labels");

  maxLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "maxLength");

  maxLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "maxLength", __arg_0);

  minLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "minLength");

  minLength_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "minLength", __arg_0);

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "name", __arg_0);

  placeholder_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "placeholder");

  placeholder_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLTextAreaElement */, "placeholder", __arg_0);

  readOnly_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "readOnly");

  readOnly_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "readOnly", __arg_0);

  required_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "required");

  required_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "required", __arg_0);

  rows_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "rows");

  rows_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "rows", __arg_0);

  selectionDirection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "selectionDirection");

  selectionDirection_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* HTMLTextAreaElement */, "selectionDirection", __arg_0);

  selectionEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "selectionEnd");

  selectionEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLTextAreaElement */, "selectionEnd", __arg_0);

  selectionStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "selectionStart");

  selectionStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* HTMLTextAreaElement */, "selectionStart", __arg_0);

  textLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "textLength");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "type");

  validationMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "validationMessage");

  validity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "validity");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "value", __arg_0);

  willValidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "willValidate");

  wrap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTextAreaElement */, "wrap");

  wrap_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTextAreaElement */, "wrap", __arg_0);

  checkValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTextAreaElement */, "checkValidity", []);

  reportValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTextAreaElement */, "reportValidity", []);

  select_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTextAreaElement */, "select", []);

  setCustomValidity_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTextAreaElement */, "setCustomValidity", []);

  setCustomValidity_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLTextAreaElement */, "setCustomValidity", [__arg_0]);

  setRangeText_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTextAreaElement */, "setRangeText", []);

  setRangeText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTextAreaElement */, "setRangeText", [__arg_0]);

  setRangeText_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLTextAreaElement */, "setRangeText", [__arg_0, __arg_1]);

  setRangeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */,
          "setRangeText", [__arg_0, __arg_1, __arg_2]);

  setRangeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */,
          "setRangeText", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setSelectionRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLTextAreaElement */, "setSelectionRange", []);

  setSelectionRange_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* HTMLTextAreaElement */, "setSelectionRange", [__arg_0]);

  setSelectionRange_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */,
          "setSelectionRange", [__arg_0, __arg_1]);

  setSelectionRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* HTMLTextAreaElement */,
          "setSelectionRange", [__arg_0, __arg_1, __arg_2]);
}

class BlinkHTMLTitleElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTitleElement();

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTitleElement */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTitleElement */, "text", __arg_0);
}

class BlinkHTMLTrackElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTrackElement();

  default_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTrackElement */, "default");

  default_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTrackElement */, "default", __arg_0);

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTrackElement */, "kind");

  kind_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTrackElement */, "kind", __arg_0);

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTrackElement */, "label");

  label_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTrackElement */, "label", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTrackElement */, "readyState");

  src_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTrackElement */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTrackElement */, "src", __arg_0);

  srclang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTrackElement */, "srclang");

  srclang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLTrackElement */, "srclang", __arg_0);

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLTrackElement */, "track");
}

class BlinkHTMLUListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLUListElement();

  compact_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLUListElement */, "compact");

  compact_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLUListElement */, "compact", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLUListElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLUListElement */, "type", __arg_0);
}

class BlinkHTMLUnknownElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLUnknownElement();
}

class BlinkHTMLVideoElement extends BlinkHTMLMediaElement {
  static final instance = new BlinkHTMLVideoElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLVideoElement */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLVideoElement */, "height", __arg_0);

  poster_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLVideoElement */, "poster");

  poster_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLVideoElement */, "poster", __arg_0);

  videoHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLVideoElement */, "videoHeight");

  videoWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLVideoElement */, "videoWidth");

  webkitDecodedFrameCount_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* HTMLVideoElement */, "webkitDecodedFrameCount");

  webkitDisplayingFullscreen_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* HTMLVideoElement */, "webkitDisplayingFullscreen");

  webkitDroppedFrameCount_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* HTMLVideoElement */, "webkitDroppedFrameCount");

  webkitSupportsFullscreen_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* HTMLVideoElement */, "webkitSupportsFullscreen");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HTMLVideoElement */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* HTMLVideoElement */, "width", __arg_0);

  getVideoPlaybackQuality_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLVideoElement */, "getVideoPlaybackQuality", []);

  webkitEnterFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLVideoElement */, "webkitEnterFullScreen", []);

  webkitEnterFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLVideoElement */, "webkitEnterFullscreen", []);

  webkitExitFullScreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLVideoElement */, "webkitExitFullScreen", []);

  webkitExitFullscreen_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* HTMLVideoElement */, "webkitExitFullscreen", []);
}

class BlinkHashChangeEvent extends BlinkEvent {
  static final instance = new BlinkHashChangeEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("HashChangeEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("HashChangeEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("HashChangeEvent", [__arg_0, __arg_1]);

  newURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HashChangeEvent */, "newURL");

  oldURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* HashChangeEvent */, "oldURL");
}

class BlinkHeaders {
  static final instance = new BlinkHeaders();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Headers");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Headers", [__arg_0]);
}

class BlinkHistory {
  static final instance = new BlinkHistory();

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* History */, "length");

  scrollRestoration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* History */, "scrollRestoration");

  scrollRestoration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* History */, "scrollRestoration", __arg_0);

  state_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* History */, "state");

  back_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* History */, "back", []);

  forward_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* History */, "forward", []);

  go_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* History */, "go", []);

  go_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* History */, "go", [__arg_0]);

  pushState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* History */, "pushState", [__arg_0]);

  pushState_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* History */, "pushState", [__arg_0, __arg_1]);

  pushState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* History */, "pushState", [__arg_0, __arg_1, __arg_2]);

  replaceState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* History */, "replaceState", [__arg_0]);

  replaceState_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* History */, "replaceState", [__arg_0, __arg_1]);

  replaceState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* History */, "replaceState", [__arg_0, __arg_1, __arg_2]);
}

class BlinkIDBCursor {
  static final instance = new BlinkIDBCursor();

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBCursor */, "direction");

  key_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBCursor */, "key");

  primaryKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBCursor */, "primaryKey");

  source_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBCursor */, "source");

  advance_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "advance", []);

  advance_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "advance", [__arg_0]);

  continue_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "continue", []);

  continue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "continue", [__arg_0]);

  continuePrimaryKey_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "continuePrimaryKey", []);

  continuePrimaryKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "continuePrimaryKey", [__arg_0]);

  continuePrimaryKey_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* IDBCursor */, "continuePrimaryKey", [__arg_0, __arg_1]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "delete", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "update", []);

  update_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBCursor */, "update", [__arg_0]);
}

class BlinkIDBCursorWithValue extends BlinkIDBCursor {
  static final instance = new BlinkIDBCursorWithValue();

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBCursorWithValue */, "value");
}

class BlinkIDBDatabase extends BlinkEventTarget {
  static final instance = new BlinkIDBDatabase();

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBDatabase */, "name");

  objectStoreNames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBDatabase */, "objectStoreNames");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBDatabase */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBDatabase */, "onabort", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBDatabase */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBDatabase */, "onclose", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBDatabase */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBDatabase */, "onerror", __arg_0);

  onversionchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBDatabase */, "onversionchange");

  onversionchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* IDBDatabase */, "onversionchange", __arg_0);

  version_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBDatabase */, "version");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBDatabase */, "close", []);

  createObjectStore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBDatabase */, "createObjectStore", []);

  createObjectStore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBDatabase */, "createObjectStore", [__arg_0]);

  createObjectStore_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* IDBDatabase */, "createObjectStore", [__arg_0, __arg_1]);

  deleteObjectStore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBDatabase */, "deleteObjectStore", []);

  deleteObjectStore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBDatabase */, "deleteObjectStore", [__arg_0]);

  transaction_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBDatabase */, "transaction", []);

  transaction_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBDatabase */, "transaction", [__arg_0]);

  transaction_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* IDBDatabase */, "transaction", [__arg_0, __arg_1]);
}

class BlinkIDBFactory {
  static final instance = new BlinkIDBFactory();

  cmp_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* IDBFactory */, "cmp", []);

  cmp_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "cmp", [__arg_0]);

  cmp_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "cmp", [__arg_0, __arg_1]);

  deleteDatabase_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "deleteDatabase", []);

  deleteDatabase_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "deleteDatabase", [__arg_0]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "open", [__arg_0]);

  open_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "open", [__arg_0, __arg_1]);

  webkitGetDatabaseNames_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBFactory */, "webkitGetDatabaseNames", []);
}

class BlinkIDBIndex {
  static final instance = new BlinkIDBIndex();

  keyPath_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "keyPath");

  multiEntry_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBIndex */, "multiEntry");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "name");

  objectStore_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBIndex */, "objectStore");

  unique_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBIndex */, "unique");

  count_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "count", []);

  count_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "count", [__arg_0]);

  get_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* IDBIndex */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getAll", [__arg_0]);

  getAll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getAll", [__arg_0, __arg_1]);

  getAllKeys_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getAllKeys", []);

  getAllKeys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getAllKeys", [__arg_0]);

  getAllKeys_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getAllKeys", [__arg_0, __arg_1]);

  getKey_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getKey", []);

  getKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "getKey", [__arg_0]);

  openCursor_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "openCursor", []);

  openCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "openCursor", [__arg_0]);

  openCursor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "openCursor", [__arg_0, __arg_1]);

  openKeyCursor_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "openKeyCursor", []);

  openKeyCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBIndex */, "openKeyCursor", [__arg_0]);

  openKeyCursor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* IDBIndex */, "openKeyCursor", [__arg_0, __arg_1]);
}

class BlinkIDBKeyRange {
  static final instance = new BlinkIDBKeyRange();

  lower_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBKeyRange */, "lower");

  lowerOpen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBKeyRange */, "lowerOpen");

  upper_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBKeyRange */, "upper");

  upperOpen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBKeyRange */, "upperOpen");

  bound_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "bound",
      []);

  bound_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "bound",
      [__arg_0]);

  bound_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "bound",
      [__arg_0, __arg_1]);

  bound_Callback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "IDBKeyRange") /* IDBKeyRange */,
          "bound",
          [__arg_0, __arg_1, __arg_2]);

  bound_Callback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "IDBKeyRange") /* IDBKeyRange */,
          "bound",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  lowerBound_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "lowerBound",
      []);

  lowerBound_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "lowerBound",
      [__arg_0]);

  lowerBound_Callback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "IDBKeyRange") /* IDBKeyRange */,
          "lowerBound",
          [__arg_0, __arg_1]);

  only_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "only",
      []);

  only_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "only",
      [__arg_0]);

  upperBound_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "upperBound",
      []);

  upperBound_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "IDBKeyRange") /* IDBKeyRange */,
      "upperBound",
      [__arg_0]);

  upperBound_Callback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "IDBKeyRange") /* IDBKeyRange */,
          "upperBound",
          [__arg_0, __arg_1]);
}

class BlinkIDBObjectStore {
  static final instance = new BlinkIDBObjectStore();

  autoIncrement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBObjectStore */, "autoIncrement");

  indexNames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBObjectStore */, "indexNames");

  keyPath_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBObjectStore */, "keyPath");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBObjectStore */, "name");

  transaction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBObjectStore */, "transaction");

  add_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "add", [__arg_0]);

  add_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "add", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "clear", []);

  count_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "count", []);

  count_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "count", [__arg_0]);

  createIndex_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "createIndex", []);

  createIndex_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "createIndex", [__arg_0]);

  createIndex_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* IDBObjectStore */, "createIndex", [__arg_0, __arg_1]);

  createIndex_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* IDBObjectStore */,
          "createIndex", [__arg_0, __arg_1, __arg_2]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "delete", [__arg_0]);

  deleteIndex_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "deleteIndex", []);

  deleteIndex_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "deleteIndex", [__arg_0]);

  get_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "getAll", [__arg_0]);

  getAll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "getAll", [__arg_0, __arg_1]);

  getAllKeys_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "getAllKeys", []);

  getAllKeys_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "getAllKeys", [__arg_0]);

  getAllKeys_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "getAllKeys", [__arg_0, __arg_1]);

  index_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "index", []);

  index_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "index", [__arg_0]);

  openCursor_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "openCursor", []);

  openCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "openCursor", [__arg_0]);

  openCursor_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "openCursor", [__arg_0, __arg_1]);

  openKeyCursor_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "openKeyCursor", []);

  openKeyCursor_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "openKeyCursor", [__arg_0]);

  openKeyCursor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* IDBObjectStore */, "openKeyCursor", [__arg_0, __arg_1]);

  put_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "put", []);

  put_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "put", [__arg_0]);

  put_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBObjectStore */, "put", [__arg_0, __arg_1]);
}

class BlinkIDBOpenDBRequest extends BlinkIDBRequest {
  static final instance = new BlinkIDBOpenDBRequest();

  onblocked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBOpenDBRequest */, "onblocked");

  onblocked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBOpenDBRequest */, "onblocked", __arg_0);

  onupgradeneeded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBOpenDBRequest */, "onupgradeneeded");

  onupgradeneeded_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* IDBOpenDBRequest */, "onupgradeneeded", __arg_0);
}

class BlinkIDBRequest extends BlinkEventTarget {
  static final instance = new BlinkIDBRequest();

  error_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "error");

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBRequest */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBRequest */, "onerror", __arg_0);

  onsuccess_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBRequest */, "onsuccess");

  onsuccess_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBRequest */, "onsuccess", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBRequest */, "readyState");

  result_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "result");

  source_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBRequest */, "source");

  transaction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBRequest */, "transaction");
}

class BlinkIDBTransaction extends BlinkEventTarget {
  static final instance = new BlinkIDBTransaction();

  db_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* IDBTransaction */, "db");

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBTransaction */, "error");

  mode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBTransaction */, "mode");

  objectStoreNames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBTransaction */, "objectStoreNames");

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBTransaction */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBTransaction */, "onabort", __arg_0);

  oncomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBTransaction */, "oncomplete");

  oncomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBTransaction */, "oncomplete", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBTransaction */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* IDBTransaction */, "onerror", __arg_0);

  abort_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBTransaction */, "abort", []);

  objectStore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBTransaction */, "objectStore", []);

  objectStore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IDBTransaction */, "objectStore", [__arg_0]);
}

class BlinkIDBVersionChangeEvent extends BlinkEvent {
  static final instance = new BlinkIDBVersionChangeEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("IDBVersionChangeEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("IDBVersionChangeEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("IDBVersionChangeEvent", [__arg_0, __arg_1]);

  dataLoss_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBVersionChangeEvent */, "dataLoss");

  dataLossMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBVersionChangeEvent */, "dataLossMessage");

  newVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBVersionChangeEvent */, "newVersion");

  oldVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IDBVersionChangeEvent */, "oldVersion");
}

class BlinkIIRFilterNode extends BlinkAudioNode {
  static final instance = new BlinkIIRFilterNode();

  getFrequencyResponse_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* IIRFilterNode */, "getFrequencyResponse", [__arg_0]);

  getFrequencyResponse_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* IIRFilterNode */,
          "getFrequencyResponse", [__arg_0, __arg_1]);

  getFrequencyResponse_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* IIRFilterNode */,
          "getFrequencyResponse", [__arg_0, __arg_1, __arg_2]);
}

class BlinkIdleDeadline {
  static final instance = new BlinkIdleDeadline();

  didTimeout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IdleDeadline */, "didTimeout");

  timeRemaining_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IdleDeadline */, "timeRemaining", []);
}

class BlinkIdleRequestCallback {
  static final instance = new BlinkIdleRequestCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IdleRequestCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IdleRequestCallback */, "handleEvent", [__arg_0]);
}

class BlinkImageBitmap {
  static final instance = new BlinkImageBitmap();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ImageBitmap */, "height");

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ImageBitmap */, "width");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ImageBitmap */, "close", []);
}

class BlinkImageBitmapRenderingContext {
  static final instance = new BlinkImageBitmapRenderingContext();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ImageBitmapRenderingContext */, "canvas");

  transferImageBitmap_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ImageBitmapRenderingContext */, "transferImageBitmap", []);

  transferImageBitmap_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ImageBitmapRenderingContext */,
          "transferImageBitmap",
          [__arg_0]);
}

class BlinkImageData {
  static final instance = new BlinkImageData();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("ImageData");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("ImageData", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("ImageData", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("ImageData", [__arg_0, __arg_1, __arg_2]);

  data_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ImageData */, "data");

  height_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ImageData */, "height");

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ImageData */, "width");
}

class BlinkInjectedScriptHost {
  static final instance = new BlinkInjectedScriptHost();

  inspect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* InjectedScriptHost */, "inspect", []);

  inspect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* InjectedScriptHost */, "inspect", [__arg_0]);

  inspect_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* InjectedScriptHost */, "inspect", [__arg_0, __arg_1]);
}

class BlinkInputDeviceCapabilities {
  static final instance = new BlinkInputDeviceCapabilities();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("InputDeviceCapabilities");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("InputDeviceCapabilities", [__arg_0]);

  firesTouchEvents_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* InputDeviceCapabilities */, "firesTouchEvents");
}

class BlinkInstallEvent extends BlinkExtendableEvent {
  static final instance = new BlinkInstallEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("InstallEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("InstallEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("InstallEvent", [__arg_0, __arg_1]);

  registerForeignFetchScopes_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* InstallEvent */, "registerForeignFetchScopes", []);

  registerForeignFetchScopes_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* InstallEvent */, "registerForeignFetchScopes", [__arg_0]);

  registerForeignFetchScopes_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* InstallEvent */,
          "registerForeignFetchScopes", [__arg_0, __arg_1]);
}

class BlinkInt16Array extends BlinkArrayBufferView {
  static final instance = new BlinkInt16Array();
}

class BlinkInt32Array extends BlinkArrayBufferView {
  static final instance = new BlinkInt32Array();
}

class BlinkInt8Array extends BlinkArrayBufferView {
  static final instance = new BlinkInt8Array();
}

class BlinkIntersectionObserver {
  static final instance = new BlinkIntersectionObserver();

  root_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserver */, "root");

  rootMargin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserver */, "rootMargin");

  thresholds_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserver */, "thresholds");

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IntersectionObserver */, "disconnect", []);

  observe_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IntersectionObserver */, "observe", []);

  observe_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IntersectionObserver */, "observe", [__arg_0]);

  takeRecords_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IntersectionObserver */, "takeRecords", []);

  unobserve_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* IntersectionObserver */, "unobserve", []);

  unobserve_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* IntersectionObserver */, "unobserve", [__arg_0]);
}

class BlinkIntersectionObserverEntry {
  static final instance = new BlinkIntersectionObserverEntry();

  boundingClientRect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserverEntry */, "boundingClientRect");

  intersectionRect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserverEntry */, "intersectionRect");

  rootBounds_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserverEntry */, "rootBounds");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserverEntry */, "target");

  time_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* IntersectionObserverEntry */, "time");
}

class BlinkIterator {
  static final instance = new BlinkIterator();

  next_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Iterator */, "next", []);

  next_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Iterator */, "next", [__arg_0]);
}

class BlinkKeyboardEvent extends BlinkUIEvent {
  static final instance = new BlinkKeyboardEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("KeyboardEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("KeyboardEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("KeyboardEvent", [__arg_0, __arg_1]);

  altKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "altKey");

  charCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "charCode");

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "code");

  ctrlKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "ctrlKey");

  key_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* KeyboardEvent */, "key");

  keyCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "keyCode");

  keyIdentifier_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "keyIdentifier");

  location_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "location");

  metaKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "metaKey");

  repeat_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "repeat");

  shiftKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "shiftKey");

  which_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeyboardEvent */, "which");

  getModifierState_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* KeyboardEvent */, "getModifierState", []);

  getModifierState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* KeyboardEvent */, "getModifierState", [__arg_0]);

  initKeyboardEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* KeyboardEvent */, "initKeyboardEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  initKeyboardEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* KeyboardEvent */, "initKeyboardEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  initKeyboardEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* KeyboardEvent */, "initKeyboardEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);
}

class BlinkKeyframeEffect extends BlinkAnimationEffectReadOnly {
  static final instance = new BlinkKeyframeEffect();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("KeyframeEffect");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("KeyframeEffect", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("KeyframeEffect", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("KeyframeEffect", [__arg_0, __arg_1, __arg_2]);
}

class BlinkKeywordValue extends BlinkStyleValue {
  static final instance = new BlinkKeywordValue();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("KeywordValue");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("KeywordValue", [__arg_0]);

  keywordValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* KeywordValue */, "keywordValue");
}

class BlinkLengthValue extends BlinkStyleValue {
  static final instance = new BlinkLengthValue();

  add_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "add", []);

  add_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "add", [__arg_0]);

  divide_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "divide", []);

  divide_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "divide", [__arg_0]);

  fromDictionary_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "LengthValue") /* LengthValue */,
      "fromDictionary",
      []);

  fromDictionary_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "LengthValue") /* LengthValue */,
      "fromDictionary",
      [__arg_0]);

  fromValue_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "LengthValue") /* LengthValue */,
      "fromValue",
      []);

  fromValue_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "LengthValue") /* LengthValue */,
      "fromValue",
      [__arg_0]);

  fromValue_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "LengthValue") /* LengthValue */,
          "fromValue",
          [__arg_0, __arg_1]);

  multiply_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "multiply", []);

  multiply_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "multiply", [__arg_0]);

  parse_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "LengthValue") /* LengthValue */,
      "parse",
      []);

  parse_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "LengthValue") /* LengthValue */,
      "parse",
      [__arg_0]);

  subtract_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "subtract", []);

  subtract_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* LengthValue */, "subtract", [__arg_0]);
}

class BlinkLocation {
  static final instance = new BlinkLocation();

  ancestorOrigins_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Location */, "ancestorOrigins");

  hash_Getter_(mthis) native "Blink_Getter_Location_hash";

  hash_Setter_(mthis, __arg_0) native "Blink_Setter_Location_hash";

  host_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Location */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Location */, "host", __arg_0);

  hostname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Location */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Location */, "hostname", __arg_0);

  href_Getter_(mthis) native "Blink_Getter_Location_href";

  href_Setter_(mthis, __arg_0) native "Blink_Setter_Location_href";

  origin_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Location */, "origin");

  pathname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Location */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Location */, "pathname", __arg_0);

  port_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Location */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Location */, "port", __arg_0);

  protocol_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Location */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Location */, "protocol", __arg_0);

  search_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Location */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Location */, "search", __arg_0);

  assign_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Location */, "assign", []);

  assign_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Location */, "assign", [__arg_0]);

  reload_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Location */, "reload", []);

  replace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Location */, "replace", []);

  replace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Location */, "replace", [__arg_0]);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Location */, "toString", []);

  valueOf_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Location */, "valueOf", []);
}

class BlinkMIDIAccess extends BlinkEventTarget {
  static final instance = new BlinkMIDIAccess();

  inputs_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MIDIAccess */, "inputs");

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIAccess */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* MIDIAccess */, "onstatechange", __arg_0);

  outputs_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIAccess */, "outputs");

  sysexEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIAccess */, "sysexEnabled");
}

class BlinkMIDIConnectionEvent extends BlinkEvent {
  static final instance = new BlinkMIDIConnectionEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MIDIConnectionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("MIDIConnectionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MIDIConnectionEvent", [__arg_0, __arg_1]);

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIConnectionEvent */, "port");
}

class BlinkMIDIInput extends BlinkMIDIPort {
  static final instance = new BlinkMIDIInput();

  onmidimessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIInput */, "onmidimessage");

  onmidimessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* MIDIInput */, "onmidimessage", __arg_0);
}

class BlinkMIDIInputMap {
  static final instance = new BlinkMIDIInputMap();

  size_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MIDIInputMap */, "size");
}

class BlinkMIDIMessageEvent extends BlinkEvent {
  static final instance = new BlinkMIDIMessageEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MIDIMessageEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("MIDIMessageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MIDIMessageEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIMessageEvent */, "data");

  receivedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIMessageEvent */, "receivedTime");
}

class BlinkMIDIOutput extends BlinkMIDIPort {
  static final instance = new BlinkMIDIOutput();

  send_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MIDIOutput */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MIDIOutput */, "send", [__arg_0]);

  send_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* MIDIOutput */, "send", [__arg_0, __arg_1]);
}

class BlinkMIDIOutputMap {
  static final instance = new BlinkMIDIOutputMap();

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIOutputMap */, "size");
}

class BlinkMIDIPort extends BlinkEventTarget {
  static final instance = new BlinkMIDIPort();

  connection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIPort */, "connection");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "id");

  manufacturer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIPort */, "manufacturer");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "name");

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MIDIPort */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* MIDIPort */, "onstatechange", __arg_0);

  state_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "state");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "type");

  version_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MIDIPort */, "version");

  close_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* MIDIPort */, "close", []);

  open_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* MIDIPort */, "open", []);
}

class BlinkMatrix extends BlinkTransformComponent {
  static final instance = new BlinkMatrix();

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException
          .callConstructor("Matrix", [__arg_0, __arg_1, __arg_2, __arg_3]);

  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callConstructor(
          "Matrix", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  constructorCallback_6_(
          __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callConstructor(
          "Matrix", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  constructorCallback_7_(
          __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callConstructor("Matrix",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  constructorCallback_8_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5,
          __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  constructorCallback_9_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5,
          __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  constructorCallback_10_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5,
          __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  constructorCallback_11_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5,
          __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10
      ]);

  constructorCallback_12_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5,
          __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11
      ]);

  constructorCallback_13_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5,
          __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12
      ]);

  constructorCallback_14_(
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11,
          __arg_12,
          __arg_13) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12,
        __arg_13
      ]);

  constructorCallback_15_(
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11,
          __arg_12,
          __arg_13,
          __arg_14) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12,
        __arg_13,
        __arg_14
      ]);

  constructorCallback_16_(
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11,
          __arg_12,
          __arg_13,
          __arg_14,
          __arg_15) =>
      Blink_JsNative_DomException.callConstructor("Matrix", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12,
        __arg_13,
        __arg_14,
        __arg_15
      ]);

  a_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "a");

  b_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "b");

  c_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "c");

  d_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "d");

  e_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "e");

  f_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "f");

  m11_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m11");

  m12_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m12");

  m13_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m13");

  m14_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m14");

  m21_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m21");

  m22_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m22");

  m23_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m23");

  m24_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m24");

  m31_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m31");

  m32_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m32");

  m33_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m33");

  m34_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m34");

  m41_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m41");

  m42_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m42");

  m43_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m43");

  m44_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Matrix */, "m44");
}

class BlinkMediaDeviceInfo {
  static final instance = new BlinkMediaDeviceInfo();

  deviceId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaDeviceInfo */, "deviceId");

  groupId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaDeviceInfo */, "groupId");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaDeviceInfo */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaDeviceInfo */, "label");
}

class BlinkMediaDevices {
  static final instance = new BlinkMediaDevices();

  enumerateDevices_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaDevices */, "enumerateDevices", []);

  getUserMedia_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaDevices */, "getUserMedia", []);

  getUserMedia_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaDevices */, "getUserMedia", [__arg_0]);
}

class BlinkMediaElementAudioSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkMediaElementAudioSourceNode();

  mediaElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaElementAudioSourceNode */, "mediaElement");
}

class BlinkMediaEncryptedEvent extends BlinkEvent {
  static final instance = new BlinkMediaEncryptedEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaEncryptedEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("MediaEncryptedEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MediaEncryptedEvent", [__arg_0, __arg_1]);

  initData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaEncryptedEvent */, "initData");

  initDataType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaEncryptedEvent */, "initDataType");
}

class BlinkMediaError {
  static final instance = new BlinkMediaError();

  code_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MediaError */, "code");
}

class BlinkMediaKeyMessageEvent extends BlinkEvent {
  static final instance = new BlinkMediaKeyMessageEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaKeyMessageEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("MediaKeyMessageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MediaKeyMessageEvent", [__arg_0, __arg_1]);

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeyMessageEvent */, "message");

  messageType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeyMessageEvent */, "messageType");
}

class BlinkMediaKeySession extends BlinkEventTarget {
  static final instance = new BlinkMediaKeySession();

  closed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeySession */, "closed");

  expiration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeySession */, "expiration");

  keyStatuses_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeySession */, "keyStatuses");

  sessionId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeySession */, "sessionId");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "close", []);

  generateRequest_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "generateRequest", []);

  generateRequest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "generateRequest", [__arg_0]);

  generateRequest_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* MediaKeySession */, "generateRequest", [__arg_0, __arg_1]);

  load_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "load", []);

  load_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "load", [__arg_0]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "remove", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "update", []);

  update_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySession */, "update", [__arg_0]);
}

class BlinkMediaKeyStatusMap {
  static final instance = new BlinkMediaKeyStatusMap();

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeyStatusMap */, "size");
}

class BlinkMediaKeySystemAccess {
  static final instance = new BlinkMediaKeySystemAccess();

  keySystem_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaKeySystemAccess */, "keySystem");

  createMediaKeys_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySystemAccess */, "createMediaKeys", []);

  getConfiguration_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeySystemAccess */, "getConfiguration", []);
}

class BlinkMediaKeys {
  static final instance = new BlinkMediaKeys();

  createSession_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeys */, "createSession", []);

  createSession_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeys */, "createSession", [__arg_0]);

  setServerCertificate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaKeys */, "setServerCertificate", []);

  setServerCertificate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* MediaKeys */, "setServerCertificate", [__arg_0]);
}

class BlinkMediaList {
  static final instance = new BlinkMediaList();

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MediaList */, "length");

  mediaText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaList */, "mediaText");

  mediaText_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaList */, "mediaText", __arg_0);

  appendMedium_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaList */, "appendMedium", []);

  appendMedium_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaList */, "appendMedium", [__arg_0]);

  deleteMedium_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaList */, "deleteMedium", []);

  deleteMedium_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaList */, "deleteMedium", [__arg_0]);

  item_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* MediaList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaList */, "item", [__arg_0]);
}

class BlinkMediaMetadata {
  static final instance = new BlinkMediaMetadata();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaMetadata");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("MediaMetadata", [__arg_0]);

  album_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaMetadata */, "album");

  artist_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaMetadata */, "artist");

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaMetadata */, "title");
}

class BlinkMediaQueryList extends BlinkEventTarget {
  static final instance = new BlinkMediaQueryList();

  matches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaQueryList */, "matches");

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaQueryList */, "media");

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaQueryList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaQueryList */, "onchange", __arg_0);

  addListener_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaQueryList */, "addListener", []);

  addListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaQueryList */, "addListener", [__arg_0]);

  removeListener_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaQueryList */, "removeListener", []);

  removeListener_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaQueryList */, "removeListener", [__arg_0]);
}

class BlinkMediaQueryListEvent extends BlinkEvent {
  static final instance = new BlinkMediaQueryListEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaQueryListEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("MediaQueryListEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MediaQueryListEvent", [__arg_0, __arg_1]);

  matches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaQueryListEvent */, "matches");

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaQueryListEvent */, "media");
}

class BlinkMediaRecorder extends BlinkEventTarget {
  static final instance = new BlinkMediaRecorder();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaRecorder");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("MediaRecorder", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MediaRecorder", [__arg_0, __arg_1]);

  audioBitsPerSecond_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "audioBitsPerSecond");

  ignoreMutedMedia_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "ignoreMutedMedia");

  ignoreMutedMedia_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* MediaRecorder */, "ignoreMutedMedia", __arg_0);

  mimeType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "mimeType");

  ondataavailable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "ondataavailable");

  ondataavailable_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* MediaRecorder */, "ondataavailable", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaRecorder */, "onerror", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaRecorder */, "onpause", __arg_0);

  onresume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "onresume");

  onresume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaRecorder */, "onresume", __arg_0);

  onstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "onstart");

  onstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaRecorder */, "onstart", __arg_0);

  onstop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "onstop");

  onstop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaRecorder */, "onstop", __arg_0);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "state");

  stream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "stream");

  videoBitsPerSecond_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaRecorder */, "videoBitsPerSecond");

  isTypeSupported_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "MediaRecorder") /* MediaRecorder */,
      "isTypeSupported",
      []);

  isTypeSupported_Callback_1_(__arg_0) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "MediaRecorder") /* MediaRecorder */,
          "isTypeSupported",
          [__arg_0]);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaRecorder */, "pause", []);

  requestData_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaRecorder */, "requestData", []);

  resume_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaRecorder */, "resume", []);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaRecorder */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaRecorder */, "start", [__arg_0]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaRecorder */, "stop", []);
}

class BlinkMediaSession {
  static final instance = new BlinkMediaSession();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaSession");

  metadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaSession */, "metadata");

  metadata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaSession */, "metadata", __arg_0);

  activate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSession */, "activate", []);

  deactivate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSession */, "deactivate", []);
}

class BlinkMediaSource extends BlinkEventTarget {
  static final instance = new BlinkMediaSource();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaSource");

  activeSourceBuffers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaSource */, "activeSourceBuffers");

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaSource */, "duration");

  duration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaSource */, "duration", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaSource */, "readyState");

  sourceBuffers_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaSource */, "sourceBuffers");

  addSourceBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSource */, "addSourceBuffer", []);

  addSourceBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSource */, "addSourceBuffer", [__arg_0]);

  endOfStream_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSource */, "endOfStream", []);

  endOfStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSource */, "endOfStream", [__arg_0]);

  isTypeSupported_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "MediaSource") /* MediaSource */,
      "isTypeSupported",
      []);

  isTypeSupported_Callback_1_(__arg_0) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "MediaSource") /* MediaSource */,
          "isTypeSupported",
          [__arg_0]);

  removeSourceBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSource */, "removeSourceBuffer", []);

  removeSourceBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaSource */, "removeSourceBuffer", [__arg_0]);
}

class BlinkMediaStream extends BlinkEventTarget {
  static final instance = new BlinkMediaStream();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaStream");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("MediaStream", [__arg_0]);

  active_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStream */, "active");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MediaStream */, "id");

  onactive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStream */, "onactive");

  onactive_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStream */, "onactive", __arg_0);

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStream */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStream */, "onaddtrack", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStream */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStream */, "onended", __arg_0);

  oninactive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStream */, "oninactive");

  oninactive_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStream */, "oninactive", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStream */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* MediaStream */, "onremovetrack", __arg_0);

  addTrack_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "addTrack", []);

  addTrack_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "addTrack", [__arg_0]);

  clone_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "clone", []);

  getAudioTracks_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "getAudioTracks", []);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "getTrackById", [__arg_0]);

  getTracks_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "getTracks", []);

  getVideoTracks_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "getVideoTracks", []);

  removeTrack_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "removeTrack", []);

  removeTrack_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStream */, "removeTrack", [__arg_0]);
}

class BlinkMediaStreamAudioDestinationNode extends BlinkAudioNode {
  static final instance = new BlinkMediaStreamAudioDestinationNode();

  stream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamAudioDestinationNode */, "stream");
}

class BlinkMediaStreamAudioSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkMediaStreamAudioSourceNode();

  mediaStream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamAudioSourceNode */, "mediaStream");
}

class BlinkMediaStreamEvent extends BlinkEvent {
  static final instance = new BlinkMediaStreamEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MediaStreamEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("MediaStreamEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MediaStreamEvent", [__arg_0, __arg_1]);

  stream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamEvent */, "stream");
}

class BlinkMediaStreamTrack extends BlinkEventTarget {
  static final instance = new BlinkMediaStreamTrack();

  enabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "enabled");

  enabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStreamTrack */, "enabled", __arg_0);

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "id");

  kind_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "kind");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "label");

  muted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "muted");

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStreamTrack */, "onended", __arg_0);

  onmute_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "onmute");

  onmute_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStreamTrack */, "onmute", __arg_0);

  onunmute_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "onunmute");

  onunmute_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MediaStreamTrack */, "onunmute", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "readyState");

  remote_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrack */, "remote");

  clone_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStreamTrack */, "clone", []);

  getSources_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "MediaStreamTrack") /* MediaStreamTrack */,
      "getSources",
      []);

  getSources_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "MediaStreamTrack") /* MediaStreamTrack */,
      "getSources",
      [__arg_0]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MediaStreamTrack */, "stop", []);
}

class BlinkMediaStreamTrackEvent extends BlinkEvent {
  static final instance = new BlinkMediaStreamTrackEvent();

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MediaStreamTrackEvent */, "track");
}

class BlinkMediaStreamTrackSourcesCallback {
  static final instance = new BlinkMediaStreamTrackSourcesCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* MediaStreamTrackSourcesCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* MediaStreamTrackSourcesCallback */,
          "handleEvent",
          [__arg_0]);
}

class BlinkMemoryInfo {
  static final instance = new BlinkMemoryInfo();

  jsHeapSizeLimit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MemoryInfo */, "jsHeapSizeLimit");

  totalJSHeapSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MemoryInfo */, "totalJSHeapSize");

  usedJSHeapSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MemoryInfo */, "usedJSHeapSize");
}

class BlinkMessageCallback {
  static final instance = new BlinkMessageCallback();

  handleMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MessageCallback */, "handleMessage", []);

  handleMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MessageCallback */, "handleMessage", [__arg_0]);
}

class BlinkMessageChannel {
  static final instance = new BlinkMessageChannel();

  port1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessageChannel */, "port1");

  port2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessageChannel */, "port2");
}

class BlinkMessageEvent extends BlinkEvent {
  static final instance = new BlinkMessageEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MessageEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("MessageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MessageEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MessageEvent */, "data");

  lastEventId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessageEvent */, "lastEventId");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessageEvent */, "origin");

  ports_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessageEvent */, "ports");

  source_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessageEvent */, "source");

  suborigin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessageEvent */, "suborigin");

  initMessageEvent_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* MessageEvent */,
          "initMessageEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initMessageEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* MessageEvent */,
          "initMessageEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  initMessageEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* MessageEvent */, "initMessageEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);
}

class BlinkMessagePort extends BlinkEventTarget {
  static final instance = new BlinkMessagePort();

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MessagePort */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* MessagePort */, "onmessage", __arg_0);

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MessagePort */, "close", []);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MessagePort */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MessagePort */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* MessagePort */, "postMessage", [__arg_0, __arg_1]);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MessagePort */, "start", []);
}

class BlinkMetadata {
  static final instance = new BlinkMetadata();

  modificationTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Metadata */, "modificationTime");

  size_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Metadata */, "size");
}

class BlinkMetadataCallback {
  static final instance = new BlinkMetadataCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MetadataCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MetadataCallback */, "handleEvent", [__arg_0]);
}

class BlinkMimeType {
  static final instance = new BlinkMimeType();

  description_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MimeType */, "description");

  enabledPlugin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MimeType */, "enabledPlugin");

  suffixes_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MimeType */, "suffixes");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MimeType */, "type");
}

class BlinkMimeTypeArray {
  static final instance = new BlinkMimeTypeArray();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MimeTypeArray */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MimeTypeArray */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MimeTypeArray */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MimeTypeArray */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MimeTypeArray */, "namedItem", [__arg_0]);
}

class BlinkMouseEvent extends BlinkUIEvent {
  static final instance = new BlinkMouseEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MouseEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("MouseEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("MouseEvent", [__arg_0, __arg_1]);

  altKey_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "altKey");

  button_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "button");

  buttons_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "buttons");

  clientX_Getter_(mthis) native "Blink_Getter_MouseEvent_clientX";

  clientY_Getter_(mthis) native "Blink_Getter_MouseEvent_clientY";

  ctrlKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "ctrlKey");

  fromElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "fromElement");

  layerX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "layerX");

  layerY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "layerY");

  metaKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "metaKey");

  movementX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "movementX");

  movementY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "movementY");

  offsetX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "offsetX");

  offsetY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "offsetY");

  pageX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "pageX");

  pageY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "pageY");

  region_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "region");

  relatedTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "relatedTarget");

  screenX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "screenX");

  screenY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "screenY");

  shiftKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "shiftKey");

  toElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MouseEvent */, "toElement");

  which_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "which");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* MouseEvent */, "y");

  getModifierState_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MouseEvent */, "getModifierState", []);

  getModifierState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MouseEvent */, "getModifierState", [__arg_0]);

  initMouseEvent_Callback_13_(
          mthis,
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11,
          __arg_12) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* MouseEvent */, "initMouseEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12
      ]);

  initMouseEvent_Callback_14_(
          mthis,
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11,
          __arg_12,
          __arg_13) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* MouseEvent */, "initMouseEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12,
        __arg_13
      ]);

  initMouseEvent_Callback_15_(
          mthis,
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11,
          __arg_12,
          __arg_13,
          __arg_14) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* MouseEvent */, "initMouseEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12,
        __arg_13,
        __arg_14
      ]);
}

class BlinkMutationCallback {
  static final instance = new BlinkMutationCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MutationCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MutationCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* MutationCallback */, "handleEvent", [__arg_0, __arg_1]);
}

class BlinkMutationObserver {
  static final instance = new BlinkMutationObserver();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("MutationObserver");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("MutationObserver", [__arg_0]);

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MutationObserver */, "disconnect", []);

  observe_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MutationObserver */, "observe", []);

  observe_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* MutationObserver */, "observe", [__arg_0]);

  observe_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* MutationObserver */, "observe", [__arg_0, __arg_1]);

  takeRecords_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* MutationObserver */, "takeRecords", []);
}

class BlinkMutationRecord {
  static final instance = new BlinkMutationRecord();

  addedNodes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "addedNodes");

  attributeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "attributeName");

  attributeNamespace_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "attributeNamespace");

  nextSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "nextSibling");

  oldValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "oldValue");

  previousSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "previousSibling");

  removedNodes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "removedNodes");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "target");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* MutationRecord */, "type");
}

class BlinkNFC {
  static final instance = new BlinkNFC();

  cancelPush_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* NFC */, "cancelPush", []);

  cancelPush_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NFC */, "cancelPush", [__arg_0]);

  cancelWatch_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NFC */, "cancelWatch", []);

  cancelWatch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NFC */, "cancelWatch", [__arg_0]);

  push_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* NFC */, "push", []);

  push_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NFC */, "push", [__arg_0]);

  push_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* NFC */, "push", [__arg_0, __arg_1]);

  watch_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* NFC */, "watch", []);

  watch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NFC */, "watch", [__arg_0]);

  watch_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* NFC */, "watch", [__arg_0, __arg_1]);
}

class BlinkNamedNodeMap {
  static final instance = new BlinkNamedNodeMap();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NamedNodeMap */, "length");

  getNamedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "getNamedItem", []);

  getNamedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "getNamedItem", [__arg_0]);

  getNamedItemNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "getNamedItemNS", []);

  getNamedItemNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "getNamedItemNS", [__arg_0]);

  getNamedItemNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NamedNodeMap */, "getNamedItemNS", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "item", [__arg_0]);

  removeNamedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "removeNamedItem", []);

  removeNamedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "removeNamedItem", [__arg_0]);

  removeNamedItemNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "removeNamedItemNS", []);

  removeNamedItemNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "removeNamedItemNS", [__arg_0]);

  removeNamedItemNS_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NamedNodeMap */, "removeNamedItemNS", [__arg_0, __arg_1]);

  setNamedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "setNamedItem", []);

  setNamedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "setNamedItem", [__arg_0]);

  setNamedItemNS_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "setNamedItemNS", []);

  setNamedItemNS_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NamedNodeMap */, "setNamedItemNS", [__arg_0]);
}

class BlinkNavigator {
  static final instance = new BlinkNavigator();

  bluetooth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "bluetooth");

  connection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "connection");

  credentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "credentials");

  doNotTrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "doNotTrack");

  geolocation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "geolocation");

  maxTouchPoints_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "maxTouchPoints");

  mediaDevices_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "mediaDevices");

  mimeTypes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "mimeTypes");

  nfc_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "nfc");

  permissions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "permissions");

  plugins_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "plugins");

  presentation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "presentation");

  productSub_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "productSub");

  serviceWorker_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "serviceWorker");

  services_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "services");

  storage_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "storage");

  storageQuota_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "storageQuota");

  usb_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "usb");

  vendor_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Navigator */, "vendor");

  vendorSub_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Navigator */, "vendorSub");

  webkitPersistentStorage_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Navigator */, "webkitPersistentStorage");

  webkitTemporaryStorage_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Navigator */, "webkitTemporaryStorage");

  getBattery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "getBattery", []);

  getGamepads_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "getGamepads", []);

  getVRDevices_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "getVRDevices", []);

  isProtocolHandlerRegistered_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "isProtocolHandlerRegistered", []);

  isProtocolHandlerRegistered_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Navigator */, "isProtocolHandlerRegistered", [__arg_0]);

  isProtocolHandlerRegistered_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* Navigator */,
          "isProtocolHandlerRegistered", [__arg_0, __arg_1]);

  javaEnabled_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "javaEnabled", []);

  registerProtocolHandler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Navigator */, "registerProtocolHandler", [__arg_0]);

  registerProtocolHandler_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Navigator */, "registerProtocolHandler", [__arg_0, __arg_1]);

  registerProtocolHandler_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Navigator */,
          "registerProtocolHandler", [__arg_0, __arg_1, __arg_2]);

  requestMIDIAccess_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "requestMIDIAccess", []);

  requestMIDIAccess_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "requestMIDIAccess", [__arg_0]);

  requestMediaKeySystemAccess_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "requestMediaKeySystemAccess", []);

  requestMediaKeySystemAccess_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Navigator */, "requestMediaKeySystemAccess", [__arg_0]);

  requestMediaKeySystemAccess_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* Navigator */,
          "requestMediaKeySystemAccess", [__arg_0, __arg_1]);

  sendBeacon_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "sendBeacon", []);

  sendBeacon_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "sendBeacon", [__arg_0]);

  sendBeacon_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "sendBeacon", [__arg_0, __arg_1]);

  unregisterProtocolHandler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "unregisterProtocolHandler", []);

  unregisterProtocolHandler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Navigator */, "unregisterProtocolHandler", [__arg_0]);

  unregisterProtocolHandler_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* Navigator */,
          "unregisterProtocolHandler", [__arg_0, __arg_1]);

  webkitGetUserMedia_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Navigator */, "webkitGetUserMedia", [__arg_0]);

  webkitGetUserMedia_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Navigator */, "webkitGetUserMedia", [__arg_0, __arg_1]);

  webkitGetUserMedia_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Navigator */,
          "webkitGetUserMedia", [__arg_0, __arg_1, __arg_2]);

  hardwareConcurrency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorCPU */, "hardwareConcurrency");

  appCodeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appCodeName");

  appName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appName");

  appVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appVersion");

  dartEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "dartEnabled");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "platform");

  product_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "product");

  userAgent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "userAgent");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorLanguage */, "language");

  languages_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorLanguage */, "languages");

  onLine_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorOnLine */, "onLine");

  cookieEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorStorageUtils */, "cookieEnabled");
}

class BlinkNavigatorCPU {
  static final instance = new BlinkNavigatorCPU();

  hardwareConcurrency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorCPU */, "hardwareConcurrency");
}

class BlinkNavigatorID {
  static final instance = new BlinkNavigatorID();

  appCodeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appCodeName");

  appName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appName");

  appVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appVersion");

  dartEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "dartEnabled");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "platform");

  product_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "product");

  userAgent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "userAgent");
}

class BlinkNavigatorLanguage {
  static final instance = new BlinkNavigatorLanguage();

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorLanguage */, "language");

  languages_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorLanguage */, "languages");
}

class BlinkNavigatorOnLine {
  static final instance = new BlinkNavigatorOnLine();

  onLine_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorOnLine */, "onLine");
}

class BlinkNavigatorStorageUtils {
  static final instance = new BlinkNavigatorStorageUtils();

  cookieEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorStorageUtils */, "cookieEnabled");
}

class BlinkNavigatorUserMediaError {
  static final instance = new BlinkNavigatorUserMediaError();

  constraintName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorUserMediaError */, "constraintName");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorUserMediaError */, "message");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorUserMediaError */, "name");
}

class BlinkNavigatorUserMediaErrorCallback {
  static final instance = new BlinkNavigatorUserMediaErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* NavigatorUserMediaErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NavigatorUserMediaErrorCallback */,
          "handleEvent",
          [__arg_0]);
}

class BlinkNavigatorUserMediaSuccessCallback {
  static final instance = new BlinkNavigatorUserMediaSuccessCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* NavigatorUserMediaSuccessCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NavigatorUserMediaSuccessCallback */,
          "handleEvent",
          [__arg_0]);
}

class BlinkNetworkInformation extends BlinkEventTarget {
  static final instance = new BlinkNetworkInformation();

  downlinkMax_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NetworkInformation */, "downlinkMax");

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NetworkInformation */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* NetworkInformation */, "onchange", __arg_0);

  ontypechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NetworkInformation */, "ontypechange");

  ontypechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* NetworkInformation */, "ontypechange", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NetworkInformation */, "type");
}

class BlinkNode extends BlinkEventTarget {
  static final instance = new BlinkNode();

  baseURI_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Node */, "baseURI");

  childNodes_Getter_(mthis) native "Blink_Getter_Node_childNodes";

  firstChild_Getter_(mthis) native "Blink_Getter_Node_firstChild";

  lastChild_Getter_(mthis) native "Blink_Getter_Node_lastChild";

  nextSibling_Getter_(mthis) native "Blink_Getter_Node_nextSibling";

  nodeName_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Node */, "nodeName");

  nodeType_Getter_(mthis) native "Blink_Getter_Node_nodeType";

  nodeValue_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Node */, "nodeValue");

  nodeValue_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Node */, "nodeValue", __arg_0);

  ownerDocument_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Node */, "ownerDocument");

  parentElement_Getter_(mthis) native "Blink_Getter_Node_parentElement";

  parentNode_Getter_(mthis) native "Blink_Getter_Node_parentNode";

  previousSibling_Getter_(mthis) native "Blink_Getter_Node_previousSibling";

  textContent_Getter_(mthis) native "Blink_Getter_Node_textContent";

  textContent_Setter_(mthis, __arg_0) native "Blink_Setter_Node_textContent";

  treeRoot_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Node */, "treeRoot");

  appendChild_Callback_0_(mthis) native "Blink_Operation_0_Node_appendChild";

  appendChild_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Node_appendChild"; /* __arg_0 */

  cloneNode_Callback_0_(mthis) native "Blink_Operation_0_Node_cloneNode";

  cloneNode_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Node_cloneNode"; /* __arg_0 */

  compareDocumentPosition_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "compareDocumentPosition", []);

  compareDocumentPosition_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Node */, "compareDocumentPosition", [__arg_0]);

  contains_Callback_0_(mthis) native "Blink_Operation_0_Node_contains";

  contains_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Node_contains"; /* __arg_0 */

  hasChildNodes_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "hasChildNodes", []);

  insertBefore_Callback_0_(mthis) native "Blink_Operation_0_Node_insertBefore";

  insertBefore_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Node_insertBefore"; /* __arg_0 */

  insertBefore_Callback_2_(mthis, __arg_0, __arg_1)
      native "Blink_Operation_Node_insertBefore"; /* __arg_0, __arg_1 */

  isDefaultNamespace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "isDefaultNamespace", []);

  isDefaultNamespace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "isDefaultNamespace", [__arg_0]);

  isEqualNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "isEqualNode", []);

  isEqualNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "isEqualNode", [__arg_0]);

  isSameNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "isSameNode", []);

  isSameNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "isSameNode", [__arg_0]);

  lookupNamespaceURI_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "lookupNamespaceURI", []);

  lookupNamespaceURI_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "lookupNamespaceURI", [__arg_0]);

  lookupPrefix_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "lookupPrefix", []);

  lookupPrefix_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "lookupPrefix", [__arg_0]);

  normalize_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Node */, "normalize", []);

  removeChild_Callback_0_(mthis) native "Blink_Operation_0_Node_removeChild";

  removeChild_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_Node_removeChild"; /* __arg_0 */

  replaceChild_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "replaceChild", []);

  replaceChild_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Node */, "replaceChild", [__arg_0]);

  replaceChild_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Node */, "replaceChild", [__arg_0, __arg_1]);
}

class BlinkNodeFilter {
  static final instance = new BlinkNodeFilter();

  acceptNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NodeFilter */, "acceptNode", []);

  acceptNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* NodeFilter */, "acceptNode", [__arg_0]);
}

class BlinkNodeIterator {
  static final instance = new BlinkNodeIterator();

  filter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NodeIterator */, "filter");

  pointerBeforeReferenceNode_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* NodeIterator */, "pointerBeforeReferenceNode");

  referenceNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NodeIterator */, "referenceNode");

  root_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* NodeIterator */, "root");

  whatToShow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NodeIterator */, "whatToShow");

  detach_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NodeIterator */, "detach", []);

  nextNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NodeIterator */, "nextNode", []);

  previousNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NodeIterator */, "previousNode", []);
}

class BlinkNodeList {
  static final instance = new BlinkNodeList();

  length_Getter_(mthis) native "Blink_Getter_NodeList_length";

  item_Callback_0_(mthis) native "Blink_Operation_0_NodeList_item";

  item_Callback_1_(mthis, __arg_0)
      native "Blink_Operation_NodeList_item"; /* __arg_0 */

}

class BlinkNonDocumentTypeChildNode {
  static final instance = new BlinkNonDocumentTypeChildNode();

  nextElementSibling_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NonDocumentTypeChildNode */, "nextElementSibling");

  previousElementSibling_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* NonDocumentTypeChildNode */, "previousElementSibling");
}

class BlinkNonElementParentNode {
  static final instance = new BlinkNonElementParentNode();

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* NonElementParentNode */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NonElementParentNode */, "getElementById", [__arg_0]);
}

class BlinkNotification extends BlinkEventTarget {
  static final instance = new BlinkNotification();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Notification");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Notification", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("Notification", [__arg_0, __arg_1]);

  actions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "actions");

  body_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Notification */, "body");

  data_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Notification */, "data");

  dir_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Notification */, "dir");

  icon_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Notification */, "icon");

  lang_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Notification */, "lang");

  maxActions_Getter_() => Blink_JsNative_DomException.getProperty(
      Blink_JsNative_DomException.getProperty(
          js.context, "Notification") /* Notification */,
      "maxActions");

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Notification */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Notification */, "onclose", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Notification */, "onerror", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Notification */, "onshow", __arg_0);

  permission_Getter_() => Blink_JsNative_DomException.getProperty(
      Blink_JsNative_DomException.getProperty(
          js.context, "Notification") /* Notification */,
      "permission");

  renotify_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "renotify");

  requireInteraction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "requireInteraction");

  silent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "silent");

  tag_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Notification */, "tag");

  timestamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "timestamp");

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "title");

  vibrate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Notification */, "vibrate");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Notification */, "close", []);

  requestPermission_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "Notification") /* Notification */,
      "requestPermission",
      []);

  requestPermission_Callback_1_(__arg_0) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "Notification") /* Notification */,
          "requestPermission",
          [__arg_0]);
}

class BlinkNotificationEvent extends BlinkExtendableEvent {
  static final instance = new BlinkNotificationEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("NotificationEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("NotificationEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("NotificationEvent", [__arg_0, __arg_1]);

  action_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NotificationEvent */, "action");

  notification_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NotificationEvent */, "notification");
}

class BlinkNotificationPermissionCallback {
  static final instance = new BlinkNotificationPermissionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* NotificationPermissionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* NotificationPermissionCallback */, "handleEvent", [__arg_0]);
}

class BlinkNumberValue extends BlinkStyleValue {
  static final instance = new BlinkNumberValue();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("NumberValue");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("NumberValue", [__arg_0]);

  value_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* NumberValue */, "value");
}

class BlinkOESElementIndexUint {
  static final instance = new BlinkOESElementIndexUint();
}

class BlinkOESStandardDerivatives {
  static final instance = new BlinkOESStandardDerivatives();
}

class BlinkOESTextureFloat {
  static final instance = new BlinkOESTextureFloat();
}

class BlinkOESTextureFloatLinear {
  static final instance = new BlinkOESTextureFloatLinear();
}

class BlinkOESTextureHalfFloat {
  static final instance = new BlinkOESTextureHalfFloat();
}

class BlinkOESTextureHalfFloatLinear {
  static final instance = new BlinkOESTextureHalfFloatLinear();
}

class BlinkOESVertexArrayObject {
  static final instance = new BlinkOESVertexArrayObject();

  bindVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OESVertexArrayObject */, "bindVertexArrayOES", []);

  bindVertexArrayOES_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* OESVertexArrayObject */, "bindVertexArrayOES", [__arg_0]);

  createVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OESVertexArrayObject */, "createVertexArrayOES", []);

  deleteVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OESVertexArrayObject */, "deleteVertexArrayOES", []);

  deleteVertexArrayOES_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* OESVertexArrayObject */, "deleteVertexArrayOES", [__arg_0]);

  isVertexArrayOES_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OESVertexArrayObject */, "isVertexArrayOES", []);

  isVertexArrayOES_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* OESVertexArrayObject */, "isVertexArrayOES", [__arg_0]);
}

class BlinkOfflineAudioCompletionEvent extends BlinkEvent {
  static final instance = new BlinkOfflineAudioCompletionEvent();

  renderedBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OfflineAudioCompletionEvent */, "renderedBuffer");
}

class BlinkOfflineAudioContext extends BlinkAudioContext {
  static final instance = new BlinkOfflineAudioContext();

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("OfflineAudioContext", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("OfflineAudioContext", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("OfflineAudioContext", [__arg_0, __arg_1, __arg_2]);

  oncomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OfflineAudioContext */, "oncomplete");

  oncomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* OfflineAudioContext */, "oncomplete", __arg_0);

  resume_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OfflineAudioContext */, "resume", []);

  startRendering_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OfflineAudioContext */, "startRendering", []);

  suspend_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OfflineAudioContext */, "suspend", []);

  suspend_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* OfflineAudioContext */, "suspend", [__arg_0]);
}

class BlinkOffscreenCanvas {
  static final instance = new BlinkOffscreenCanvas();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("OffscreenCanvas");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("OffscreenCanvas", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("OffscreenCanvas", [__arg_0, __arg_1]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OffscreenCanvas */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* OffscreenCanvas */, "height", __arg_0);

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OffscreenCanvas */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* OffscreenCanvas */, "width", __arg_0);
}

class BlinkOscillatorNode extends BlinkAudioSourceNode {
  static final instance = new BlinkOscillatorNode();

  detune_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OscillatorNode */, "detune");

  frequency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OscillatorNode */, "frequency");

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OscillatorNode */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* OscillatorNode */, "onended", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* OscillatorNode */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* OscillatorNode */, "type", __arg_0);

  setPeriodicWave_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OscillatorNode */, "setPeriodicWave", []);

  setPeriodicWave_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* OscillatorNode */, "setPeriodicWave", [__arg_0]);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OscillatorNode */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* OscillatorNode */, "start", [__arg_0]);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* OscillatorNode */, "stop", []);

  stop_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* OscillatorNode */, "stop", [__arg_0]);
}

class BlinkPagePopupController {
  static final instance = new BlinkPagePopupController();

  closePopup_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "closePopup", []);

  formatMonth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "formatMonth", []);

  formatMonth_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "formatMonth", [__arg_0]);

  formatMonth_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PagePopupController */, "formatMonth", [__arg_0, __arg_1]);

  formatShortMonth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "formatShortMonth", []);

  formatShortMonth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PagePopupController */, "formatShortMonth", [__arg_0]);

  formatShortMonth_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */,
          "formatShortMonth", [__arg_0, __arg_1]);

  formatWeek_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "formatWeek", [__arg_0]);

  formatWeek_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PagePopupController */, "formatWeek", [__arg_0, __arg_1]);

  formatWeek_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */,
          "formatWeek", [__arg_0, __arg_1, __arg_2]);

  localizeNumberString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "localizeNumberString", []);

  localizeNumberString_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PagePopupController */, "localizeNumberString", [__arg_0]);

  selectFontsFromOwnerDocument_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PagePopupController */, "selectFontsFromOwnerDocument", []);

  selectFontsFromOwnerDocument_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */,
          "selectFontsFromOwnerDocument", [__arg_0]);

  setValue_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "setValue", []);

  setValue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "setValue", [__arg_0]);

  setValueAndClosePopup_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PagePopupController */, "setValueAndClosePopup", []);

  setValueAndClosePopup_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PagePopupController */, "setValueAndClosePopup", [__arg_0]);

  setValueAndClosePopup_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */,
          "setValueAndClosePopup", [__arg_0, __arg_1]);

  setWindowRect_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PagePopupController */, "setWindowRect", [__arg_0, __arg_1]);

  setWindowRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */,
          "setWindowRect", [__arg_0, __arg_1, __arg_2]);

  setWindowRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* PagePopupController */,
          "setWindowRect", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkPageTransitionEvent extends BlinkEvent {
  static final instance = new BlinkPageTransitionEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PageTransitionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("PageTransitionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("PageTransitionEvent", [__arg_0, __arg_1]);

  persisted_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PageTransitionEvent */, "persisted");
}

class BlinkPannerNode extends BlinkAudioNode {
  static final instance = new BlinkPannerNode();

  coneInnerAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "coneInnerAngle");

  coneInnerAngle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "coneInnerAngle", __arg_0);

  coneOuterAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "coneOuterAngle");

  coneOuterAngle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "coneOuterAngle", __arg_0);

  coneOuterGain_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "coneOuterGain");

  coneOuterGain_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "coneOuterGain", __arg_0);

  distanceModel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "distanceModel");

  distanceModel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "distanceModel", __arg_0);

  maxDistance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "maxDistance");

  maxDistance_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "maxDistance", __arg_0);

  panningModel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "panningModel");

  panningModel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "panningModel", __arg_0);

  refDistance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "refDistance");

  refDistance_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "refDistance", __arg_0);

  rolloffFactor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PannerNode */, "rolloffFactor");

  rolloffFactor_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PannerNode */, "rolloffFactor", __arg_0);

  setOrientation_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PannerNode */, "setOrientation", [__arg_0]);

  setOrientation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PannerNode */, "setOrientation", [__arg_0, __arg_1]);

  setOrientation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* PannerNode */,
          "setOrientation", [__arg_0, __arg_1, __arg_2]);

  setPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PannerNode */, "setPosition", [__arg_0]);

  setPosition_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PannerNode */, "setPosition", [__arg_0, __arg_1]);

  setPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PannerNode */, "setPosition", [__arg_0, __arg_1, __arg_2]);

  setVelocity_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PannerNode */, "setVelocity", [__arg_0]);

  setVelocity_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PannerNode */, "setVelocity", [__arg_0, __arg_1]);

  setVelocity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PannerNode */, "setVelocity", [__arg_0, __arg_1, __arg_2]);
}

class BlinkParentNode {
  static final instance = new BlinkParentNode();

  childElementCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ParentNode */, "childElementCount");

  children_Getter_(mthis) native "Blink_Getter_ParentNode_children";

  firstElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_firstElementChild";

  lastElementChild_Getter_(mthis)
      native "Blink_Getter_ParentNode_lastElementChild";

  querySelector_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", []);

  querySelector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelector", [__arg_0]);

  querySelectorAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", []);

  querySelectorAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ParentNode */, "querySelectorAll", [__arg_0]);
}

class BlinkPasswordCredential extends BlinkCredential {
  static final instance = new BlinkPasswordCredential();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PasswordCredential");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("PasswordCredential", [__arg_0]);

  additionalData_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PasswordCredential */, "additionalData");

  additionalData_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PasswordCredential */, "additionalData", __arg_0);

  idName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PasswordCredential */, "idName");

  idName_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* PasswordCredential */, "idName", __arg_0);

  passwordName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PasswordCredential */, "passwordName");

  passwordName_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PasswordCredential */, "passwordName", __arg_0);
}

class BlinkPath2D {
  static final instance = new BlinkPath2D();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Path2D");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Path2D", [__arg_0]);

  addPath_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Path2D */, "addPath", []);

  addPath_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Path2D */, "addPath", [__arg_0]);

  addPath_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Path2D */, "addPath", [__arg_0, __arg_1]);

  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  arc_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arc", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "arcTo", [__arg_0, __arg_1, __arg_2]);

  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "arcTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  bezierCurveTo_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "bezierCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bezierCurveTo_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */,
          "bezierCurveTo",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  closePath_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "closePath", []);

  ellipse_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "ellipse", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */,
          "ellipse",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "ellipse", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  lineTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", []);

  lineTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0]);

  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "lineTo", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "moveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1]);

  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1, __arg_2]);

  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "quadraticCurveTo", [__arg_0, __arg_1, __arg_2, __arg_3]);

  rect_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1]);

  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* CanvasPathMethods */, "rect", [__arg_0, __arg_1, __arg_2]);

  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* CanvasPathMethods */,
          "rect", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkPerformance extends BlinkEventTarget {
  static final instance = new BlinkPerformance();

  memory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Performance */, "memory");

  navigation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Performance */, "navigation");

  onframetimingbufferfull_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Performance */, "onframetimingbufferfull");

  onframetimingbufferfull_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Performance */, "onframetimingbufferfull", __arg_0);

  onresourcetimingbufferfull_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Performance */, "onresourcetimingbufferfull");

  onresourcetimingbufferfull_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* Performance */, "onresourcetimingbufferfull", __arg_0);

  timing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Performance */, "timing");

  clearFrameTimings_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "clearFrameTimings", []);

  clearMarks_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "clearMarks", []);

  clearMarks_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "clearMarks", [__arg_0]);

  clearMeasures_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "clearMeasures", []);

  clearMeasures_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "clearMeasures", [__arg_0]);

  clearResourceTimings_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "clearResourceTimings", []);

  getEntries_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "getEntries", []);

  getEntriesByName_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "getEntriesByName", []);

  getEntriesByName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "getEntriesByName", [__arg_0]);

  getEntriesByName_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Performance */, "getEntriesByName", [__arg_0, __arg_1]);

  getEntriesByType_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "getEntriesByType", []);

  getEntriesByType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "getEntriesByType", [__arg_0]);

  mark_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "mark", []);

  mark_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "mark", [__arg_0]);

  measure_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "measure", [__arg_0]);

  measure_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "measure", [__arg_0, __arg_1]);

  measure_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Performance */, "measure", [__arg_0, __arg_1, __arg_2]);

  now_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "now", []);

  setFrameTimingBufferSize_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "setFrameTimingBufferSize", []);

  setFrameTimingBufferSize_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Performance */, "setFrameTimingBufferSize", [__arg_0]);

  setResourceTimingBufferSize_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Performance */, "setResourceTimingBufferSize", []);

  setResourceTimingBufferSize_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Performance */, "setResourceTimingBufferSize", [__arg_0]);
}

class BlinkPerformanceCompositeTiming extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceCompositeTiming();

  sourceFrame_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceCompositeTiming */, "sourceFrame");
}

class BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceEntry();

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceEntry */, "duration");

  entryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceEntry */, "entryType");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceEntry */, "name");

  startTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceEntry */, "startTime");
}

class BlinkPerformanceMark extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceMark();
}

class BlinkPerformanceMeasure extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceMeasure();
}

class BlinkPerformanceNavigation {
  static final instance = new BlinkPerformanceNavigation();

  redirectCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceNavigation */, "redirectCount");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceNavigation */, "type");
}

class BlinkPerformanceObserver {
  static final instance = new BlinkPerformanceObserver();

  disconnect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PerformanceObserver */, "disconnect", []);

  observe_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PerformanceObserver */, "observe", []);

  observe_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PerformanceObserver */, "observe", [__arg_0]);
}

class BlinkPerformanceObserverEntryList {
  static final instance = new BlinkPerformanceObserverEntryList();

  getEntries_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PerformanceObserverEntryList */, "getEntries", []);

  getEntriesByName_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* PerformanceObserverEntryList */, "getEntriesByName", []);

  getEntriesByName_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PerformanceObserverEntryList */,
          "getEntriesByName",
          [__arg_0]);

  getEntriesByName_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PerformanceObserverEntryList */,
          "getEntriesByName",
          [__arg_0, __arg_1]);

  getEntriesByType_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* PerformanceObserverEntryList */, "getEntriesByType", []);

  getEntriesByType_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* PerformanceObserverEntryList */,
          "getEntriesByType",
          [__arg_0]);
}

class BlinkPerformanceRenderTiming extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceRenderTiming();

  sourceFrame_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceRenderTiming */, "sourceFrame");
}

class BlinkPerformanceResourceTiming extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceResourceTiming();

  connectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "connectEnd");

  connectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "connectStart");

  domainLookupEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "domainLookupEnd");

  domainLookupStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "domainLookupStart");

  fetchStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "fetchStart");

  initiatorType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "initiatorType");

  redirectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "redirectEnd");

  redirectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "redirectStart");

  requestStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "requestStart");

  responseEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "responseEnd");

  responseStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "responseStart");

  secureConnectionStart_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* PerformanceResourceTiming */, "secureConnectionStart");

  workerStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceResourceTiming */, "workerStart");
}

class BlinkPerformanceTiming {
  static final instance = new BlinkPerformanceTiming();

  connectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "connectEnd");

  connectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "connectStart");

  domComplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "domComplete");

  domContentLoadedEventEnd_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* PerformanceTiming */, "domContentLoadedEventEnd");

  domContentLoadedEventStart_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* PerformanceTiming */, "domContentLoadedEventStart");

  domInteractive_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "domInteractive");

  domLoading_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "domLoading");

  domainLookupEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "domainLookupEnd");

  domainLookupStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "domainLookupStart");

  fetchStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "fetchStart");

  loadEventEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "loadEventEnd");

  loadEventStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "loadEventStart");

  navigationStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "navigationStart");

  redirectEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "redirectEnd");

  redirectStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "redirectStart");

  requestStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "requestStart");

  responseEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "responseEnd");

  responseStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "responseStart");

  secureConnectionStart_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* PerformanceTiming */, "secureConnectionStart");

  unloadEventEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "unloadEventEnd");

  unloadEventStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PerformanceTiming */, "unloadEventStart");
}

class BlinkPeriodicWave {
  static final instance = new BlinkPeriodicWave();
}

class BlinkPermissionStatus extends BlinkEventTarget {
  static final instance = new BlinkPermissionStatus();

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PermissionStatus */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* PermissionStatus */, "onchange", __arg_0);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PermissionStatus */, "state");
}

class BlinkPermissions {
  static final instance = new BlinkPermissions();

  query_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "query", []);

  query_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "query", [__arg_0]);

  request_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "request", []);

  request_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "request", [__arg_0]);

  requestAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "requestAll", []);

  requestAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "requestAll", [__arg_0]);

  revoke_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "revoke", []);

  revoke_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Permissions */, "revoke", [__arg_0]);
}

class BlinkPerspective extends BlinkTransformComponent {
  static final instance = new BlinkPerspective();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Perspective");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Perspective", [__arg_0]);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Perspective */, "length");
}

class BlinkPlugin {
  static final instance = new BlinkPlugin();

  description_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Plugin */, "description");

  filename_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Plugin */, "filename");

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Plugin */, "length");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Plugin */, "name");

  item_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Plugin */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Plugin */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Plugin */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Plugin */, "namedItem", [__arg_0]);
}

class BlinkPluginArray {
  static final instance = new BlinkPluginArray();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PluginArray */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PluginArray */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PluginArray */, "item", [__arg_0]);

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PluginArray */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PluginArray */, "namedItem", [__arg_0]);

  refresh_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PluginArray */, "refresh", []);

  refresh_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PluginArray */, "refresh", [__arg_0]);
}

class BlinkPointerEvent extends BlinkMouseEvent {
  static final instance = new BlinkPointerEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PointerEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("PointerEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("PointerEvent", [__arg_0, __arg_1]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "height");

  isPrimary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "isPrimary");

  pointerId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "pointerId");

  pointerType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "pointerType");

  pressure_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "pressure");

  tiltX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "tiltX");

  tiltY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "tiltY");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PointerEvent */, "width");
}

class BlinkPopStateEvent extends BlinkEvent {
  static final instance = new BlinkPopStateEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PopStateEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("PopStateEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("PopStateEvent", [__arg_0, __arg_1]);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PopStateEvent */, "state");
}

class BlinkPositionCallback {
  static final instance = new BlinkPositionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PositionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PositionCallback */, "handleEvent", [__arg_0]);
}

class BlinkPositionError {
  static final instance = new BlinkPositionError();

  code_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PositionError */, "code");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PositionError */, "message");
}

class BlinkPositionErrorCallback {
  static final instance = new BlinkPositionErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PositionErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PositionErrorCallback */, "handleEvent", [__arg_0]);
}

class BlinkPositionSensorVRDevice extends BlinkVRDevice {
  static final instance = new BlinkPositionSensorVRDevice();

  getImmediateState_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PositionSensorVRDevice */, "getImmediateState", []);

  getState_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PositionSensorVRDevice */, "getState", []);

  resetSensor_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PositionSensorVRDevice */, "resetSensor", []);
}

class BlinkPositionValue extends BlinkStyleValue {
  static final instance = new BlinkPositionValue();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PositionValue");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("PositionValue", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("PositionValue", [__arg_0, __arg_1]);

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* PositionValue */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* PositionValue */, "y");
}

class BlinkPresentation {
  static final instance = new BlinkPresentation();

  defaultRequest_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Presentation */, "defaultRequest");

  defaultRequest_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Presentation */, "defaultRequest", __arg_0);

  receiver_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Presentation */, "receiver");
}

class BlinkPresentationAvailability extends BlinkEventTarget {
  static final instance = new BlinkPresentationAvailability();

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationAvailability */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* PresentationAvailability */, "onchange", __arg_0);

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationAvailability */, "value");
}

class BlinkPresentationConnection extends BlinkEventTarget {
  static final instance = new BlinkPresentationConnection();

  binaryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "binaryType");

  binaryType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* PresentationConnection */, "binaryType", __arg_0);

  id_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "id");

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* PresentationConnection */, "onclose", __arg_0);

  onconnect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "onconnect");

  onconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* PresentationConnection */, "onconnect", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* PresentationConnection */, "onmessage", __arg_0);

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* PresentationConnection */, "onstatechange", __arg_0);

  onterminate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "onterminate");

  onterminate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* PresentationConnection */, "onterminate", __arg_0);

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnection */, "state");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationConnection */, "close", []);

  send_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationConnection */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationConnection */, "send", [__arg_0]);

  terminate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationConnection */, "terminate", []);
}

class BlinkPresentationConnectionAvailableEvent extends BlinkEvent {
  static final instance = new BlinkPresentationConnectionAvailableEvent();

  constructorCallback_0_() => Blink_JsNative_DomException
      .callConstructor0("PresentationConnectionAvailableEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("PresentationConnectionAvailableEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor(
          "PresentationConnectionAvailableEvent", [__arg_0, __arg_1]);

  connection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnectionAvailableEvent */, "connection");
}

class BlinkPresentationConnectionCloseEvent extends BlinkEvent {
  static final instance = new BlinkPresentationConnectionCloseEvent();

  constructorCallback_0_() => Blink_JsNative_DomException
      .callConstructor0("PresentationConnectionCloseEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("PresentationConnectionCloseEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("PresentationConnectionCloseEvent", [__arg_0, __arg_1]);

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnectionCloseEvent */, "message");

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PresentationConnectionCloseEvent */, "reason");
}

class BlinkPresentationReceiver extends BlinkEventTarget {
  static final instance = new BlinkPresentationReceiver();

  onconnectionavailable_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* PresentationReceiver */, "onconnectionavailable");

  onconnectionavailable_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* PresentationReceiver */, "onconnectionavailable", __arg_0);

  getConnection_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationReceiver */, "getConnection", []);

  getConnections_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationReceiver */, "getConnections", []);
}

class BlinkPresentationRequest extends BlinkEventTarget {
  static final instance = new BlinkPresentationRequest();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PresentationRequest");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("PresentationRequest", [__arg_0]);

  onconnectionavailable_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* PresentationRequest */, "onconnectionavailable");

  onconnectionavailable_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* PresentationRequest */, "onconnectionavailable", __arg_0);

  getAvailability_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationRequest */, "getAvailability", []);

  reconnect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationRequest */, "reconnect", []);

  reconnect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationRequest */, "reconnect", [__arg_0]);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PresentationRequest */, "start", []);
}

class BlinkProcessingInstruction extends BlinkCharacterData {
  static final instance = new BlinkProcessingInstruction();

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ProcessingInstruction */, "sheet");

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ProcessingInstruction */, "target");
}

class BlinkProgressEvent extends BlinkEvent {
  static final instance = new BlinkProgressEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("ProgressEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("ProgressEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("ProgressEvent", [__arg_0, __arg_1]);

  lengthComputable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ProgressEvent */, "lengthComputable");

  loaded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ProgressEvent */, "loaded");

  total_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ProgressEvent */, "total");
}

class BlinkPromiseRejectionEvent extends BlinkEvent {
  static final instance = new BlinkPromiseRejectionEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PromiseRejectionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("PromiseRejectionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("PromiseRejectionEvent", [__arg_0, __arg_1]);

  promise_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PromiseRejectionEvent */, "promise");

  reason_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PromiseRejectionEvent */, "reason");
}

class BlinkPushEvent extends BlinkExtendableEvent {
  static final instance = new BlinkPushEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("PushEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("PushEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("PushEvent", [__arg_0, __arg_1]);

  data_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* PushEvent */, "data");
}

class BlinkPushManager {
  static final instance = new BlinkPushManager();

  getSubscription_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushManager */, "getSubscription", []);

  permissionState_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushManager */, "permissionState", []);

  permissionState_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PushManager */, "permissionState", [__arg_0]);

  subscribe_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushManager */, "subscribe", []);

  subscribe_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PushManager */, "subscribe", [__arg_0]);
}

class BlinkPushMessageData {
  static final instance = new BlinkPushMessageData();

  arrayBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushMessageData */, "arrayBuffer", []);

  blob_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushMessageData */, "blob", []);

  json_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushMessageData */, "json", []);

  text_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushMessageData */, "text", []);
}

class BlinkPushSubscription {
  static final instance = new BlinkPushSubscription();

  endpoint_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* PushSubscription */, "endpoint");

  getKey_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushSubscription */, "getKey", []);

  getKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* PushSubscription */, "getKey", [__arg_0]);

  unsubscribe_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* PushSubscription */, "unsubscribe", []);
}

class BlinkRTCCertificate {
  static final instance = new BlinkRTCCertificate();

  expires_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCCertificate */, "expires");
}

class BlinkRTCDTMFSender extends BlinkEventTarget {
  static final instance = new BlinkRTCDTMFSender();

  canInsertDTMF_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDTMFSender */, "canInsertDTMF");

  duration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDTMFSender */, "duration");

  interToneGap_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDTMFSender */, "interToneGap");

  ontonechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDTMFSender */, "ontonechange");

  ontonechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* RTCDTMFSender */, "ontonechange", __arg_0);

  toneBuffer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDTMFSender */, "toneBuffer");

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDTMFSender */, "track");

  insertDTMF_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCDTMFSender */, "insertDTMF", []);

  insertDTMF_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCDTMFSender */, "insertDTMF", [__arg_0]);

  insertDTMF_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCDTMFSender */, "insertDTMF", [__arg_0, __arg_1]);

  insertDTMF_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCDTMFSender */, "insertDTMF", [__arg_0, __arg_1, __arg_2]);
}

class BlinkRTCDTMFToneChangeEvent extends BlinkEvent {
  static final instance = new BlinkRTCDTMFToneChangeEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("RTCDTMFToneChangeEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("RTCDTMFToneChangeEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("RTCDTMFToneChangeEvent", [__arg_0, __arg_1]);

  tone_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDTMFToneChangeEvent */, "tone");
}

class BlinkRTCDataChannel extends BlinkEventTarget {
  static final instance = new BlinkRTCDataChannel();

  binaryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "binaryType");

  binaryType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCDataChannel */, "binaryType", __arg_0);

  bufferedAmount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "bufferedAmount");

  bufferedAmountLowThreshold_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* RTCDataChannel */, "bufferedAmountLowThreshold");

  bufferedAmountLowThreshold_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* RTCDataChannel */, "bufferedAmountLowThreshold", __arg_0);

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* RTCDataChannel */, "id");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "label");

  maxRetransmitTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "maxRetransmitTime");

  maxRetransmits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "maxRetransmits");

  negotiated_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "negotiated");

  onbufferedamountlow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "onbufferedamountlow");

  onbufferedamountlow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* RTCDataChannel */, "onbufferedamountlow", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCDataChannel */, "onclose", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCDataChannel */, "onerror", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCDataChannel */, "onmessage", __arg_0);

  onopen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "onopen");

  onopen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCDataChannel */, "onopen", __arg_0);

  ordered_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "ordered");

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "protocol");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "readyState");

  reliable_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannel */, "reliable");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCDataChannel */, "close", []);

  send_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCDataChannel */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCDataChannel */, "send", [__arg_0]);
}

class BlinkRTCDataChannelEvent extends BlinkEvent {
  static final instance = new BlinkRTCDataChannelEvent();

  channel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCDataChannelEvent */, "channel");
}

class BlinkRTCIceCandidate {
  static final instance = new BlinkRTCIceCandidate();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("RTCIceCandidate");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("RTCIceCandidate", [__arg_0]);

  candidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCIceCandidate */, "candidate");

  candidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCIceCandidate */, "candidate", __arg_0);

  sdpMLineIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCIceCandidate */, "sdpMLineIndex");

  sdpMLineIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* RTCIceCandidate */, "sdpMLineIndex", __arg_0);

  sdpMid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCIceCandidate */, "sdpMid");

  sdpMid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCIceCandidate */, "sdpMid", __arg_0);
}

class BlinkRTCIceCandidateEvent extends BlinkEvent {
  static final instance = new BlinkRTCIceCandidateEvent();

  candidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCIceCandidateEvent */, "candidate");
}

class BlinkRTCPeerConnection extends BlinkEventTarget {
  static final instance = new BlinkRTCPeerConnection();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("webkitRTCPeerConnection");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("webkitRTCPeerConnection", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("webkitRTCPeerConnection", [__arg_0, __arg_1]);

  iceConnectionState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "iceConnectionState");

  iceGatheringState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "iceGatheringState");

  localDescription_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "localDescription");

  onaddstream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "onaddstream");

  onaddstream_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* RTCPeerConnection */, "onaddstream", __arg_0);

  ondatachannel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "ondatachannel");

  ondatachannel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* RTCPeerConnection */, "ondatachannel", __arg_0);

  onicecandidate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "onicecandidate");

  onicecandidate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* RTCPeerConnection */, "onicecandidate", __arg_0);

  oniceconnectionstatechange_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* RTCPeerConnection */, "oniceconnectionstatechange");

  oniceconnectionstatechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* RTCPeerConnection */, "oniceconnectionstatechange", __arg_0);

  onnegotiationneeded_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "onnegotiationneeded");

  onnegotiationneeded_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* RTCPeerConnection */, "onnegotiationneeded", __arg_0);

  onremovestream_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "onremovestream");

  onremovestream_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* RTCPeerConnection */, "onremovestream", __arg_0);

  onsignalingstatechange_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* RTCPeerConnection */, "onsignalingstatechange");

  onsignalingstatechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* RTCPeerConnection */, "onsignalingstatechange", __arg_0);

  remoteDescription_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "remoteDescription");

  signalingState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCPeerConnection */, "signalingState");

  addIceCandidate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "addIceCandidate", []);

  addIceCandidate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "addIceCandidate", [__arg_0]);

  addIceCandidate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "addIceCandidate", [__arg_0, __arg_1]);

  addIceCandidate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "addIceCandidate", [__arg_0, __arg_1, __arg_2]);

  addStream_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "addStream", []);

  addStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "addStream", [__arg_0]);

  addStream_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "addStream", [__arg_0, __arg_1]);

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "close", []);

  createAnswer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "createAnswer", []);

  createAnswer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "createAnswer", [__arg_0]);

  createAnswer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "createAnswer", [__arg_0, __arg_1]);

  createAnswer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "createAnswer", [__arg_0, __arg_1, __arg_2]);

  createDTMFSender_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "createDTMFSender", []);

  createDTMFSender_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "createDTMFSender", [__arg_0]);

  createDataChannel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "createDataChannel", []);

  createDataChannel_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "createDataChannel", [__arg_0]);

  createDataChannel_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "createDataChannel", [__arg_0, __arg_1]);

  createOffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "createOffer", []);

  createOffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "createOffer", [__arg_0]);

  createOffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "createOffer", [__arg_0, __arg_1]);

  createOffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "createOffer", [__arg_0, __arg_1, __arg_2]);

  generateCertificate_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "RTCPeerConnection") /* RTCPeerConnection */,
      "generateCertificate",
      []);

  generateCertificate_Callback_1_(__arg_0) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "RTCPeerConnection") /* RTCPeerConnection */,
          "generateCertificate",
          [__arg_0]);

  getLocalStreams_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "getLocalStreams", []);

  getRemoteStreams_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "getRemoteStreams", []);

  getStats_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "getStats", []);

  getStats_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "getStats", [__arg_0]);

  getStats_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "getStats", [__arg_0, __arg_1]);

  getStreamById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "getStreamById", []);

  getStreamById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "getStreamById", [__arg_0]);

  removeStream_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "removeStream", []);

  removeStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "removeStream", [__arg_0]);

  setLocalDescription_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "setLocalDescription", []);

  setLocalDescription_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "setLocalDescription", [__arg_0]);

  setLocalDescription_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "setLocalDescription", [__arg_0, __arg_1]);

  setLocalDescription_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "setLocalDescription", [__arg_0, __arg_1, __arg_2]);

  setRemoteDescription_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "setRemoteDescription", []);

  setRemoteDescription_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "setRemoteDescription", [__arg_0]);

  setRemoteDescription_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "setRemoteDescription", [__arg_0, __arg_1]);

  setRemoteDescription_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* RTCPeerConnection */,
          "setRemoteDescription", [__arg_0, __arg_1, __arg_2]);

  updateIce_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "updateIce", []);

  updateIce_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCPeerConnection */, "updateIce", [__arg_0]);

  updateIce_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnection */, "updateIce", [__arg_0, __arg_1]);
}

class BlinkRTCPeerConnectionErrorCallback {
  static final instance = new BlinkRTCPeerConnectionErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* RTCPeerConnectionErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCPeerConnectionErrorCallback */, "handleEvent", [__arg_0]);
}

class BlinkRTCSessionDescription {
  static final instance = new BlinkRTCSessionDescription();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("RTCSessionDescription");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("RTCSessionDescription", [__arg_0]);

  sdp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCSessionDescription */, "sdp");

  sdp_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCSessionDescription */, "sdp", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCSessionDescription */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RTCSessionDescription */, "type", __arg_0);
}

class BlinkRTCSessionDescriptionCallback {
  static final instance = new BlinkRTCSessionDescriptionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCSessionDescriptionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RTCSessionDescriptionCallback */, "handleEvent", [__arg_0]);
}

class BlinkRTCStatsCallback {
  static final instance = new BlinkRTCStatsCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsCallback */, "handleEvent", [__arg_0]);
}

class BlinkRTCStatsReport {
  static final instance = new BlinkRTCStatsReport();

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* RTCStatsReport */, "id");

  timestamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCStatsReport */, "timestamp");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RTCStatsReport */, "type");

  names_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsReport */, "names", []);

  stat_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsReport */, "stat", []);

  stat_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsReport */, "stat", [__arg_0]);
}

class BlinkRTCStatsResponse {
  static final instance = new BlinkRTCStatsResponse();

  namedItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsResponse */, "namedItem", []);

  namedItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsResponse */, "namedItem", [__arg_0]);

  result_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RTCStatsResponse */, "result", []);
}

class BlinkRadioNodeList extends BlinkNodeList {
  static final instance = new BlinkRadioNodeList();

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RadioNodeList */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* RadioNodeList */, "value", __arg_0);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RadioNodeList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* RadioNodeList */, "item", [__arg_0]);
}

class BlinkRange {
  static final instance = new BlinkRange();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Range");

  collapsed_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Range */, "collapsed");

  commonAncestorContainer_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Range */, "commonAncestorContainer");

  endContainer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Range */, "endContainer");

  endOffset_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Range */, "endOffset");

  startContainer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Range */, "startContainer");

  startOffset_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Range */, "startOffset");

  cloneContents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "cloneContents", []);

  cloneRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "cloneRange", []);

  collapse_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Range */, "collapse", []);

  collapse_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "collapse", [__arg_0]);

  compareBoundaryPoints_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "compareBoundaryPoints", []);

  compareBoundaryPoints_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Range */, "compareBoundaryPoints", [__arg_0]);

  compareBoundaryPoints_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Range */, "compareBoundaryPoints", [__arg_0, __arg_1]);

  comparePoint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "comparePoint", []);

  comparePoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "comparePoint", [__arg_0]);

  comparePoint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Range */, "comparePoint", [__arg_0, __arg_1]);

  createContextualFragment_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "createContextualFragment", []);

  createContextualFragment_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Range */, "createContextualFragment", [__arg_0]);

  deleteContents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "deleteContents", []);

  detach_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Range */, "detach", []);

  expand_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Range */, "expand", []);

  expand_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "expand", [__arg_0]);

  extractContents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "extractContents", []);

  getBoundingClientRect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "getBoundingClientRect", []);

  getClientRects_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "getClientRects", []);

  insertNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "insertNode", []);

  insertNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "insertNode", [__arg_0]);

  intersectsNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "intersectsNode", []);

  intersectsNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "intersectsNode", [__arg_0]);

  isPointInRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "isPointInRange", []);

  isPointInRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "isPointInRange", [__arg_0]);

  isPointInRange_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Range */, "isPointInRange", [__arg_0, __arg_1]);

  selectNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "selectNode", []);

  selectNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "selectNode", [__arg_0]);

  selectNodeContents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "selectNodeContents", []);

  selectNodeContents_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "selectNodeContents", [__arg_0]);

  setEnd_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Range */, "setEnd", []);

  setEnd_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setEnd", [__arg_0]);

  setEnd_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setEnd", [__arg_0, __arg_1]);

  setEndAfter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setEndAfter", []);

  setEndAfter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setEndAfter", [__arg_0]);

  setEndBefore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setEndBefore", []);

  setEndBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setEndBefore", [__arg_0]);

  setStart_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Range */, "setStart", []);

  setStart_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setStart", [__arg_0]);

  setStart_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setStart", [__arg_0, __arg_1]);

  setStartAfter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setStartAfter", []);

  setStartAfter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setStartAfter", [__arg_0]);

  setStartBefore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setStartBefore", []);

  setStartBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "setStartBefore", [__arg_0]);

  surroundContents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "surroundContents", []);

  surroundContents_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Range */, "surroundContents", [__arg_0]);
}

class BlinkReadableByteStream {
  static final instance = new BlinkReadableByteStream();

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableByteStream */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableByteStream */, "cancel", [__arg_0]);

  getReader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableByteStream */, "getReader", []);
}

class BlinkReadableByteStreamReader {
  static final instance = new BlinkReadableByteStreamReader();

  closed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ReadableByteStreamReader */, "closed");

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableByteStreamReader */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableByteStreamReader */, "cancel", [__arg_0]);

  read_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableByteStreamReader */, "read", []);

  releaseLock_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableByteStreamReader */, "releaseLock", []);
}

class BlinkReadableStreamReader {
  static final instance = new BlinkReadableStreamReader();

  closed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ReadableStreamReader */, "closed");

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableStreamReader */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableStreamReader */, "cancel", [__arg_0]);

  read_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableStreamReader */, "read", []);

  releaseLock_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ReadableStreamReader */, "releaseLock", []);
}

class BlinkRelatedEvent extends BlinkEvent {
  static final instance = new BlinkRelatedEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("RelatedEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("RelatedEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("RelatedEvent", [__arg_0, __arg_1]);

  relatedTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* RelatedEvent */, "relatedTarget");
}

class BlinkRequest {
  static final instance = new BlinkRequest();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Request");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Request", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("Request", [__arg_0, __arg_1]);

  credentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Request */, "credentials");

  headers_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Request */, "headers");

  integrity_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Request */, "integrity");

  mode_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Request */, "mode");

  redirect_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Request */, "redirect");

  referrer_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Request */, "referrer");

  url_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Request */, "url");

  clone_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Request */, "clone", []);
}

class BlinkRequestAnimationFrameCallback {
  static final instance = new BlinkRequestAnimationFrameCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* RequestAnimationFrameCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* RequestAnimationFrameCallback */, "handleEvent", [__arg_0]);
}

class BlinkResourceProgressEvent extends BlinkProgressEvent {
  static final instance = new BlinkResourceProgressEvent();

  url_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ResourceProgressEvent */, "url");
}

class BlinkResponse {
  static final instance = new BlinkResponse();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Response");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Response", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("Response", [__arg_0, __arg_1]);

  body_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Response */, "body");

  headers_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Response */, "headers");

  ok_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Response */, "ok");

  status_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Response */, "status");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Response */, "type");

  url_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Response */, "url");

  clone_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Response */, "clone", []);

  error_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "Response") /* Response */,
      "error",
      []);

  redirect_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "Response") /* Response */,
      "redirect",
      []);

  redirect_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "Response") /* Response */,
      "redirect",
      [__arg_0]);

  redirect_Callback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(
              js.context, "Response") /* Response */,
          "redirect",
          [__arg_0, __arg_1]);
}

class BlinkRotation extends BlinkTransformComponent {
  static final instance = new BlinkRotation();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Rotation");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Rotation", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("Rotation", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("Rotation", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException
          .callConstructor("Rotation", [__arg_0, __arg_1, __arg_2, __arg_3]);

  angle_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Rotation */, "angle");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Rotation */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Rotation */, "y");

  z_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Rotation */, "z");
}

class BlinkSQLError {
  static final instance = new BlinkSQLError();

  code_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SQLError */, "code");

  message_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SQLError */, "message");
}

class BlinkSQLResultSet {
  static final instance = new BlinkSQLResultSet();

  insertId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SQLResultSet */, "insertId");

  rows_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SQLResultSet */, "rows");

  rowsAffected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SQLResultSet */, "rowsAffected");
}

class BlinkSQLResultSetRowList {
  static final instance = new BlinkSQLResultSetRowList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SQLResultSetRowList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLResultSetRowList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLResultSetRowList */, "item", [__arg_0]);
}

class BlinkSQLStatementCallback {
  static final instance = new BlinkSQLStatementCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLStatementCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLStatementCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SQLStatementCallback */, "handleEvent", [__arg_0, __arg_1]);
}

class BlinkSQLStatementErrorCallback {
  static final instance = new BlinkSQLStatementErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLStatementErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SQLStatementErrorCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SQLStatementErrorCallback */,
          "handleEvent",
          [__arg_0, __arg_1]);
}

class BlinkSQLTransaction {
  static final instance = new BlinkSQLTransaction();

  executeSql_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLTransaction */, "executeSql", []);

  executeSql_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLTransaction */, "executeSql", [__arg_0]);

  executeSql_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLTransaction */, "executeSql", [__arg_0, __arg_1]);

  executeSql_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* SQLTransaction */,
          "executeSql", [__arg_0, __arg_1, __arg_2]);

  executeSql_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* SQLTransaction */,
          "executeSql", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkSQLTransactionCallback {
  static final instance = new BlinkSQLTransactionCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLTransactionCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLTransactionCallback */, "handleEvent", [__arg_0]);
}

class BlinkSQLTransactionErrorCallback {
  static final instance = new BlinkSQLTransactionErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SQLTransactionErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SQLTransactionErrorCallback */, "handleEvent", [__arg_0]);
}

class BlinkSVGAElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGAElement();

  target_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAElement */, "target");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGAngle {
  static final instance = new BlinkSVGAngle();

  unitType_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGAngle */, "unitType");

  value_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGAngle */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAngle */, "value", __arg_0);

  valueAsString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAngle */, "valueAsString");

  valueAsString_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SVGAngle */, "valueAsString", __arg_0);

  valueInSpecifiedUnits_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* SVGAngle */, "valueInSpecifiedUnits");

  valueInSpecifiedUnits_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SVGAngle */, "valueInSpecifiedUnits", __arg_0);

  convertToSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAngle */, "convertToSpecifiedUnits", []);

  convertToSpecifiedUnits_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGAngle */, "convertToSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAngle */, "newValueSpecifiedUnits", []);

  newValueSpecifiedUnits_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGAngle */, "newValueSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGAngle */, "newValueSpecifiedUnits", [__arg_0, __arg_1]);
}

class BlinkSVGAnimateElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateElement();
}

class BlinkSVGAnimateMotionElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateMotionElement();
}

class BlinkSVGAnimateTransformElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateTransformElement();
}

class BlinkSVGAnimatedAngle {
  static final instance = new BlinkSVGAnimatedAngle();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedAngle */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedAngle */, "baseVal");
}

class BlinkSVGAnimatedBoolean {
  static final instance = new BlinkSVGAnimatedBoolean();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedBoolean */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedBoolean */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimatedBoolean */, "baseVal", __arg_0);
}

class BlinkSVGAnimatedEnumeration {
  static final instance = new BlinkSVGAnimatedEnumeration();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedEnumeration */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedEnumeration */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimatedEnumeration */, "baseVal", __arg_0);
}

class BlinkSVGAnimatedInteger {
  static final instance = new BlinkSVGAnimatedInteger();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedInteger */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedInteger */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimatedInteger */, "baseVal", __arg_0);
}

class BlinkSVGAnimatedLength {
  static final instance = new BlinkSVGAnimatedLength();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedLength */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedLength */, "baseVal");
}

class BlinkSVGAnimatedLengthList {
  static final instance = new BlinkSVGAnimatedLengthList();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedLengthList */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedLengthList */, "baseVal");
}

class BlinkSVGAnimatedNumber {
  static final instance = new BlinkSVGAnimatedNumber();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedNumber */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedNumber */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimatedNumber */, "baseVal", __arg_0);
}

class BlinkSVGAnimatedNumberList {
  static final instance = new BlinkSVGAnimatedNumberList();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedNumberList */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedNumberList */, "baseVal");
}

class BlinkSVGAnimatedPreserveAspectRatio {
  static final instance = new BlinkSVGAnimatedPreserveAspectRatio();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedPreserveAspectRatio */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedPreserveAspectRatio */, "baseVal");
}

class BlinkSVGAnimatedRect {
  static final instance = new BlinkSVGAnimatedRect();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedRect */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedRect */, "baseVal");
}

class BlinkSVGAnimatedString {
  static final instance = new BlinkSVGAnimatedString();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedString */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedString */, "baseVal");

  baseVal_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimatedString */, "baseVal", __arg_0);
}

class BlinkSVGAnimatedTransformList {
  static final instance = new BlinkSVGAnimatedTransformList();

  animVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedTransformList */, "animVal");

  baseVal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimatedTransformList */, "baseVal");
}

class BlinkSVGAnimationElement extends BlinkSVGElement {
  static final instance = new BlinkSVGAnimationElement();

  onbegin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimationElement */, "onbegin");

  onbegin_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimationElement */, "onbegin", __arg_0);

  onend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimationElement */, "onend");

  onend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimationElement */, "onend", __arg_0);

  onrepeat_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimationElement */, "onrepeat");

  onrepeat_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGAnimationElement */, "onrepeat", __arg_0);

  targetElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGAnimationElement */, "targetElement");

  beginElement_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "beginElement", []);

  beginElementAt_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "beginElementAt", []);

  beginElementAt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "beginElementAt", [__arg_0]);

  endElement_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "endElement", []);

  endElementAt_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "endElementAt", []);

  endElementAt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "endElementAt", [__arg_0]);

  getCurrentTime_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "getCurrentTime", []);

  getSimpleDuration_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "getSimpleDuration", []);

  getStartTime_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGAnimationElement */, "getStartTime", []);

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "systemLanguage");
}

class BlinkSVGCircleElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGCircleElement();

  cx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGCircleElement */, "cx");

  cy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGCircleElement */, "cy");

  r_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGCircleElement */, "r");
}

class BlinkSVGClipPathElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGClipPathElement();

  clipPathUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGClipPathElement */, "clipPathUnits");
}

class BlinkSVGComponentTransferFunctionElement extends BlinkSVGElement {
  static final instance = new BlinkSVGComponentTransferFunctionElement();

  amplitude_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGComponentTransferFunctionElement */, "amplitude");

  exponent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGComponentTransferFunctionElement */, "exponent");

  intercept_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGComponentTransferFunctionElement */, "intercept");

  offset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGComponentTransferFunctionElement */, "offset");

  slope_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGComponentTransferFunctionElement */, "slope");

  tableValues_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGComponentTransferFunctionElement */, "tableValues");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGComponentTransferFunctionElement */, "type");
}

class BlinkSVGCursorElement extends BlinkSVGElement {
  static final instance = new BlinkSVGCursorElement();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGCursorElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGCursorElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "systemLanguage");
}

class BlinkSVGDefsElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGDefsElement();
}

class BlinkSVGDescElement extends BlinkSVGElement {
  static final instance = new BlinkSVGDescElement();
}

class BlinkSVGDiscardElement extends BlinkSVGElement {
  static final instance = new BlinkSVGDiscardElement();
}

class BlinkSVGElement extends BlinkElement {
  static final instance = new BlinkSVGElement();

  className_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGElement */, "className");

  ownerSVGElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGElement */, "ownerSVGElement");

  style_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGElement */, "style");

  tabIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGElement */, "tabIndex");

  tabIndex_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGElement */, "tabIndex", __arg_0);

  viewportElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGElement */, "viewportElement");

  blur_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGElement */, "blur", []);

  focus_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGElement */, "focus", []);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchstart", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);
}

class BlinkSVGEllipseElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGEllipseElement();

  cx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGEllipseElement */, "cx");

  cy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGEllipseElement */, "cy");

  rx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGEllipseElement */, "rx");

  ry_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGEllipseElement */, "ry");
}

class BlinkSVGFEBlendElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEBlendElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEBlendElement */, "in1");

  in2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEBlendElement */, "in2");

  mode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEBlendElement */, "mode");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEColorMatrixElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEColorMatrixElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEColorMatrixElement */, "in1");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEColorMatrixElement */, "type");

  values_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEColorMatrixElement */, "values");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEComponentTransferElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEComponentTransferElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEComponentTransferElement */, "in1");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFECompositeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFECompositeElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFECompositeElement */, "in1");

  in2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFECompositeElement */, "in2");

  k1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFECompositeElement */, "k1");

  k2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFECompositeElement */, "k2");

  k3_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFECompositeElement */, "k3");

  k4_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFECompositeElement */, "k4");

  operator_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFECompositeElement */, "operator");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEConvolveMatrixElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEConvolveMatrixElement();

  bias_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "bias");

  divisor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "divisor");

  edgeMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "edgeMode");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "in1");

  kernelMatrix_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "kernelMatrix");

  kernelUnitLengthX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "kernelUnitLengthX");

  kernelUnitLengthY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "kernelUnitLengthY");

  orderX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "orderX");

  orderY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "orderY");

  preserveAlpha_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "preserveAlpha");

  targetX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "targetX");

  targetY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEConvolveMatrixElement */, "targetY");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEDiffuseLightingElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDiffuseLightingElement();

  diffuseConstant_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDiffuseLightingElement */, "diffuseConstant");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDiffuseLightingElement */, "in1");

  kernelUnitLengthX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDiffuseLightingElement */, "kernelUnitLengthX");

  kernelUnitLengthY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDiffuseLightingElement */, "kernelUnitLengthY");

  surfaceScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDiffuseLightingElement */, "surfaceScale");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEDisplacementMapElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDisplacementMapElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDisplacementMapElement */, "in1");

  in2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDisplacementMapElement */, "in2");

  scale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDisplacementMapElement */, "scale");

  xChannelSelector_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDisplacementMapElement */, "xChannelSelector");

  yChannelSelector_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDisplacementMapElement */, "yChannelSelector");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEDistantLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDistantLightElement();

  azimuth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDistantLightElement */, "azimuth");

  elevation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDistantLightElement */, "elevation");
}

class BlinkSVGFEDropShadowElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDropShadowElement();

  dx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDropShadowElement */, "dx");

  dy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDropShadowElement */, "dy");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDropShadowElement */, "in1");

  stdDeviationX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDropShadowElement */, "stdDeviationX");

  stdDeviationY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEDropShadowElement */, "stdDeviationY");

  setStdDeviation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGFEDropShadowElement */, "setStdDeviation", []);

  setStdDeviation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGFEDropShadowElement */, "setStdDeviation", [__arg_0]);

  setStdDeviation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* SVGFEDropShadowElement */,
          "setStdDeviation", [__arg_0, __arg_1]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEFloodElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEFloodElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEFuncAElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncAElement();
}

class BlinkSVGFEFuncBElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncBElement();
}

class BlinkSVGFEFuncGElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncGElement();
}

class BlinkSVGFEFuncRElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncRElement();
}

class BlinkSVGFEGaussianBlurElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEGaussianBlurElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEGaussianBlurElement */, "in1");

  stdDeviationX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEGaussianBlurElement */, "stdDeviationX");

  stdDeviationY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEGaussianBlurElement */, "stdDeviationY");

  setStdDeviation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGFEGaussianBlurElement */, "setStdDeviation", []);

  setStdDeviation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGFEGaussianBlurElement */, "setStdDeviation", [__arg_0]);

  setStdDeviation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGFEGaussianBlurElement */,
          "setStdDeviation",
          [__arg_0, __arg_1]);

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEImageElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEImageElement();

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEImageElement */, "preserveAspectRatio");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGFEMergeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMergeElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEMergeNodeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMergeNodeElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEMergeNodeElement */, "in1");
}

class BlinkSVGFEMorphologyElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMorphologyElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEMorphologyElement */, "in1");

  operator_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEMorphologyElement */, "operator");

  radiusX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEMorphologyElement */, "radiusX");

  radiusY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEMorphologyElement */, "radiusY");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEOffsetElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEOffsetElement();

  dx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEOffsetElement */, "dx");

  dy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEOffsetElement */, "dy");

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEOffsetElement */, "in1");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFEPointLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEPointLightElement();

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEPointLightElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEPointLightElement */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFEPointLightElement */, "z");
}

class BlinkSVGFESpecularLightingElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFESpecularLightingElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpecularLightingElement */, "in1");

  kernelUnitLengthX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpecularLightingElement */, "kernelUnitLengthX");

  kernelUnitLengthY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpecularLightingElement */, "kernelUnitLengthY");

  specularConstant_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpecularLightingElement */, "specularConstant");

  specularExponent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpecularLightingElement */, "specularExponent");

  surfaceScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpecularLightingElement */, "surfaceScale");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFESpotLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFESpotLightElement();

  limitingConeAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "limitingConeAngle");

  pointsAtX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "pointsAtX");

  pointsAtY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "pointsAtY");

  pointsAtZ_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "pointsAtZ");

  specularExponent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "specularExponent");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "y");

  z_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFESpotLightElement */, "z");
}

class BlinkSVGFETileElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFETileElement();

  in1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFETileElement */, "in1");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFETurbulenceElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFETurbulenceElement();

  baseFrequencyX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFETurbulenceElement */, "baseFrequencyX");

  baseFrequencyY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFETurbulenceElement */, "baseFrequencyY");

  numOctaves_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFETurbulenceElement */, "numOctaves");

  seed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFETurbulenceElement */, "seed");

  stitchTiles_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFETurbulenceElement */, "stitchTiles");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFETurbulenceElement */, "type");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFilterElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFilterElement();

  filterUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterElement */, "filterUnits");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterElement */, "height");

  primitiveUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterElement */, "primitiveUnits");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGFilterPrimitiveStandardAttributes {
  static final instance = new BlinkSVGFilterPrimitiveStandardAttributes();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "height");

  result_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "result");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFilterPrimitiveStandardAttributes */, "y");
}

class BlinkSVGFitToViewBox {
  static final instance = new BlinkSVGFitToViewBox();

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "viewBox");
}

class BlinkSVGForeignObjectElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGForeignObjectElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGForeignObjectElement */, "height");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGForeignObjectElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGForeignObjectElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGForeignObjectElement */, "y");
}

class BlinkSVGGElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGGElement();
}

class BlinkSVGGeometryElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGGeometryElement();

  isPointInFill_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGGeometryElement */, "isPointInFill", []);

  isPointInFill_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGGeometryElement */, "isPointInFill", [__arg_0]);

  isPointInStroke_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGGeometryElement */, "isPointInStroke", []);

  isPointInStroke_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGGeometryElement */, "isPointInStroke", [__arg_0]);
}

class BlinkSVGGradientElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGradientElement();

  gradientTransform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGGradientElement */, "gradientTransform");

  gradientUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGGradientElement */, "gradientUnits");

  spreadMethod_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGGradientElement */, "spreadMethod");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGGraphicsElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGraphicsElement();

  farthestViewportElement_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* SVGGraphicsElement */, "farthestViewportElement");

  nearestViewportElement_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* SVGGraphicsElement */, "nearestViewportElement");

  transform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGGraphicsElement */, "transform");

  getBBox_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGGraphicsElement */, "getBBox", []);

  getCTM_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGGraphicsElement */, "getCTM", []);

  getScreenCTM_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGGraphicsElement */, "getScreenCTM", []);

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "systemLanguage");
}

class BlinkSVGImageElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGImageElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGImageElement */, "height");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGImageElement */, "preserveAspectRatio");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGImageElement */, "width");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGImageElement */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGImageElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGLength {
  static final instance = new BlinkSVGLength();

  unitType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLength */, "unitType");

  value_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGLength */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGLength */, "value", __arg_0);

  valueAsString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLength */, "valueAsString");

  valueAsString_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SVGLength */, "valueAsString", __arg_0);

  valueInSpecifiedUnits_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* SVGLength */, "valueInSpecifiedUnits");

  valueInSpecifiedUnits_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SVGLength */, "valueInSpecifiedUnits", __arg_0);

  convertToSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLength */, "convertToSpecifiedUnits", []);

  convertToSpecifiedUnits_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGLength */, "convertToSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLength */, "newValueSpecifiedUnits", []);

  newValueSpecifiedUnits_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGLength */, "newValueSpecifiedUnits", [__arg_0]);

  newValueSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGLength */, "newValueSpecifiedUnits", [__arg_0, __arg_1]);
}

class BlinkSVGLengthList {
  static final instance = new BlinkSVGLengthList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLengthList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLengthList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGLengthList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGLengthList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGLengthList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGLengthList */, "replaceItem", [__arg_0, __arg_1]);
}

class BlinkSVGLineElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGLineElement();

  x1_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "x1");

  x2_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "x2");

  y1_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "y1");

  y2_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGLineElement */, "y2");
}

class BlinkSVGLinearGradientElement extends BlinkSVGGradientElement {
  static final instance = new BlinkSVGLinearGradientElement();

  x1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLinearGradientElement */, "x1");

  x2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLinearGradientElement */, "x2");

  y1_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLinearGradientElement */, "y1");

  y2_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGLinearGradientElement */, "y2");
}

class BlinkSVGMPathElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMPathElement();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGMarkerElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMarkerElement();

  markerHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMarkerElement */, "markerHeight");

  markerUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMarkerElement */, "markerUnits");

  markerWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMarkerElement */, "markerWidth");

  orientAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMarkerElement */, "orientAngle");

  orientType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMarkerElement */, "orientType");

  refX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMarkerElement */, "refX");

  refY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMarkerElement */, "refY");

  setOrientToAngle_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMarkerElement */, "setOrientToAngle", []);

  setOrientToAngle_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMarkerElement */, "setOrientToAngle", [__arg_0]);

  setOrientToAuto_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMarkerElement */, "setOrientToAuto", []);

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "viewBox");
}

class BlinkSVGMaskElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMaskElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMaskElement */, "height");

  maskContentUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMaskElement */, "maskContentUnits");

  maskUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMaskElement */, "maskUnits");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGMaskElement */, "width");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMaskElement */, "y");

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "systemLanguage");
}

class BlinkSVGMatrix {
  static final instance = new BlinkSVGMatrix();

  a_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "a");

  a_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGMatrix */, "a", __arg_0);

  b_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "b");

  b_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGMatrix */, "b", __arg_0);

  c_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "c");

  c_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGMatrix */, "c", __arg_0);

  d_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "d");

  d_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGMatrix */, "d", __arg_0);

  e_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "e");

  e_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGMatrix */, "e", __arg_0);

  f_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGMatrix */, "f");

  f_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGMatrix */, "f", __arg_0);

  flipX_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "flipX", []);

  flipY_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "flipY", []);

  inverse_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "inverse", []);

  multiply_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "multiply", []);

  multiply_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "multiply", [__arg_0]);

  rotate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "rotate", []);

  rotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "rotate", [__arg_0]);

  rotateFromVector_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "rotateFromVector", []);

  rotateFromVector_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "rotateFromVector", [__arg_0]);

  rotateFromVector_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGMatrix */, "rotateFromVector", [__arg_0, __arg_1]);

  scale_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "scale", []);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "scale", [__arg_0]);

  scaleNonUniform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "scaleNonUniform", []);

  scaleNonUniform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "scaleNonUniform", [__arg_0]);

  scaleNonUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGMatrix */, "scaleNonUniform", [__arg_0, __arg_1]);

  skewX_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "skewX", []);

  skewX_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "skewX", [__arg_0]);

  skewY_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "skewY", []);

  skewY_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "skewY", [__arg_0]);

  translate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "translate", []);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGMatrix */, "translate", [__arg_0, __arg_1]);
}

class BlinkSVGMetadataElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMetadataElement();
}

class BlinkSVGNumber {
  static final instance = new BlinkSVGNumber();

  value_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGNumber */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGNumber */, "value", __arg_0);
}

class BlinkSVGNumberList {
  static final instance = new BlinkSVGNumberList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGNumberList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGNumberList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGNumberList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGNumberList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGNumberList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGNumberList */, "replaceItem", [__arg_0, __arg_1]);
}

class BlinkSVGPathElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPathElement();

  pathLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPathElement */, "pathLength");

  getPathSegAtLength_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPathElement */, "getPathSegAtLength", []);

  getPathSegAtLength_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPathElement */, "getPathSegAtLength", [__arg_0]);

  getPointAtLength_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPathElement */, "getPointAtLength", []);

  getPointAtLength_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPathElement */, "getPointAtLength", [__arg_0]);

  getTotalLength_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPathElement */, "getTotalLength", []);
}

class BlinkSVGPatternElement extends BlinkSVGElement {
  static final instance = new BlinkSVGPatternElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPatternElement */, "height");

  patternContentUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPatternElement */, "patternContentUnits");

  patternTransform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPatternElement */, "patternTransform");

  patternUnits_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPatternElement */, "patternUnits");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPatternElement */, "width");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPatternElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPatternElement */, "y");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "viewBox");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "systemLanguage");
}

class BlinkSVGPoint {
  static final instance = new BlinkSVGPoint();

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGPoint */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGPoint */, "x", __arg_0);

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGPoint */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGPoint */, "y", __arg_0);

  matrixTransform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPoint */, "matrixTransform", []);

  matrixTransform_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPoint */, "matrixTransform", [__arg_0]);
}

class BlinkSVGPointList {
  static final instance = new BlinkSVGPointList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPointList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPointList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGPointList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGPointList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGPointList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGPointList */, "replaceItem", [__arg_0, __arg_1]);
}

class BlinkSVGPolygonElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPolygonElement();

  animatedPoints_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPolygonElement */, "animatedPoints");

  points_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPolygonElement */, "points");
}

class BlinkSVGPolylineElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPolylineElement();

  animatedPoints_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPolylineElement */, "animatedPoints");

  points_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPolylineElement */, "points");
}

class BlinkSVGPreserveAspectRatio {
  static final instance = new BlinkSVGPreserveAspectRatio();

  align_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPreserveAspectRatio */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGPreserveAspectRatio */, "align", __arg_0);

  meetOrSlice_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGPreserveAspectRatio */, "meetOrSlice");

  meetOrSlice_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SVGPreserveAspectRatio */, "meetOrSlice", __arg_0);
}

class BlinkSVGRadialGradientElement extends BlinkSVGGradientElement {
  static final instance = new BlinkSVGRadialGradientElement();

  cx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRadialGradientElement */, "cx");

  cy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRadialGradientElement */, "cy");

  fr_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRadialGradientElement */, "fr");

  fx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRadialGradientElement */, "fx");

  fy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRadialGradientElement */, "fy");

  r_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRadialGradientElement */, "r");
}

class BlinkSVGRect {
  static final instance = new BlinkSVGRect();

  height_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGRect */, "height", __arg_0);

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGRect */, "width", __arg_0);

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "x");

  x_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGRect */, "x", __arg_0);

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRect */, "y");

  y_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGRect */, "y", __arg_0);
}

class BlinkSVGRectElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGRectElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRectElement */, "height");

  rx_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "rx");

  ry_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "ry");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGRectElement */, "width");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGRectElement */, "y");
}

class BlinkSVGSVGElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGSVGElement();

  currentScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGSVGElement */, "currentScale");

  currentScale_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SVGSVGElement */, "currentScale", __arg_0);

  currentTranslate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGSVGElement */, "currentTranslate");

  currentView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGSVGElement */, "currentView");

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGSVGElement */, "height");

  useCurrentView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGSVGElement */, "useCurrentView");

  viewport_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGSVGElement */, "viewport");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGSVGElement */, "width");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGSVGElement */, "y");

  animationsPaused_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "animationsPaused", []);

  checkEnclosure_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "checkEnclosure", []);

  checkEnclosure_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "checkEnclosure", [__arg_0]);

  checkEnclosure_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGSVGElement */, "checkEnclosure", [__arg_0, __arg_1]);

  checkIntersection_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "checkIntersection", []);

  checkIntersection_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "checkIntersection", [__arg_0]);

  checkIntersection_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGSVGElement */, "checkIntersection", [__arg_0, __arg_1]);

  createSVGAngle_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "createSVGAngle", []);

  createSVGLength_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "createSVGLength", []);

  createSVGMatrix_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "createSVGMatrix", []);

  createSVGNumber_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "createSVGNumber", []);

  createSVGPoint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "createSVGPoint", []);

  createSVGRect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "createSVGRect", []);

  createSVGTransform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "createSVGTransform", []);

  createSVGTransformFromMatrix_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGSVGElement */, "createSVGTransformFromMatrix", []);

  createSVGTransformFromMatrix_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGSVGElement */, "createSVGTransformFromMatrix", [__arg_0]);

  deselectAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "deselectAll", []);

  forceRedraw_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "forceRedraw", []);

  getCurrentTime_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "getCurrentTime", []);

  getElementById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "getElementById", []);

  getElementById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "getElementById", [__arg_0]);

  getEnclosureList_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "getEnclosureList", []);

  getEnclosureList_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "getEnclosureList", [__arg_0]);

  getEnclosureList_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGSVGElement */, "getEnclosureList", [__arg_0, __arg_1]);

  getIntersectionList_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "getIntersectionList", []);

  getIntersectionList_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "getIntersectionList", [__arg_0]);

  getIntersectionList_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGSVGElement */, "getIntersectionList", [__arg_0, __arg_1]);

  pauseAnimations_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "pauseAnimations", []);

  setCurrentTime_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "setCurrentTime", []);

  setCurrentTime_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "setCurrentTime", [__arg_0]);

  suspendRedraw_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "suspendRedraw", []);

  suspendRedraw_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "suspendRedraw", [__arg_0]);

  unpauseAnimations_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "unpauseAnimations", []);

  unsuspendRedraw_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "unsuspendRedraw", []);

  unsuspendRedraw_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "unsuspendRedraw", [__arg_0]);

  unsuspendRedrawAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGSVGElement */, "unsuspendRedrawAll", []);

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "viewBox");

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);
}

class BlinkSVGScriptElement extends BlinkSVGElement {
  static final instance = new BlinkSVGScriptElement();

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGScriptElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGScriptElement */, "type", __arg_0);

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGSetElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGSetElement();
}

class BlinkSVGStopElement extends BlinkSVGElement {
  static final instance = new BlinkSVGStopElement();

  offset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStopElement */, "offset");
}

class BlinkSVGStringList {
  static final instance = new BlinkSVGStringList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStringList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStringList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGStringList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGStringList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGStringList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGStringList */, "replaceItem", [__arg_0, __arg_1]);
}

class BlinkSVGStyleElement extends BlinkSVGElement {
  static final instance = new BlinkSVGStyleElement();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStyleElement */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGStyleElement */, "disabled", __arg_0);

  media_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStyleElement */, "media");

  media_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGStyleElement */, "media", __arg_0);

  sheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStyleElement */, "sheet");

  title_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStyleElement */, "title");

  title_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGStyleElement */, "title", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGStyleElement */, "type");

  type_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGStyleElement */, "type", __arg_0);
}

class BlinkSVGSwitchElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGSwitchElement();
}

class BlinkSVGSymbolElement extends BlinkSVGElement {
  static final instance = new BlinkSVGSymbolElement();

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "viewBox");
}

class BlinkSVGTSpanElement extends BlinkSVGTextPositioningElement {
  static final instance = new BlinkSVGTSpanElement();
}

class BlinkSVGTests {
  static final instance = new BlinkSVGTests();

  requiredExtensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredExtensions");

  requiredFeatures_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "requiredFeatures");

  systemLanguage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTests */, "systemLanguage");
}

class BlinkSVGTextContentElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGTextContentElement();

  lengthAdjust_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextContentElement */, "lengthAdjust");

  textLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextContentElement */, "textLength");

  getCharNumAtPosition_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getCharNumAtPosition", []);

  getCharNumAtPosition_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getCharNumAtPosition", [__arg_0]);

  getComputedTextLength_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getComputedTextLength", []);

  getEndPositionOfChar_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getEndPositionOfChar", []);

  getEndPositionOfChar_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getEndPositionOfChar", [__arg_0]);

  getExtentOfChar_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTextContentElement */, "getExtentOfChar", []);

  getExtentOfChar_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getExtentOfChar", [__arg_0]);

  getNumberOfChars_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTextContentElement */, "getNumberOfChars", []);

  getRotationOfChar_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTextContentElement */, "getRotationOfChar", []);

  getRotationOfChar_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getRotationOfChar", [__arg_0]);

  getStartPositionOfChar_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getStartPositionOfChar", []);

  getStartPositionOfChar_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */,
          "getStartPositionOfChar", [__arg_0]);

  getSubStringLength_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTextContentElement */, "getSubStringLength", []);

  getSubStringLength_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "getSubStringLength", [__arg_0]);

  getSubStringLength_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */,
          "getSubStringLength", [__arg_0, __arg_1]);

  selectSubString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTextContentElement */, "selectSubString", []);

  selectSubString_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTextContentElement */, "selectSubString", [__arg_0]);

  selectSubString_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* SVGTextContentElement */,
          "selectSubString", [__arg_0, __arg_1]);
}

class BlinkSVGTextElement extends BlinkSVGTextPositioningElement {
  static final instance = new BlinkSVGTextElement();
}

class BlinkSVGTextPathElement extends BlinkSVGTextContentElement {
  static final instance = new BlinkSVGTextPathElement();

  method_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPathElement */, "method");

  spacing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPathElement */, "spacing");

  startOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPathElement */, "startOffset");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGTextPositioningElement extends BlinkSVGTextContentElement {
  static final instance = new BlinkSVGTextPositioningElement();

  dx_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPositioningElement */, "dx");

  dy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPositioningElement */, "dy");

  rotate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPositioningElement */, "rotate");

  x_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPositioningElement */, "x");

  y_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTextPositioningElement */, "y");
}

class BlinkSVGTitleElement extends BlinkSVGElement {
  static final instance = new BlinkSVGTitleElement();
}

class BlinkSVGTransform {
  static final instance = new BlinkSVGTransform();

  angle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTransform */, "angle");

  matrix_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTransform */, "matrix");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGTransform */, "type");

  setMatrix_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setMatrix", []);

  setMatrix_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setMatrix", [__arg_0]);

  setRotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setRotate", [__arg_0]);

  setRotate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setRotate", [__arg_0, __arg_1]);

  setRotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTransform */, "setRotate", [__arg_0, __arg_1, __arg_2]);

  setScale_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setScale", []);

  setScale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setScale", [__arg_0]);

  setScale_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setScale", [__arg_0, __arg_1]);

  setSkewX_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setSkewX", []);

  setSkewX_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setSkewX", [__arg_0]);

  setSkewY_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setSkewY", []);

  setSkewY_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setSkewY", [__arg_0]);

  setTranslate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setTranslate", []);

  setTranslate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransform */, "setTranslate", [__arg_0]);

  setTranslate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTransform */, "setTranslate", [__arg_0, __arg_1]);
}

class BlinkSVGTransformList {
  static final instance = new BlinkSVGTransformList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTransformList */, "length");

  numberOfItems_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGTransformList */, "numberOfItems");

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTransformList */, "__setter__", [__arg_0, __arg_1]);

  appendItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "appendItem", []);

  appendItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "appendItem", [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "clear", []);

  consolidate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "consolidate", []);

  createSVGTransformFromMatrix_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTransformList */, "createSVGTransformFromMatrix", []);

  createSVGTransformFromMatrix_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(mthis /* SVGTransformList */,
          "createSVGTransformFromMatrix", [__arg_0]);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "getItem", [__arg_0]);

  initialize_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "initialize", []);

  initialize_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "initialize", [__arg_0]);

  insertItemBefore_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "insertItemBefore", []);

  insertItemBefore_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "insertItemBefore", [__arg_0]);

  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTransformList */, "insertItemBefore", [__arg_0, __arg_1]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "removeItem", [__arg_0]);

  replaceItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "replaceItem", []);

  replaceItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SVGTransformList */, "replaceItem", [__arg_0]);

  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SVGTransformList */, "replaceItem", [__arg_0, __arg_1]);
}

class BlinkSVGURIReference {
  static final instance = new BlinkSVGURIReference();

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGUnitTypes {
  static final instance = new BlinkSVGUnitTypes();
}

class BlinkSVGUseElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGUseElement();

  height_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGUseElement */, "height");

  width_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGUseElement */, "width");

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGUseElement */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SVGUseElement */, "y");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGURIReference */, "href");
}

class BlinkSVGViewElement extends BlinkSVGElement {
  static final instance = new BlinkSVGViewElement();

  viewTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGViewElement */, "viewTarget");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "viewBox");

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);
}

class BlinkSVGViewSpec {
  static final instance = new BlinkSVGViewSpec();

  preserveAspectRatioString_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* SVGViewSpec */, "preserveAspectRatioString");

  transform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGViewSpec */, "transform");

  transformString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGViewSpec */, "transformString");

  viewBoxString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGViewSpec */, "viewBoxString");

  viewTarget_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGViewSpec */, "viewTarget");

  viewTargetString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGViewSpec */, "viewTargetString");

  preserveAspectRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "preserveAspectRatio");

  viewBox_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGFitToViewBox */, "viewBox");

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);
}

class BlinkSVGZoomAndPan {
  static final instance = new BlinkSVGZoomAndPan();

  zoomAndPan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan");

  zoomAndPan_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SVGZoomAndPan */, "zoomAndPan", __arg_0);
}

class BlinkSVGZoomEvent extends BlinkUIEvent {
  static final instance = new BlinkSVGZoomEvent();

  newScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomEvent */, "newScale");

  newTranslate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomEvent */, "newTranslate");

  previousScale_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomEvent */, "previousScale");

  previousTranslate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomEvent */, "previousTranslate");

  zoomRectScreen_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SVGZoomEvent */, "zoomRectScreen");
}

class BlinkScreen {
  static final instance = new BlinkScreen();

  availHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Screen */, "availHeight");

  availLeft_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "availLeft");

  availTop_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "availTop");

  availWidth_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "availWidth");

  colorDepth_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "colorDepth");

  height_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "height");

  keepAwake_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "keepAwake");

  keepAwake_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Screen */, "keepAwake", __arg_0);

  orientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Screen */, "orientation");

  pixelDepth_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "pixelDepth");

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Screen */, "width");
}

class BlinkScreenOrientation extends BlinkEventTarget {
  static final instance = new BlinkScreenOrientation();

  angle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScreenOrientation */, "angle");

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScreenOrientation */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ScreenOrientation */, "onchange", __arg_0);

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScreenOrientation */, "type");

  lock_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ScreenOrientation */, "lock", []);

  lock_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ScreenOrientation */, "lock", [__arg_0]);

  unlock_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ScreenOrientation */, "unlock", []);
}

class BlinkScriptProcessorNode extends BlinkAudioNode {
  static final instance = new BlinkScriptProcessorNode();

  bufferSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScriptProcessorNode */, "bufferSize");

  onaudioprocess_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScriptProcessorNode */, "onaudioprocess");

  onaudioprocess_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* ScriptProcessorNode */, "onaudioprocess", __arg_0);

  setEventListener_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ScriptProcessorNode */, "setEventListener", []);

  setEventListener_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ScriptProcessorNode */, "setEventListener", [__arg_0]);
}

class BlinkScrollState {
  static final instance = new BlinkScrollState();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("ScrollState");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("ScrollState", [__arg_0]);

  deltaGranularity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "deltaGranularity");

  deltaX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "deltaX");

  deltaY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "deltaY");

  fromUserInput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "fromUserInput");

  inInertialPhase_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "inInertialPhase");

  isBeginning_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "isBeginning");

  isDirectManipulation_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* ScrollState */, "isDirectManipulation");

  isEnding_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "isEnding");

  shouldPropagate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "shouldPropagate");

  startPositionX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "startPositionX");

  startPositionY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "startPositionY");

  velocityX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "velocityX");

  velocityY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ScrollState */, "velocityY");

  consumeDelta_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ScrollState */, "consumeDelta", []);

  consumeDelta_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ScrollState */, "consumeDelta", [__arg_0]);

  consumeDelta_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ScrollState */, "consumeDelta", [__arg_0, __arg_1]);

  distributeToScrollChainDescendant_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ScrollState */, "distributeToScrollChainDescendant", []);
}

class BlinkScrollStateCallback {
  static final instance = new BlinkScrollStateCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ScrollStateCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ScrollStateCallback */, "handleEvent", [__arg_0]);
}

class BlinkSecurityPolicyViolationEvent extends BlinkEvent {
  static final instance = new BlinkSecurityPolicyViolationEvent();

  constructorCallback_0_() => Blink_JsNative_DomException
      .callConstructor0("SecurityPolicyViolationEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("SecurityPolicyViolationEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("SecurityPolicyViolationEvent", [__arg_0, __arg_1]);

  blockedURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "blockedURI");

  columnNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "columnNumber");

  documentURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "documentURI");

  effectiveDirective_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "effectiveDirective");

  lineNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "lineNumber");

  originalPolicy_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "originalPolicy");

  referrer_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "referrer");

  sourceFile_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "sourceFile");

  statusCode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "statusCode");

  violatedDirective_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SecurityPolicyViolationEvent */, "violatedDirective");
}

class BlinkSelection {
  static final instance = new BlinkSelection();

  anchorNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "anchorNode");

  anchorOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "anchorOffset");

  baseNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "baseNode");

  baseOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "baseOffset");

  extentNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "extentNode");

  extentOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "extentOffset");

  focusNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "focusNode");

  focusOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "focusOffset");

  isCollapsed_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "isCollapsed");

  rangeCount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Selection */, "rangeCount");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Selection */, "type");

  addRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "addRange", []);

  addRange_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "addRange", [__arg_0]);

  collapse_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "collapse", []);

  collapse_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "collapse", [__arg_0]);

  collapse_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "collapse", [__arg_0, __arg_1]);

  collapseToEnd_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "collapseToEnd", []);

  collapseToStart_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "collapseToStart", []);

  containsNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "containsNode", []);

  containsNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "containsNode", [__arg_0]);

  containsNode_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Selection */, "containsNode", [__arg_0, __arg_1]);

  deleteFromDocument_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "deleteFromDocument", []);

  empty_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "empty", []);

  extend_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "extend", []);

  extend_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "extend", [__arg_0]);

  extend_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "extend", [__arg_0, __arg_1]);

  getRangeAt_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "getRangeAt", []);

  getRangeAt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "getRangeAt", [__arg_0]);

  modify_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "modify", [__arg_0]);

  modify_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "modify", [__arg_0, __arg_1]);

  modify_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Selection */, "modify", [__arg_0, __arg_1, __arg_2]);

  removeAllRanges_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "removeAllRanges", []);

  selectAllChildren_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "selectAllChildren", []);

  selectAllChildren_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "selectAllChildren", [__arg_0]);

  setBaseAndExtent_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Selection */, "setBaseAndExtent", [__arg_0, __arg_1]);

  setBaseAndExtent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Selection */,
          "setBaseAndExtent", [__arg_0, __arg_1, __arg_2]);

  setBaseAndExtent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* Selection */,
          "setBaseAndExtent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  setPosition_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "setPosition", []);

  setPosition_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Selection */, "setPosition", [__arg_0]);

  setPosition_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Selection */, "setPosition", [__arg_0, __arg_1]);
}

class BlinkServicePort {
  static final instance = new BlinkServicePort();

  data_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ServicePort */, "data");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ServicePort */, "name");

  targetURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServicePort */, "targetURL");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePort */, "close", []);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePort */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePort */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServicePort */, "postMessage", [__arg_0, __arg_1]);
}

class BlinkServicePortCollection extends BlinkEventTarget {
  static final instance = new BlinkServicePortCollection();

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServicePortCollection */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServicePortCollection */, "onclose", __arg_0);

  onconnect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServicePortCollection */, "onconnect");

  onconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServicePortCollection */, "onconnect", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServicePortCollection */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServicePortCollection */, "onmessage", __arg_0);

  connect_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePortCollection */, "connect", []);

  connect_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePortCollection */, "connect", [__arg_0]);

  connect_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServicePortCollection */, "connect", [__arg_0, __arg_1]);

  match_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePortCollection */, "match", []);

  match_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePortCollection */, "match", [__arg_0]);

  matchAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePortCollection */, "matchAll", []);

  matchAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePortCollection */, "matchAll", [__arg_0]);
}

class BlinkServicePortConnectEvent extends BlinkExtendableEvent {
  static final instance = new BlinkServicePortConnectEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("ServicePortConnectEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("ServicePortConnectEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("ServicePortConnectEvent", [__arg_0, __arg_1]);

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServicePortConnectEvent */, "origin");

  targetURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServicePortConnectEvent */, "targetURL");

  respondWith_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServicePortConnectEvent */, "respondWith", []);

  respondWith_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServicePortConnectEvent */, "respondWith", [__arg_0]);
}

class BlinkServiceWorker extends BlinkEventTarget {
  static final instance = new BlinkServiceWorker();

  onstatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorker */, "onstatechange");

  onstatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* ServiceWorker */, "onstatechange", __arg_0);

  scriptURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorker */, "scriptURL");

  state_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorker */, "state");

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorker */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorker */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServiceWorker */, "postMessage", [__arg_0, __arg_1]);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AbstractWorker */, "onerror", __arg_0);
}

class BlinkServiceWorkerContainer extends BlinkEventTarget {
  static final instance = new BlinkServiceWorkerContainer();

  controller_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerContainer */, "controller");

  oncontrollerchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerContainer */, "oncontrollerchange");

  oncontrollerchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerContainer */, "oncontrollerchange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerContainer */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServiceWorkerContainer */, "onmessage", __arg_0);

  ready_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerContainer */, "ready");

  getRegistration_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerContainer */, "getRegistration", []);

  getRegistration_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServiceWorkerContainer */, "getRegistration", [__arg_0]);

  getRegistrations_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerContainer */, "getRegistrations", []);

  register_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerContainer */, "register", []);

  register_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerContainer */, "register", [__arg_0]);

  register_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServiceWorkerContainer */, "register", [__arg_0, __arg_1]);
}

class BlinkServiceWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkServiceWorkerGlobalScope();

  clients_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "clients");

  onactivate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onactivate");

  onactivate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServiceWorkerGlobalScope */, "onactivate", __arg_0);

  oncrossoriginmessage_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(
          mthis /* ServiceWorkerGlobalScope */, "oncrossoriginmessage");

  oncrossoriginmessage_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerGlobalScope */,
          "oncrossoriginmessage",
          __arg_0);

  onfetch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onfetch");

  onfetch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServiceWorkerGlobalScope */, "onfetch", __arg_0);

  onforeignfetch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onforeignfetch");

  onforeignfetch_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerGlobalScope */, "onforeignfetch", __arg_0);

  ongeofenceenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "ongeofenceenter");

  ongeofenceenter_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerGlobalScope */, "ongeofenceenter", __arg_0);

  ongeofenceleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "ongeofenceleave");

  ongeofenceleave_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerGlobalScope */, "ongeofenceleave", __arg_0);

  oninstall_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "oninstall");

  oninstall_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServiceWorkerGlobalScope */, "oninstall", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServiceWorkerGlobalScope */, "onmessage", __arg_0);

  onnotificationclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onnotificationclick");

  onnotificationclick_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerGlobalScope */, "onnotificationclick", __arg_0);

  onnotificationclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onnotificationclose");

  onnotificationclose_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerGlobalScope */, "onnotificationclose", __arg_0);

  onpush_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onpush");

  onpush_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServiceWorkerGlobalScope */, "onpush", __arg_0);

  onsync_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "onsync");

  onsync_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ServiceWorkerGlobalScope */, "onsync", __arg_0);

  registration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerGlobalScope */, "registration");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerGlobalScope */, "close", []);

  fetch_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerGlobalScope */, "fetch", []);

  fetch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerGlobalScope */, "fetch", [__arg_0]);

  fetch_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServiceWorkerGlobalScope */, "fetch", [__arg_0, __arg_1]);

  skipWaiting_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerGlobalScope */, "skipWaiting", []);
}

class BlinkServiceWorkerMessageEvent extends BlinkEvent {
  static final instance = new BlinkServiceWorkerMessageEvent();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerMessageEvent */, "data");

  lastEventId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerMessageEvent */, "lastEventId");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerMessageEvent */, "origin");

  ports_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerMessageEvent */, "ports");

  source_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerMessageEvent */, "source");
}

class BlinkServiceWorkerRegistration extends BlinkEventTarget {
  static final instance = new BlinkServiceWorkerRegistration();

  active_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "active");

  geofencing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "geofencing");

  installing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "installing");

  onupdatefound_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "onupdatefound");

  onupdatefound_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* ServiceWorkerRegistration */, "onupdatefound", __arg_0);

  pushManager_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "pushManager");

  scope_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "scope");

  sync_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "sync");

  waiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ServiceWorkerRegistration */, "waiting");

  getNotifications_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* ServiceWorkerRegistration */, "getNotifications", []);

  getNotifications_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServiceWorkerRegistration */, "getNotifications", [__arg_0]);

  showNotification_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* ServiceWorkerRegistration */, "showNotification", []);

  showNotification_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServiceWorkerRegistration */, "showNotification", [__arg_0]);

  showNotification_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ServiceWorkerRegistration */,
          "showNotification",
          [__arg_0, __arg_1]);

  unregister_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerRegistration */, "unregister", []);

  update_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ServiceWorkerRegistration */, "update", []);
}

class BlinkShadowRoot extends BlinkDocumentFragment {
  static final instance = new BlinkShadowRoot();

  activeElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ShadowRoot */, "activeElement");

  delegatesFocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ShadowRoot */, "delegatesFocus");

  host_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* ShadowRoot */, "host");

  innerHTML_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ShadowRoot */, "innerHTML");

  innerHTML_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* ShadowRoot */, "innerHTML", __arg_0);

  olderShadowRoot_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ShadowRoot */, "olderShadowRoot");

  styleSheets_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ShadowRoot */, "styleSheets");

  cloneNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ShadowRoot */, "cloneNode", []);

  cloneNode_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ShadowRoot */, "cloneNode", [__arg_0]);

  elementFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ShadowRoot */, "elementFromPoint", []);

  elementFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ShadowRoot */, "elementFromPoint", [__arg_0]);

  elementFromPoint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ShadowRoot */, "elementFromPoint", [__arg_0, __arg_1]);

  elementsFromPoint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ShadowRoot */, "elementsFromPoint", []);

  elementsFromPoint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* ShadowRoot */, "elementsFromPoint", [__arg_0]);

  elementsFromPoint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* ShadowRoot */, "elementsFromPoint", [__arg_0, __arg_1]);

  getSelection_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* ShadowRoot */, "getSelection", []);
}

class BlinkSharedArrayBuffer {
  static final instance = new BlinkSharedArrayBuffer();

  byteLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SharedArrayBuffer */, "byteLength");
}

class BlinkSharedWorker extends BlinkEventTarget {
  static final instance = new BlinkSharedWorker();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SharedWorker");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("SharedWorker", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("SharedWorker", [__arg_0, __arg_1]);

  port_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SharedWorker */, "port");

  workerStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SharedWorker */, "workerStart");

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AbstractWorker */, "onerror", __arg_0);
}

class BlinkSharedWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkSharedWorkerGlobalScope();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SharedWorkerGlobalScope */, "name");

  onconnect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SharedWorkerGlobalScope */, "onconnect");

  onconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SharedWorkerGlobalScope */, "onconnect", __arg_0);

  webkitRequestFileSystem_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */, "webkitRequestFileSystem", []);

  webkitRequestFileSystem_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0]);

  webkitRequestFileSystem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0, __arg_1]);

  webkitRequestFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0, __arg_1, __arg_2]);

  webkitRequestFileSystem_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitRequestFileSystem",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  webkitRequestFileSystemSync_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitRequestFileSystemSync", []);

  webkitRequestFileSystemSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitRequestFileSystemSync",
          [__arg_0]);

  webkitRequestFileSystemSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitRequestFileSystemSync",
          [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemSyncURL_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemSyncURL", []);

  webkitResolveLocalFileSystemSyncURL_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemSyncURL",
          [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL", []);

  webkitResolveLocalFileSystemURL_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL",
          [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL",
          [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemURL_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SharedWorkerGlobalScope */,
          "webkitResolveLocalFileSystemURL",
          [__arg_0, __arg_1, __arg_2]);
}

class BlinkSimpleLength extends BlinkLengthValue {
  static final instance = new BlinkSimpleLength();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SimpleLength");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("SimpleLength", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("SimpleLength", [__arg_0, __arg_1]);

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SimpleLength */, "type");

  value_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SimpleLength */, "value");

  value_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SimpleLength */, "value", __arg_0);
}

class BlinkSkew extends BlinkTransformComponent {
  static final instance = new BlinkSkew();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Skew");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Skew", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("Skew", [__arg_0, __arg_1]);

  ax_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Skew */, "ax");

  ay_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Skew */, "ay");
}

class BlinkSourceBuffer extends BlinkEventTarget {
  static final instance = new BlinkSourceBuffer();

  appendWindowEnd_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SourceBuffer */, "appendWindowEnd");

  appendWindowEnd_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SourceBuffer */, "appendWindowEnd", __arg_0);

  appendWindowStart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SourceBuffer */, "appendWindowStart");

  appendWindowStart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SourceBuffer */, "appendWindowStart", __arg_0);

  buffered_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SourceBuffer */, "buffered");

  mode_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SourceBuffer */, "mode");

  mode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SourceBuffer */, "mode", __arg_0);

  timestampOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SourceBuffer */, "timestampOffset");

  timestampOffset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SourceBuffer */, "timestampOffset", __arg_0);

  trackDefaults_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SourceBuffer */, "trackDefaults");

  trackDefaults_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SourceBuffer */, "trackDefaults", __arg_0);

  updating_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SourceBuffer */, "updating");

  abort_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "abort", []);

  appendBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "appendBuffer", []);

  appendBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "appendBuffer", [__arg_0]);

  appendStream_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "appendStream", []);

  appendStream_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "appendStream", [__arg_0]);

  appendStream_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SourceBuffer */, "appendStream", [__arg_0, __arg_1]);

  remove_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "remove", []);

  remove_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "remove", [__arg_0]);

  remove_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBuffer */, "remove", [__arg_0, __arg_1]);
}

class BlinkSourceBufferList extends BlinkEventTarget {
  static final instance = new BlinkSourceBufferList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SourceBufferList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBufferList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SourceBufferList */, "item", [__arg_0]);
}

class BlinkSourceInfo {
  static final instance = new BlinkSourceInfo();

  facing_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "facing");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "id");

  kind_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "kind");

  label_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SourceInfo */, "label");
}

class BlinkSpeechGrammar {
  static final instance = new BlinkSpeechGrammar();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SpeechGrammar");

  src_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SpeechGrammar */, "src");

  src_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechGrammar */, "src", __arg_0);

  weight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechGrammar */, "weight");

  weight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechGrammar */, "weight", __arg_0);
}

class BlinkSpeechGrammarList {
  static final instance = new BlinkSpeechGrammarList();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SpeechGrammarList");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechGrammarList */, "length");

  addFromString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechGrammarList */, "addFromString", []);

  addFromString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechGrammarList */, "addFromString", [__arg_0]);

  addFromString_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SpeechGrammarList */, "addFromString", [__arg_0, __arg_1]);

  addFromUri_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechGrammarList */, "addFromUri", []);

  addFromUri_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechGrammarList */, "addFromUri", [__arg_0]);

  addFromUri_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SpeechGrammarList */, "addFromUri", [__arg_0, __arg_1]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechGrammarList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechGrammarList */, "item", [__arg_0]);
}

class BlinkSpeechRecognition extends BlinkEventTarget {
  static final instance = new BlinkSpeechRecognition();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("webkitSpeechRecognition");

  audioTrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "audioTrack");

  audioTrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "audioTrack", __arg_0);

  continuous_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "continuous");

  continuous_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "continuous", __arg_0);

  grammars_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "grammars");

  grammars_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "grammars", __arg_0);

  interimResults_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "interimResults");

  interimResults_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SpeechRecognition */, "interimResults", __arg_0);

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "lang");

  lang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "lang", __arg_0);

  maxAlternatives_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "maxAlternatives");

  maxAlternatives_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SpeechRecognition */, "maxAlternatives", __arg_0);

  onaudioend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onaudioend");

  onaudioend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "onaudioend", __arg_0);

  onaudiostart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onaudiostart");

  onaudiostart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SpeechRecognition */, "onaudiostart", __arg_0);

  onend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onend");

  onend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "onend", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "onerror", __arg_0);

  onnomatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onnomatch");

  onnomatch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "onnomatch", __arg_0);

  onresult_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onresult");

  onresult_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "onresult", __arg_0);

  onsoundend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onsoundend");

  onsoundend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "onsoundend", __arg_0);

  onsoundstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onsoundstart");

  onsoundstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SpeechRecognition */, "onsoundstart", __arg_0);

  onspeechend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onspeechend");

  onspeechend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SpeechRecognition */, "onspeechend", __arg_0);

  onspeechstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onspeechstart");

  onspeechstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SpeechRecognition */, "onspeechstart", __arg_0);

  onstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognition */, "onstart");

  onstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechRecognition */, "onstart", __arg_0);

  abort_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechRecognition */, "abort", []);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechRecognition */, "start", []);

  stop_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechRecognition */, "stop", []);
}

class BlinkSpeechRecognitionAlternative {
  static final instance = new BlinkSpeechRecognitionAlternative();

  confidence_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionAlternative */, "confidence");

  transcript_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionAlternative */, "transcript");
}

class BlinkSpeechRecognitionError extends BlinkEvent {
  static final instance = new BlinkSpeechRecognitionError();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SpeechRecognitionError");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("SpeechRecognitionError", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("SpeechRecognitionError", [__arg_0, __arg_1]);

  error_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionError */, "error");

  message_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionError */, "message");
}

class BlinkSpeechRecognitionEvent extends BlinkEvent {
  static final instance = new BlinkSpeechRecognitionEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SpeechRecognitionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("SpeechRecognitionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("SpeechRecognitionEvent", [__arg_0, __arg_1]);

  emma_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionEvent */, "emma");

  interpretation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionEvent */, "interpretation");

  resultIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionEvent */, "resultIndex");

  results_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionEvent */, "results");
}

class BlinkSpeechRecognitionResult {
  static final instance = new BlinkSpeechRecognitionResult();

  isFinal_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionResult */, "isFinal");

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionResult */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechRecognitionResult */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechRecognitionResult */, "item", [__arg_0]);
}

class BlinkSpeechRecognitionResultList {
  static final instance = new BlinkSpeechRecognitionResultList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechRecognitionResultList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechRecognitionResultList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechRecognitionResultList */, "item", [__arg_0]);
}

class BlinkSpeechSynthesis extends BlinkEventTarget {
  static final instance = new BlinkSpeechSynthesis();

  onvoiceschanged_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesis */, "onvoiceschanged");

  onvoiceschanged_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* SpeechSynthesis */, "onvoiceschanged", __arg_0);

  paused_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesis */, "paused");

  pending_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesis */, "pending");

  speaking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesis */, "speaking");

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechSynthesis */, "cancel", []);

  getVoices_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechSynthesis */, "getVoices", []);

  pause_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechSynthesis */, "pause", []);

  resume_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechSynthesis */, "resume", []);

  speak_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechSynthesis */, "speak", []);

  speak_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SpeechSynthesis */, "speak", [__arg_0]);
}

class BlinkSpeechSynthesisEvent extends BlinkEvent {
  static final instance = new BlinkSpeechSynthesisEvent();

  charIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisEvent */, "charIndex");

  elapsedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisEvent */, "elapsedTime");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisEvent */, "name");

  utterance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisEvent */, "utterance");
}

class BlinkSpeechSynthesisUtterance extends BlinkEventTarget {
  static final instance = new BlinkSpeechSynthesisUtterance();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SpeechSynthesisUtterance");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("SpeechSynthesisUtterance", [__arg_0]);

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "lang");

  lang_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "lang", __arg_0);

  onboundary_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "onboundary");

  onboundary_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "onboundary", __arg_0);

  onend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "onend");

  onend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "onend", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "onerror", __arg_0);

  onmark_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "onmark");

  onmark_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "onmark", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "onpause", __arg_0);

  onresume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "onresume");

  onresume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "onresume", __arg_0);

  onstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "onstart");

  onstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "onstart", __arg_0);

  pitch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "pitch");

  pitch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "pitch", __arg_0);

  rate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "rate");

  rate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "rate", __arg_0);

  text_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "text", __arg_0);

  voice_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "voice");

  voice_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "voice", __arg_0);

  volume_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisUtterance */, "volume");

  volume_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* SpeechSynthesisUtterance */, "volume", __arg_0);
}

class BlinkSpeechSynthesisVoice {
  static final instance = new BlinkSpeechSynthesisVoice();

  default_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisVoice */, "default");

  lang_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisVoice */, "lang");

  localService_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisVoice */, "localService");

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisVoice */, "name");

  voiceURI_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SpeechSynthesisVoice */, "voiceURI");
}

class BlinkStereoPannerNode extends BlinkAudioNode {
  static final instance = new BlinkStereoPannerNode();

  pan_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StereoPannerNode */, "pan");
}

class BlinkStorage {
  static final instance = new BlinkStorage();

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Storage */, "length");

  $__delete___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "__delete__", [__arg_0]);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "__getter__", [__arg_0]);

  $__setter___Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Storage */, "__setter__", [__arg_0, __arg_1]);

  clear_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Storage */, "clear", []);

  getItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "getItem", []);

  getItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "getItem", [__arg_0]);

  key_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Storage */, "key", []);

  key_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "key", [__arg_0]);

  removeItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "removeItem", []);

  removeItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "removeItem", [__arg_0]);

  setItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "setItem", []);

  setItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "setItem", [__arg_0]);

  setItem_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Storage */, "setItem", [__arg_0, __arg_1]);
}

class BlinkStorageErrorCallback {
  static final instance = new BlinkStorageErrorCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageErrorCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageErrorCallback */, "handleEvent", [__arg_0]);
}

class BlinkStorageEvent extends BlinkEvent {
  static final instance = new BlinkStorageEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("StorageEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("StorageEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("StorageEvent", [__arg_0, __arg_1]);

  key_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StorageEvent */, "key");

  newValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StorageEvent */, "newValue");

  oldValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StorageEvent */, "oldValue");

  storageArea_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StorageEvent */, "storageArea");

  url_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StorageEvent */, "url");

  initStorageEvent_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* StorageEvent */,
          "initStorageEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  initStorageEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* StorageEvent */,
          "initStorageEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  initStorageEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* StorageEvent */, "initStorageEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);
}

class BlinkStorageInfo {
  static final instance = new BlinkStorageInfo();

  quota_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StorageInfo */, "quota");

  usage_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StorageInfo */, "usage");
}

class BlinkStorageManager {
  static final instance = new BlinkStorageManager();

  persistentPermission_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageManager */, "persistentPermission", []);

  requestPersistent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageManager */, "requestPersistent", []);
}

class BlinkStorageQuota {
  static final instance = new BlinkStorageQuota();

  supportedTypes_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StorageQuota */, "supportedTypes");

  queryInfo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageQuota */, "queryInfo", []);

  queryInfo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageQuota */, "queryInfo", [__arg_0]);

  requestPersistentQuota_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageQuota */, "requestPersistentQuota", []);

  requestPersistentQuota_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* StorageQuota */, "requestPersistentQuota", [__arg_0]);
}

class BlinkStorageQuotaCallback {
  static final instance = new BlinkStorageQuotaCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageQuotaCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageQuotaCallback */, "handleEvent", [__arg_0]);
}

class BlinkStorageUsageCallback {
  static final instance = new BlinkStorageUsageCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageUsageCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StorageUsageCallback */, "handleEvent", [__arg_0]);

  handleEvent_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* StorageUsageCallback */, "handleEvent", [__arg_0, __arg_1]);
}

class BlinkStream {
  static final instance = new BlinkStream();

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Stream */, "type");
}

class BlinkStringCallback {
  static final instance = new BlinkStringCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StringCallback */, "handleEvent", []);

  handleEvent_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StringCallback */, "handleEvent", [__arg_0]);
}

class BlinkStyleMedia {
  static final instance = new BlinkStyleMedia();

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StyleMedia */, "type");

  matchMedium_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StyleMedia */, "matchMedium", []);

  matchMedium_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StyleMedia */, "matchMedium", [__arg_0]);
}

class BlinkStylePropertyMap {
  static final instance = new BlinkStylePropertyMap();

  append_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "append", [__arg_0]);

  append_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "append", [__arg_0, __arg_1]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "delete", [__arg_0]);

  get_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "getAll", [__arg_0]);

  getProperties_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "getProperties", []);

  has_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "has", [__arg_0]);

  set_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "set", []);

  set_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "set", [__arg_0]);

  set_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* StylePropertyMap */, "set", [__arg_0, __arg_1]);
}

class BlinkStyleSheet {
  static final instance = new BlinkStyleSheet();

  disabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StyleSheet */, "disabled");

  disabled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* StyleSheet */, "disabled", __arg_0);

  href_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "href");

  media_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "media");

  ownerNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StyleSheet */, "ownerNode");

  parentStyleSheet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StyleSheet */, "parentStyleSheet");

  title_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "title");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* StyleSheet */, "type");
}

class BlinkStyleSheetList {
  static final instance = new BlinkStyleSheetList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StyleSheetList */, "length");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StyleSheetList */, "__getter__", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* StyleSheetList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* StyleSheetList */, "item", [__arg_0]);
}

class BlinkStyleValue {
  static final instance = new BlinkStyleValue();

  cssString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* StyleValue */, "cssString");

  parse_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "StyleValue") /* StyleValue */,
      "parse",
      []);

  parse_Callback_1_(__arg_0) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "StyleValue") /* StyleValue */,
      "parse",
      [__arg_0]);

  parse_Callback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(
          js.context, "StyleValue") /* StyleValue */,
      "parse",
      [__arg_0, __arg_1]);
}

class BlinkSubtleCrypto {
  static final instance = new BlinkSubtleCrypto();

  decrypt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "decrypt", [__arg_0]);

  decrypt_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "decrypt", [__arg_0, __arg_1]);

  decrypt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SubtleCrypto */, "decrypt", [__arg_0, __arg_1, __arg_2]);

  deriveBits_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "deriveBits", [__arg_0]);

  deriveBits_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "deriveBits", [__arg_0, __arg_1]);

  deriveBits_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SubtleCrypto */, "deriveBits", [__arg_0, __arg_1, __arg_2]);

  digest_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "digest", []);

  digest_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "digest", [__arg_0]);

  digest_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "digest", [__arg_0, __arg_1]);

  encrypt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "encrypt", [__arg_0]);

  encrypt_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "encrypt", [__arg_0, __arg_1]);

  encrypt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SubtleCrypto */, "encrypt", [__arg_0, __arg_1, __arg_2]);

  exportKey_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "exportKey", []);

  exportKey_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "exportKey", [__arg_0]);

  exportKey_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "exportKey", [__arg_0, __arg_1]);

  sign_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "sign", [__arg_0]);

  sign_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "sign", [__arg_0, __arg_1]);

  sign_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SubtleCrypto */, "sign", [__arg_0, __arg_1, __arg_2]);

  verify_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "verify", [__arg_0, __arg_1]);

  verify_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SubtleCrypto */, "verify", [__arg_0, __arg_1, __arg_2]);

  verify_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */, "verify",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  wrapKey_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* SubtleCrypto */, "wrapKey", [__arg_0, __arg_1]);

  wrapKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* SubtleCrypto */, "wrapKey", [__arg_0, __arg_1, __arg_2]);

  wrapKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* SubtleCrypto */,
          "wrapKey", [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkSyncEvent extends BlinkExtendableEvent {
  static final instance = new BlinkSyncEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("SyncEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("SyncEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("SyncEvent", [__arg_0, __arg_1]);

  lastChance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* SyncEvent */, "lastChance");

  tag_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* SyncEvent */, "tag");
}

class BlinkSyncManager {
  static final instance = new BlinkSyncManager();

  getTags_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SyncManager */, "getTags", []);

  register_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* SyncManager */, "register", []);

  register_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* SyncManager */, "register", [__arg_0]);
}

class BlinkText extends BlinkCharacterData {
  static final instance = new BlinkText();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Text");

  assignedSlot_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Text */, "assignedSlot");

  wholeText_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Text */, "wholeText");

  getDestinationInsertionPoints_Callback_0_(mthis) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Text */, "getDestinationInsertionPoints", []);

  splitText_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Text */, "splitText", []);

  splitText_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Text */, "splitText", [__arg_0]);
}

class BlinkTextEvent extends BlinkUIEvent {
  static final instance = new BlinkTextEvent();

  data_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextEvent */, "data");

  initTextEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* TextEvent */, "initTextEvent", [__arg_0, __arg_1, __arg_2]);

  initTextEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* TextEvent */,
          "initTextEvent", [__arg_0, __arg_1, __arg_2, __arg_3]);

  initTextEvent_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* TextEvent */,
          "initTextEvent", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);
}

class BlinkTextMetrics {
  static final instance = new BlinkTextMetrics();

  actualBoundingBoxAscent_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* TextMetrics */, "actualBoundingBoxAscent");

  actualBoundingBoxDescent_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* TextMetrics */, "actualBoundingBoxDescent");

  actualBoundingBoxLeft_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* TextMetrics */, "actualBoundingBoxLeft");

  actualBoundingBoxRight_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* TextMetrics */, "actualBoundingBoxRight");

  alphabeticBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextMetrics */, "alphabeticBaseline");

  emHeightAscent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextMetrics */, "emHeightAscent");

  emHeightDescent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextMetrics */, "emHeightDescent");

  fontBoundingBoxAscent_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* TextMetrics */, "fontBoundingBoxAscent");

  fontBoundingBoxDescent_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* TextMetrics */, "fontBoundingBoxDescent");

  hangingBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextMetrics */, "hangingBaseline");

  ideographicBaseline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextMetrics */, "ideographicBaseline");

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextMetrics */, "width");
}

class BlinkTextTrack extends BlinkEventTarget {
  static final instance = new BlinkTextTrack();

  activeCues_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrack */, "activeCues");

  cues_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "cues");

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "id");

  kind_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "kind");

  label_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrack */, "language");

  mode_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "mode");

  mode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrack */, "mode", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrack */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* TextTrack */, "oncuechange", __arg_0);

  regions_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextTrack */, "regions");

  addCue_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "addCue", []);

  addCue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "addCue", [__arg_0]);

  addRegion_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "addRegion", []);

  addRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "addRegion", [__arg_0]);

  removeCue_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "removeCue", []);

  removeCue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "removeCue", [__arg_0]);

  removeRegion_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "removeRegion", []);

  removeRegion_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrack */, "removeRegion", [__arg_0]);
}

class BlinkTextTrackCue extends BlinkEventTarget {
  static final instance = new BlinkTextTrackCue();

  endTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackCue */, "endTime");

  endTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrackCue */, "endTime", __arg_0);

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TextTrackCue */, "id");

  id_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrackCue */, "id", __arg_0);

  onenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackCue */, "onenter");

  onenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrackCue */, "onenter", __arg_0);

  onexit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackCue */, "onexit");

  onexit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrackCue */, "onexit", __arg_0);

  pauseOnExit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackCue */, "pauseOnExit");

  pauseOnExit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* TextTrackCue */, "pauseOnExit", __arg_0);

  startTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackCue */, "startTime");

  startTime_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrackCue */, "startTime", __arg_0);

  track_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackCue */, "track");
}

class BlinkTextTrackCueList {
  static final instance = new BlinkTextTrackCueList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackCueList */, "length");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrackCueList */, "__getter__", [__arg_0]);

  getCueById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrackCueList */, "getCueById", []);

  getCueById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrackCueList */, "getCueById", [__arg_0]);
}

class BlinkTextTrackList extends BlinkEventTarget {
  static final instance = new BlinkTextTrackList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackList */, "length");

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackList */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrackList */, "onaddtrack", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* TextTrackList */, "onchange", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TextTrackList */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* TextTrackList */, "onremovetrack", __arg_0);

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrackList */, "__getter__", [__arg_0]);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrackList */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TextTrackList */, "getTrackById", [__arg_0]);
}

class BlinkTimeRanges {
  static final instance = new BlinkTimeRanges();

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TimeRanges */, "length");

  end_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* TimeRanges */, "end", []);

  end_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TimeRanges */, "end", [__arg_0]);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TimeRanges */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TimeRanges */, "start", [__arg_0]);
}

class BlinkTimeoutHandler {
  static final instance = new BlinkTimeoutHandler();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TimeoutHandler */, "handleEvent", []);
}

class BlinkTouch {
  static final instance = new BlinkTouch();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Touch");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Touch", [__arg_0]);

  clientX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "clientX");

  clientY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "clientY");

  force_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "force");

  identifier_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "identifier");

  pageX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "pageX");

  pageY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "pageY");

  radiusX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "radiusX");

  radiusY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "radiusY");

  region_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "region");

  rotationAngle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Touch */, "rotationAngle");

  screenX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "screenX");

  screenY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "screenY");

  target_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Touch */, "target");
}

class BlinkTouchEvent extends BlinkUIEvent {
  static final instance = new BlinkTouchEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("TouchEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("TouchEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("TouchEvent", [__arg_0, __arg_1]);

  altKey_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TouchEvent */, "altKey");

  changedTouches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TouchEvent */, "changedTouches");

  ctrlKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TouchEvent */, "ctrlKey");

  metaKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TouchEvent */, "metaKey");

  shiftKey_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TouchEvent */, "shiftKey");

  targetTouches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TouchEvent */, "targetTouches");

  touches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TouchEvent */, "touches");

  initTouchEvent_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* TouchEvent */, "initTouchEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10
      ]);

  initTouchEvent_Callback_12_(
          mthis,
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* TouchEvent */, "initTouchEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11
      ]);

  initTouchEvent_Callback_13_(
          mthis,
          __arg_0,
          __arg_1,
          __arg_2,
          __arg_3,
          __arg_4,
          __arg_5,
          __arg_6,
          __arg_7,
          __arg_8,
          __arg_9,
          __arg_10,
          __arg_11,
          __arg_12) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* TouchEvent */, "initTouchEvent", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10,
        __arg_11,
        __arg_12
      ]);
}

class BlinkTouchList {
  static final instance = new BlinkTouchList();

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TouchList */, "length");

  item_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* TouchList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TouchList */, "item", [__arg_0]);
}

class BlinkTrackDefault {
  static final instance = new BlinkTrackDefault();

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("TrackDefault", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("TrackDefault", [__arg_0, __arg_1, __arg_2]);

  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callConstructor(
          "TrackDefault", [__arg_0, __arg_1, __arg_2, __arg_3]);

  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callConstructor(
          "TrackDefault", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  byteStreamTrackID_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TrackDefault */, "byteStreamTrackID");

  kinds_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TrackDefault */, "kinds");

  label_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TrackDefault */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TrackDefault */, "language");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TrackDefault */, "type");
}

class BlinkTrackDefaultList {
  static final instance = new BlinkTrackDefaultList();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("TrackDefaultList");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("TrackDefaultList", [__arg_0]);

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TrackDefaultList */, "length");

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TrackDefaultList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* TrackDefaultList */, "item", [__arg_0]);
}

class BlinkTrackEvent extends BlinkEvent {
  static final instance = new BlinkTrackEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("TrackEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("TrackEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("TrackEvent", [__arg_0, __arg_1]);

  track_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TrackEvent */, "track");
}

class BlinkTransformComponent {
  static final instance = new BlinkTransformComponent();

  cssString_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TransformComponent */, "cssString");

  asMatrix_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TransformComponent */, "asMatrix", []);

  is2DComponent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TransformComponent */, "is2DComponent", []);
}

class BlinkTransformValue extends BlinkStyleValue {
  static final instance = new BlinkTransformValue();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("TransformValue");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("TransformValue", [__arg_0]);

  is2D_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TransformValue */, "is2D", []);
}

class BlinkTransitionEvent extends BlinkEvent {
  static final instance = new BlinkTransitionEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("TransitionEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("TransitionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("TransitionEvent", [__arg_0, __arg_1]);

  elapsedTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TransitionEvent */, "elapsedTime");

  propertyName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TransitionEvent */, "propertyName");

  pseudoElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TransitionEvent */, "pseudoElement");
}

class BlinkTranslation extends BlinkTransformComponent {
  static final instance = new BlinkTranslation();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Translation");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Translation", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("Translation", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("Translation", [__arg_0, __arg_1, __arg_2]);

  x_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Translation */, "x");

  y_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Translation */, "y");

  z_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Translation */, "z");
}

class BlinkTreeWalker {
  static final instance = new BlinkTreeWalker();

  currentNode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TreeWalker */, "currentNode");

  currentNode_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* TreeWalker */, "currentNode", __arg_0);

  filter_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TreeWalker */, "filter");

  root_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* TreeWalker */, "root");

  whatToShow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* TreeWalker */, "whatToShow");

  firstChild_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TreeWalker */, "firstChild", []);

  lastChild_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TreeWalker */, "lastChild", []);

  nextNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TreeWalker */, "nextNode", []);

  nextSibling_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TreeWalker */, "nextSibling", []);

  parentNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TreeWalker */, "parentNode", []);

  previousNode_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TreeWalker */, "previousNode", []);

  previousSibling_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* TreeWalker */, "previousSibling", []);
}

class BlinkUIEvent extends BlinkEvent {
  static final instance = new BlinkUIEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("UIEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("UIEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("UIEvent", [__arg_0, __arg_1]);

  detail_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "detail");

  sourceCapabilities_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* UIEvent */, "sourceCapabilities");

  view_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "view");

  which_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* UIEvent */, "which");

  initUIEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* UIEvent */, "initUIEvent", [__arg_0, __arg_1, __arg_2]);

  initUIEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* UIEvent */, "initUIEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  initUIEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* UIEvent */, "initUIEvent",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);
}

class BlinkURL {
  static final instance = new BlinkURL();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("URL");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("URL", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("URL", [__arg_0, __arg_1]);

  createObjectURL_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */,
      "createObjectURL", []);

  createObjectURL_Callback_1_(__arg_0) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */,
          "createObjectURL",
          [__arg_0]);

  revokeObjectURL_Callback_0_() => Blink_JsNative_DomException.callMethod(
      Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */,
      "revokeObjectURL", []);

  revokeObjectURL_Callback_1_(__arg_0) =>
      Blink_JsNative_DomException.callMethod(
          Blink_JsNative_DomException.getProperty(js.context, "URL") /* URL */,
          "revokeObjectURL",
          [__arg_0]);

  hash_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLUtils */, "toString", []);
}

class BlinkURLSearchParams {
  static final instance = new BlinkURLSearchParams();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("URLSearchParams");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("URLSearchParams", [__arg_0]);

  append_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "append", []);

  append_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "append", [__arg_0]);

  append_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "append", [__arg_0, __arg_1]);

  delete_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "delete", []);

  delete_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "delete", [__arg_0]);

  get_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "get", []);

  get_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "get", [__arg_0]);

  getAll_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "getAll", []);

  getAll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "getAll", [__arg_0]);

  has_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "has", []);

  has_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "has", [__arg_0]);

  set_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "set", []);

  set_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "set", [__arg_0]);

  set_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* URLSearchParams */, "set", [__arg_0, __arg_1]);
}

class BlinkURLUtils {
  static final instance = new BlinkURLUtils();

  hash_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hash");

  hash_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hash", __arg_0);

  host_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "host");

  host_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "host", __arg_0);

  hostname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "hostname");

  hostname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "hostname", __arg_0);

  href_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "href");

  href_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "href", __arg_0);

  origin_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "origin");

  password_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "password");

  password_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "password", __arg_0);

  pathname_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "pathname");

  pathname_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "pathname", __arg_0);

  port_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "port");

  port_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "port", __arg_0);

  protocol_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "protocol");

  protocol_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "protocol", __arg_0);

  search_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "search");

  search_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "search", __arg_0);

  username_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* URLUtils */, "username");

  username_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* URLUtils */, "username", __arg_0);

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLUtils */, "toString", []);
}

class BlinkURLUtilsReadOnly {
  static final instance = new BlinkURLUtilsReadOnly();

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "hash");

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "host");

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "hostname");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "href");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "origin");

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "pathname");

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "port");

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "protocol");

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "search");

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLUtilsReadOnly */, "toString", []);
}

class BlinkUSB extends BlinkEventTarget {
  static final instance = new BlinkUSB();

  onconnect_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* USB */, "onconnect");

  onconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* USB */, "onconnect", __arg_0);

  ondisconnect_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* USB */, "ondisconnect");

  ondisconnect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* USB */, "ondisconnect", __arg_0);

  getDevices_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* USB */, "getDevices", []);

  requestDevice_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USB */, "requestDevice", []);

  requestDevice_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USB */, "requestDevice", [__arg_0]);
}

class BlinkUSBAlternateInterface {
  static final instance = new BlinkUSBAlternateInterface();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("USBAlternateInterface");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("USBAlternateInterface", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("USBAlternateInterface", [__arg_0, __arg_1]);

  alternateSetting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBAlternateInterface */, "alternateSetting");

  endpoints_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBAlternateInterface */, "endpoints");

  interfaceClass_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBAlternateInterface */, "interfaceClass");

  interfaceName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBAlternateInterface */, "interfaceName");

  interfaceProtocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBAlternateInterface */, "interfaceProtocol");

  interfaceSubclass_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBAlternateInterface */, "interfaceSubclass");
}

class BlinkUSBConfiguration {
  static final instance = new BlinkUSBConfiguration();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("USBConfiguration");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("USBConfiguration", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("USBConfiguration", [__arg_0, __arg_1]);

  configurationName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBConfiguration */, "configurationName");

  configurationValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBConfiguration */, "configurationValue");

  interfaces_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBConfiguration */, "interfaces");
}

class BlinkUSBConnectionEvent extends BlinkEvent {
  static final instance = new BlinkUSBConnectionEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("USBConnectionEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("USBConnectionEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("USBConnectionEvent", [__arg_0, __arg_1]);

  device_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBConnectionEvent */, "device");
}

class BlinkUSBDevice {
  static final instance = new BlinkUSBDevice();

  configurations_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "configurations");

  deviceClass_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "deviceClass");

  deviceProtocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "deviceProtocol");

  deviceSubclass_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "deviceSubclass");

  deviceVersionMajor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "deviceVersionMajor");

  deviceVersionMinor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "deviceVersionMinor");

  deviceVersionSubminor_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* USBDevice */, "deviceVersionSubminor");

  guid_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* USBDevice */, "guid");

  manufacturerName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "manufacturerName");

  productId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "productId");

  productName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "productName");

  serialNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "serialNumber");

  usbVersionMajor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "usbVersionMajor");

  usbVersionMinor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "usbVersionMinor");

  usbVersionSubminor_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "usbVersionSubminor");

  vendorId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBDevice */, "vendorId");

  claimInterface_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "claimInterface", []);

  claimInterface_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "claimInterface", [__arg_0]);

  clearHalt_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "clearHalt", []);

  clearHalt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "clearHalt", [__arg_0]);

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "close", []);

  controlTransferIn_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "controlTransferIn", []);

  controlTransferIn_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "controlTransferIn", [__arg_0]);

  controlTransferIn_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* USBDevice */, "controlTransferIn", [__arg_0, __arg_1]);

  controlTransferOut_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "controlTransferOut", []);

  controlTransferOut_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "controlTransferOut", [__arg_0]);

  controlTransferOut_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* USBDevice */, "controlTransferOut", [__arg_0, __arg_1]);

  getConfiguration_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "getConfiguration", []);

  isochronousTransferIn_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "isochronousTransferIn", []);

  isochronousTransferIn_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* USBDevice */, "isochronousTransferIn", [__arg_0]);

  isochronousTransferIn_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* USBDevice */, "isochronousTransferIn", [__arg_0, __arg_1]);

  isochronousTransferOut_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* USBDevice */, "isochronousTransferOut", [__arg_0]);

  isochronousTransferOut_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* USBDevice */, "isochronousTransferOut", [__arg_0, __arg_1]);

  isochronousTransferOut_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* USBDevice */,
          "isochronousTransferOut", [__arg_0, __arg_1, __arg_2]);

  open_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* USBDevice */, "open", []);

  releaseInterface_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "releaseInterface", []);

  releaseInterface_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "releaseInterface", [__arg_0]);

  reset_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "reset", []);

  setConfiguration_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "setConfiguration", []);

  setConfiguration_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "setConfiguration", [__arg_0]);

  setInterface_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "setInterface", []);

  setInterface_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "setInterface", [__arg_0]);

  setInterface_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* USBDevice */, "setInterface", [__arg_0, __arg_1]);

  transferIn_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "transferIn", []);

  transferIn_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "transferIn", [__arg_0]);

  transferIn_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "transferIn", [__arg_0, __arg_1]);

  transferOut_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "transferOut", []);

  transferOut_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* USBDevice */, "transferOut", [__arg_0]);

  transferOut_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* USBDevice */, "transferOut", [__arg_0, __arg_1]);
}

class BlinkUSBEndpoint {
  static final instance = new BlinkUSBEndpoint();

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("USBEndpoint", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("USBEndpoint", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("USBEndpoint", [__arg_0, __arg_1, __arg_2]);

  direction_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBEndpoint */, "direction");

  endpointNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBEndpoint */, "endpointNumber");

  packetSize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBEndpoint */, "packetSize");

  type_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* USBEndpoint */, "type");
}

class BlinkUSBInTransferResult {
  static final instance = new BlinkUSBInTransferResult();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBInTransferResult */, "data");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBInTransferResult */, "status");
}

class BlinkUSBInterface {
  static final instance = new BlinkUSBInterface();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("USBInterface");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("USBInterface", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("USBInterface", [__arg_0, __arg_1]);

  alternates_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBInterface */, "alternates");

  interfaceNumber_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBInterface */, "interfaceNumber");
}

class BlinkUSBIsochronousInTransferPacket {
  static final instance = new BlinkUSBIsochronousInTransferPacket();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBIsochronousInTransferPacket */, "data");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBIsochronousInTransferPacket */, "status");
}

class BlinkUSBIsochronousInTransferResult {
  static final instance = new BlinkUSBIsochronousInTransferResult();

  data_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBIsochronousInTransferResult */, "data");

  packets_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBIsochronousInTransferResult */, "packets");
}

class BlinkUSBIsochronousOutTransferPacket {
  static final instance = new BlinkUSBIsochronousOutTransferPacket();

  bytesWritten_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBIsochronousOutTransferPacket */, "bytesWritten");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBIsochronousOutTransferPacket */, "status");
}

class BlinkUSBIsochronousOutTransferResult {
  static final instance = new BlinkUSBIsochronousOutTransferResult();

  packets_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBIsochronousOutTransferResult */, "packets");
}

class BlinkUSBOutTransferResult {
  static final instance = new BlinkUSBOutTransferResult();

  bytesWritten_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBOutTransferResult */, "bytesWritten");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* USBOutTransferResult */, "status");
}

class BlinkUint16Array extends BlinkArrayBufferView {
  static final instance = new BlinkUint16Array();
}

class BlinkUint32Array extends BlinkArrayBufferView {
  static final instance = new BlinkUint32Array();
}

class BlinkUint8Array extends BlinkArrayBufferView {
  static final instance = new BlinkUint8Array();
}

class BlinkUint8ClampedArray extends BlinkArrayBufferView {
  static final instance = new BlinkUint8ClampedArray();
}

class BlinkUnderlyingSourceBase {
  static final instance = new BlinkUnderlyingSourceBase();

  cancel_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* UnderlyingSourceBase */, "cancel", []);

  cancel_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* UnderlyingSourceBase */, "cancel", [__arg_0]);

  pull_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* UnderlyingSourceBase */, "pull", []);

  start_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* UnderlyingSourceBase */, "start", []);

  start_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* UnderlyingSourceBase */, "start", [__arg_0]);
}

class BlinkVRDevice {
  static final instance = new BlinkVRDevice();

  deviceId_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VRDevice */, "deviceId");

  deviceName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRDevice */, "deviceName");

  hardwareUnitId_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRDevice */, "hardwareUnitId");
}

class BlinkVREyeParameters {
  static final instance = new BlinkVREyeParameters();

  currentFieldOfView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VREyeParameters */, "currentFieldOfView");

  eyeTranslation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VREyeParameters */, "eyeTranslation");

  maximumFieldOfView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VREyeParameters */, "maximumFieldOfView");

  minimumFieldOfView_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VREyeParameters */, "minimumFieldOfView");

  recommendedFieldOfView_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* VREyeParameters */, "recommendedFieldOfView");

  renderRect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VREyeParameters */, "renderRect");
}

class BlinkVRFieldOfView {
  static final instance = new BlinkVRFieldOfView();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("VRFieldOfView");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("VRFieldOfView", [__arg_0]);

  downDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRFieldOfView */, "downDegrees");

  downDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VRFieldOfView */, "downDegrees", __arg_0);

  leftDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRFieldOfView */, "leftDegrees");

  leftDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VRFieldOfView */, "leftDegrees", __arg_0);

  rightDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRFieldOfView */, "rightDegrees");

  rightDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VRFieldOfView */, "rightDegrees", __arg_0);

  upDegrees_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRFieldOfView */, "upDegrees");

  upDegrees_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VRFieldOfView */, "upDegrees", __arg_0);
}

class BlinkVRPositionState {
  static final instance = new BlinkVRPositionState();

  angularAcceleration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRPositionState */, "angularAcceleration");

  angularVelocity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRPositionState */, "angularVelocity");

  linearAcceleration_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRPositionState */, "linearAcceleration");

  linearVelocity_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRPositionState */, "linearVelocity");

  orientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRPositionState */, "orientation");

  position_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRPositionState */, "position");

  timeStamp_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VRPositionState */, "timeStamp");
}

class BlinkVTTCue extends BlinkTextTrackCue {
  static final instance = new BlinkVTTCue();

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("VTTCue", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) =>
      Blink_JsNative_DomException.callConstructor("VTTCue", [__arg_0, __arg_1]);

  constructorCallback_3_(__arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callConstructor("VTTCue", [__arg_0, __arg_1, __arg_2]);

  align_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "align");

  align_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTCue */, "align", __arg_0);

  line_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "line");

  line_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTCue */, "line", __arg_0);

  position_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "position");

  position_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTCue */, "position", __arg_0);

  regionId_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "regionId");

  regionId_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTCue */, "regionId", __arg_0);

  size_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "size");

  size_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTCue */, "size", __arg_0);

  snapToLines_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VTTCue */, "snapToLines");

  snapToLines_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VTTCue */, "snapToLines", __arg_0);

  text_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "text");

  text_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTCue */, "text", __arg_0);

  vertical_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTCue */, "vertical");

  vertical_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTCue */, "vertical", __arg_0);

  getCueAsHTML_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* VTTCue */, "getCueAsHTML", []);
}

class BlinkVTTRegion {
  static final instance = new BlinkVTTRegion();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("VTTRegion");

  height_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "height");

  height_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTRegion */, "height", __arg_0);

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "id");

  id_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTRegion */, "id", __arg_0);

  regionAnchorX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VTTRegion */, "regionAnchorX");

  regionAnchorX_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VTTRegion */, "regionAnchorX", __arg_0);

  regionAnchorY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VTTRegion */, "regionAnchorY");

  regionAnchorY_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VTTRegion */, "regionAnchorY", __arg_0);

  scroll_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "scroll");

  scroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTRegion */, "scroll", __arg_0);

  track_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "track");

  viewportAnchorX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VTTRegion */, "viewportAnchorX");

  viewportAnchorX_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VTTRegion */, "viewportAnchorX", __arg_0);

  viewportAnchorY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VTTRegion */, "viewportAnchorY");

  viewportAnchorY_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VTTRegion */, "viewportAnchorY", __arg_0);

  width_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VTTRegion */, "width");

  width_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VTTRegion */, "width", __arg_0);
}

class BlinkVTTRegionList {
  static final instance = new BlinkVTTRegionList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VTTRegionList */, "length");

  getRegionById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* VTTRegionList */, "getRegionById", []);

  getRegionById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* VTTRegionList */, "getRegionById", [__arg_0]);

  item_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* VTTRegionList */, "item", []);

  item_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* VTTRegionList */, "item", [__arg_0]);
}

class BlinkValidityState {
  static final instance = new BlinkValidityState();

  badInput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "badInput");

  customError_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "customError");

  patternMismatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "patternMismatch");

  rangeOverflow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "rangeOverflow");

  rangeUnderflow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "rangeUnderflow");

  stepMismatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "stepMismatch");

  tooLong_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "tooLong");

  tooShort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "tooShort");

  typeMismatch_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "typeMismatch");

  valid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "valid");

  valueMissing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* ValidityState */, "valueMissing");
}

class BlinkVideoPlaybackQuality {
  static final instance = new BlinkVideoPlaybackQuality();

  corruptedVideoFrames_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* VideoPlaybackQuality */, "corruptedVideoFrames");

  creationTime_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoPlaybackQuality */, "creationTime");

  droppedVideoFrames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoPlaybackQuality */, "droppedVideoFrames");

  totalVideoFrames_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoPlaybackQuality */, "totalVideoFrames");
}

class BlinkVideoTrack {
  static final instance = new BlinkVideoTrack();

  id_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "id");

  kind_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "kind");

  label_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* VideoTrack */, "label");

  language_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoTrack */, "language");

  selected_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoTrack */, "selected");

  selected_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VideoTrack */, "selected", __arg_0);
}

class BlinkVideoTrackList extends BlinkEventTarget {
  static final instance = new BlinkVideoTrackList();

  length_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoTrackList */, "length");

  onaddtrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoTrackList */, "onaddtrack");

  onaddtrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VideoTrackList */, "onaddtrack", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoTrackList */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* VideoTrackList */, "onchange", __arg_0);

  onremovetrack_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoTrackList */, "onremovetrack");

  onremovetrack_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* VideoTrackList */, "onremovetrack", __arg_0);

  selectedIndex_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* VideoTrackList */, "selectedIndex");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* VideoTrackList */, "__getter__", [__arg_0]);

  getTrackById_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* VideoTrackList */, "getTrackById", []);

  getTrackById_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* VideoTrackList */, "getTrackById", [__arg_0]);
}

class BlinkVoidCallback {
  static final instance = new BlinkVoidCallback();

  handleEvent_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* VoidCallback */, "handleEvent", []);
}

class BlinkWaveShaperNode extends BlinkAudioNode {
  static final instance = new BlinkWaveShaperNode();

  curve_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WaveShaperNode */, "curve");

  curve_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WaveShaperNode */, "curve", __arg_0);

  oversample_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WaveShaperNode */, "oversample");

  oversample_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WaveShaperNode */, "oversample", __arg_0);
}

class BlinkWebGL2RenderingContext {
  static final instance = new BlinkWebGL2RenderingContext();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "attachShader",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindBuffer",
          [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindFramebuffer",
          [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindRenderbuffer",
          [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindTexture",
          [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFunc",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "checkFramebufferStatus",
          [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteFramebuffer",
          [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteRenderbuffer",
          [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "depthRange",
          [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "detachShader",
          [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray",
          [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "enableVertexAttribArray",
          [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveAttrib",
          [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveUniform",
          [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttachedShaders",
          [__arg_0]);

  getAttribLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramInfoLog",
          [__arg_0]);

  getProgramParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getTexParameter",
          [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniform",
          [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttrib",
          [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "pixelStorei",
          [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "polygonOffset",
          [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "sampleCoverage",
          [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "shaderSource",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texParameterf_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1f",
          [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1fv",
          [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1i",
          [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1iv",
          [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2fv",
          [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2iv",
          [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3fv",
          [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3iv",
          [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4fv",
          [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4iv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1f",
          [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1fv",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2fv",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3fv",
          [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4fv",
          [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  beginQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", []);

  beginQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "beginQuery", [__arg_0]);

  beginQuery_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "beginQuery",
          [__arg_0, __arg_1]);

  beginTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "beginTransformFeedback", []);

  beginTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "beginTransformFeedback",
          [__arg_0]);

  bindBufferBase_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0]);

  bindBufferBase_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferBase",
          [__arg_0, __arg_1]);

  bindBufferBase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferBase",
          [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferRange",
          [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferRange",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  bindBufferRange_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferRange",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bindSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", []);

  bindSampler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindSampler", [__arg_0]);

  bindSampler_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindSampler",
          [__arg_0, __arg_1]);

  bindTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", []);

  bindTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindTransformFeedback",
          [__arg_0]);

  bindTransformFeedback_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindTransformFeedback",
          [__arg_0, __arg_1]);

  bindVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGL2RenderingContextBase */, "bindVertexArray", []);

  bindVertexArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindVertexArray", [__arg_0]);

  blitFramebuffer_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  blitFramebuffer_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  blitFramebuffer_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  clearBufferfi_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfi",
          [__arg_0, __arg_1]);

  clearBufferfi_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfi",
          [__arg_0, __arg_1, __arg_2]);

  clearBufferfi_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfi",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearBufferfv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0]);

  clearBufferfv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfv",
          [__arg_0, __arg_1]);

  clearBufferfv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfv",
          [__arg_0, __arg_1, __arg_2]);

  clearBufferiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0]);

  clearBufferiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferiv",
          [__arg_0, __arg_1]);

  clearBufferiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferiv",
          [__arg_0, __arg_1, __arg_2]);

  clearBufferuiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0]);

  clearBufferuiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferuiv",
          [__arg_0, __arg_1]);

  clearBufferuiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferuiv",
          [__arg_0, __arg_1, __arg_2]);

  clientWaitSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0]);

  clientWaitSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clientWaitSync",
          [__arg_0, __arg_1]);

  clientWaitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clientWaitSync",
          [__arg_0, __arg_1, __arg_2]);

  compressedTexImage3D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "compressedTexImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "compressedTexImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  compressedTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  compressedTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  compressedTexSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2,
          __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  copyBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyBufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  copyBufferSubData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyBufferSubData",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  copyBufferSubData_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyBufferSubData",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  copyTexSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyTexSubImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  createQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "createQuery", []);

  createSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "createSampler", []);

  createTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "createTransformFeedback", []);

  createVertexArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "createVertexArray", []);

  deleteQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "deleteQuery", []);

  deleteQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteQuery", [__arg_0]);

  deleteSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSampler", []);

  deleteSampler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteSampler", [__arg_0]);

  deleteSync_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSync", []);

  deleteSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteSync", [__arg_0]);

  deleteTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "deleteTransformFeedback", []);

  deleteTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "deleteTransformFeedback",
          [__arg_0]);

  deleteVertexArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteVertexArray", []);

  deleteVertexArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "deleteVertexArray",
          [__arg_0]);

  drawArraysInstanced_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawArraysInstanced",
          [__arg_0, __arg_1]);

  drawArraysInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawArraysInstanced",
          [__arg_0, __arg_1, __arg_2]);

  drawArraysInstanced_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawArraysInstanced",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawBuffers_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "drawBuffers", []);

  drawBuffers_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "drawBuffers", [__arg_0]);

  drawElementsInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawElementsInstanced",
          [__arg_0, __arg_1, __arg_2]);

  drawElementsInstanced_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawElementsInstanced",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstanced_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawElementsInstanced",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawRangeElements",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawRangeElements_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawRangeElements",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawRangeElements",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  endQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "endQuery", []);

  endQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "endQuery", [__arg_0]);

  endTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "endTransformFeedback", []);

  fenceSync_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", []);

  fenceSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "fenceSync", [__arg_0]);

  fenceSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "fenceSync",
          [__arg_0, __arg_1]);

  framebufferTextureLayer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "framebufferTextureLayer",
          [__arg_0, __arg_1, __arg_2]);

  framebufferTextureLayer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "framebufferTextureLayer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTextureLayer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "framebufferTextureLayer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  getActiveUniformBlockName_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockName", []);

  getActiveUniformBlockName_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockName",
          [__arg_0]);

  getActiveUniformBlockName_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockName",
          [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockParameter",
          [__arg_0]);

  getActiveUniformBlockParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockParameter",
          [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockParameter",
          [__arg_0, __arg_1, __arg_2]);

  getActiveUniforms_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniforms",
          [__arg_0]);

  getActiveUniforms_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniforms",
          [__arg_0, __arg_1]);

  getActiveUniforms_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniforms",
          [__arg_0, __arg_1, __arg_2]);

  getBufferSubData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getBufferSubData",
          [__arg_0]);

  getBufferSubData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getBufferSubData",
          [__arg_0, __arg_1]);

  getBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getBufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  getFragDataLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", []);

  getFragDataLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getFragDataLocation",
          [__arg_0]);

  getFragDataLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getFragDataLocation",
          [__arg_0, __arg_1]);

  getIndexedParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", []);

  getIndexedParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getIndexedParameter",
          [__arg_0]);

  getIndexedParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getIndexedParameter",
          [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getInternalformatParameter",
          [__arg_0]);

  getInternalformatParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getInternalformatParameter",
          [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getInternalformatParameter",
          [__arg_0, __arg_1, __arg_2]);

  getQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", []);

  getQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getQuery", [__arg_0]);

  getQuery_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getQuery",
          [__arg_0, __arg_1]);

  getQueryParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getQueryParameter", []);

  getQueryParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getQueryParameter",
          [__arg_0]);

  getQueryParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getQueryParameter",
          [__arg_0, __arg_1]);

  getSamplerParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", []);

  getSamplerParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSamplerParameter",
          [__arg_0]);

  getSamplerParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSamplerParameter",
          [__arg_0, __arg_1]);

  getSyncParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGL2RenderingContextBase */, "getSyncParameter", []);

  getSyncParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSyncParameter",
          [__arg_0]);

  getSyncParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSyncParameter",
          [__arg_0, __arg_1]);

  getTransformFeedbackVarying_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getTransformFeedbackVarying", []);

  getTransformFeedbackVarying_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getTransformFeedbackVarying",
          [__arg_0]);

  getTransformFeedbackVarying_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getTransformFeedbackVarying",
          [__arg_0, __arg_1]);

  getUniformBlockIndex_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", []);

  getUniformBlockIndex_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformBlockIndex",
          [__arg_0]);

  getUniformBlockIndex_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformBlockIndex",
          [__arg_0, __arg_1]);

  getUniformIndices_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getUniformIndices", []);

  getUniformIndices_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformIndices",
          [__arg_0]);

  getUniformIndices_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformIndices",
          [__arg_0, __arg_1]);

  invalidateFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", []);

  invalidateFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateFramebuffer",
          [__arg_0]);

  invalidateFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateFramebuffer",
          [__arg_0, __arg_1]);

  invalidateSubFramebuffer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateSubFramebuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  invalidateSubFramebuffer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateSubFramebuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  invalidateSubFramebuffer_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateSubFramebuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  isQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", []);

  isQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", [__arg_0]);

  isSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isSampler", []);

  isSampler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "isSampler", [__arg_0]);

  isSync_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", []);

  isSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", [__arg_0]);

  isTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "isTransformFeedback", []);

  isTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "isTransformFeedback",
          [__arg_0]);

  isVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isVertexArray", []);

  isVertexArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "isVertexArray", [__arg_0]);

  pauseTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "pauseTransformFeedback", []);

  readBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "readBuffer", []);

  readBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "readBuffer", [__arg_0]);

  renderbufferStorageMultisample_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "renderbufferStorageMultisample",
          [__arg_0, __arg_1, __arg_2]);

  renderbufferStorageMultisample_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "renderbufferStorageMultisample",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  renderbufferStorageMultisample_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "renderbufferStorageMultisample",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  resumeTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "resumeTransformFeedback", []);

  samplerParameterf_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameterf",
          [__arg_0]);

  samplerParameterf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameterf",
          [__arg_0, __arg_1]);

  samplerParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameterf",
          [__arg_0, __arg_1, __arg_2]);

  samplerParameteri_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameteri",
          [__arg_0]);

  samplerParameteri_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameteri",
          [__arg_0, __arg_1]);

  samplerParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameteri",
          [__arg_0, __arg_1, __arg_2]);

  texImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  texStorage2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage2D",
          [__arg_0, __arg_1, __arg_2]);

  texStorage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage3D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texSubImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texSubImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  texSubImage3D_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10
      ]);

  transformFeedbackVaryings_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "transformFeedbackVaryings",
          [__arg_0]);

  transformFeedbackVaryings_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "transformFeedbackVaryings",
          [__arg_0, __arg_1]);

  transformFeedbackVaryings_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "transformFeedbackVaryings",
          [__arg_0, __arg_1, __arg_2]);

  uniform1ui_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", []);

  uniform1ui_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform1ui", [__arg_0]);

  uniform1ui_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform1ui",
          [__arg_0, __arg_1]);

  uniform1uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", []);

  uniform1uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform1uiv", [__arg_0]);

  uniform1uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform1uiv",
          [__arg_0, __arg_1]);

  uniform2ui_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0]);

  uniform2ui_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform2ui",
          [__arg_0, __arg_1]);

  uniform2ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform2ui",
          [__arg_0, __arg_1, __arg_2]);

  uniform2uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", []);

  uniform2uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform2uiv", [__arg_0]);

  uniform2uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform2uiv",
          [__arg_0, __arg_1]);

  uniform3ui_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3ui",
          [__arg_0, __arg_1]);

  uniform3ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3ui",
          [__arg_0, __arg_1, __arg_2]);

  uniform3ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3ui",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", []);

  uniform3uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform3uiv", [__arg_0]);

  uniform3uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3uiv",
          [__arg_0, __arg_1]);

  uniform4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4ui",
          [__arg_0, __arg_1, __arg_2]);

  uniform4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4ui_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", []);

  uniform4uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform4uiv", [__arg_0]);

  uniform4uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4uiv",
          [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformBlockBinding",
          [__arg_0]);

  uniformBlockBinding_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformBlockBinding",
          [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformBlockBinding",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x3fv",
          [__arg_0]);

  uniformMatrix2x3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x3fv",
          [__arg_0, __arg_1]);

  uniformMatrix2x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x3fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x4fv",
          [__arg_0]);

  uniformMatrix2x4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x4fv",
          [__arg_0, __arg_1]);

  uniformMatrix2x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x4fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x2fv",
          [__arg_0]);

  uniformMatrix3x2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x2fv",
          [__arg_0, __arg_1]);

  uniformMatrix3x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x4fv",
          [__arg_0]);

  uniformMatrix3x4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x4fv",
          [__arg_0, __arg_1]);

  uniformMatrix3x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x4fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x2fv",
          [__arg_0]);

  uniformMatrix4x2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x2fv",
          [__arg_0, __arg_1]);

  uniformMatrix4x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x3fv",
          [__arg_0]);

  uniformMatrix4x3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x3fv",
          [__arg_0, __arg_1]);

  uniformMatrix4x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x3fv",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribDivisor_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", []);

  vertexAttribDivisor_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribDivisor",
          [__arg_0]);

  vertexAttribDivisor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribDivisor",
          [__arg_0, __arg_1]);

  vertexAttribI4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4i",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4i_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4i",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", []);

  vertexAttribI4iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4iv",
          [__arg_0]);

  vertexAttribI4iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4iv",
          [__arg_0, __arg_1]);

  vertexAttribI4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4ui",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4ui_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4uiv_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", []);

  vertexAttribI4uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4uiv",
          [__arg_0]);

  vertexAttribI4uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4uiv",
          [__arg_0, __arg_1]);

  vertexAttribIPointer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribIPointer",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribIPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribIPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribIPointer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribIPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  waitSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0]);

  waitSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "waitSync",
          [__arg_0, __arg_1]);

  waitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "waitSync",
          [__arg_0, __arg_1, __arg_2]);
}

class BlinkWebGL2RenderingContextBase {
  static final instance = new BlinkWebGL2RenderingContextBase();

  beginQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "beginQuery", []);

  beginQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "beginQuery", [__arg_0]);

  beginQuery_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "beginQuery",
          [__arg_0, __arg_1]);

  beginTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "beginTransformFeedback", []);

  beginTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "beginTransformFeedback",
          [__arg_0]);

  bindBufferBase_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindBufferBase", [__arg_0]);

  bindBufferBase_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferBase",
          [__arg_0, __arg_1]);

  bindBufferBase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferBase",
          [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferRange",
          [__arg_0, __arg_1, __arg_2]);

  bindBufferRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferRange",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  bindBufferRange_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindBufferRange",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  bindSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "bindSampler", []);

  bindSampler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindSampler", [__arg_0]);

  bindSampler_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindSampler",
          [__arg_0, __arg_1]);

  bindTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindTransformFeedback", []);

  bindTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindTransformFeedback",
          [__arg_0]);

  bindTransformFeedback_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "bindTransformFeedback",
          [__arg_0, __arg_1]);

  bindVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGL2RenderingContextBase */, "bindVertexArray", []);

  bindVertexArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "bindVertexArray", [__arg_0]);

  blitFramebuffer_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  blitFramebuffer_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  blitFramebuffer_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "blitFramebuffer", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  clearBufferfi_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfi",
          [__arg_0, __arg_1]);

  clearBufferfi_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfi",
          [__arg_0, __arg_1, __arg_2]);

  clearBufferfi_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfi",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearBufferfv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clearBufferfv", [__arg_0]);

  clearBufferfv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfv",
          [__arg_0, __arg_1]);

  clearBufferfv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferfv",
          [__arg_0, __arg_1, __arg_2]);

  clearBufferiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clearBufferiv", [__arg_0]);

  clearBufferiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferiv",
          [__arg_0, __arg_1]);

  clearBufferiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferiv",
          [__arg_0, __arg_1, __arg_2]);

  clearBufferuiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clearBufferuiv", [__arg_0]);

  clearBufferuiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferuiv",
          [__arg_0, __arg_1]);

  clearBufferuiv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clearBufferuiv",
          [__arg_0, __arg_1, __arg_2]);

  clientWaitSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "clientWaitSync", [__arg_0]);

  clientWaitSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clientWaitSync",
          [__arg_0, __arg_1]);

  clientWaitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "clientWaitSync",
          [__arg_0, __arg_1, __arg_2]);

  compressedTexImage3D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "compressedTexImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "compressedTexImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  compressedTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  compressedTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  compressedTexSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2,
          __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "compressedTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  copyBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyBufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  copyBufferSubData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyBufferSubData",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  copyBufferSubData_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyBufferSubData",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  copyTexSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "copyTexSubImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "copyTexSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  createQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "createQuery", []);

  createSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "createSampler", []);

  createTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "createTransformFeedback", []);

  createVertexArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "createVertexArray", []);

  deleteQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "deleteQuery", []);

  deleteQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteQuery", [__arg_0]);

  deleteSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSampler", []);

  deleteSampler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteSampler", [__arg_0]);

  deleteSync_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "deleteSync", []);

  deleteSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteSync", [__arg_0]);

  deleteTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "deleteTransformFeedback", []);

  deleteTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "deleteTransformFeedback",
          [__arg_0]);

  deleteVertexArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "deleteVertexArray", []);

  deleteVertexArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "deleteVertexArray",
          [__arg_0]);

  drawArraysInstanced_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawArraysInstanced",
          [__arg_0, __arg_1]);

  drawArraysInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawArraysInstanced",
          [__arg_0, __arg_1, __arg_2]);

  drawArraysInstanced_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawArraysInstanced",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawBuffers_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "drawBuffers", []);

  drawBuffers_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "drawBuffers", [__arg_0]);

  drawElementsInstanced_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawElementsInstanced",
          [__arg_0, __arg_1, __arg_2]);

  drawElementsInstanced_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawElementsInstanced",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawElementsInstanced_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawElementsInstanced",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawRangeElements",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  drawRangeElements_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawRangeElements",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  drawRangeElements_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "drawRangeElements",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  endQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "endQuery", []);

  endQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "endQuery", [__arg_0]);

  endTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "endTransformFeedback", []);

  fenceSync_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "fenceSync", []);

  fenceSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "fenceSync", [__arg_0]);

  fenceSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "fenceSync",
          [__arg_0, __arg_1]);

  framebufferTextureLayer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "framebufferTextureLayer",
          [__arg_0, __arg_1, __arg_2]);

  framebufferTextureLayer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "framebufferTextureLayer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTextureLayer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "framebufferTextureLayer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  getActiveUniformBlockName_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockName", []);

  getActiveUniformBlockName_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockName",
          [__arg_0]);

  getActiveUniformBlockName_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockName",
          [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockParameter",
          [__arg_0]);

  getActiveUniformBlockParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockParameter",
          [__arg_0, __arg_1]);

  getActiveUniformBlockParameter_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniformBlockParameter",
          [__arg_0, __arg_1, __arg_2]);

  getActiveUniforms_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniforms",
          [__arg_0]);

  getActiveUniforms_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniforms",
          [__arg_0, __arg_1]);

  getActiveUniforms_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getActiveUniforms",
          [__arg_0, __arg_1, __arg_2]);

  getBufferSubData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getBufferSubData",
          [__arg_0]);

  getBufferSubData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getBufferSubData",
          [__arg_0, __arg_1]);

  getBufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getBufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  getFragDataLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getFragDataLocation", []);

  getFragDataLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getFragDataLocation",
          [__arg_0]);

  getFragDataLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getFragDataLocation",
          [__arg_0, __arg_1]);

  getIndexedParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getIndexedParameter", []);

  getIndexedParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getIndexedParameter",
          [__arg_0]);

  getIndexedParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getIndexedParameter",
          [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getInternalformatParameter",
          [__arg_0]);

  getInternalformatParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getInternalformatParameter",
          [__arg_0, __arg_1]);

  getInternalformatParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getInternalformatParameter",
          [__arg_0, __arg_1, __arg_2]);

  getQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "getQuery", []);

  getQuery_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getQuery", [__arg_0]);

  getQuery_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getQuery",
          [__arg_0, __arg_1]);

  getQueryParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getQueryParameter", []);

  getQueryParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getQueryParameter",
          [__arg_0]);

  getQueryParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getQueryParameter",
          [__arg_0, __arg_1]);

  getSamplerParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getSamplerParameter", []);

  getSamplerParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSamplerParameter",
          [__arg_0]);

  getSamplerParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSamplerParameter",
          [__arg_0, __arg_1]);

  getSyncParameter_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGL2RenderingContextBase */, "getSyncParameter", []);

  getSyncParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSyncParameter",
          [__arg_0]);

  getSyncParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getSyncParameter",
          [__arg_0, __arg_1]);

  getTransformFeedbackVarying_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getTransformFeedbackVarying", []);

  getTransformFeedbackVarying_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getTransformFeedbackVarying",
          [__arg_0]);

  getTransformFeedbackVarying_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getTransformFeedbackVarying",
          [__arg_0, __arg_1]);

  getUniformBlockIndex_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getUniformBlockIndex", []);

  getUniformBlockIndex_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformBlockIndex",
          [__arg_0]);

  getUniformBlockIndex_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformBlockIndex",
          [__arg_0, __arg_1]);

  getUniformIndices_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "getUniformIndices", []);

  getUniformIndices_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformIndices",
          [__arg_0]);

  getUniformIndices_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "getUniformIndices",
          [__arg_0, __arg_1]);

  invalidateFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "invalidateFramebuffer", []);

  invalidateFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateFramebuffer",
          [__arg_0]);

  invalidateFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateFramebuffer",
          [__arg_0, __arg_1]);

  invalidateSubFramebuffer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateSubFramebuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  invalidateSubFramebuffer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateSubFramebuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  invalidateSubFramebuffer_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "invalidateSubFramebuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  isQuery_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", []);

  isQuery_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isQuery", [__arg_0]);

  isSampler_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isSampler", []);

  isSampler_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "isSampler", [__arg_0]);

  isSync_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", []);

  isSync_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isSync", [__arg_0]);

  isTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "isTransformFeedback", []);

  isTransformFeedback_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "isTransformFeedback",
          [__arg_0]);

  isVertexArray_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "isVertexArray", []);

  isVertexArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "isVertexArray", [__arg_0]);

  pauseTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "pauseTransformFeedback", []);

  readBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "readBuffer", []);

  readBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "readBuffer", [__arg_0]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorageMultisample_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "renderbufferStorageMultisample",
          [__arg_0, __arg_1, __arg_2]);

  renderbufferStorageMultisample_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "renderbufferStorageMultisample",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  renderbufferStorageMultisample_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "renderbufferStorageMultisample",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  resumeTransformFeedback_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "resumeTransformFeedback", []);

  samplerParameterf_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameterf",
          [__arg_0]);

  samplerParameterf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameterf",
          [__arg_0, __arg_1]);

  samplerParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameterf",
          [__arg_0, __arg_1, __arg_2]);

  samplerParameteri_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameteri",
          [__arg_0]);

  samplerParameteri_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameteri",
          [__arg_0, __arg_1]);

  samplerParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "samplerParameteri",
          [__arg_0, __arg_1, __arg_2]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* WebGL2RenderingContextBase */, "texImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  texStorage2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage2D",
          [__arg_0, __arg_1, __arg_2]);

  texStorage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texStorage3D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texStorage3D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texStorage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texSubImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage3D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "texSubImage3D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage3D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texSubImage3D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texSubImage3D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9
      ]);

  texSubImage3D_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* WebGL2RenderingContextBase */, "texSubImage3D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8,
        __arg_9,
        __arg_10
      ]);

  transformFeedbackVaryings_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "transformFeedbackVaryings",
          [__arg_0]);

  transformFeedbackVaryings_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "transformFeedbackVaryings",
          [__arg_0, __arg_1]);

  transformFeedbackVaryings_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "transformFeedbackVaryings",
          [__arg_0, __arg_1, __arg_2]);

  uniform1ui_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1ui", []);

  uniform1ui_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform1ui", [__arg_0]);

  uniform1ui_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform1ui",
          [__arg_0, __arg_1]);

  uniform1uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform1uiv", []);

  uniform1uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform1uiv", [__arg_0]);

  uniform1uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform1uiv",
          [__arg_0, __arg_1]);

  uniform2ui_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform2ui", [__arg_0]);

  uniform2ui_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform2ui",
          [__arg_0, __arg_1]);

  uniform2ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform2ui",
          [__arg_0, __arg_1, __arg_2]);

  uniform2uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform2uiv", []);

  uniform2uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform2uiv", [__arg_0]);

  uniform2uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform2uiv",
          [__arg_0, __arg_1]);

  uniform3ui_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3ui",
          [__arg_0, __arg_1]);

  uniform3ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3ui",
          [__arg_0, __arg_1, __arg_2]);

  uniform3ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3ui",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform3uiv", []);

  uniform3uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform3uiv", [__arg_0]);

  uniform3uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform3uiv",
          [__arg_0, __arg_1]);

  uniform4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4ui",
          [__arg_0, __arg_1, __arg_2]);

  uniform4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4ui_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4uiv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGL2RenderingContextBase */, "uniform4uiv", []);

  uniform4uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "uniform4uiv", [__arg_0]);

  uniform4uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniform4uiv",
          [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformBlockBinding",
          [__arg_0]);

  uniformBlockBinding_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformBlockBinding",
          [__arg_0, __arg_1]);

  uniformBlockBinding_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformBlockBinding",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x3fv",
          [__arg_0]);

  uniformMatrix2x3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x3fv",
          [__arg_0, __arg_1]);

  uniformMatrix2x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x3fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix2x4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x4fv",
          [__arg_0]);

  uniformMatrix2x4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x4fv",
          [__arg_0, __arg_1]);

  uniformMatrix2x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix2x4fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x2fv",
          [__arg_0]);

  uniformMatrix3x2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x2fv",
          [__arg_0, __arg_1]);

  uniformMatrix3x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3x4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x4fv",
          [__arg_0]);

  uniformMatrix3x4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x4fv",
          [__arg_0, __arg_1]);

  uniformMatrix3x4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix3x4fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x2fv",
          [__arg_0]);

  uniformMatrix4x2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x2fv",
          [__arg_0, __arg_1]);

  uniformMatrix4x2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4x3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x3fv",
          [__arg_0]);

  uniformMatrix4x3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x3fv",
          [__arg_0, __arg_1]);

  uniformMatrix4x3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "uniformMatrix4x3fv",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribDivisor_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "vertexAttribDivisor", []);

  vertexAttribDivisor_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribDivisor",
          [__arg_0]);

  vertexAttribDivisor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribDivisor",
          [__arg_0, __arg_1]);

  vertexAttribI4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4i",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4i_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4i",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4iv_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGL2RenderingContextBase */, "vertexAttribI4iv", []);

  vertexAttribI4iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4iv",
          [__arg_0]);

  vertexAttribI4iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4iv",
          [__arg_0, __arg_1]);

  vertexAttribI4ui_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4ui",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribI4ui_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribI4ui_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4ui",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribI4uiv_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "vertexAttribI4uiv", []);

  vertexAttribI4uiv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4uiv",
          [__arg_0]);

  vertexAttribI4uiv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribI4uiv",
          [__arg_0, __arg_1]);

  vertexAttribIPointer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribIPointer",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttribIPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribIPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribIPointer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "vertexAttribIPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  waitSync_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */, "waitSync", [__arg_0]);

  waitSync_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "waitSync",
          [__arg_0, __arg_1]);

  waitSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGL2RenderingContextBase */,
          "waitSync",
          [__arg_0, __arg_1, __arg_2]);

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "attachShader",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindBuffer",
          [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindFramebuffer",
          [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindRenderbuffer",
          [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindTexture",
          [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFunc",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "checkFramebufferStatus",
          [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteFramebuffer",
          [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteRenderbuffer",
          [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "depthRange",
          [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "detachShader",
          [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray",
          [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "enableVertexAttribArray",
          [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveAttrib",
          [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveUniform",
          [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttachedShaders",
          [__arg_0]);

  getAttribLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramInfoLog",
          [__arg_0]);

  getProgramParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getTexParameter",
          [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniform",
          [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttrib",
          [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "pixelStorei",
          [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "polygonOffset",
          [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "sampleCoverage",
          [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "shaderSource",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texParameterf_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1f",
          [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1fv",
          [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1i",
          [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1iv",
          [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2fv",
          [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2iv",
          [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3fv",
          [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3iv",
          [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4fv",
          [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4iv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1f",
          [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1fv",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2fv",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3fv",
          [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4fv",
          [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkWebGLActiveInfo {
  static final instance = new BlinkWebGLActiveInfo();

  name_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLActiveInfo */, "name");

  size_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLActiveInfo */, "size");

  type_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLActiveInfo */, "type");
}

class BlinkWebGLBuffer {
  static final instance = new BlinkWebGLBuffer();
}

class BlinkWebGLCompressedTextureASTC {
  static final instance = new BlinkWebGLCompressedTextureASTC();
}

class BlinkWebGLCompressedTextureATC {
  static final instance = new BlinkWebGLCompressedTextureATC();
}

class BlinkWebGLCompressedTextureETC1 {
  static final instance = new BlinkWebGLCompressedTextureETC1();
}

class BlinkWebGLCompressedTexturePVRTC {
  static final instance = new BlinkWebGLCompressedTexturePVRTC();
}

class BlinkWebGLCompressedTextureS3TC {
  static final instance = new BlinkWebGLCompressedTextureS3TC();
}

class BlinkWebGLContextEvent extends BlinkEvent {
  static final instance = new BlinkWebGLContextEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("WebGLContextEvent");

  constructorCallback_1_(__arg_0) => Blink_JsNative_DomException
      .callConstructor("WebGLContextEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("WebGLContextEvent", [__arg_0, __arg_1]);

  statusMessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLContextEvent */, "statusMessage");
}

class BlinkWebGLDebugRendererInfo {
  static final instance = new BlinkWebGLDebugRendererInfo();
}

class BlinkWebGLDebugShaders {
  static final instance = new BlinkWebGLDebugShaders();

  getTranslatedShaderSource_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLDebugShaders */, "getTranslatedShaderSource", []);

  getTranslatedShaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(mthis /* WebGLDebugShaders */,
          "getTranslatedShaderSource", [__arg_0]);
}

class BlinkWebGLDepthTexture {
  static final instance = new BlinkWebGLDepthTexture();
}

class BlinkWebGLDrawBuffers {
  static final instance = new BlinkWebGLDrawBuffers();

  drawBuffersWEBGL_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLDrawBuffers */, "drawBuffersWEBGL", []);

  drawBuffersWEBGL_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLDrawBuffers */, "drawBuffersWEBGL", [__arg_0]);
}

class BlinkWebGLFramebuffer {
  static final instance = new BlinkWebGLFramebuffer();
}

class BlinkWebGLLoseContext {
  static final instance = new BlinkWebGLLoseContext();

  loseContext_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLLoseContext */, "loseContext", []);

  restoreContext_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLLoseContext */, "restoreContext", []);
}

class BlinkWebGLProgram {
  static final instance = new BlinkWebGLProgram();
}

class BlinkWebGLQuery {
  static final instance = new BlinkWebGLQuery();
}

class BlinkWebGLRenderbuffer {
  static final instance = new BlinkWebGLRenderbuffer();
}

class BlinkWebGLRenderingContext {
  static final instance = new BlinkWebGLRenderingContext();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "attachShader",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindBuffer",
          [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindFramebuffer",
          [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindRenderbuffer",
          [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindTexture",
          [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFunc",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "checkFramebufferStatus",
          [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteFramebuffer",
          [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteRenderbuffer",
          [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "depthRange",
          [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "detachShader",
          [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray",
          [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "enableVertexAttribArray",
          [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveAttrib",
          [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveUniform",
          [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttachedShaders",
          [__arg_0]);

  getAttribLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramInfoLog",
          [__arg_0]);

  getProgramParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getTexParameter",
          [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniform",
          [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttrib",
          [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "pixelStorei",
          [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "polygonOffset",
          [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "sampleCoverage",
          [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "shaderSource",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texParameterf_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1f",
          [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1fv",
          [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1i",
          [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1iv",
          [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2fv",
          [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2iv",
          [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3fv",
          [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3iv",
          [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4fv",
          [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4iv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1f",
          [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1fv",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2fv",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3fv",
          [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4fv",
          [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkWebGLRenderingContextBase {
  static final instance = new BlinkWebGLRenderingContextBase();

  canvas_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "canvas");

  drawingBufferHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferHeight");

  drawingBufferWidth_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLRenderingContextBase */, "drawingBufferWidth");

  activeTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "activeTexture", []);

  activeTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "activeTexture", [__arg_0]);

  attachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "attachShader", []);

  attachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "attachShader", [__arg_0]);

  attachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "attachShader",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0]);

  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1]);

  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindAttribLocation",
          [__arg_0, __arg_1, __arg_2]);

  bindBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindBuffer", []);

  bindBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindBuffer", [__arg_0]);

  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindBuffer",
          [__arg_0, __arg_1]);

  bindFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindFramebuffer", []);

  bindFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindFramebuffer", [__arg_0]);

  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindFramebuffer",
          [__arg_0, __arg_1]);

  bindRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", []);

  bindRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindRenderbuffer", [__arg_0]);

  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindRenderbuffer",
          [__arg_0, __arg_1]);

  bindTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "bindTexture", []);

  bindTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bindTexture", [__arg_0]);

  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bindTexture",
          [__arg_0, __arg_1]);

  blendColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1]);

  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2]);

  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  blendEquation_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendEquation", []);

  blendEquation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquation", [__arg_0]);

  blendEquationSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendEquationSeparate", []);

  blendEquationSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0]);

  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendEquationSeparate",
          [__arg_0, __arg_1]);

  blendFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "blendFunc", []);

  blendFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "blendFunc", [__arg_0]);

  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFunc",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1]);

  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "blendFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  bufferData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferData", [__arg_0]);

  bufferData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1]);

  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferData",
          [__arg_0, __arg_1, __arg_2]);

  bufferSubData_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "bufferSubData", [__arg_0]);

  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1]);

  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "bufferSubData",
          [__arg_0, __arg_1, __arg_2]);

  checkFramebufferStatus_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "checkFramebufferStatus", []);

  checkFramebufferStatus_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "checkFramebufferStatus",
          [__arg_0]);

  clear_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", []);

  clear_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clear", [__arg_0]);

  clearColor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1]);

  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2]);

  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "clearColor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  clearDepth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearDepth", []);

  clearDepth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearDepth", [__arg_0]);

  clearStencil_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "clearStencil", []);

  clearStencil_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "clearStencil", [__arg_0]);

  colorMask_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1]);

  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2]);

  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "colorMask",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  compileShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "compileShader", []);

  compileShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compileShader", [__arg_0]);

  compressedTexImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  compressedTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "compressedTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "compressedTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  copyTexSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "copyTexSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3,
          __arg_4, __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "copyTexSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  createBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createBuffer", []);

  createFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createFramebuffer", []);

  createProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createProgram", []);

  createRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createRenderbuffer", []);

  createShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createShader", []);

  createShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "createShader", [__arg_0]);

  createTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "createTexture", []);

  cullFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", []);

  cullFace_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "cullFace", [__arg_0]);

  deleteBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteBuffer", []);

  deleteBuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteBuffer", [__arg_0]);

  deleteFramebuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteFramebuffer", []);

  deleteFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteFramebuffer",
          [__arg_0]);

  deleteProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteProgram", []);

  deleteProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteProgram", [__arg_0]);

  deleteRenderbuffer_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteRenderbuffer", []);

  deleteRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "deleteRenderbuffer",
          [__arg_0]);

  deleteShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteShader", []);

  deleteShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteShader", [__arg_0]);

  deleteTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "deleteTexture", []);

  deleteTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "deleteTexture", [__arg_0]);

  depthFunc_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthFunc", []);

  depthFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthFunc", [__arg_0]);

  depthMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthMask", []);

  depthMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthMask", [__arg_0]);

  depthRange_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "depthRange", []);

  depthRange_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "depthRange", [__arg_0]);

  depthRange_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "depthRange",
          [__arg_0, __arg_1]);

  detachShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "detachShader", []);

  detachShader_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "detachShader", [__arg_0]);

  detachShader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "detachShader",
          [__arg_0, __arg_1]);

  disable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", []);

  disable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "disable", [__arg_0]);

  disableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray", []);

  disableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "disableVertexAttribArray",
          [__arg_0]);

  drawArrays_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "drawArrays", [__arg_0]);

  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1]);

  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawArrays",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1]);

  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2]);

  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "drawElements",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  enable_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", []);

  enable_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "enable", [__arg_0]);

  enableVertexAttribArray_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "enableVertexAttribArray", []);

  enableVertexAttribArray_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "enableVertexAttribArray",
          [__arg_0]);

  finish_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "finish", []);

  flush_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "flush", []);

  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1]);

  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2]);

  framebufferRenderbuffer_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferRenderbuffer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2]);

  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  framebufferTexture2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "framebufferTexture2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  frontFace_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "frontFace", []);

  frontFace_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "frontFace", [__arg_0]);

  generateMipmap_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "generateMipmap", []);

  generateMipmap_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "generateMipmap", [__arg_0]);

  getActiveAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getActiveAttrib", []);

  getActiveAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveAttrib", [__arg_0]);

  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveAttrib",
          [__arg_0, __arg_1]);

  getActiveUniform_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getActiveUniform", []);

  getActiveUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getActiveUniform", [__arg_0]);

  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getActiveUniform",
          [__arg_0, __arg_1]);

  getAttachedShaders_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttachedShaders", []);

  getAttachedShaders_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttachedShaders",
          [__arg_0]);

  getAttribLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getAttribLocation", []);

  getAttribLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0]);

  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getAttribLocation",
          [__arg_0, __arg_1]);

  getBufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getBufferParameter", []);

  getBufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0]);

  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getBufferParameter",
          [__arg_0, __arg_1]);

  getContextAttributes_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getContextAttributes", []);

  getError_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getError", []);

  getExtension_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getExtension", []);

  getExtension_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getExtension", [__arg_0]);

  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0]);

  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1]);

  getFramebufferAttachmentParameter_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getFramebufferAttachmentParameter",
          [__arg_0, __arg_1, __arg_2]);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getParameter", [__arg_0]);

  getProgramInfoLog_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramInfoLog", []);

  getProgramInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramInfoLog",
          [__arg_0]);

  getProgramParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getProgramParameter", []);

  getProgramParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0]);

  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getProgramParameter",
          [__arg_0, __arg_1]);

  getRenderbufferParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter", []);

  getRenderbufferParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0]);

  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getRenderbufferParameter",
          [__arg_0, __arg_1]);

  getShaderInfoLog_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(
      mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", []);

  getShaderInfoLog_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderInfoLog", [__arg_0]);

  getShaderParameter_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderParameter", []);

  getShaderParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0]);

  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderParameter",
          [__arg_0, __arg_1]);

  getShaderPrecisionFormat_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat", []);

  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0]);

  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getShaderPrecisionFormat",
          [__arg_0, __arg_1]);

  getShaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getShaderSource", []);

  getShaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getShaderSource", [__arg_0]);

  getSupportedExtensions_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getSupportedExtensions", []);

  getTexParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getTexParameter", []);

  getTexParameter_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getTexParameter", [__arg_0]);

  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getTexParameter",
          [__arg_0, __arg_1]);

  getUniform_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getUniform", []);

  getUniform_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniform", [__arg_0]);

  getUniform_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniform",
          [__arg_0, __arg_1]);

  getUniformLocation_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getUniformLocation", []);

  getUniformLocation_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0]);

  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getUniformLocation",
          [__arg_0, __arg_1]);

  getVertexAttrib_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "getVertexAttrib", []);

  getVertexAttrib_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttrib", [__arg_0]);

  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttrib",
          [__arg_0, __arg_1]);

  getVertexAttribOffset_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "getVertexAttribOffset", []);

  getVertexAttribOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0]);

  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "getVertexAttribOffset",
          [__arg_0, __arg_1]);

  hint_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", []);

  hint_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "hint", [__arg_0]);

  hint_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "hint", [__arg_0, __arg_1]);

  isBuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", []);

  isBuffer_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isBuffer", [__arg_0]);

  isContextLost_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isContextLost", []);

  isEnabled_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isEnabled", []);

  isEnabled_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isEnabled", [__arg_0]);

  isFramebuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isFramebuffer", []);

  isFramebuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isFramebuffer", [__arg_0]);

  isProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isProgram", []);

  isProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isProgram", [__arg_0]);

  isRenderbuffer_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isRenderbuffer", []);

  isRenderbuffer_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isRenderbuffer", [__arg_0]);

  isShader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", []);

  isShader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isShader", [__arg_0]);

  isTexture_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "isTexture", []);

  isTexture_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "isTexture", [__arg_0]);

  lineWidth_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "lineWidth", []);

  lineWidth_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "lineWidth", [__arg_0]);

  linkProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "linkProgram", []);

  linkProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "linkProgram", [__arg_0]);

  pixelStorei_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "pixelStorei", []);

  pixelStorei_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "pixelStorei", [__arg_0]);

  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "pixelStorei",
          [__arg_0, __arg_1]);

  polygonOffset_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "polygonOffset", []);

  polygonOffset_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "polygonOffset", [__arg_0]);

  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "polygonOffset",
          [__arg_0, __arg_1]);

  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  readPixels_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "readPixels",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1]);

  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2]);

  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "renderbufferStorage",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  sampleCoverage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "sampleCoverage", []);

  sampleCoverage_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "sampleCoverage", [__arg_0]);

  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "sampleCoverage",
          [__arg_0, __arg_1]);

  scissor_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "scissor", [__arg_0, __arg_1]);

  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2]);

  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "scissor",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  shaderSource_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "shaderSource", []);

  shaderSource_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "shaderSource", [__arg_0]);

  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "shaderSource",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilFunc", [__arg_0]);

  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1]);

  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFunc",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1]);

  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilFuncSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  stencilMask_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "stencilMask", []);

  stencilMask_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMask", [__arg_0]);

  stencilMaskSeparate_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilMaskSeparate", []);

  stencilMaskSeparate_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0]);

  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilMaskSeparate",
          [__arg_0, __arg_1]);

  stencilOp_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "stencilOp", [__arg_0]);

  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1]);

  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOp",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1]);

  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2]);

  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "stencilOpSeparate",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  texParameterf_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameterf", [__arg_0]);

  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1]);

  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameterf",
          [__arg_0, __arg_1, __arg_2]);

  texParameteri_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texParameteri", [__arg_0]);

  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1]);

  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texParameteri",
          [__arg_0, __arg_1, __arg_2]);

  texSubImage2D_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  texSubImage2D_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "texSubImage2D",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7
      ]);

  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4,
          __arg_5, __arg_6, __arg_7, __arg_8) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "texSubImage2D", [
        __arg_0,
        __arg_1,
        __arg_2,
        __arg_3,
        __arg_4,
        __arg_5,
        __arg_6,
        __arg_7,
        __arg_8
      ]);

  uniform1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1f", []);

  uniform1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1f", [__arg_0]);

  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1f",
          [__arg_0, __arg_1]);

  uniform1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1fv", []);

  uniform1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1fv", [__arg_0]);

  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1fv",
          [__arg_0, __arg_1]);

  uniform1i_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1i", []);

  uniform1i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1i", [__arg_0]);

  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1i",
          [__arg_0, __arg_1]);

  uniform1iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform1iv", []);

  uniform1iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform1iv", [__arg_0]);

  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform1iv",
          [__arg_0, __arg_1]);

  uniform2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2f", [__arg_0]);

  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1]);

  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2f",
          [__arg_0, __arg_1, __arg_2]);

  uniform2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2fv", []);

  uniform2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2fv", [__arg_0]);

  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2fv",
          [__arg_0, __arg_1]);

  uniform2i_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2i", [__arg_0]);

  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1]);

  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2i",
          [__arg_0, __arg_1, __arg_2]);

  uniform2iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform2iv", []);

  uniform2iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform2iv", [__arg_0]);

  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform2iv",
          [__arg_0, __arg_1]);

  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1]);

  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2]);

  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3fv", []);

  uniform3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3fv", [__arg_0]);

  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3fv",
          [__arg_0, __arg_1]);

  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1]);

  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2]);

  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform3iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform3iv", []);

  uniform3iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform3iv", [__arg_0]);

  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform3iv",
          [__arg_0, __arg_1]);

  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2]);

  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4fv", []);

  uniform4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4fv", [__arg_0]);

  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4fv",
          [__arg_0, __arg_1]);

  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2]);

  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4i",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  uniform4iv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "uniform4iv", []);

  uniform4iv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniform4iv", [__arg_0]);

  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniform4iv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix2fv", [__arg_0]);

  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1]);

  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix2fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix3fv", [__arg_0]);

  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1]);

  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix3fv",
          [__arg_0, __arg_1, __arg_2]);

  uniformMatrix4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "uniformMatrix4fv", [__arg_0]);

  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1]);

  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "uniformMatrix4fv",
          [__arg_0, __arg_1, __arg_2]);

  useProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "useProgram", []);

  useProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "useProgram", [__arg_0]);

  validateProgram_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "validateProgram", []);

  validateProgram_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "validateProgram", [__arg_0]);

  vertexAttrib1f_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", []);

  vertexAttrib1f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1f", [__arg_0]);

  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1f",
          [__arg_0, __arg_1]);

  vertexAttrib1fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", []);

  vertexAttrib1fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib1fv", [__arg_0]);

  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib1fv",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2f", [__arg_0]);

  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1]);

  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib2fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", []);

  vertexAttrib2fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib2fv", [__arg_0]);

  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib2fv",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1]);

  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib3fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", []);

  vertexAttrib3fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib3fv", [__arg_0]);

  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib3fv",
          [__arg_0, __arg_1]);

  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2]);

  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttrib4f_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4f",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttrib4fv_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", []);

  vertexAttrib4fv_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */, "vertexAttrib4fv", [__arg_0]);

  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttrib4fv",
          [__arg_0, __arg_1]);

  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  vertexAttribPointer_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  vertexAttribPointer_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "vertexAttribPointer",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  viewport_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1]);

  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2]);

  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebGLRenderingContextBase */,
          "viewport",
          [__arg_0, __arg_1, __arg_2, __arg_3]);
}

class BlinkWebGLSampler {
  static final instance = new BlinkWebGLSampler();
}

class BlinkWebGLShader {
  static final instance = new BlinkWebGLShader();
}

class BlinkWebGLShaderPrecisionFormat {
  static final instance = new BlinkWebGLShaderPrecisionFormat();

  precision_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLShaderPrecisionFormat */, "precision");

  rangeMax_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLShaderPrecisionFormat */, "rangeMax");

  rangeMin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebGLShaderPrecisionFormat */, "rangeMin");
}

class BlinkWebGLSync {
  static final instance = new BlinkWebGLSync();
}

class BlinkWebGLTexture {
  static final instance = new BlinkWebGLTexture();
}

class BlinkWebGLTimerQueryEXT {
  static final instance = new BlinkWebGLTimerQueryEXT();
}

class BlinkWebGLTransformFeedback {
  static final instance = new BlinkWebGLTransformFeedback();
}

class BlinkWebGLUniformLocation {
  static final instance = new BlinkWebGLUniformLocation();
}

class BlinkWebGLVertexArrayObject {
  static final instance = new BlinkWebGLVertexArrayObject();
}

class BlinkWebGLVertexArrayObjectOES {
  static final instance = new BlinkWebGLVertexArrayObjectOES();
}

class BlinkWebKitCSSMatrix {
  static final instance = new BlinkWebKitCSSMatrix();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("WebKitCSSMatrix");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("WebKitCSSMatrix", [__arg_0]);

  a_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "a");

  a_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "a", __arg_0);

  b_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "b");

  b_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "b", __arg_0);

  c_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "c");

  c_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "c", __arg_0);

  d_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "d");

  d_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "d", __arg_0);

  e_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "e");

  e_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "e", __arg_0);

  f_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebKitCSSMatrix */, "f");

  f_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "f", __arg_0);

  m11_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m11");

  m11_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m11", __arg_0);

  m12_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m12");

  m12_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m12", __arg_0);

  m13_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m13");

  m13_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m13", __arg_0);

  m14_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m14");

  m14_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m14", __arg_0);

  m21_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m21");

  m21_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m21", __arg_0);

  m22_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m22");

  m22_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m22", __arg_0);

  m23_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m23");

  m23_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m23", __arg_0);

  m24_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m24");

  m24_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m24", __arg_0);

  m31_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m31");

  m31_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m31", __arg_0);

  m32_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m32");

  m32_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m32", __arg_0);

  m33_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m33");

  m33_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m33", __arg_0);

  m34_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m34");

  m34_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m34", __arg_0);

  m41_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m41");

  m41_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m41", __arg_0);

  m42_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m42");

  m42_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m42", __arg_0);

  m43_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m43");

  m43_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m43", __arg_0);

  m44_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebKitCSSMatrix */, "m44");

  m44_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebKitCSSMatrix */, "m44", __arg_0);

  inverse_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "inverse", []);

  multiply_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "multiply", []);

  multiply_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "multiply", [__arg_0]);

  rotate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "rotate", [__arg_0]);

  rotate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "rotate", [__arg_0, __arg_1]);

  rotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebKitCSSMatrix */, "rotate", [__arg_0, __arg_1, __arg_2]);

  rotateAxisAngle_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebKitCSSMatrix */, "rotateAxisAngle", [__arg_0, __arg_1]);

  rotateAxisAngle_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */,
          "rotateAxisAngle", [__arg_0, __arg_1, __arg_2]);

  rotateAxisAngle_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */,
          "rotateAxisAngle", [__arg_0, __arg_1, __arg_2, __arg_3]);

  scale_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "scale", [__arg_0]);

  scale_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "scale", [__arg_0, __arg_1]);

  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WebKitCSSMatrix */, "scale", [__arg_0, __arg_1, __arg_2]);

  setMatrixValue_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "setMatrixValue", []);

  setMatrixValue_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "setMatrixValue", [__arg_0]);

  skewX_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "skewX", []);

  skewX_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "skewX", [__arg_0]);

  skewY_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "skewY", []);

  skewY_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "skewY", [__arg_0]);

  translate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "translate", [__arg_0]);

  translate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WebKitCSSMatrix */, "translate", [__arg_0, __arg_1]);

  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* WebKitCSSMatrix */,
          "translate", [__arg_0, __arg_1, __arg_2]);
}

class BlinkWebSocket extends BlinkEventTarget {
  static final instance = new BlinkWebSocket();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("WebSocket");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("WebSocket", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("WebSocket", [__arg_0, __arg_1]);

  binaryType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebSocket */, "binaryType");

  binaryType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebSocket */, "binaryType", __arg_0);

  bufferedAmount_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebSocket */, "bufferedAmount");

  extensions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebSocket */, "extensions");

  onclose_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebSocket */, "onclose", __arg_0);

  onerror_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebSocket */, "onerror", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebSocket */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebSocket */, "onmessage", __arg_0);

  onopen_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "onopen");

  onopen_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WebSocket */, "onopen", __arg_0);

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebSocket */, "protocol");

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WebSocket */, "readyState");

  url_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WebSocket */, "url");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WebSocket */, "close", []);

  close_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebSocket */, "close", [__arg_0]);

  close_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WebSocket */, "close", [__arg_0, __arg_1]);

  send_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* WebSocket */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WebSocket */, "send", [__arg_0]);
}

class BlinkWheelEvent extends BlinkMouseEvent {
  static final instance = new BlinkWheelEvent();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("WheelEvent");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("WheelEvent", [__arg_0]);

  constructorCallback_2_(__arg_0, __arg_1) => Blink_JsNative_DomException
      .callConstructor("WheelEvent", [__arg_0, __arg_1]);

  deltaMode_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WheelEvent */, "deltaMode");

  deltaX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "deltaX");

  deltaY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "deltaY");

  deltaZ_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* WheelEvent */, "deltaZ");

  wheelDelta_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WheelEvent */, "wheelDelta");

  wheelDeltaX_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WheelEvent */, "wheelDeltaX");

  wheelDeltaY_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WheelEvent */, "wheelDeltaY");
}

class BlinkWindow extends BlinkEventTarget {
  static final instance = new BlinkWindow();

  applicationCache_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "applicationCache");

  caches_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "caches");

  clientInformation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "clientInformation");

  closed_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "closed");

  console_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "console");

  crypto_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "crypto");

  defaultStatus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "defaultStatus");

  defaultStatus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "defaultStatus", __arg_0);

  defaultstatus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "defaultstatus");

  defaultstatus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "defaultstatus", __arg_0);

  devicePixelRatio_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "devicePixelRatio");

  document_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "document");

  event_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "event");

  event_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Window */, "event", __arg_0);

  frameElement_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "frameElement");

  frames_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "frames");

  history_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "history");

  indexedDB_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "indexedDB");

  innerHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "innerHeight");

  innerWidth_Getter_(mthis) native "Blink_Getter_Window_innerWidth";

  isSecureContext_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "isSecureContext");

  length_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "length");

  localStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "localStorage");

  location_Getter_(mthis) native "Blink_Getter_Window_location";

  locationbar_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "locationbar");

  menubar_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "menubar");

  name_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "name");

  name_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Window */, "name", __arg_0);

  navigator_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "navigator");

  offscreenBuffering_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "offscreenBuffering");

  onanimationend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "onanimationend");

  onanimationend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "onanimationend", __arg_0);

  onanimationiteration_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Window */, "onanimationiteration");

  onanimationiteration_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "onanimationiteration", __arg_0);

  onanimationstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "onanimationstart");

  onanimationstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "onanimationstart", __arg_0);

  ondevicelight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "ondevicelight");

  ondevicelight_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "ondevicelight", __arg_0);

  ondevicemotion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "ondevicemotion");

  ondevicemotion_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "ondevicemotion", __arg_0);

  ondeviceorientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "ondeviceorientation");

  ondeviceorientation_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "ondeviceorientation", __arg_0);

  ondeviceorientationabsolute_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Window */, "ondeviceorientationabsolute");

  ondeviceorientationabsolute_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* Window */, "ondeviceorientationabsolute", __arg_0);

  onorientationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "onorientationchange");

  onorientationchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "onorientationchange", __arg_0);

  onsearch_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "onsearch");

  onsearch_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Window */, "onsearch", __arg_0);

  ontransitionend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "ontransitionend");

  ontransitionend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "ontransitionend", __arg_0);

  onwebkitanimationend_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Window */, "onwebkitanimationend");

  onwebkitanimationend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "onwebkitanimationend", __arg_0);

  onwebkitanimationiteration_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Window */, "onwebkitanimationiteration");

  onwebkitanimationiteration_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* Window */, "onwebkitanimationiteration", __arg_0);

  onwebkitanimationstart_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Window */, "onwebkitanimationstart");

  onwebkitanimationstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "onwebkitanimationstart", __arg_0);

  onwebkittransitionend_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* Window */, "onwebkittransitionend");

  onwebkittransitionend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* Window */, "onwebkittransitionend", __arg_0);

  onwheel_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "onwheel");

  onwheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Window */, "onwheel", __arg_0);

  opener_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "opener");

  opener_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Window */, "opener", __arg_0);

  orientation_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "orientation");

  outerHeight_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "outerHeight");

  outerWidth_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "outerWidth");

  pageXOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "pageXOffset");

  pageYOffset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "pageYOffset");

  parent_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "parent");

  performance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "performance");

  personalbar_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "personalbar");

  renderWorklet_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "renderWorklet");

  screen_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "screen");

  screenLeft_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenLeft");

  screenTop_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenTop");

  screenX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenX");

  screenY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "screenY");

  scrollX_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "scrollX");

  scrollY_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "scrollY");

  scrollbars_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "scrollbars");

  self_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "self");

  sessionStorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "sessionStorage");

  speechSynthesis_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "speechSynthesis");

  status_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "status");

  status_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Window */, "status", __arg_0);

  statusbar_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "statusbar");

  styleMedia_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "styleMedia");

  toolbar_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "toolbar");

  top_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "top");

  webkitIndexedDB_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "webkitIndexedDB");

  webkitStorageInfo_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* Window */, "webkitStorageInfo");

  window_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Window */, "window");

  $__getter___Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "__getter__", [__arg_0]);

  alert_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "alert", []);

  alert_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "alert", [__arg_0]);

  blur_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "blur", []);

  cancelAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "cancelAnimationFrame", []);

  cancelAnimationFrame_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Window */, "cancelAnimationFrame", [__arg_0]);

  cancelIdleCallback_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "cancelIdleCallback", []);

  cancelIdleCallback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "cancelIdleCallback", [__arg_0]);

  captureEvents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "captureEvents", []);

  close_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "close", []);

  confirm_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "confirm", []);

  confirm_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "confirm", [__arg_0]);

  fetch_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "fetch", []);

  fetch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "fetch", [__arg_0]);

  fetch_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "fetch", [__arg_0, __arg_1]);

  find_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "find",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  find_Callback_6_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "find",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5]);

  find_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5,
          __arg_6) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "find",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6]);

  focus_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "focus", []);

  getComputedStyle_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "getComputedStyle", []);

  getComputedStyle_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "getComputedStyle", [__arg_0]);

  getComputedStyle_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "getComputedStyle", [__arg_0, __arg_1]);

  getMatchedCSSRules_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "getMatchedCSSRules", []);

  getMatchedCSSRules_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "getMatchedCSSRules", [__arg_0]);

  getMatchedCSSRules_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "getMatchedCSSRules", [__arg_0, __arg_1]);

  getSelection_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "getSelection", []);

  matchMedia_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "matchMedia", []);

  matchMedia_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "matchMedia", [__arg_0]);

  moveBy_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveBy", []);

  moveBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "moveBy", [__arg_0]);

  moveBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "moveBy", [__arg_0, __arg_1]);

  moveTo_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "moveTo", []);

  moveTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "moveTo", [__arg_0]);

  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "moveTo", [__arg_0, __arg_1]);

  open_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "open", [__arg_0]);

  open_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "open", [__arg_0, __arg_1]);

  open_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Window */, "open", [__arg_0, __arg_1, __arg_2]);

  openDatabase_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Window */, "openDatabase", [__arg_0, __arg_1]);

  openDatabase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "openDatabase", [__arg_0, __arg_1, __arg_2]);

  openDatabase_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "openDatabase",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  openDatabase_Callback_5_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "openDatabase",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Window */, "postMessage", [__arg_0, __arg_1]);

  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "postMessage", [__arg_0, __arg_1, __arg_2]);

  print_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "print", []);

  prompt_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "prompt", []);

  prompt_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "prompt", [__arg_0]);

  prompt_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "prompt", [__arg_0, __arg_1]);

  releaseEvents_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "releaseEvents", []);

  requestAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "requestAnimationFrame", []);

  requestAnimationFrame_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Window */, "requestAnimationFrame", [__arg_0]);

  requestIdleCallback_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "requestIdleCallback", []);

  requestIdleCallback_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "requestIdleCallback", [__arg_0]);

  requestIdleCallback_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "requestIdleCallback", [__arg_0, __arg_1]);

  resizeBy_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "resizeBy", []);

  resizeBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "resizeBy", [__arg_0]);

  resizeBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "resizeBy", [__arg_0, __arg_1]);

  resizeTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "resizeTo", []);

  resizeTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "resizeTo", [__arg_0]);

  resizeTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "resizeTo", [__arg_0, __arg_1]);

  scroll_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "scroll", []);

  scroll_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scroll", [__arg_0]);

  scroll_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scroll", [__arg_0, __arg_1]);

  scroll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "scroll", [__arg_0, __arg_1, __arg_2]);

  scrollBy_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scrollBy", []);

  scrollBy_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scrollBy", [__arg_0]);

  scrollBy_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scrollBy", [__arg_0, __arg_1]);

  scrollBy_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "scrollBy", [__arg_0, __arg_1, __arg_2]);

  scrollTo_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scrollTo", []);

  scrollTo_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scrollTo", [__arg_0]);

  scrollTo_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "scrollTo", [__arg_0, __arg_1]);

  scrollTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "scrollTo", [__arg_0, __arg_1, __arg_2]);

  stop_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */, "stop", []);

  webkitCancelAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "webkitCancelAnimationFrame", []);

  webkitCancelAnimationFrame_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "webkitCancelAnimationFrame", [__arg_0]);

  webkitCancelRequestAnimationFrame_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "webkitCancelRequestAnimationFrame", []);

  webkitCancelRequestAnimationFrame_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "webkitCancelRequestAnimationFrame", [__arg_0]);

  webkitRequestAnimationFrame_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Window */, "webkitRequestAnimationFrame", []);

  webkitRequestAnimationFrame_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "webkitRequestAnimationFrame", [__arg_0]);

  webkitRequestFileSystem_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Window */, "webkitRequestFileSystem", [__arg_0]);

  webkitRequestFileSystem_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "webkitRequestFileSystem", [__arg_0, __arg_1]);

  webkitRequestFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */,
          "webkitRequestFileSystem", [__arg_0, __arg_1, __arg_2]);

  webkitRequestFileSystem_Callback_4_(
          mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */,
          "webkitRequestFileSystem", [__arg_0, __arg_1, __arg_2, __arg_3]);

  webkitResolveLocalFileSystemURL_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "webkitResolveLocalFileSystemURL", []);

  webkitResolveLocalFileSystemURL_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* Window */, "webkitResolveLocalFileSystemURL", [__arg_0]);

  webkitResolveLocalFileSystemURL_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */,
          "webkitResolveLocalFileSystemURL", [__arg_0, __arg_1]);

  webkitResolveLocalFileSystemURL_Callback_3_(
          mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* Window */,
          "webkitResolveLocalFileSystemURL", [__arg_0, __arg_1, __arg_2]);

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onabort", __arg_0);

  onautocomplete_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocomplete");

  onautocomplete_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onautocomplete", __arg_0);

  onautocompleteerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onautocompleteerror");

  onautocompleteerror_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onautocompleteerror", __arg_0);

  onblur_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onblur");

  onblur_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onblur", __arg_0);

  oncancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncancel");

  oncancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncancel", __arg_0);

  oncanplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplay");

  oncanplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oncanplay", __arg_0);

  oncanplaythrough_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncanplaythrough");

  oncanplaythrough_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "oncanplaythrough", __arg_0);

  onchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onchange");

  onchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onchange", __arg_0);

  onclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclick");

  onclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclick", __arg_0);

  onclose_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onclose");

  onclose_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onclose", __arg_0);

  oncontextmenu_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncontextmenu");

  oncontextmenu_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncontextmenu", __arg_0);

  oncuechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oncuechange");

  oncuechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "oncuechange", __arg_0);

  ondblclick_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondblclick");

  ondblclick_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondblclick", __arg_0);

  ondrag_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrag");

  ondrag_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrag", __arg_0);

  ondragend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragend");

  ondragend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragend", __arg_0);

  ondragenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragenter");

  ondragenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragenter", __arg_0);

  ondragleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragleave");

  ondragleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragleave", __arg_0);

  ondragover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragover");

  ondragover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondragover", __arg_0);

  ondragstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondragstart");

  ondragstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ondragstart", __arg_0);

  ondrop_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondrop");

  ondrop_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ondrop", __arg_0);

  ondurationchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ondurationchange");

  ondurationchange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "ondurationchange", __arg_0);

  onemptied_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onemptied");

  onemptied_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onemptied", __arg_0);

  onended_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onended");

  onended_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onended", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onerror", __arg_0);

  onfocus_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onfocus");

  onfocus_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onfocus", __arg_0);

  oninput_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninput");

  oninput_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninput", __arg_0);

  oninvalid_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "oninvalid");

  oninvalid_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "oninvalid", __arg_0);

  onkeydown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeydown");

  onkeydown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeydown", __arg_0);

  onkeypress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeypress");

  onkeypress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeypress", __arg_0);

  onkeyup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onkeyup");

  onkeyup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onkeyup", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onload", __arg_0);

  onloadeddata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadeddata");

  onloadeddata_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadeddata", __arg_0);

  onloadedmetadata_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadedmetadata");

  onloadedmetadata_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* GlobalEventHandlers */, "onloadedmetadata", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onloadstart", __arg_0);

  onmousedown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousedown");

  onmousedown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousedown", __arg_0);

  onmouseenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseenter");

  onmouseenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseenter", __arg_0);

  onmouseleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseleave");

  onmouseleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseleave", __arg_0);

  onmousemove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousemove");

  onmousemove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousemove", __arg_0);

  onmouseout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseout");

  onmouseout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseout", __arg_0);

  onmouseover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseover");

  onmouseover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmouseover", __arg_0);

  onmouseup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmouseup");

  onmouseup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onmouseup", __arg_0);

  onmousewheel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onmousewheel");

  onmousewheel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onmousewheel", __arg_0);

  onpause_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpause");

  onpause_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onpause", __arg_0);

  onplay_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplay");

  onplay_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplay", __arg_0);

  onplaying_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onplaying");

  onplaying_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onplaying", __arg_0);

  onpointercancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointercancel");

  onpointercancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointercancel", __arg_0);

  onpointerdown_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerdown");

  onpointerdown_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerdown", __arg_0);

  onpointerenter_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerenter");

  onpointerenter_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerenter", __arg_0);

  onpointerleave_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerleave");

  onpointerleave_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerleave", __arg_0);

  onpointermove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointermove");

  onpointermove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointermove", __arg_0);

  onpointerout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerout");

  onpointerout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerout", __arg_0);

  onpointerover_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerover");

  onpointerover_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerover", __arg_0);

  onpointerup_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onpointerup");

  onpointerup_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onpointerup", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onprogress", __arg_0);

  onratechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onratechange");

  onratechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onratechange", __arg_0);

  onreset_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onreset");

  onreset_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onreset", __arg_0);

  onresize_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onresize");

  onresize_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onresize", __arg_0);

  onscroll_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onscroll");

  onscroll_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onscroll", __arg_0);

  onseeked_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeked");

  onseeked_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeked", __arg_0);

  onseeking_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onseeking");

  onseeking_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onseeking", __arg_0);

  onselect_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onselect");

  onselect_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onselect", __arg_0);

  onshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onshow");

  onshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onshow", __arg_0);

  onstalled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onstalled");

  onstalled_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onstalled", __arg_0);

  onsubmit_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsubmit");

  onsubmit_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsubmit", __arg_0);

  onsuspend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onsuspend");

  onsuspend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onsuspend", __arg_0);

  ontimeupdate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontimeupdate");

  ontimeupdate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontimeupdate", __arg_0);

  ontoggle_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontoggle");

  ontoggle_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontoggle", __arg_0);

  ontouchcancel_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchcancel");

  ontouchcancel_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchcancel", __arg_0);

  ontouchend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchend");

  ontouchend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "ontouchend", __arg_0);

  ontouchmove_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchmove");

  ontouchmove_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchmove", __arg_0);

  ontouchstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "ontouchstart");

  ontouchstart_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "ontouchstart", __arg_0);

  onvolumechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onvolumechange");

  onvolumechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* GlobalEventHandlers */, "onvolumechange", __arg_0);

  onwaiting_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* GlobalEventHandlers */, "onwaiting");

  onwaiting_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* GlobalEventHandlers */, "onwaiting", __arg_0);

  atob_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "atob", []);

  atob_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "atob", [__arg_0]);

  btoa_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "btoa", []);

  btoa_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "btoa", [__arg_0]);

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onunload", __arg_0);

  clearInterval_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearInterval", []);

  clearInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearInterval", [__arg_0]);

  clearTimeout_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearTimeout", []);

  clearTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearTimeout", [__arg_0]);

  setInterval_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setInterval", []);

  setInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0]);

  setInterval_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1]);

  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1, __arg_2]);

  setTimeout_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", []);

  setTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0]);

  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1]);

  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1, __arg_2]);
}

class BlinkWindowBase64 {
  static final instance = new BlinkWindowBase64();

  atob_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "atob", []);

  atob_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "atob", [__arg_0]);

  btoa_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "btoa", []);

  btoa_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "btoa", [__arg_0]);
}

class BlinkWindowClient extends BlinkClient {
  static final instance = new BlinkWindowClient();

  focused_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowClient */, "focused");

  visibilityState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowClient */, "visibilityState");

  focus_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowClient */, "focus", []);

  navigate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowClient */, "navigate", []);

  navigate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowClient */, "navigate", [__arg_0]);
}

class BlinkWindowEventHandlers {
  static final instance = new BlinkWindowEventHandlers();

  onbeforeunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onbeforeunload");

  onbeforeunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onbeforeunload", __arg_0);

  onhashchange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onhashchange");

  onhashchange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* WindowEventHandlers */, "onhashchange", __arg_0);

  onlanguagechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onlanguagechange");

  onlanguagechange_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onlanguagechange", __arg_0);

  onmessage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onmessage", __arg_0);

  onoffline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onoffline");

  onoffline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onoffline", __arg_0);

  ononline_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "ononline");

  ononline_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "ononline", __arg_0);

  onpagehide_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpagehide");

  onpagehide_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpagehide", __arg_0);

  onpageshow_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpageshow");

  onpageshow_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpageshow", __arg_0);

  onpopstate_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onpopstate");

  onpopstate_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onpopstate", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onrejectionhandled", __arg_0);

  onstorage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onstorage");

  onstorage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onstorage", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WindowEventHandlers */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WindowEventHandlers */, "onunhandledrejection", __arg_0);

  onunload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WindowEventHandlers */, "onunload");

  onunload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WindowEventHandlers */, "onunload", __arg_0);
}

class BlinkWindowTimers {
  static final instance = new BlinkWindowTimers();

  clearInterval_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearInterval", []);

  clearInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearInterval", [__arg_0]);

  clearTimeout_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearTimeout", []);

  clearTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearTimeout", [__arg_0]);

  setInterval_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setInterval", []);

  setInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0]);

  setInterval_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1]);

  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1, __arg_2]);

  setTimeout_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", []);

  setTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0]);

  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1]);

  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1, __arg_2]);
}

class BlinkWorker extends BlinkEventTarget {
  static final instance = new BlinkWorker();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("Worker");

  constructorCallback_1_(__arg_0) =>
      Blink_JsNative_DomException.callConstructor("Worker", [__arg_0]);

  onmessage_Getter_(mthis) =>
      Blink_JsNative_DomException.getProperty(mthis /* Worker */, "onmessage");

  onmessage_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* Worker */, "onmessage", __arg_0);

  postMessage_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Worker */, "postMessage", []);

  postMessage_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Worker */, "postMessage", [__arg_0]);

  postMessage_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException
          .callMethod(mthis /* Worker */, "postMessage", [__arg_0, __arg_1]);

  terminate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* Worker */, "terminate", []);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* AbstractWorker */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* AbstractWorker */, "onerror", __arg_0);
}

class BlinkWorkerConsole extends BlinkConsoleBase {
  static final instance = new BlinkWorkerConsole();
}

class BlinkWorkerGlobalScope extends BlinkEventTarget {
  static final instance = new BlinkWorkerGlobalScope();

  caches_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "caches");

  console_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "console");

  crypto_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "crypto");

  indexedDB_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "indexedDB");

  location_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "location");

  navigator_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "navigator");

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* WorkerGlobalScope */, "onerror", __arg_0);

  onrejectionhandled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "onrejectionhandled");

  onrejectionhandled_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WorkerGlobalScope */, "onrejectionhandled", __arg_0);

  onunhandledrejection_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WorkerGlobalScope */, "onunhandledrejection");

  onunhandledrejection_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WorkerGlobalScope */, "onunhandledrejection", __arg_0);

  performance_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "performance");

  self_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "self");

  webkitIndexedDB_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerGlobalScope */, "webkitIndexedDB");

  close_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerGlobalScope */, "close", []);

  fetch_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerGlobalScope */, "fetch", []);

  fetch_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerGlobalScope */, "fetch", [__arg_0]);

  fetch_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerGlobalScope */, "fetch", [__arg_0, __arg_1]);

  importScripts_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerGlobalScope */, "importScripts", []);

  importScripts_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerGlobalScope */, "importScripts", [__arg_0]);

  atob_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "atob", []);

  atob_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "atob", [__arg_0]);

  btoa_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "btoa", []);

  btoa_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowBase64 */, "btoa", [__arg_0]);

  clearInterval_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearInterval", []);

  clearInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearInterval", [__arg_0]);

  clearTimeout_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearTimeout", []);

  clearTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "clearTimeout", [__arg_0]);

  setInterval_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setInterval", []);

  setInterval_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setInterval", [__arg_0]);

  setInterval_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1]);

  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setInterval", [__arg_0, __arg_1, __arg_2]);

  setTimeout_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", []);

  setTimeout_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0]);

  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1]);

  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WindowTimers */, "setTimeout", [__arg_0, __arg_1, __arg_2]);
}

class BlinkWorkerLocation {
  static final instance = new BlinkWorkerLocation();

  hash_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "hash");

  host_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "host");

  hostname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "hostname");

  href_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "href");

  origin_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "origin");

  pathname_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "pathname");

  port_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "port");

  protocol_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "protocol");

  search_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* URLUtilsReadOnly */, "search");

  toString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* URLUtilsReadOnly */, "toString", []);
}

class BlinkWorkerNavigator {
  static final instance = new BlinkWorkerNavigator();

  connection_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerNavigator */, "connection");

  geofencing_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerNavigator */, "geofencing");

  permissions_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerNavigator */, "permissions");

  services_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerNavigator */, "services");

  storage_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerNavigator */, "storage");

  webkitPersistentStorage_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WorkerNavigator */, "webkitPersistentStorage");

  webkitTemporaryStorage_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WorkerNavigator */, "webkitTemporaryStorage");

  hardwareConcurrency_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorCPU */, "hardwareConcurrency");

  appCodeName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appCodeName");

  appName_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appName");

  appVersion_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "appVersion");

  dartEnabled_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "dartEnabled");

  platform_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "platform");

  product_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "product");

  userAgent_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorID */, "userAgent");

  onLine_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* NavigatorOnLine */, "onLine");
}

class BlinkWorkerPerformance extends BlinkEventTarget {
  static final instance = new BlinkWorkerPerformance();

  memory_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* WorkerPerformance */, "memory");

  onresourcetimingbufferfull_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* WorkerPerformance */, "onresourcetimingbufferfull");

  onresourcetimingbufferfull_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* WorkerPerformance */, "onresourcetimingbufferfull", __arg_0);

  clearMarks_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "clearMarks", []);

  clearMarks_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "clearMarks", [__arg_0]);

  clearMeasures_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "clearMeasures", []);

  clearMeasures_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "clearMeasures", [__arg_0]);

  clearResourceTimings_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "clearResourceTimings", []);

  getEntries_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "getEntries", []);

  getEntriesByName_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "getEntriesByName", []);

  getEntriesByName_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "getEntriesByName", [__arg_0]);

  getEntriesByName_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */,
          "getEntriesByName", [__arg_0, __arg_1]);

  getEntriesByType_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "getEntriesByType", []);

  getEntriesByType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "getEntriesByType", [__arg_0]);

  mark_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "mark", []);

  mark_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "mark", [__arg_0]);

  measure_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "measure", [__arg_0]);

  measure_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "measure", [__arg_0, __arg_1]);

  measure_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */,
          "measure", [__arg_0, __arg_1, __arg_2]);

  now_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* WorkerPerformance */, "now", []);

  setResourceTimingBufferSize_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* WorkerPerformance */, "setResourceTimingBufferSize", []);

  setResourceTimingBufferSize_Callback_1_(mthis, __arg_0) =>
      Blink_JsNative_DomException.callMethod(mthis /* WorkerPerformance */,
          "setResourceTimingBufferSize", [__arg_0]);
}

class BlinkWorklet {
  static final instance = new BlinkWorklet();

  import_Callback_0_(mthis) =>
      Blink_JsNative_DomException.callMethod(mthis /* Worklet */, "import", []);

  import_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* Worklet */, "import", [__arg_0]);
}

class BlinkWorkletGlobalScope {
  static final instance = new BlinkWorkletGlobalScope();
}

class BlinkXMLDocument extends BlinkDocument {
  static final instance = new BlinkXMLDocument();
}

class BlinkXMLHttpRequest extends BlinkXMLHttpRequestEventTarget {
  static final instance = new BlinkXMLHttpRequest();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("XMLHttpRequest");

  onreadystatechange_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "onreadystatechange");

  onreadystatechange_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* XMLHttpRequest */, "onreadystatechange", __arg_0);

  readyState_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "readyState");

  response_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "response");

  responseText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "responseText");

  responseType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "responseType");

  responseType_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* XMLHttpRequest */, "responseType", __arg_0);

  responseURL_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "responseURL");

  responseXML_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "responseXML");

  status_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "status");

  statusText_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "statusText");

  timeout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "timeout");

  timeout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* XMLHttpRequest */, "timeout", __arg_0);

  upload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "upload");

  withCredentials_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequest */, "withCredentials");

  withCredentials_Setter_(mthis, __arg_0) => Blink_JsNative_DomException
      .setProperty(mthis /* XMLHttpRequest */, "withCredentials", __arg_0);

  abort_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "abort", []);

  getAllResponseHeaders_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "getAllResponseHeaders", []);

  getResponseHeader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "getResponseHeader", []);

  getResponseHeader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "getResponseHeader", [__arg_0]);

  open_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "open", []);

  open_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "open", [__arg_0]);

  open_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "open", [__arg_0, __arg_1]);

  open_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XMLHttpRequest */, "open", [__arg_0, __arg_1, __arg_2]);

  open_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open",
          [__arg_0, __arg_1, __arg_2, __arg_3]);

  open_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* XMLHttpRequest */, "open",
          [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);

  overrideMimeType_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "overrideMimeType", []);

  overrideMimeType_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "overrideMimeType", [__arg_0]);

  send_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "send", []);

  send_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "send", [__arg_0]);

  setRequestHeader_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "setRequestHeader", []);

  setRequestHeader_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLHttpRequest */, "setRequestHeader", [__arg_0]);

  setRequestHeader_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XMLHttpRequest */, "setRequestHeader", [__arg_0, __arg_1]);
}

class BlinkXMLHttpRequestEventTarget extends BlinkEventTarget {
  static final instance = new BlinkXMLHttpRequestEventTarget();

  onabort_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequestEventTarget */, "onabort");

  onabort_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* XMLHttpRequestEventTarget */, "onabort", __arg_0);

  onerror_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequestEventTarget */, "onerror");

  onerror_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* XMLHttpRequestEventTarget */, "onerror", __arg_0);

  onload_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequestEventTarget */, "onload");

  onload_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* XMLHttpRequestEventTarget */, "onload", __arg_0);

  onloadend_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequestEventTarget */, "onloadend");

  onloadend_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* XMLHttpRequestEventTarget */, "onloadend", __arg_0);

  onloadstart_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequestEventTarget */, "onloadstart");

  onloadstart_Setter_(mthis, __arg_0) =>
      Blink_JsNative_DomException.setProperty(
          mthis /* XMLHttpRequestEventTarget */, "onloadstart", __arg_0);

  onprogress_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequestEventTarget */, "onprogress");

  onprogress_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* XMLHttpRequestEventTarget */, "onprogress", __arg_0);

  ontimeout_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XMLHttpRequestEventTarget */, "ontimeout");

  ontimeout_Setter_(mthis, __arg_0) => Blink_JsNative_DomException.setProperty(
      mthis /* XMLHttpRequestEventTarget */, "ontimeout", __arg_0);
}

class BlinkXMLHttpRequestUpload extends BlinkXMLHttpRequestEventTarget {
  static final instance = new BlinkXMLHttpRequestUpload();
}

class BlinkXMLSerializer {
  static final instance = new BlinkXMLSerializer();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("XMLSerializer");

  serializeToString_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLSerializer */, "serializeToString", []);

  serializeToString_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XMLSerializer */, "serializeToString", [__arg_0]);
}

class BlinkXPathEvaluator {
  static final instance = new BlinkXPathEvaluator();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("XPathEvaluator");

  createExpression_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathEvaluator */, "createExpression", []);

  createExpression_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathEvaluator */, "createExpression", [__arg_0]);

  createExpression_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XPathEvaluator */, "createExpression", [__arg_0, __arg_1]);

  createNSResolver_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathEvaluator */, "createNSResolver", []);

  createNSResolver_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathEvaluator */, "createNSResolver", [__arg_0]);

  evaluate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathEvaluator */, "evaluate", [__arg_0]);

  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathEvaluator */, "evaluate", [__arg_0, __arg_1]);

  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XPathEvaluator */, "evaluate", [__arg_0, __arg_1, __arg_2]);

  evaluate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) =>
      Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */,
          "evaluate", [__arg_0, __arg_1, __arg_2, __arg_3]);

  evaluate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) =>
      Blink_JsNative_DomException.callMethod(mthis /* XPathEvaluator */,
          "evaluate", [__arg_0, __arg_1, __arg_2, __arg_3, __arg_4]);
}

class BlinkXPathExpression {
  static final instance = new BlinkXPathExpression();

  evaluate_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathExpression */, "evaluate", []);

  evaluate_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathExpression */, "evaluate", [__arg_0]);

  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathExpression */, "evaluate", [__arg_0, __arg_1]);

  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XPathExpression */, "evaluate", [__arg_0, __arg_1, __arg_2]);
}

class BlinkXPathNSResolver {
  static final instance = new BlinkXPathNSResolver();

  lookupNamespaceURI_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathNSResolver */, "lookupNamespaceURI", []);

  lookupNamespaceURI_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathNSResolver */, "lookupNamespaceURI", [__arg_0]);
}

class BlinkXPathResult {
  static final instance = new BlinkXPathResult();

  booleanValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XPathResult */, "booleanValue");

  invalidIteratorState_Getter_(mthis) => Blink_JsNative_DomException
      .getProperty(mthis /* XPathResult */, "invalidIteratorState");

  numberValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XPathResult */, "numberValue");

  resultType_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XPathResult */, "resultType");

  singleNodeValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XPathResult */, "singleNodeValue");

  snapshotLength_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XPathResult */, "snapshotLength");

  stringValue_Getter_(mthis) => Blink_JsNative_DomException.getProperty(
      mthis /* XPathResult */, "stringValue");

  iterateNext_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathResult */, "iterateNext", []);

  snapshotItem_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathResult */, "snapshotItem", []);

  snapshotItem_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XPathResult */, "snapshotItem", [__arg_0]);
}

class BlinkXSLTProcessor {
  static final instance = new BlinkXSLTProcessor();

  constructorCallback_0_() =>
      Blink_JsNative_DomException.callConstructor0("XSLTProcessor");

  clearParameters_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "clearParameters", []);

  getParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "getParameter", []);

  getParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "getParameter", [__arg_0]);

  getParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XSLTProcessor */, "getParameter", [__arg_0, __arg_1]);

  importStylesheet_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "importStylesheet", []);

  importStylesheet_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "importStylesheet", [__arg_0]);

  removeParameter_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "removeParameter", []);

  removeParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "removeParameter", [__arg_0]);

  removeParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XSLTProcessor */, "removeParameter", [__arg_0, __arg_1]);

  reset_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "reset", []);

  setParameter_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "setParameter", [__arg_0]);

  setParameter_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XSLTProcessor */, "setParameter", [__arg_0, __arg_1]);

  setParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) =>
      Blink_JsNative_DomException.callMethod(mthis /* XSLTProcessor */,
          "setParameter", [__arg_0, __arg_1, __arg_2]);

  transformToDocument_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "transformToDocument", []);

  transformToDocument_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "transformToDocument", [__arg_0]);

  transformToFragment_Callback_0_(mthis) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "transformToFragment", []);

  transformToFragment_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException
      .callMethod(mthis /* XSLTProcessor */, "transformToFragment", [__arg_0]);

  transformToFragment_Callback_2_(mthis, __arg_0, __arg_1) =>
      Blink_JsNative_DomException.callMethod(
          mthis /* XSLTProcessor */, "transformToFragment", [__arg_0, __arg_1]);
}

// _Utils native entry points
class Blink_Utils {
  static window() native "Utils_window";

  static forwardingPrint(message) native "Utils_forwardingPrint";

  static spawnDomUri(uri) native "Utils_spawnDomUri";

  static void spawnDomHelper(Function f, int replyTo)
      native "Utils_spawnDomHelper";

  static register(document, tag, customType, extendsTagName)
      native "Utils_register";

  // Below code sets up VMLibraryHooks for resolvePackageUri.
  static Uri resolvePackageUri(Uri packageUri) native "Utils_resolvePackageUri";
  static Future<Uri> _resolvePackageUriFuture(Uri packageUri) async {
    return resolvePackageUri(packageUri);
  }

  static void _setupHooks() {
    internal.VMLibraryHooks.resolvePackageUriFuture = _resolvePackageUriFuture;
  }

  // Defines an interceptor if there is an appropriate JavaScript prototype to define it on.
  // In any case, returns a typed JS wrapper compatible with dart:html and the new
  // typed JS Interop.
  static defineInterceptorCustomElement(jsObject, Type type)
      native "Utils_defineInterceptorCustomElement";
  static defineInterceptor(jsObject, Type type)
      native "Utils_defineInterceptor";
  static setInstanceInterceptor(o, Type type, {bool customElement: false})
      native "Utils_setInstanceInterceptor";
  static setInstanceInterceptorCustomUpgrade(o)
      native "Utils_setInstanceInterceptorCustomUpgrade";

  // This method will throw if the element isn't actually a real Element.
  static initializeCustomElement(element)
      native "Utils_initializeCustomElement";
}

class Blink_DOMStringMap {
  // _DOMStringMap native entry  points
  static containsKey(_DOMStringMap, key)
      native "DOMStringMap_containsKey_Callback";

  static item(_DOMStringMap, key) native "DOMStringMap_item_Callback";

  static setItem(_DOMStringMap, key, value)
      native "DOMStringMap_setItem_Callback";

  static remove(_DOMStringMap, key) native "DOMStringMap_remove_Callback";

  static get_keys(_DOMStringMap) native "DOMStringMap_getKeys_Callback";
}

// Calls through JsNative but returns DomException instead of error strings.
class Stats {
  Stats(this.name) {
    counts = new Map<String, int>();
  }

  String name;
  Map<String, int> counts;
  clear() {
    counts.clear();
  }

  track(String v) {
    counts[v] = counts.putIfAbsent(v, () => 0) + 1;
  }

  toString() {
    StringBuffer sb = new StringBuffer();
    sb.write('================');
    sb.write('$name ${counts.length}');
    var keys = counts.keys.toList();
    keys.sort((a, b) => counts[b].compareTo(counts[a]));
    for (var key in keys) {
      print("$key => ${counts[key]}");
    }
    sb.write('---------------');
    sb.write('================');
    return sb;
  }
}

bool TRACK_STATS = true;
dumpStats() {
  print("------------ STATS ----------------");
  print(Blink_JsNative_DomException.getPropertyStats.toString());
  print(Blink_JsNative_DomException.setPropertyStats.toString());
  print(Blink_JsNative_DomException.callMethodStats.toString());
  print(Blink_JsNative_DomException.constructorStats.toString());
  print("-----------------------------------");
}

clearStats() {
  Blink_JsNative_DomException.getPropertyStats.clear();
  Blink_JsNative_DomException.setPropertyStats.clear();
  Blink_JsNative_DomException.callMethodStats.clear();
  Blink_JsNative_DomException.constructorStats.clear();
}

class Blink_JsNative_DomException {
  static var getPropertyStats = new Stats('get property');
  static var setPropertyStats = new Stats('set property');
  static var callMethodStats = new Stats('call method');
  static var constructorStats = new Stats('constructor');

  static var constructors = new Map<String, dynamic>();

  static getProperty(o, String name) {
    try {
      if (TRACK_STATS) getPropertyStats.track(name);
      return js.JsNative.getProperty(o, name);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static propertyQuery(o, String name) {
    try {
      if (TRACK_STATS) getPropertyStats.track('__propertyQuery__');
      return js.JsNative.getProperty(o, name);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static callConstructor0(String name) {
    try {
      if (TRACK_STATS) constructorStats.track(name);
      var constructor = constructors.putIfAbsent(name, () => js.context[name]);
      return js.JsNative.callConstructor0(constructor);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static callConstructor(String name, List args) {
    try {
      if (TRACK_STATS) constructorStats.track(name);
      var constructor = constructors.putIfAbsent(name, () => js.context[name]);
      return js.JsNative.callConstructor(constructor, args);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static setProperty(o, String name, value) {
    try {
      if (TRACK_STATS) setPropertyStats.track(name);
      return js.JsNative.setProperty(o, name, value);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }

  static callMethod(o, String method, List args) {
    try {
      if (TRACK_STATS) callMethodStats.track(method);
      return js.JsNative.callMethod(o, method, args);
    } catch (e) {
      // Re-throw any errors (returned as a string) as a DomException.
      throw new DomException.jsInterop(e);
    }
  }
}
