{"version":3,"sources":["../lib/00-start.js","../lib/01-eventsource-constructor-polyfill.js","../lib/~~-end.js","../lib/02-utils.js","../lib/10-URIMapCacher.js","../lib/20-CSSStyleSheetDetector.js","../lib/csssourceinterceptor.js","../lib/protocolloadfallbackhandler.js","../lib/sourceinterceptor.js"],"names":["init","options","pfh","module","exports","self","name","val","location","origin","Object","defineProperty","enumerable","configurable","get","[object Object]","exportGlobal","value","keep","EventTarget","e","listeners","Symbol","TypeError","this","prototype","type","callback","push","list","i","indexOf","splice","event","n","length","call","defaultPrevented","setPrototypeOf","nativeEventTarget","getPrototypeOf","apply","console","log","Error","stack","ucfirst","string","charAt","toUpperCase","slice","str","ranges","split","result","range","r","a","match","Array","from","Uint32Array","map","x","toString","concat","Set","stream","readable","ReadableStream","controller","on","chunk","enqueue","close","super","URIMapCacher","uri","entry","refcount","url","promise","then","Promise","resolve","reject","lastprom","res","aborted","dispatchEvent","CustomEvent","detail","oldurl","err","remove","$pfh_lastCheckStyleSheets","$pfh_interval","clearInterval","setInterval","checked","stylesheet","document","styleSheets","CSS","escape","JSON","stringify","substr","CSSSourceIntercepter","subject","createElement","method","getOwnPropertyNames","Function","styleinterface","CSSStyleDeclaration","CSS2Properties","style","PFHUtils","args","CSSStyleRule","getOwnPropertyDescriptor","desc","CSSTransformURLs","nativeCssText","CSSTransformURIs","HTMLElement","nativeStyle","cssText","attr","attr_dashes","replace","toLowerCase","supports","getPropertyValue","setProperty","addEventListener","processStyleSheet","rule","cssRules","CSSGroupingRule","process","processStyle","parse","decodeURI","CSSUnescape","trim","filter","test","protocolLoadFallbackHandler","isURIexempt","tmp","uris","getCSSURIs","decoded_uri","getCheckVirtualImageURL","loadable_uri","applyLoadableURL","CSSURIReplace","getURIfromURL","nativeGetPropertyValue","newvalue","nativeSetProperty","messageOrError","soft","message","fetch","XMLHttpRequest","replaceXMLHttpRequest","replaceFetch","handlers","Map","removeEventListener","$onerror","onerror","startsWith","protocol","fallbackProxyAvailable","proxybase","serviceWorkerDoesHandleLoadFallbackHandlers","navigator","serviceWorker","serviceWorkerPrefix","cached","getURL","ProtocolLoadFallbackHandlerError","btoa","scheme","getHandler","handler","makeVirtualURI","reponse","blob","URL","createObjectURL","catch","doit","set","getURI","image","Image","$ignorefallbackhandler","src","resolved","finish","onload","esym","priv","onabort","onloadstart","onloadend","onprogress","onreadystatechange","ontimeout","fetchresolve","fetchfailure","setreadystate","p","headers","native","request","requestHeaders","responseHeaders","responseType","response","fetchPromise","fetchController","withCredentials","status","statusText","forcedMime","readyState","UNSENT","xhr","nativeXMLHttpRequest","constructor","preventDefault","stopPropagation","stopImmediatePropagation","OPENED","send","sending","DONE","Document","sourceIntercepter","checkDocument","state","Event","that","HEADERS_RECEIVED","body","readfail","error","ErrorEvent","filename","fileName","lineno","lineNumber","colno","columnNumber","bubbles","cancelable","composed","count","responseCopy","clone","reader","getReader","read","done","LOADING","releaseLock","byteLength","progress","loaded","total","lengthComputable","ProgressEvent","text","json","arrayBuffer","DOMParser","parseFromString","responseText","responseURL","responseXML","upload","_async","user","password","async","open","Headers","delete","DOMException","params","entries","next","AbortController","signal","abort","getAllResponseHeaders","key","header","setRequestHeader","append","headerName","getResponseHeader","mimeType","overrideMimeType","Request","nativeFetch","nuri","element","renderTo","$sourcelock","curi","getSource","setNativeURI","trueError","target","HTMLMediaElement","ple","lasterror","mediaerror","check","source","trueLoadError","loadState","nodeName","le","cancelled","nodeTypes","values","getOwnPropertyDescriptors","window","Node","excludeList","HTMLAnchorElement","HTMLAreaElement","hasLoadableKeys","control","$onload","$onready","onready","$loadState","classList","add","intercept","setSource","nativePoster","obj","getter","setter","create","doc","checkAll","observer","MutationObserver","mutationsList","mutation","node","addedNodes","disconnect","observe","childList","subtree","base","children","some","$ready","realSource","nativeSrc","nativeHref","complete","naturalWidth","poster","HAVE_NOTHING","HAVE_ENOUGH_DATA","HTMLTrackElement","LOADED","ERROR","NONE"],"mappings":"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","file":"protocolloadfallbackhandler.min.js","sourcesContent":["\"use strict\";\n\n(function(){\nif(typeof module != \"undefined\"){\n  module.exports = (...x)=>module.exports.init(...x)\n  module.exports.init = init;\n}else{\n  init();\n}\nfunction init(options){\n\noptions = options || {};\n\nvar pfh;\n\nif(typeof module != \"undefined\"){\n  pfh = module.exports;\n  pfh.options = {};\n}else{\n  pfh = self;\n}\n\nfor(let [name,val] of [\n  ['replaceFetch', true],\n  ['replaceXMLHttpRequest', true],\n  ['serviceWorkerDoesHandleLoadFallbackHandlers', false],\n  ['serviceWorkerPrefix', location.origin + \"/proxy/\"],\n  ['fallbackProxyAvailable', false],\n  ['proxybase', location.origin + \"/proxy/\"]\n]){\n  if(typeof self[name] == 'undefined'){\n    if(name in options){\n      self[name] = options[name];\n    }else{\n      self[name] = val;\n    }\n  }\n  if(pfh != self && typeof pfh.options[name] == 'undefined')\n    Object.defineProperty(pfh.options,name,{\n      enumerable: true,\n      configurable: true,\n      get: ()=>self[name],\n      set(val){self[name]=val;}\n    });\n}\n\nfunction exportGlobal(name,value,keep){\n  if(name in self && keep)\n    return;\n  self[name] = value;\n  if(pfh != self){\n    Object.defineProperty(pfh,name,{\n      enumerable: true,\n      configurable: true,\n      get: ()=>self[name],\n      set(val){self[name]=val;}\n    });\n  }\n}\n\n// See ~~-end.js for the end of the function that wraps everything\n","try {\n  new EventTarget();\n} catch(e) {\n  // If the EventTarget constructor isn't supported, replace it with a polyfill\n  let listeners = Symbol(\"listeners\");\n  exportGlobal('nativeEventTarget',EventTarget,true);\n  exportGlobal('EventTarget', function EventTarget(){\n    if(!new.target)\n      throw new TypeError(\"class constructors must be invoked with |new|\");\n    function EventTarget(){\n      this[listeners] = {};\n    }\n    EventTarget.prototype = {\n      addEventListener(type, callback){\n        if(!this[listeners][type])\n          this[listeners][type] = [];\n        this[listeners][type].push(callback);\n      },\n      removeEventListener(type, callback){\n        var list = this[listeners][type];\n        if(!list) return;\n        var i = this[listeners][type].indexOf(callback);\n        if(i == -1) return;\n        list.splice(i, 1);\n      },\n      dispatchEvent(event){\n        var list = this[listeners][event.type];\n        if(!list) return true;\n        for( var i=0,n=list.length; i<n; i++)\n          list[i].call(this, event);\n        return !event.defaultPrevented;\n      }\n    };\n    // fake the instanceof check for EventTarget instances with this function to return true\n    Object.setPrototypeOf(EventTarget.prototype, nativeEventTarget.prototype); // \n    // Correct prototype from new\n    Object.setPrototypeOf(Object.getPrototypeOf(this),EventTarget.prototype);\n    EventTarget.apply(this);\n  });\n  // fake the instanceof check for nativeEventTarget instances with this function to return true\n  EventTarget.prototype = nativeEventTarget.prototype;\n}\n","return init;\n}\nreturn init;\n})(); // see 00-start for the start of these functions.\n","\nexportGlobal(\"PFHUtils\",{\n\n  logStack(){\n    console.log(new Error().stack);\n  },\n\n  ucfirst(string){\n    return string.charAt(0).toUpperCase() + string.slice(1);\n  },\n\n  parseRange(str){\n    let ranges = str.split(/ *, */);\n    var result = [];\n    for(let range of ranges){\n      var r=null, a=[];\n      if(r=range.match(/^(\\d+)-(\\d+)$/)){\n        a = Array.from(new Uint32Array(r[2]-r[1]+1)).map((x,i)=>(i+ +r[1]).toString());\n      }else if(r=range.match(/^(\\d+)$/)){\n        a = [r[1]];\n      }\n      result = result.concat(a);\n    }\n    return Array.from(new Set(result));\n  },\n\n  readStreamToReadableStream(stream){\n    if(!stream.readable)\n      throw new Error(\"Stream isn't readable\");\n    return new ReadableStream({\n      start(controller){\n        stream.on(\"data\",chunk=>{\n          controller.enqueue(chunk);\n        });\n        stream.on(\"end\",()=>{\n          controller.close();\n        });\n      }\n    });\n  }\n\n});\n","new (class URIMapCacher extends EventTarget {\n  constructor(){\n    super();\n    this.list = [];\n    if(self.URIMapCacher){\n      this.list = self.URIMapCacher.list;\n    }\n    exportGlobal('URIMapCacher',this);\n  }\n  getURL(uri){\n    for(let entry of this.list){\n      if(entry.uri != uri)\n        continue;\n      entry.refcount++;\n      if(entry.url)\n        return entry.url;\n      if(entry.promise)\n        return entry.promise.then(()=>entry.url,()=>null);\n      entry.refcount--;\n      return null;\n    }\n    return null;\n  }\n  getURI(url){\n    for(let entry of this.list){\n      if(entry.url != url)\n        continue;\n      return entry.uri;\n    }\n    return null;\n  }\n  set(uri, url){\n    if(url instanceof Promise){\n      let e = null;\n      for(let entry of this.list){\n        if(entry.uri != uri)\n          continue;\n        e = entry;\n        break;\n      }\n      if(e){\n        e.refcount++;\n      }else{\n        this.list.push(e={\n          uri,\n          refcount: 1\n        });\n      }\n      if(!e.promise){\n        e.promise = new Promise((resolve,reject)=>{\n          e.resolve = resolve;\n          e.reject = reject;\n        });\n      }\n      e.lastprom = url;\n      return url.then(res=>{\n        if(url != e.lastprom && !e.aborted)\n          return false;\n        delete e.lastprom;\n        delete e.aborted;\n        if(e.url){\n          this.dispatchEvent(\n            new CustomEvent(\"urlchange\",{\n              detail: {\n                oldurl: e.url,\n                url: res,\n                uri: e.uri\n              }\n            })\n          );\n        }else{\n          this.dispatchEvent(\n            new CustomEvent(\"newurl\",{\n              detail: {\n                url: res,\n                uri: e.uri\n              }\n            })\n          );\n        }\n        e.url = res;\n        e.resolve();\n        delete e.promise;\n        delete e.resolve;\n        delete e.reject;\n        return true;\n      },err=>{\n        if(url != e.lastprom)\n          return;\n        e.aborted = true;\n        if(!e.url)\n          this.remove(e,err);\n        delete e.promise;\n        delete e.resolve;\n        delete e.reject;\n        return false;\n      });\n    }\n    if( uri == url )\n      return false;\n    for(let entry of this.list){\n      if(entry.uri != uri)\n        continue;\n      entry.refcount++;\n      if(entry.url != url){\n        this.dispatchEvent(\n          new CustomEvent(\"urlchange\",{\n            detail: {\n              oldurl: entry.url,\n              url: url,\n              uri: entry.uri\n            }\n          })\n        );\n        entry.url = url;\n      }\n      return true;\n    }\n    this.list.push({\n      url, uri,\n      refcount: 1\n    });\n    this.dispatchEvent( new CustomEvent(\"newurl\",{ detail: { url, uri } }) );\n    return true;\n  }\n  remove(entry,err){\n    var i = this.list.indexOf(entry);\n    if(i == -1)\n      return;\n    if(entry.reject)\n      entry.reject(err);\n    entry.refcount = 0;\n    this.dispatchEvent(\n      new CustomEvent(\"removed\",{\n        detail: {\n          url: entry.url,\n          uri: entry.uri\n        }\n      })\n    );\n    this.list.splice(i,1);\n  }\n  release(url){\n    for(let i=0,n=this.list.length; i<n; i++){\n      let entry = this.list[i];\n      if(entry.url == url){\n        if(!--entry.refcount){\n          this.remove(entry);\n        }\n        return true;\n      }\n    }\n    return false;\n  }\n})();\n","(function(){\n  if(!self.$pfh_lastCheckStyleSheets)\n    self.$pfh_lastCheckStyleSheets = [];\n  if(self.$pfh_interval)\n    clearInterval(self.$pfh_interval);\n  self.$pfh_interval = setInterval(function(){\n    var checked = Symbol('checked');\n    for( stylesheet of Array.from(document.styleSheets) ){\n      var i = $pfh_lastCheckStyleSheets.indexOf(stylesheet);\n      if(i == -1){\n        $pfh_lastCheckStyleSheets.push(stylesheet);\n        dispatchEvent(new CustomEvent(\"stylesheetadded\",{detail:stylesheet}));\n      }\n      stylesheet[checked] = true;\n    }\n    for( var i=0; i<$pfh_lastCheckStyleSheets.length; i++ ){\n      if($pfh_lastCheckStyleSheets[i][checked]){\n        delete $pfh_lastCheckStyleSheets[i][checked];\n      }else{\n        var stylesheet = $pfh_lastCheckStyleSheets.splice(i--,1)[0];\n        dispatchEvent(new CustomEvent(\"stylesheetremoved\",{detail:stylesheet}));\n      }\n    }\n  }, 333);\n})();\n","if(!CSS.escape)\n  CSS.escape = x=>JSON.stringify(x).substr(1,x.length);\n\nnew (class CSSSourceIntercepter {\n\n  constructor(){\n\n    if(!self.CSSSourceIntercepter){\n      exportGlobal('CSSSourceIntercepter',this);\n\n      let subject = document.createElement(\"div\");\n\n      for( let method of Object.getOwnPropertyNames(new.target.prototype) ){\n        if(method == 'constructor')\n          continue;\n        if(!(this[method] instanceof Function))\n          continue;\n        for( let styleinterface of [\n          self.CSSStyleDeclaration,\n          self.CSS2Properties,\n          Object.getPrototypeOf(subject.style)\n        ]){\n          if(!styleinterface)\n            continue;\n          if(styleinterface.prototype)\n            styleinterface = styleinterface.prototype;\n          if(!styleinterface[method])\n            continue;\n          if((\"native\"+PFHUtils.ucfirst(method)) in styleinterface)\n            continue;\n          Object.defineProperty(styleinterface,\"native\"+PFHUtils.ucfirst(method),{\n            enumerable: false,\n            configurable: true,\n            value: styleinterface[method]\n          });\n          delete styleinterface[method];\n          Object.defineProperty(styleinterface,method,{\n            enumerable: false,\n            configurable: true,\n            value(...args){\n              return self.CSSSourceIntercepter[method](this,...args);\n            }\n          });\n        }\n      }\n\n      for( let styleinterface of [\n        self.CSSStyleDeclaration,\n        self.CSS2Properties,\n        self.CSSStyleRule,\n        Object.getPrototypeOf(subject.style)\n      ]){\n        if(!styleinterface)\n          continue;\n        if(styleinterface.prototype)\n          styleinterface = styleinterface.prototype;\n        if(Object.getOwnPropertyDescriptor(styleinterface,\"nativeCssText\"))\n          continue;\n        let desc = Object.getOwnPropertyDescriptor(styleinterface,\"cssText\");\n        if(!desc)\n          continue;\n        desc.enumerable = false;\n        Object.defineProperty(styleinterface,\"nativeCssText\",desc);\n        delete styleinterface[\"cssText\"];\n        Object.defineProperty(styleinterface,\"cssText\",{\n          enumerable: true,\n          configurable: true,\n          get(){\n            return self.CSSSourceIntercepter.CSSTransformURLs(this.nativeCssText);\n          },\n          set(value){\n            if(this instanceof CSSStyleRule)\n              return;\n            this.nativeCssText = self.CSSSourceIntercepter.CSSTransformURIs(this,\"cssText\",value);\n          }\n        });\n      }\n\n      {\n        let desc = Object.getOwnPropertyDescriptor(HTMLElement.prototype,'style');\n        desc.enumerable = false;\n        Object.defineProperty(HTMLElement.prototype,\"nativeStyle\",desc);\n        delete HTMLElement.prototype.style;\n        Object.defineProperty(HTMLElement.prototype,\"style\",{\n          enumerable: true,\n          configurable: true,\n          get(){\n            return this.nativeStyle;\n          },\n          set(value){\n            this.nativeStyle.cssText = value;\n          }\n        });\n      }\n\n      for(let attr in subject.style){\n        if(attr in this)\n          continue;\n        if(typeof subject.style[attr] != \"string\")\n          continue;\n        let attr_dashes = attr.replace(/[A-Z]/g,x=>\"-\"+x.toLowerCase());\n        if(!CSS.supports(attr_dashes,\"url(.)\"))\n          continue;\n        let desc = {\n          enumerable: true,\n          configurable: true,\n          get(){\n            return self.CSSSourceIntercepter.getPropertyValue(this,attr_dashes);\n          },\n          set(value){\n            self.CSSSourceIntercepter.setProperty(this,attr_dashes,value);\n          }\n        };\n        for( let styleinterface of [\n          self.CSSStyleDeclaration,\n          self.CSS2Properties,\n          Object.getPrototypeOf(subject.style)\n        ]){\n          if(!styleinterface)\n            continue;\n          if(styleinterface.prototype)\n            styleinterface = styleinterface.prototype;\n          delete styleinterface[attr];\n          Object.defineProperty(styleinterface,attr,desc);\n          if(attr != attr_dashes){\n            desc.enumerable = false;\n            delete styleinterface[attr_dashes];\n            Object.defineProperty(styleinterface,attr_dashes,desc);\n          }\n        }\n      }\n\n      addEventListener(\n        \"stylesheetadded\",\n        event => self.CSSSourceIntercepter.processStyleSheet(event.detail)\n      );\n\n    }\n\n    for(let stylesheet of Array.from(document.styleSheets))\n      this.processStyleSheet(stylesheet);\n\n    exportGlobal('CSSSourceIntercepter',this);\n  }\n\n  processStyle(style){\n    for( let name of Array.from(style) ){\n      if(!CSS.supports(name,\"url(.)\"))\n        continue;\n      style[name] = style[name];\n    }\n  }\n\n  processStyleSheet(stylesheet){\n    for( let rule of Array.from(stylesheet.cssRules) ){\n      if(rule instanceof CSSGroupingRule){\n        process(rule);\n      }else if(rule instanceof CSSStyleRule){\n        this.processStyle(rule.style);\n      }\n    }\n  }\n\n  CSSUnescape(value){\n    value = value.replace(/\\\\[^bfnrtu\\\\]/g,x=>x.substr(1));\n    value = JSON.parse('\"'+value+'\"');\n    return decodeURI(value);\n  }\n\n  getCSSURIs(value){\n    return ((\"\"+value).match(/url\\(\\s*([^)]+|'[^']+'|\"[^\"]+\")\\s*\\)/g)||[])\n      .map(uri=>this.CSSUnescape(uri.match(/^url\\(\\s*(['\"]?)(.*)\\1\\s*\\)$/)[2].trim()))\n      .filter(uri=>/^[a-z0-9+-.]+:/i.test(uri))\n      .filter(uri=>!protocolLoadFallbackHandler.isURIexempt(uri));\n  }\n\n  CSSURIReplace(value,uri,url){\n    return value.replace(/url\\(\\s*([^)]+|'[^']+'|\"[^\"]+\")\\s*\\)/g,val=>{\n      let tmp = val.match(/^url\\(\\s*(['\"]?)(.*)\\1\\s*\\)$/)[2].trim();\n      tmp = this.CSSUnescape(tmp);\n      if(tmp == decodeURI(uri))\n        return 'url(\"'+CSS.escape(url)+'\")';\n      return val;\n    });\n  }\n\n  CSSTransformURIs(style,name,value){\n    var uris = this.getCSSURIs(value);\n    for(let uri of uris){\n      let decoded_uri = decodeURI(uri);\n      let result = protocolLoadFallbackHandler.getCheckVirtualImageURL(decoded_uri);\n      let loadable_uri = result instanceof Promise ? decoded_uri : result;\n      if(result instanceof Promise)\n        result.then(url=>this.applyLoadableURL(style,name,uri,url));\n      value = this.CSSURIReplace(value,uri,loadable_uri);\n    }\n    return value;\n  }\n\n  CSSTransformURLs(value){\n    var uris = this.getCSSURIs(value)\n    for(let uri of uris){\n      let decoded_uri = this.CSSUnescape(uri);\n      let url = protocolLoadFallbackHandler.getURIfromURL(decoded_uri);\n      value = this.CSSURIReplace(value, uri, url);\n    }\n    return value;\n  }\n\n  applyLoadableURL(style,name,uri,url){\n    if(uri == url)\n      return;\n    var value = style.nativeGetPropertyValue(name);\n    var newvalue = this.CSSURIReplace(value,uri,url);\n    if(value == newvalue)\n      return;\n    style.nativeSetProperty(name,newvalue);\n  }\n\n  getPropertyValue(style,name){\n    var value = style.nativeGetPropertyValue(name);\n    return this.CSSTransformURLs(value);\n  }\n\n  setProperty(style,name,value){\n    value = this.CSSTransformURIs(style,name,value);\n    return style.nativeSetProperty(name,value);\n  }\n\n})();\n","\nexportGlobal('ProtocolLoadFallbackHandlerError',\n  class ProtocolLoadFallbackHandlerError extends Error {\n    constructor(messageOrError,soft){\n      super(messageOrError && (messageOrError.message || messageOrError));\n      if(messageOrError instanceof Error)\n        Object.setPrototypeOf(this,messageOrError);\n      this.soft = soft || false;\n    }\n  }\n);\n\nnew (class ProtocolLoadFallbackHandler {\n  constructor(){\n    exportGlobal('nativeFetch',fetch,true);\n    exportGlobal('nativeXMLHttpRequest',XMLHttpRequest,true);\n    if(replaceXMLHttpRequest)\n      exportGlobal('XMLHttpRequest',this.XMLHttpRequest);\n    if(replaceFetch)\n      exportGlobal('fetch', (...args)=>this.fetch(...args));\n    this.handlers = new Map();\n    if(self.protocolLoadFallbackHandler){\n      this.handlers = protocolLoadFallbackHandler.handlers;\n      removeEventListener(\"error\",self.protocolLoadFallbackHandler.$onerror);\n    }\n    exportGlobal('protocolLoadFallbackHandler', this);\n    this.$onerror = (...args) => this.onerror(...args);\n    addEventListener(\"error\",this.$onerror,true);\n  }\n  isURIexempt(uri){\n    if(!/^[a-zA-Z0-9+-.]*:/.test(uri))\n      return true;\n    if( uri.startsWith(location.protocol)\n     || uri.startsWith(\"http:\")\n     || uri.startsWith(\"https:\")\n     || uri.startsWith(\"file:\")\n     || uri.startsWith(\"blob:\")\n    ) return true;\n    if(fallbackProxyAvailable && uri.startsWith(proxybase))\n      return true;\n    if( serviceWorkerDoesHandleLoadFallbackHandlers\n     && navigator.serviceWorker\n     && navigator.serviceWorker.controller\n     && uri.startsWith(serviceWorkerPrefix)\n    ) return true;\n    return false;\n  }\n  makeVirtualURI(uri){\n    let cached = URIMapCacher.getURL(uri);\n    if(cached)\n      return Promise.resolve(cached);\n    let doit = ()=>{\n      if(typeof uri != \"string\")\n        return Promise.reject(new ProtocolLoadFallbackHandlerError(\"uri must be a string\"));\n      if( this.isURIexempt(uri) )\n        return uri;\n      if( serviceWorkerDoesHandleLoadFallbackHandlers\n      && navigator.serviceWorker && navigator.serviceWorker.controller\n      ){\n        return serviceWorkerPrefix + btoa(uri);\n      }else{\n        var scheme = uri.match(/^([^:]+):/);\n        scheme = scheme && scheme[1] || null;\n        if(!scheme)\n          return uri;\n        return this.getHandler(scheme).then(handler=>{\n          if(handler.makeVirtualURI){\n            return handler.makeVirtualURI(uri);\n          }else{\n            return handler.fetch(uri)\n                    .then(reponse=>reponse.blob())\n                    .then(blob=>URL.createObjectURL(blob));\n          }\n        }).catch(e=>{\n          if(!e.soft || !fallbackProxyAvailable)\n            throw e;\n          return proxybase + btoa(uri);\n        });\n      }\n    };\n    var res = doit();\n    URIMapCacher.set(uri,res);\n    return Promise.resolve(res);\n  }\n  getURIfromURL(url){\n    if(fallbackProxyAvailable && uri.startsWith(proxybase))\n      return url.substr(proxybase);\n    if( serviceWorkerDoesHandleLoadFallbackHandlers\n     && navigator.serviceWorker\n     && navigator.serviceWorker.controller\n     && uri.startsWith(serviceWorkerPrefix)\n    ) return url.substr(serviceWorkerPrefix);\n    if(this.isURIexempt(url))\n      return url;\n    return URIMapCacher.getURI(url) || url;\n  }\n  getCheckVirtualImageURL(uri){\n    if(this.isURIexempt(uri))\n      return uri;\n    var res = URIMapCacher.getURL(uri);\n    if(res) return res;\n    return new Promise(resolve=>{\n      var image = new Image();\n      image.$ignorefallbackhandler = true;\n      image.src = uri;\n      var resolved = false;\n      let finish = result => {\n        if(resolved)\n          return;\n        resolved = true;\n        if(!result){\n          resolve(this.makeVirtualURI(uri));\n        }else{\n          resolve(uri);\n        }\n      };\n      image.onerror = ()=>{\n        finish(false);\n      };\n      image.onload = ()=>{\n        finish(true);\n      };\n    });\n  }\n  get XMLHttpRequest(){\n    var events = [\n      \"abort\", \"error\", \"load\",\n      \"loadstart\", \"progress\",\n      \"timeout\", \"loadend\",\n      \"readystatechange\"\n    ];\n    var esym = {};\n    var priv = Symbol(\"priv\");\n    var onerror = Symbol(\"onerror\");\n    var onabort = Symbol(\"onabort\");\n    var onload = Symbol(\"onload\");\n    var onloadstart = Symbol(\"onloadstart\");\n    var onloadend = Symbol(\"onloadend\");\n    var onprogress = Symbol(\"onprogress\");\n    var onreadystatechange = Symbol(\"onreadystatechange\");\n    var ontimeout = Symbol(\"ontimeout\");\n    var fetchresolve = Symbol(\"fetchresolve\");\n    var fetchfailure = Symbol(\"fetchfailure\");\n    var setreadystate = Symbol(\"setreadystate\");\n    var XMLHttpRequest = class XMLHttpRequest extends EventTarget {\n      constructor(){\n        super();\n        var p = this[priv] = {\n          headers: [],\n          native: true,\n          request: null,\n          requestHeaders: null,\n          responseHeaders: null,\n          responseType: \"\",\n          response: null,\n          fetchPromise: null,\n          fetchController: null,\n          withCredentials: false,\n          status: 0,\n          statusText: \"\",\n          forcedMime: null,\n          readyState: XMLHttpRequest.UNSENT\n        };\n        p.xhr = new nativeXMLHttpRequest();\n        p.xhr.onerror = (...a)=>this[onerror](...a);\n        p.xhr.onabort = (...a)=>this[onabort](...a);\n        p.xhr.onload = (...a)=>this[onload](...a);\n        p.xhr.onloadstart = (...a)=>this[onloadstart](...a);\n        p.xhr.onloadend = (...a)=>this[onloadend](...a);\n        p.xhr.onprogress = (...a)=>this[onprogress](...a);\n        p.xhr.onreadystatechange = (...a)=>this[onreadystatechange](...a);\n        p.xhr.ontimeout = (...a)=>this[ontimeout](...a);\n      }\n      [onerror](e){\n        var p = this[priv];\n        var event = new e.constructor(e.type,e);\n        e.preventDefault();\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n        if(p.native){\n          if( ('sending' in p) && p.readyState == XMLHttpRequest.OPENED\n           && !protocolLoadFallbackHandler.isURIexempt(p.request.url)\n          ){\n            p.native = false;\n            p.readyState = XMLHttpRequest.OPENED;\n            this.send(...p.sending);\n          }else{\n            p.readyState = XMLHttpRequest.DONE;\n            this.dispatchEvent(event);\n          }\n        }\n        return false;\n      }\n      [onabort](event){\n        event = new event.constructor(event.type,event);\n        if(this[priv].native)\n          this.dispatchEvent(event);\n      }\n      [onload](event){\n        event = new event.constructor(event.type,event);\n        let p = this[priv];\n        if(p.native){\n          if(p.xhr.response && p.xhr.response instanceof Document)\n            sourceIntercepter.checkDocument(p.xhr.response);\n          this.dispatchEvent(event);\n        }\n      }\n      [onloadstart](event){\n        var p = this[priv];\n        event = new event.constructor(event.type,event);\n        if(this[priv].native){\n          if( !protocolLoadFallbackHandler.isURIexempt(p.request.url)\n           && p.xhr.readyState == XMLHttpRequest.DONE\n           && p.xhr.status == 0\n          ) return;\n          this.dispatchEvent(event);\n        }\n      }\n      [onloadend](event){\n        var p = this[priv];\n        event = new event.constructor(event.type,event);\n        if(this[priv].native){\n          if( !protocolLoadFallbackHandler.isURIexempt(p.request.url)\n           && p.xhr.readyState == XMLHttpRequest.DONE\n           && p.xhr.status == 0\n          ) return;\n          this.dispatchEvent(event);\n        }\n      }\n      [onprogress](event){\n        event = new event.constructor(event.type,event);\n        if(this[priv].native)\n          this.dispatchEvent(event);\n      }\n      [onreadystatechange](event){\n        var p = this[priv];\n        event = new event.constructor(event.type,event);\n        if(p.native){\n          if( !protocolLoadFallbackHandler.isURIexempt(p.request.url)\n           && p.xhr.readyState == XMLHttpRequest.DONE\n           && p.xhr.status == 0\n          ) return; // Ready state set from 1 to 4, likely due to an error, ignore it.\n          this.dispatchEvent(event);\n          p.readyState = p.xhr.readyState;\n        }\n      }\n      [ontimeout](event){\n        event = new event.constructor(event.type,event);\n        if(this[priv].native)\n          this.dispatchEvent(event);\n      }\n      [setreadystate](state){\n        var p = this[priv];\n        if(p.native)\n          return;\n        if(p.readyState == state)\n          return;\n        p.readyState = state;\n        this.dispatchEvent(new Event(\"readystatechange\"));\n      }\n      [fetchresolve](response){\n        var that = this;\n        var p = this[priv];\n        if(p.native)\n          return;\n        p.responseHeaders = response.headers;\n        p.status = response.status;\n        p.statusText = response.statusText;\n        this[setreadystate](XMLHttpRequest.HEADERS_RECEIVED);\n        this.dispatchEvent(new Event(\"loadstart\"));\n        function finish(response){\n          var type = p.responseType || 'text';\n          var res = Promise.resolve(null);\n          switch(type){\n            case \"text\": res = response.text(); break;\n            case \"blob\": res = response.blob(); break;\n            case \"json\": res = response.json(); break;\n            case \"arraybuffer\": res = response.arrayBuffer(); break;\n            case \"document\": {\n              res = response.text().then(text=>{\n                if(p.forcedMime)\n                  return new DOMParser().parseFromString(text, p.forcedMime);\n                try {\n                  return new DOMParser().parseFromString(text, response.headers.get(\"Content-Type\") || \"text/html\");\n                } catch(e) {\n                  return new DOMParser().parseFromString(text, \"text/html\");\n                }\n              });\n            } break;\n          }\n          res.then(function(result){\n            if(result && result instanceof Document)\n              sourceIntercepter.checkDocument(result);\n            p.response = result;\n            var progress = {\n              loaded: result && result.length || 0,\n              total: 0,\n              lengthComputable: false\n            };\n            that[setreadystate](XMLHttpRequest.DONE);\n            that.dispatchEvent(new ProgressEvent(\"loadend\",progress));\n            that.dispatchEvent(new ProgressEvent(\"load\",progress));\n          });\n        }\n        if(response.body){\n          let length = p.responseHeaders.get(\"Content-Length\");\n          if(length === null){\n            let range = p.responseHeaders.get(\"Content-Range\");\n            if(range){\n              range = range.match(/bytes (\\d+)-(\\d+)/);\n              if(range)\n                length = range[2]-range[1];\n            }\n          }\n          if(length === null){\n            let range = p.requestHeaders.get(\"Range\");\n            if(range){\n              range = range.match(/bytes=(\\d+)-(\\d+)/);\n              if(range)\n                length = range[2]-range[1];\n            }\n          }\n          let readfail = function(error){\n            if(!(error instanceof Error)){\n              that.dispatchEvent(new ErrorEvent(\"error\",{\n                message: message,\n                filename: e.fileName,\n                lineno: e.lineNumber,\n                colno: e.columnNumber,\n                error: e,\n                bubbles: false,\n                cancelable: true,\n                composed: true\n              }));\n            }\n            that[setreadystate](XMLHttpRequest.DONE);\n          };\n          var that = this;\n          let count = 0;\n          let responseCopy = response.clone();\n          let reader = response.body.getReader();\n          reader.read().then(function process({done,value}){\n            if( p.readyState != XMLHttpRequest.HEADERS_RECEIVED\n             && p.readyState != XMLHttpRequest.LOADING\n            ){\n              reader.releaseLock();\n              reader = null;\n              p.fetchController = null;\n              p.fetchPromise = null;\n              return;\n            }\n            let offset = count;\n            if(value)\n              count += value.byteLength;\n            var progress = {\n              loaded: count,\n              total: length,\n              lengthComputable: length !== null\n            };\n            that.dispatchEvent(new ProgressEvent(\"progress\",progress));\n            if(done){\n              finish(responseCopy);\n              return;\n            }\n            that[setreadystate](XMLHttpRequest.LOADING);\n            reader.read().then(process).catch(readfail);\n          }).catch(readfail);\n        }else{\n          finish(response);\n        }\n      }\n      [fetchfailure](error){\n        var p = this[priv];\n        if(p.native)\n          return;\n        var event = new ErrorEvent(\"error\",{\n          message: error.message,\n          filename: error.fileName,\n          lineno: error.lineNumber,\n          colno: error.columnNumber,\n          error: error,\n          bubbles: false,\n          cancelable: true,\n          composed: true\n        });\n        this[setreadystate](XMLHttpRequest.DONE);\n        this.dispatchEvent(event);\n      }\n      get readyState(){\n        var p = this[priv];\n        return p.native ? p.xhr.readyState : p.readyState;\n      }\n      get response(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.response;\n        return p.response;\n      }\n      get responseText(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.responseText;\n        if((p.responseType||'text') == 'text')\n          return p.response;\n        return null;\n      }\n      get responseURL(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.responseURL;\n        return p.request && p.request.url || null;\n      }\n      get responseXML(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.responseXML;\n        if(p.responseType == 'document')\n          return p.response;\n        return null;\n      }\n      get status(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.status;\n        return p.status;\n      }\n      get statusText(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.statusText;\n        return p.statusText;\n      }\n      get upload(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.upload;\n        return null; // TODO\n      }\n      get responseType(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.responseType;\n        return p.responseType || 'text';\n      }\n      set responseType(value){\n        if([ \"text\", \"arraybuffer\", \"blob\", \"json\", \"document\" ].indexOf(value) == -1 )\n          return;\n        var p = this[priv];\n        p.xhr.responseType = value;\n        p.responseType = value;\n      }\n      get withCredentials(){\n        var p = this[priv];\n        if(p.native)\n          return p.xhr.withCredentials;\n        return p.withCredentials;\n      }\n      set withCredentials(value){\n        var p = this[priv];\n        p.xhr.withCredentials = value;\n        p.withCredentials = value;\n      }\n      open(method, url, _async, user, password){\n        var p = this[priv];\n        p.request = {\n          method, url, \"async\": _async,\n          user, password\n        };\n        p.xhr.open(method, url, _async, user, password);\n        p.status = 0;\n        p.statusText = \"\";\n        p.requestHeaders = new Headers();\n        p.requestHeaders.delete('Authorization');\n        if(user || password)\n          p.requestHeaders.set('Authorization', 'Basic '+btoa(user+':'+password));\n        p.responseHeaders = null;\n        p.responseType = \"\";\n        p.response = null,\n        p.native = true;\n        p.fetchPromise = null;\n        p.fetchController = null;\n        p.withCredentials = false;\n        p.forcedMime = null;\n        this[setreadystate](XMLHttpRequest.OPENED);\n      }\n      send(...args){\n        var p = this[priv];\n        if(p.readyState != XMLHttpRequest.OPENED)\n          throw new DOMException(\"Failed to execute 'send' on 'XMLHttpRequest': The object's state must be OPENED\");\n        delete p.sending;\n        if(p.native){\n          p.sending = args;\n          return p.xhr.send(...args);\n        }else{\n          let headers = null;\n          var params = {};\n          params.method = p.request.method;\n          if(!p.requestHeaders.entries().next().done)\n            params.headers = p.requestHeaders;\n          if(args.length >= 1)\n            params.body = args[0];\n          if(typeof AbortController != 'undefined'){\n            this.fetchController = new AbortController();\n            params.signal = this.fetchController.signal;\n          }\n          p.fetchPromise = protocolLoadFallbackHandler.fetch(p.request.url,params);\n          p.fetchPromise.then(\n            response => this[fetchresolve](response),\n            error => this[fetchfailure](error)\n          );\n        }\n      }\n      abort(){\n        var p = this[priv];\n        if(p.native){\n          p.xhr.abort();\n        }else{\n          if(p.fetchController)\n            p.fetchController.abort();\n          if(p.fetchPromise)\n            this.dispatchEvent(new Event(\"abort\"));\n          p.fetchController = null;\n          p.fetchPromise = null;\n        }\n      }\n      getAllResponseHeaders(){\n        var p = this[priv];\n        if(p.native){\n          return p.xhr.getAllResponseHeaders();\n        }else{\n          let res = \"\";\n          if(p.responseHeaders)\n          for(let [key,value] of p.responseHeaders)\n            res += key + ': ' + value + \"\\r\\n\";\n          return res;\n        }\n      }\n      setRequestHeader(header, value){\n        var p = this[priv];\n        if(this.readyState != XMLHttpRequest.OPENED)\n          throw new DOMException(\"Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED\");\n        p.xhr.setRequestHeader(header, value);\n        p.requestHeaders.append(header, value);\n      }\n      getResponseHeader(headerName){\n        var p = this[priv];\n        if(p.native){\n          return p.xhr.getResponseHeader(headerName);\n        }else{\n          if(!p.responseHeaders)\n            return null;\n          return p.responseHeaders.get(headerName);\n        }\n      }\n      overrideMimeType(mimeType){\n        var p = this[priv];\n        p.forcedMime = mimeType;\n        if(p.native)\n          return p.xhr.overrideMimeType(mimeType);\n      }\n    };\n    for(let [name,value] of [\n      [\"UNSENT\",0], [\"OPENED\",1],\n      [\"HEADERS_RECEIVED\",2],\n      [\"LOADING\",3], [\"DONE\",4]\n    ]){\n      XMLHttpRequest[name] = value;\n      XMLHttpRequest.prototype[name] = value;\n    }\n    for(let event of events){\n      esym[event] = Symbol(event);\n      Object.defineProperty(XMLHttpRequest.prototype,\"on\"+event,{\n        configurable: false,\n        enumerable: true,\n        get(){\n          return XMLHttpRequest[esym[event]] || null;\n        },\n        set(value){\n          if(XMLHttpRequest[esym[event]])\n            this.removeEventListener(event,XMLHttpRequest[esym[event]]);\n          XMLHttpRequest[esym[event]] = value;\n          this.addEventListener(event,XMLHttpRequest[esym[event]]);\n        }\n      })\n    }\n    return XMLHttpRequest;\n  }\n  fetch(...args){\n    if(!args.length)\n      return Promise.reject(new ProtocolLoadFallbackHandlerError(\"Too few arguments\"));\n    var uri = null;\n    if(typeof args[0] == \"string\")\n      uri = args[0];\n    if(args[0] instanceof Request)\n      uri = args[0].url;\n    if(typeof uri != \"string\")\n      return Promise.reject(new ProtocolLoadFallbackHandlerError(\"first argument must be a string or Request object\"));\n    return nativeFetch(...args).catch(e=>{\n      if( this.isURIexempt(uri) )\n        throw e;\n      if( serviceWorkerDoesHandleLoadFallbackHandlers\n       && navigator.serviceWorker && navigator.serviceWorker.controller\n      ){\n        return nativeFetch(serviceWorkerPrefix + btoa(uri),...(args.slice(1)));\n      }else{\n        var scheme = uri.match(/^([^:]+):/);\n        scheme = scheme && scheme[1] || null;\n        if(!scheme)\n          throw e;\n        return this.getHandler(scheme).then(\n          handler => {\n            if(handler.fetch){\n              return handler.fetch(...args).catch(e=>{\n                if(!(e instanceof ProtocolLoadFallbackHandlerError) || !e.soft || !fallbackProxyAvailable)\n                  throw e;\n                return nativeFetch(proxybase + btoa(uri),...(args.slice(1)));\n              });\n            }else{\n              return handler.makeVirtualURI(uri).then(nuri=>nativeFetch(nuri,...(args.slice(1))));\n            }\n          },\n          error => {\n            throw e;\n          }\n        );\n      }\n    });\n  }\n  renderTo(element,uri){\n    var scheme = uri.match(/^([^:]+):/);\n    scheme = scheme && scheme[1] || null;\n    return this.getHandler(scheme).then(handler=>{\n      if(handler.renderTo){\n        try {\n          element.$sourcelock = true;\n          return Promise.resolve(handler.renderTo(element,uri)).then(\n            ()=>{element.$sourcelock=false;},\n            e=>{element.$sourcelock=false; throw e;}\n          );\n        }catch(e){\n          return Promise.reject(e);\n        }\n      }else{\n        return Promise.reject();\n      }\n    }).catch(e=>{\n      return this.makeVirtualURI(uri).then(nuri=>{\n        if(nuri == uri)\n          throw new ProtocolLoadFallbackHandlerError(\"Failed to obtain a supportet URI\");\n        var curi = sourceIntercepter.getSource(element);\n        if(uri != curi)\n          return;\n        sourceIntercepter.setNativeURI(element,nuri);\n      });\n    });\n  }\n  getHandler(scheme){\n    return new Promise((resolve,reject)=>{\n      var handler = this.handlers.get(scheme);\n      if(handler){\n        resolve(handler)\n        return;\n      }\n      reject(new ProtocolLoadFallbackHandlerError(\"No protocol fallback handler for scheme \"+scheme+\" available\"));\n    });\n  }\n  setHandler(name, handler){\n    if(!handler.makeVirtualURI && !handler.fetch)\n      throw new Error(\"A fallback protocol handler must have at least a fetch or a makeVirtualURI function\");\n    this.handlers.set(name, handler);\n  }\n  removeHandler(name){\n    this.handlers.delete(name);\n  }\n  onerror(event){\n    if(event.trueError)\n      return;\n    if(!(event.target instanceof HTMLElement))\n      return true;\n    if(event.target instanceof HTMLMediaElement){\n      let ple = event.target.lasterror && event.target.lasterror.mediaerror || null;\n      // A few browsers may produce errors in media elements unrelated to the media they load or play,\n      // google chrome for example produces one when it fails to load the poster image.\n      if(!event.target.error || event.target.error == ple){\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        return false;\n      }\n      if(!event.message)\n        event.message = event.target.error.message;\n    }\n    if(event.target.$ignorefallbackhandler)\n      return true;\n    function trueLoadError(e){\n      var message = \"Failed to load <\"+event.target.nodeName.toLowerCase()+\"> from \"+sourceIntercepter.getSource(event.target);\n      if(!e){\n        e = new Error(message);\n      }else{\n        if(!!e.message)\n          message = message + ': ' +e.message;\n      }\n      if(!!event.message)\n        message += '\\nPrevious error from browser was: '+event.message;\n      if(e instanceof Error){\n        e = new ErrorEvent('error',{\n          message: message,\n          filename: e.fileName,\n          lineno: e.lineNumber,\n          colno: e.columnNumber,\n          error: e,\n          bubbles: false,\n          cancelable: true,\n          composed: true\n        });\n      }else if(e instanceof Event){\n        if(!(e instanceof ErrorEvent)){\n          let e2 = new ErrorEvent('error',{\n            message: message,\n            filename: e.filename,\n            lineno: e.lineno,\n            colno: e.colno,\n            error: e,\n            bubbles: false,\n            cancelable: true,\n            composed: true\n          });\n          e = e2;\n        }\n      }\n      e.trueError = true;\n      var le = new ErrorEvent(\"loaderror\",{\n        message: message,\n        filename: e.filename,\n        lineno: e.lineno,\n        colno: e.colno,\n        error: e,\n        bubbles: false,\n        cancelable: true,\n        composed: true\n      });\n      let cancelled = false;\n      cancelled = cancelled || !event.target.dispatchEvent(le);\n      cancelled = cancelled || !event.target.dispatchEvent(e);\n      if(!cancelled){\n        event.target.loadState = \"loaderror\";\n        console.error(message);\n      }\n    }\n    sourceIntercepter.check(event.target);\n    var uri = sourceIntercepter.getSource(event.target);\n    var lasterror = event.target.lasterror;\n    event.target.lasterror = {\n      event: event,\n      source: uri\n    };\n    if(event.target instanceof HTMLMediaElement)\n      event.target.lasterror.mediaerror = event.target.error;\n    if( !uri || this.isURIexempt(uri)\n     || (lasterror && lasterror.source == uri)\n    ){\n      trueLoadError(event);\n      return true;\n    }\n    event.target.loadState = \"loading\";\n    event.preventDefault();\n    event.stopPropagation();\n    event.stopImmediatePropagation();\n    if( serviceWorkerDoesHandleLoadFallbackHandlers\n     && navigator.serviceWorker && navigator.serviceWorker.controller\n    ){\n      sourceIntercepter.setNativeURI(event.target,serviceWorkerPrefix + btoa(uri));\n    }else{\n      this.renderTo(event.target,uri).catch(e=>{\n        trueLoadError(e);\n      });\n    }\n    return false;\n  }\n})();\n","new (class SourceIntercepter {\n  constructor(){\n    var that = this;\n    this.nodeTypes = new Map();\n    for( let desc of Object.values(Object.getOwnPropertyDescriptors(window)) )\n      try {\n        if(desc.value.prototype instanceof Node)\n          this.nodeTypes.set(desc.value.name, desc.value);\n      } catch(e) {}\n    var excludeList = [\n      HTMLAnchorElement,\n      HTMLAreaElement\n    ];\n    for(let [name,type] of this.nodeTypes){\n      let hasLoadableKeys = [];\n      for(let key of ['src','href','srcset'])\n        if(key in type.prototype)\n          hasLoadableKeys.push(key);\n      if(!hasLoadableKeys.length)\n        continue;\n      if(excludeList.indexOf(type) != -1)\n        continue;\n      this.control(type);\n    }\n    this.$onload = function(event){return sourceIntercepter.onload(this,event);};\n    this.$onready = function(event){return sourceIntercepter.onready(this,event);};\n    this.$onerror = function(event){return sourceIntercepter.onerror(this,event);};\n    delete HTMLElement.prototype.loadState;\n    Object.defineProperty(HTMLElement.prototype, 'loadState' ,{\n      enumerable: false,\n      configurable: true,\n      get(){\n        that.check(this);\n        return this.$loadState;\n      },\n      set(state){\n        if(state && [\"loaderror\",\"loading\",\"ready\",\"loaded\"].indexOf(state) == -1)\n          throw Error(\"invalid state\");\n        this.classList.remove(\"loaded\");\n        this.classList.remove(\"ready\");\n        this.classList.remove(\"loaderror\");\n        this.classList.remove(\"loading\");\n        if(state)\n          this.classList.add(state);\n        this.$loadState = state || null;\n      }\n    });\n    this.checkDocument(document);\n    exportGlobal('sourceIntercepter', this);\n  }\n  control(type){\n    var that = this;\n    for(let key of ['src','href'])\n      if(key in type.prototype)\n        this.intercept(\n          type.prototype, key,\n          function(...x){ return that.getSource(this,key,...x); },\n          function(...x){ return that.setSource(this,key,...x); }\n        );\n    if(\"poster\" in type.prototype)\n      this.intercept(\n        type.prototype, \"poster\",\n        function(){\n          return protocolLoadFallbackHandler.getURIfromURL(this.nativePoster);\n        },\n        function(value){\n          this.nativePoster = value;\n          Promise.resolve(\n            protocolLoadFallbackHandler.getCheckVirtualImageURL(this.nativePoster)\n          ).then(url=>{\n            if(this.nativePoster == value)\n              this.nativePoster = url;\n          });\n        }\n      );\n  }\n  intercept(obj,key,getter,setter){\n    var desc = Object.getOwnPropertyDescriptor(obj, 'native'+PFHUtils.ucfirst(key))\n            || Object.getOwnPropertyDescriptor(obj, key);\n    if(!desc)\n      return false;\n    var tmp = Object.create(desc);\n    tmp.enumerable = false;\n    tmp.configurable = true;\n    Object.defineProperty(obj,'native'+PFHUtils.ucfirst(key),desc);\n    delete obj[key];\n    Object.defineProperty(obj,key,{\n      enumerable: desc.enumerable,\n      configurable: true,\n      get: getter,\n      set: setter\n    });\n  }\n  checkDocument(doc){\n    if(!(doc instanceof Document))\n      return;\n    this.checkAll(doc);\n    var observer = new MutationObserver(mutationsList=>{\n      for(var mutation of mutationsList){\n        if(mutation.type != 'childList')\n          continue;\n        for(let node of mutation.addedNodes)\n          if(node instanceof HTMLElement)\n            this.check(node);\n      }\n    });\n    let onload = ()=>{\n      if([\"interactive\",\"complete\"].indexOf(doc.readyState) == -1)\n        return;\n      observer.disconnect();\n      doc.removeEventListener(\"load\",onload);\n      this.checkAll(doc);\n    };\n    if([\"interactive\",\"complete\"].indexOf(doc.readyState) == -1){\n      observer.observe(doc, {childList: true, subtree: true});\n      doc.addEventListener(\"readystatechange\",onload,true);\n    }\n  }\n  checkAll(base){\n    if(!base || !(base instanceof Node))\n      return;\n    this.check(base);\n    let n = base.children.length;\n    for(let i=0; i<n; i++)\n      this.checkAll(base.children[i]);\n  }\n  check(element){\n    if(!(element instanceof HTMLElement))\n      return;\n    if('realSource' in element)\n      return;\n    CSSSourceIntercepter.processStyle(element.style);\n    if(![\"src\",\"href\"].some(a=>a in element))\n      return;\n    element.addEventListener(\"load\",this.$onload,true);\n    element.addEventListener(\"canplaythrough\",this.$onload,true);\n    element.addEventListener(\"loadeddata\",this.$ready,true);\n    element.realSource = element.nativeSrc || element.nativeHref;\n    var state = null;\n    if('complete' in element && 'naturalWidth' in element){ // img specific checks\n      if(!element.complete){\n        state = \"loaderror\";\n      }else if(element.naturalWidth){\n        state = \"loaded\";\n      }else{\n        state = \"loading\";\n      }\n    }\n    if(element instanceof HTMLMediaElement){\n      if(element.poster)\n        element.poster = element.poster;\n      if(element.error){\n        state = \"loaderror\";\n      }else if(element.readyState == HTMLMediaElement.HAVE_NOTHING){\n        state = \"loading\";\n      }else{\n        if(element.readyState == HTMLMediaElement.HAVE_ENOUGH_DATA){\n          state = \"loaded\"; // Not quiet, but close enough\n        }else if(element.readyState){\n          state = \"ready\";\n        }else{\n          state = \"loading\";\n        }\n      }\n    }\n    if(element instanceof HTMLTrackElement){\n      switch(element.readyState){\n        case HTMLTrackElement.LOADED : state = \"loaded\"; break;\n        case HTMLTrackElement.LOADING: state = \"loading\"; break;\n        case HTMLTrackElement.ERROR  : state = \"loaderror\"; break;\n        case HTMLTrackElement.NONE   : state = null; break;\n        default: state = null; break;\n      }\n    }\n    this.loadState = state;\n  }\n  onload(element,event){\n    element.loadState = \"loaded\";\n  }\n  onready(element,event){\n    element.loadState = \"ready\";\n  }\n  onerror(event){\n    protocolLoadFallbackHandler.onerror(event);\n  }\n  getSource(target,key){\n    if(key){\n      return target.realSource || target['native'+PFHUtils.ucfirst(key)];\n    }else{\n      return target.realSource || target.nativeSrc || target.nativeHref;\n    }\n  }\n  setNativeURI(element,nuri){\n    if(element.nativeSrc){\n      element.nativeSrc = nuri;\n    }else if(element.nativeHref){\n      element.nativeHref = nuri;\n    }\n  }\n  getNativeURI(element){\n    return element.nativeSrc\n        || element.nativeHref;\n  }\n  setSource(target,key,uri){\n    if(uri == target.realSource)\n      return;\n    if(target.classList){\n      this.loadState = \"loading\";\n    }\n    if(!target.$sourcelock)\n      target.realSource = uri;\n    target.addEventListener(\"error\",this.$onerror);\n    target.addEventListener(\"load\",this.$onload,true);\n    target.addEventListener(\"canplaythrough\",this.$onload,true);\n    target.addEventListener(\"loadeddata\",this.$onready,true);\n    target['native'+PFHUtils.ucfirst(key)] = uri;\n  }\n})();\n\n"]}