# Resources to be used as redirect destinations. # # - Each distinct resource entry is separated by an empty line. # - The first line in a resource entry is: token mime-type[;encoding] # - All following lines are the data. An empty line signals the end of the # data. # # If the encoding is absent, the data will be converted to base64, and the # encoding will be set to `;base64`. # http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever 1x1-transparent.gif image/gif;base64 R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== 2x2-transparent.png image/png;base64 iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAC0lEQVQI12NgQAcAABIAAe+JVKQAAAAA SUVORK5CYII= 32x32-transparent.png image/png;base64 iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGklEQVRYw+3BAQEAAACCIP+vbkhAAQAA AO8GECAAAZf3V9cAAAAASUVORK5CYII= noopcss text/css noopjs application/javascript (function() { ; })(); noopframe text/html hd-main.js application/javascript var L = (function(){ var l = {}; var noopfn = function() { ; }; var props = [ "pf", "ed", "Qe", "fd", "xh", "Uc", "ef", "zd", "Ad", "Qc", "Ri", "Wc", "Vc", "Xc", "Wg", "rd", "qd", "sd", "Pe", "Id", "Hd", "Jd", "fg", "Fd", "Ed", "Gd", "ek", "Cd", "Bd", "Dd", "Nj", "Sc", "Rc", "Tc", "wg", "xd", "wd", "yd", "fh", "ld", "md", "nd", "Re", "cd", "Pc", "ke", "Yc", "Xg", "jd", "kd", "oh", "ad", "bd", "mi", "gd", "hd", "ae", "dd", "fk", "ij", "ud", "td", "vd", "ig", "od", "pd", "Yd", "$j", "Oc", "bf" ]; for (var i = 0; i < props.length; i++) { l[props[i]] = noopfn; } return l; })(); 1216.js application/javascript (function() { // var sto = window.setTimeout; var mysto = function(a, b) { if ( b === 15000 && a.toString().lastIndexOf('function a()', 0) === 0 ) { return; } return sto(a, b); }; Object.defineProperty(window, 'setTimeout', { get: function() { return mysto; } }); })(); # fuckadblock defuser fuckadblock.js-3.2.0 application/javascript (function() { var noopfn = function() { ; }; // var Fab = function() {}; Fab.prototype.check = noopfn; Fab.prototype.clearEvent = noopfn; Fab.prototype.emitEvent = noopfn; Fab.prototype.on = function(a, b) { if ( !a ) { b(); } return this; }; Fab.prototype.onDetected = function() { return this; }; Fab.prototype.onNotDetected = function(a) { a(); return this; }; Fab.prototype.setOption = noopfn; window.FuckAdBlock = window.BlockAdBlock = Fab; // window.fuckAdBlock = window.blockAdBlock = new Fab(); })(); antiAdBlock.js application/javascript (function() { window.antiAdBlock = { onDetected: function() { ; }, onNotDetected: function(a) { a(); } }; })(); # To neutralize GA scripts. The goal is to provide the minimal API # expected by clients of these scripts so that the end users are able # to wholly block GA while minimizing risks of page breakage. # Test cases (need way more): # - https://github.com/chrisaljoudi/uBlock/issues/119 google-analytics.com/ga.js application/javascript (function() { var noopfn = function() { ; }; // var Gaq = function() { ; }; Gaq.prototype.Na = noopfn; Gaq.prototype.O = noopfn; Gaq.prototype.Sa = noopfn; Gaq.prototype.Ta = noopfn; Gaq.prototype.Va = noopfn; Gaq.prototype._createAsyncTracker = noopfn; Gaq.prototype._getAsyncTracker = noopfn; Gaq.prototype._getPlugin = noopfn; Gaq.prototype.push = function(a) { if ( typeof a === 'function' ) { a(); } }; // var tracker = function() {}; tracker._getLinkerUrl = function(a) { return a; }; // var tracker = { _initData: noopfn, _trackEvent: noopfn, _trackPageview: noopfn }; // var Gat = function() { ; }; Gat.prototype._anonymizeIP = noopfn; Gat.prototype._createTracker = noopfn; Gat.prototype._forceSSL = noopfn; Gat.prototype._getPlugin = noopfn; Gat.prototype._getTracker = function() { return tracker; }; Gat.prototype._getTrackerByName = function() { return tracker; }; Gat.prototype._getTrackers = noopfn; Gat.prototype.aa = noopfn; Gat.prototype.ab = noopfn; Gat.prototype.hb = noopfn; Gat.prototype.la = noopfn; Gat.prototype.oa = noopfn; Gat.prototype.pa = noopfn; Gat.prototype.u = noopfn; var gat = new Gat(); window._gat = gat; // var gaq = new Gaq(); (function() { var aa = window._gaq || []; if ( Array.isArray(aa) ) { while ( aa[0] ) { gaq.push(aa.shift()); } } })(); window._gaq = gaq.qf = gaq; })(); google-analytics.com/analytics.js application/javascript (function() { // https://developers.google.com/analytics/devguides/collection/analyticsjs/ var noopfn = function() { ; }; var noopnullfn = function() { return null; }; // var Tracker = function() { ; }; var p = Tracker.prototype; p.get = noopfn; p.set = noopfn; p.send = noopfn; // var gaName = window.GoogleAnalyticsObject || 'ga'; var ga = function() { var len = arguments.length; if ( len === 0 ) { return; } var f = arguments[len-1]; if ( typeof f !== 'object' || f === null || typeof f.hitCallback !== 'function' ) { return; } try { f.hitCallback(); } catch (ex) { } }; ga.create = function() { return new Tracker(); }; ga.getByName = noopnullfn; ga.getAll = function() { return []; }; ga.remove = noopfn; window[gaName] = ga; })(); google-analytics.com/inpage_linkid.js application/javascript (function() { window._gaq = window._gaq || { push: function() { ; } }; })(); # Ubiquitous googletagservices.com: not blocked by EasyPrivacy. # "Tags are tiny bits of website code that let you measure traffic and # "visitor behavior" googletagservices.com/gpt.js application/javascript (function() { var p; // https://developers.google.com/doubleclick-gpt/reference var noopfn = function() { ; }; var noopthisfn = function() { return this; }; var noopnullfn = function() { return null; }; var nooparrayfn = function() { return []; }; var noopstrfn = function() { return ''; }; // var companionAdsService = { addEventListener: noopthisfn, enableSyncLoading: noopfn, setRefreshUnfilledSlots: noopfn }; var contentService = { addEventListener: noopthisfn, setContent: noopfn }; var PassbackSlot = function() { ; }; p = PassbackSlot.prototype; p.display = noopfn; p.get = noopnullfn; p.set = noopthisfn; p.setClickUrl = noopthisfn; p.setTagForChildDirectedTreatment = noopthisfn; p.setTargeting = noopthisfn; p.updateTargetingFromMap = noopthisfn; var pubAdsService = { addEventListener: noopthisfn, clear: noopfn, clearCategoryExclusions: noopthisfn, clearTagForChildDirectedTreatment: noopthisfn, clearTargeting: noopthisfn, collapseEmptyDivs: noopfn, defineOutOfPagePassback: function() { return new PassbackSlot(); }, definePassback: function() { return new PassbackSlot(); }, disableInitialLoad: noopfn, display: noopfn, enableAsyncRendering: noopfn, enableSingleRequest: noopfn, enableSyncRendering: noopfn, enableVideoAds: noopfn, get: noopnullfn, getAttributeKeys: nooparrayfn, refresh: noopfn, set: noopthisfn, setCategoryExclusion: noopthisfn, setCentering: noopfn, setCookieOptions: noopthisfn, setLocation: noopthisfn, setPublisherProvidedId: noopthisfn, setTagForChildDirectedTreatment: noopthisfn, setTargeting: noopthisfn, setVideoContent: noopthisfn, updateCorrelator: noopfn }; var SizeMappingBuilder = function() { ; }; p = SizeMappingBuilder.prototype; p.addSize = noopthisfn; p.build = noopnullfn; var Slot = function() { ; }; p = Slot.prototype; p.addService = noopthisfn; p.clearCategoryExclusions = noopthisfn; p.clearTargeting = noopthisfn; p.defineSizeMapping = noopthisfn; p.get = noopnullfn; p.getAdUnitPath = nooparrayfn; p.getAttributeKeys = nooparrayfn; p.getCategoryExclusions = nooparrayfn; p.getDomId = noopstrfn; p.getSlotElementId = noopstrfn; p.getSlotId = noopthisfn; p.getTargeting = nooparrayfn; p.getTargetingKeys = nooparrayfn; p.set = noopthisfn; p.setCategoryExclusion = noopthisfn; p.setClickUrl = noopthisfn; p.setCollapseEmptyDiv = noopthisfn; p.setTargeting = noopthisfn; // var gpt = window.googletag || {}; var cmd = gpt.cmd || []; gpt.apiReady = true; gpt.cmd = []; gpt.cmd.push = function(a) { try { a(); } catch (ex) { } return 1; }; gpt.companionAds = function() { return companionAdsService; }; gpt.content = function() { return contentService; }; gpt.defineOutOfPageSlot = function() { return new Slot(); }; gpt.defineSlot = function() { return new Slot(); }; gpt.disablePublisherConsole = noopfn; gpt.display = noopfn; gpt.enableServices = noopfn; gpt.getVersion = noopstrfn; gpt.pubads = function() { return pubAdsService; }; gpt.pubadsReady = true; gpt.sizeMapping = function() { return new SizeMappingBuilder(); }; window.googletag = gpt; while ( cmd.length !== 0 ) { gpt.cmd.push(cmd.shift()); } })(); # Obviously more work needs to be done, but at least for now it takes care of: # - https://twitter.com/kenn_butler/status/709163241021317120 googletagmanager.com/gtm.js application/javascript (function() { var noopfn = function() { ; }; window.ga = window.ga || noopfn; })(); # https://forums.lanik.us/viewtopic.php?f=91&t=27188 i.ligatus.com/*/angular-tag.js application/javascript (function() { self.adProtect = true; })(); # Yavli ads. These are blocked using an inline script tag filter, but this # works only on Firefox. So we side-load the following script for sites # suffering Yavli's click-bait ads. yavli-defuser.js application/javascript (function() { var noopfn = function() { ; }; var nourl = { set: noopfn, get: function() { return ''; } }; try { Object.defineProperty(window, '__durl', nourl); Object.defineProperty(window, '__lsurl', nourl); Object.defineProperty(window, '__lturl', nourl); } catch (ex) { } var aa = ['pz','xz','yy','yz','zp','zx','zy','gj','fj','jf','kj']; var no = { set: noopfn, get: function() { return { start: noopfn }; } }; while ( aa.length ) { try { Object.defineProperty(window, aa.pop(), no); } catch (e) { } } })(); # Addefend defuser uabinject-defuser.js application/javascript (function() { window.uabpdl = window.uabInject = window.uabDetect = true; })(); # https://github.com/gorhill/uBlock/issues/1094 pornhub-popup-defuser.js application/javascript (function() { var w = window; var count = Math.ceil(8+Math.random()*4); var tomorrow = new Date(Date.now() + 86400); var expire = tomorrow.toString(); document.cookie = 'FastPopSessionRequestNumber=' + count + '; expires=' + expire; var db; if ( (db = w.localStorage) ) { db.setItem('InfNumFastPops', count); db.setItem('InfNumFastPopsExpire', expire); } if ( (db = w.sessionStorage) ) { db.setItem('InfNumFastPops', count); db.setItem('InfNumFastPopsExpire', expire); } })(); goyavelab-defuser.js application/javascript (function() { var noopfn = function() { ; }; Object.defineProperty(window, '_$14', { get: function() { return noopfn; }, set: noopfn }); })(); # https://news.ycombinator.com/item?id=10814913 forbes-defuser.js application/javascript (function() { if ( window.location.pathname.lastIndexOf('/forbes/welcome/', 0) !== 0 ) { return; } var noopfn = function() { ; }; var odp = Object.defineProperty; var wad, wadm, abc = function() {}; var abcp = abc.prototype; abcp.addCheck = abcp.check = abcp.initialize = abcp.removeCheck = abcp.triggerAdBlockState = noopfn; abcp.getAdBlockState = function() { return false; }; odp(window, 'WelcomeAd', { get: function() { return wad; }, set: function(a) { wad = a; odp(a, 'Modules', { get: function() { return wadm; }, set: function(a) { wadm = a; if ( a.AdBlockChecker ) { a.AdBlockChecker = abc; } else { odp(a, 'AdBlockChecker', { get: function() { return abc; }, set: function() {} }); } } }); } }); })(); # https://forums.lanik.us/viewtopic.php?f=62&t=25212 impspcabe-defuser.js application/javascript (function(){ window._impspcabe = false; })(); # https://github.com/gorhill/uBlock/issues/733 wpredirect-defuser.js application/javascript (function() { var twp = window.TWP = window.TWP || {}; twp.Identity = twp.Identity || {}; twp.Identity.initComplete = true; })(); # https://github.com/gorhill/uBlock/issues/1194 openload-defuser.js application/javascript (function() { Object.defineProperty(window, 'preserve', { get: function() { return true; }, set: function() {} }); })(); # https://github.com/gorhill/uBlock/issues/1136 1136.js application/javascript (function() { var wjdmp; var noopfn = function() { ; }; var excludes = { '4': ['157','161','175'], '5': ['140'] }; var wjdmpGet = function() { return wjdmp; }; var wjdmpSet = function(a) { wjdmp = function(r, o) { var aa; for ( var excl in excludes ) { if ( excludes.hasOwnProperty(excl) === false ) { continue; } if ( r.length !== 1 || r[0].toString() !== excl ) { continue; } aa = excludes[excl]; for ( var k in o ) { if ( !o.hasOwnProperty(k) || typeof o[k] !== 'function' ) { continue; } if ( aa.length !== 0 && aa.indexOf(k.toString()) !== -1 ) { continue; } o[k] = noopfn; } } a(r, o); }; }; try { Object.defineProperty(window, 'webpackJsonpdmp', { get: wjdmpGet, set: wjdmpSet }); } catch(ex) { } })(); bab-defuser.js application/javascript (function() { var sto = window.setTimeout, re = /\.bab_elementid.$/; window.setTimeout = function(a, b) { if ( typeof a !== 'string' || !re.test(a) ) { return sto(a, b); } }; })(); kissanime-defuser.js application/javascript (function() { Object.defineProperty(window, 'isBlockAds2', { get: function() { return false; }, set: function(a) {} }); })(); # https://forums.lanik.us/viewtopic.php?f=64&t=22975&start=45#p77969 kisscartoon-defuser.js application/javascript (function() { Object.defineProperty(window, '_0x408a', { get: function() { return []; }, set: function(a) {} }); })(); phenv-defuser.js application/javascript (function() { var phenv = window.PHENV; var noopfn = function() { ; }; var trapOnDetection = function() { if ( phenv.onDetection === undefined ) { Object.defineProperty(phenv, 'onDetection', { get: function() { return noopfn; }, set: noopfn }); return; } phenv.onDetection = noopfn; }; if ( phenv === undefined ) { Object.defineProperty(window, 'PHENV', { get: function() { return phenv; }, set: function(a) { phenv = a; trapOnDetection(); } }); return; } trapOnDetection(); })(); scorecardresearch.com/beacon.js application/javascript (function() { window.COMSCORE = { purge: function() { _comscore = []; }, beacon: function() { ; } }; })(); # https://github.com/gorhill/uBlock/issues/1250#issuecomment-173533894 widgets.outbrain.com/outbrain.js application/javascript (function() { var noopfn = function() { ; }; var obr = {}; var methods = [ 'callClick', 'callLoadMore', 'callRecs', 'callUserZapping', 'callWhatIs', 'cancelRecommendation', 'cancelRecs', 'closeCard', 'closeModal', 'closeTbx', 'errorInjectionHandler', 'getCountOfRecs', 'getStat', 'imageError', 'manualVideoClicked', 'onOdbReturn', 'onVideoClick', 'pagerLoad', 'recClicked', 'refreshSpecificWidget', 'refreshWidget', 'reloadWidget', 'researchWidget', 'returnedError', 'returnedHtmlData', 'returnedIrdData', 'returnedJsonData', 'scrollLoad', 'showDescription', 'showRecInIframe', 'userZappingMessage', 'zappingFormAction' ]; obr.extern = { video: { getVideoRecs: noopfn, videoClicked: noopfn } }; methods.forEach(function(a) { obr.extern[a] = noopfn; }); window.OBR = window.OBR || obr; })(); # https://github.com/gorhill/uBlock/issues/1228 window.name-defuser application/javascript if ( window === window.top ) { window.name = null; } # https://github.com/gorhill/uBlock/issues/897#issuecomment-180871042 doubleclick.net/instream/ad_status.js application/javascript window.google_ad_status = 1; # https://github.com/gorhill/uBlock/issues/1384 addthis.com/addthis_widget.js application/javascript (function() { var noopfn = function() { ; }; window.addthis = { addEventListener: noopfn, init: noopfn, layers: noopfn, toolbox: noopfn, update: noopfn }; })(); # https://adblockplus.org/forum/viewtopic.php?f=2&t=43914#p147866 wired-defuser.js application/javascript (function() { var sto = window.setTimeout, re = /^function n\(\)/; window.setTimeout = function(a, b) { if ( b !== 50 || !re.test(a.toString()) ) { return sto(a, b); } }; })(); # https://github.com/gorhill/uBlock/issues/1059#issuecomment-185434177 # Works for stern.de, will see if reusable. bcplayer-defuser.js application/javascript (function() { var bcPlayer; Object.defineProperty(window, 'bcPlayer', { get: function() { return bcPlayer; }, set: function(a) { bcPlayer = a; a.ads = function(a) { ; }; } }); })(); # https://forums.lanik.us/viewtopic.php?f=62&t=27719 opensubtitles.org application/javascript (function() { Object.defineProperty(window, '_0x1cae', { get: function() { return []; }, set: function(a) {} }); })(); # Might be useful on some sites to be able to foil all calls to `setTimeout`. # Example of a filter: `example.com##script:inject(setTimeout-defuser)` setTimeout-defuser application/javascript (function() { window.setTimeout = function() { return 1; }; })(); # Completely experimental: load Disqus on demand only. Purpose is to avoid # connecting to Disqus' servers, unless the user explicitly asks for the # comments to be loaded. # Works with following filters: # ||disqus.com/forums/*/embed.js$script,redirect=disqus.com/forums/*/embed.js # ||disqus.com/embed.js$script,redirect=disqus.com/embed.js # ||disqus.com/count.js$script # @@||disqus.com/embed.js?_=1457540*$script # If you want a site you regularly visit to always have the comment loaded, # just use an exception static filter. Example for wired.com: # @@||wired.disqus.com/embed.js # Sometimes a site will use this one script: disqus.com/forums/*/embed.js application/javascript (function() { var ee = document.getElementsByTagName('script'); var i = ee.length, src; while ( i-- ) { src = ee[i].src || ''; if ( src === '' ) { continue; } if ( src.lastIndexOf('disqus.com/embed.js') === (src.length - 19) ) { return; } } var e = document.createElement('script'); e.async = true; e.src = '//' + window.disqus_shortname + '.disqus.com/embed.js'; document.body.appendChild(e); })(); # Most use this one though: disqus.com/embed.js application/javascript (function() { var p = document.getElementById(window.disqus_container_id || 'disqus_thread'); if ( p === null ) { return; } var b = document.createElement('button'); b.textContent = 'Disqus blocked by uBlock Origin: click to unblock'; b.type = 'button'; p.appendChild(b); var loadDisqus = function(ev) { b.removeEventListener('click', loadDisqus); p.removeChild(b); var script = document.createElement('script'); script.async = true; var t = Date.now().toString(); script.src = '//' + window.disqus_shortname + '.disqus.com/embed.js?_=1457540' + t.slice(-6); document.body.appendChild(script); ev.preventDefault(); ev.stopPropagation(); }; b.addEventListener('click', loadDisqus); })(); # https://github.com/gorhill/uBlock/issues/1461 ytad-defuser.js application/javascript (function() { var sto = window.setTimeout; window.setTimeout = function(a, b) { if ( b >= 15000 && b < 30000 ) { console.trace('uBO> delay = ' + b); return sto(a, 100); } return sto(a, b); }; })();