! Checksum: xg9UstxgZf5FUoJAQ4mUtQ
! Diff-Path: ../patches/5/5-s-1711964225-3600.patch
! Title: AdGuard Experimental filter
! Description: Filter designed to test certain hazardous filtering rules before they are added to the basic filters.
! Version: 2.0.1.40
! TimeUpdated: 2024-04-01T09:33:27+00:00
! Expires: 10 days (update frequency)
! Homepage: https://github.com/AdguardTeam/AdGuardFilters
! License: https://github.com/AdguardTeam/AdguardFilters/blob/master/LICENSE
!
!-------------------------------------------------------------------!
!------------------ General JS API ---------------------------------!
!-------------------------------------------------------------------!
! JS API START
#%#var AG_onLoad=function(func){if(document.readyState==="complete"||document.readyState==="interactive")func();else if(document.addEventListener)document.addEventListener("DOMContentLoaded",func);else if(document.attachEvent)document.attachEvent("DOMContentLoaded",func)};
#%#var AG_removeElementById = function(id) { var element = document.getElementById(id); if (element && element.parentNode) { element.parentNode.removeChild(element); }};
#%#var AG_removeElementBySelector = function(selector) { if (!document.querySelectorAll) { return; } var nodes = document.querySelectorAll(selector); if (nodes) { for (var i = 0; i < nodes.length; i++) { if (nodes[i] && nodes[i].parentNode) { nodes[i].parentNode.removeChild(nodes[i]); } } } };
#%#var AG_each = function(selector, fn) { if (!document.querySelectorAll) return; var elements = document.querySelectorAll(selector); for (var i = 0; i < elements.length; i++) { fn(elements[i]); }; };
#%#var AG_removeParent = function(el, fn) { while (el && el.parentNode) { if (fn(el)) { el.parentNode.removeChild(el); return; } el = el.parentNode; } };
!
! AG_removeCookie
! Examples: AG_removeCookie('/REGEX/') or AG_removeCookie('part of the cookie name')
!
#%#var AG_removeCookie=function(a){var e=/./;/^\/.+\/$/.test(a)?e=new RegExp(a.slice(1,-1)):""!==a&&(e=new RegExp(a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")));a=function(){for(var a=document.cookie.split(";"),g=a.length;g--;){cookieStr=a[g];var d=cookieStr.indexOf("=");if(-1!==d&&(d=cookieStr.slice(0,d).trim(),e.test(d)))for(var h=document.location.hostname.split("."),f=0;f<h.length-1;f++){var b=h.slice(f).join(".");if(b){var c=d+"=",k="; domain="+b;b="; domain=."+b;document.cookie=c+"; expires=Thu, 01 Jan 1970 00:00:00 GMT";document.cookie=c+k+"; expires=Thu, 01 Jan 1970 00:00:00 GMT";document.cookie=c+b+"; expires=Thu, 01 Jan 1970 00:00:00 GMT";document.cookie=c+"; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT";document.cookie=c+k+"; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT";document.cookie=c+b+"; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT"}}}};a();window.addEventListener("beforeunload",a)};
!
! AG_defineProperty
! See https://github.com/AdguardTeam/deep-override
!
#%#var AG_defineProperty=function(){var p,q=Object.defineProperty;if("function"==typeof WeakMap)p=WeakMap;else{var r=0,t=function(){this.a=(r+=Math.random()).toString()};t.prototype.set=function(a,b){var d=a[this.a];d&&d[0]===a?d[1]=b:q(a,this.a,{value:[a,b],writable:!0});return this};t.prototype.get=function(a){var b;return(b=a[this.a])&&b[0]===a?b[1]:void 0};t.prototype.has=function(a){var b=a[this.a];return b?b[0]===a:!1};p=t}function u(a){this.b=a;this.h=Object.create(null)}function v(a,b,d,e){this.a=a;this.i=b;this.c=d;this.f=e}function w(){this.g=/^([^\\\.]|\\.)*?\./;this.j=/\\(.)/g;this.a=new p}function x(a,b){var d=b.f;if(d&&!("beforeGet"in d||"beforeSet"in d))return z(d);var e={get:function(){var c=b.f;c&&c.beforeGet&&c.beforeGet.call(this,b.a.b);a:if(c=b.g)c=A(c)?c.value:c.get?c.get.call(this):void 0;else{c=b.a.b;if(b.i in c&&(c=B(c),null!==c)){var d=C.call(c,b.i);c=d?d.call(this):c[b.i];break a}c=void 0}(this===b.a.b||D.call(b.a.b,this))&&E(a,c,b.c);return c},set:function(c){if(this===b.a.b||D.call(b.a.b,this)){b.f&&b.f.beforeSet&&(c=b.f.beforeSet.call(this,c,this));var d=b.g;d&&A(d)&&d.value===c?c=!0:(d=F(b,c,this),G(c)&&(c=H(a,c),I(a,c,b.c)),c=d)}else c=F(b,c,this);return c}};d&&J(d,e,K);return e}function I(a,b,d){for(var e in d.h){var c=d.h[e];if(b.h[e]){var h=a,g=b.h[e],k=c;!k.f||g.f||"undefined"===typeof g.a.b||g.g||(g.g=z(k.f));g.c&&k.c&&g.c!==k.c&&I(h,g.c,k.c)}else{g=h=void 0;k=a;var f=b,l=c.i,m="undefined"!==typeof f.b,y=!1;m&&(g=L(f.b,l))&&!g.configurable&&(y=!0,h=f.b[l]);var n=y?H(k,h):new u(c.c.b);I(k,n,c.c);n=new v(f,l,n,c.f);f.h[l]=n;m&&(n.g=g,m=x(k,n),y?E(k,h,c.c):(q(f.b,l,m),g&&A(g)&&(M(m,g.value,f.b),E(k,g.value,c.c))))}}}function E(a,b,d){G(b)&&(b=H(a,b),I(a,b,d))}function F(a,b,d){var e=a.g;if(!e){e=B(a.a.b);if(null!==e&&(e=N.call(e,a.i)))return e.call(d,b);if(!O(a.a.b))return!1;a.g={value:b,configurable:!0,writable:!0,enumerable:!0};return!0}return M(e,b,d)}function H(a,b){var d=a.a.get(b);d||(d=new u(b),a.a.set(b,d));return d}function A(a){return"undefined"!==typeof a.writable}function J(a,b,d){for(var e=0,c=d.length;e<c;e++){var h=d[e];h in a&&(b[h]=a[h])}}function z(a){if(a){var b={};J(a,b,P);return b}}function M(a,b,d){if(A(a))return a.writable?(a.value=b,!0):!1;if(!a.set)return!1;a.set.call(d,b);return!0}var P="configurable enumerable value get set writable".split(" "),K=P.slice(0,2),L=Object.getOwnPropertyDescriptor,O=Object.isExtensible,B=Object.getPrototypeOf,D=Object.prototype.isPrototypeOf,C=Object.prototype.__lookupGetter__||function(a){return(a=Q(this,a))&&a.get?a.get:void 0},N=Object.prototype.__lookupSetter__||function(a){return(a=Q(this,a))&&a.set?a.set:void 0};function Q(a,b){if(b in a){for(;!w.hasOwnProperty.call(a,b);)a=B(a);return L(a,b)}}function G(a){var b=typeof a;return"function"===b||"object"===b&&null!==a?!0:!1}var R;return function(a,b,d){R||(R=new w);var e=R;d=d||window;var c=new u;a+=".";var h=c||new u;for(var g=e.g,k=e.j,f,l,m;a;){f=g.exec(a);if(null===f)throw 1;f=f[0].length;l=a.slice(0,f-1).replace(k,"$1");a=a.slice(f);(f=h.h[l])?m=f.c:(m=new u,f=new v(h,l,m),h.h[l]=f);h=m}if(!f)throw 1;a=f;a.f=b;E(e,d,c)};}();
!
! AG_abortOnPropertyWrite(property, debug)
! Aborts execution of a script when it attempts to write the specified property.
! Based on AG_defineProperty (https://github.com/AdguardTeam/deep-override)
!
! Examples:
! AG_abortOnPropertyWrite('String.fromCharCode');
!
! @param property property or properties chain
! @param debug optional, if true - we will print warning when script is aborted.
!
#%#var AG_abortOnPropertyWrite=function(a,b){var c=Math.random().toString(36).substr(2,8);AG_defineProperty(a,{beforeSet:function(){b&&console.warn("AdGuard aborted property write: "+a);throw new ReferenceError(c);}});var d=window.onerror;window.onerror=function(e){if("string"===typeof e&&-1!==e.indexOf(c))return b&&console.warn("AdGuard has caught window.onerror: "+a),!0;if(d instanceof Function)return d.apply(this,arguments)}};
!
! AG_abortOnPropertyRead(property, debug)
! Aborts execution of a script when it attempts to read the specified property.
! Based on AG_defineProperty (https://github.com/AdguardTeam/deep-override)
!
! Examples:
! AG_abortOnPropertyRead('String.fromCharCode');
!
! @param property property or properties chain
! @param debug optional, if true - we will print warning when script is aborted.
!
#%#var AG_abortOnPropertyRead=function(a,b){var c=Math.random().toString(36).substr(2,8);AG_defineProperty(a,{beforeGet:function(){b&&console.warn("AdGuard aborted property read: "+a);throw new ReferenceError(c);}});var d=window.onerror;window.onerror=function(e){if("string"===typeof e&&-1!==e.indexOf(c))return b&&console.warn("AdGuard has caught window.onerror: "+a),!0;if(d instanceof Function)return d.apply(this,arguments)}};
!
! AG_abortInlineScript(regex, property, debug)
! Aborts execution of an inline script when it attempts to access the specified property
! AND content of the <script> element matches specified regular expression.
! Based on AG_defineProperty (https://github.com/AdguardTeam/deep-override)
!
! Examples:
! AG_abortInlineScript(/zfgloadedpopup|zfgloadedpushopt/, 'String.fromCharCode');
!
! @param regex regular expression that the inline script contents must match
! @param property property or properties chain
! @param debug optional, if true - we will print warning when script is aborted.
!
#%#var AG_abortInlineScript=function(g,b,c){var d=function(){if("currentScript"in document)return document.currentScript;var a=document.getElementsByTagName("script");return a[a.length-1]},e=Math.random().toString(36).substr(2,8),h=d();AG_defineProperty(b,{beforeGet:function(){var a=d();if(a instanceof HTMLScriptElement&&a!==h&&""===a.src&&g.test(a.textContent))throw c&&console.warn("AdGuard aborted execution of an inline script"),new ReferenceError(e);}});var f=window.onerror;window.onerror=function(a){if("string"===typeof a&&-1!==a.indexOf(e))return c&&console.warn("AdGuard has caught window.onerror: "+b),!0;if(f instanceof Function)return f.apply(this,arguments)}};
!
! AG_setConstant('property.chain', 'true') // defines boolean (true), same for false;
! AG_setConstant('property.chain', '123') // defines Number 123;
! AG_setConstant('property.chain', 'noopFunc') // defines function(){};
! AG_setConstant('property.chain', 'trueFunc') // defines function(){return true};
! AG_setConstant('property.chain', 'falseFunc') // defines function(){return false};
!
#%#var AG_setConstant=function(e,a){if("undefined"===a)a=void 0;else if("false"===a)a=!1;else if("true"===a)a=!0;else if("noopFunc"===a)a=function(){};else if("trueFunc"===a)a=function(){return!0};else if("falseFunc"===a)a=function(){return!1};else if(/^\d+$/.test(a)){if(a=parseFloat(a),isNaN(a)||32767<Math.abs(a))return}else return;var b=!1;AG_defineProperty(e,{get:function(){return a},set:function(c){if(b)var d=!0;else void 0!==c&&void 0!==a&&typeof c!==typeof a&&(b=!0),d=b;d&&(a=c)}})};
! JS API FINISH
!-------------------------------------------------------------------!
!------- Experimental rules for English filter ---------------------!
!-------------------------------------------------------------------!
!
! Advertising networks known rotator domains
!
! This section contains the list of rules blocking requests
! to known rotator domains of the advertising networks.
! For example, "*.doubleclick.net" are rotator domains
! of Doubleclick ad network.
!
! Do not mix it up with direct adverts domains.
! Read about it in direct_adverts.txt
!
!
! Direct adverts
!
! Contains rules which are blocking URLs to direct adverts.
! What do we mean by direct adverts - it is all kind of advertisers
! who are not ad networks.
!
! For example, rules that block referral links.
!
!
! URL blocking rules unsorted list
! http://adguard.com/filterrules.html#baseRules
!
! Add basic rule here if it cannot be added to
! direct_adverts.txt or advertising_networks.txt.
! For example rules like "http://example.com/banner.png"
! blocking specific URL should be added to this section.
!
!
! Common CSS rules
!
! This section contains CSS rules without domain restrictions.
! Be cautious and add rules here even if you are sure that this
! rule could be used for more than one web site.
!
!
! Common HTML rules
! http://adguard.com/filterrules.html#htmlContentFilter
!
! This section contains the list of common HTML rules
! without domain restrictions.
! Be aware that rules added to this section cannot be used
! by Adguard extensions.
! We advise you to stick to CSS/Javascript/URL rule types
! and use HTML rules if there is no other way only.
!
!
! Common javascript rules
! http://adguard.com/filterrules.html#javascriptInjection
!
! Javascript rules which are not restricted to specific domains.
! Be VERY cautious with this type of rules.
!
!
! YouTube ads (for old and new ads)
! youtube.com - white screen with skip button
! I am not sure why we need this, commented out
! !#if (!adguard_app_ios && !adguard_ext_android_cb)
! @@||youtube.com/get_video_info
! !#endif
!
! Rules that are restricted to one or more domains.
! This section contain any type of rule grouped by domain.
!
! remove anti-adb
www.youtube.com#%#(()=>{const wrapper=(target,thisArg,args)=>{let content=Reflect.apply(target,thisArg,args);if(content.includes('bkaEnforcementMessage')){const modifiedContent=content.replace(/\n.\n[A-Z]auxiliaryUi\.messageRenderers\.bkaEnforcementMessageViewModel\.displayType.\dENFORCEMENT_MESSAGE_VIEW_MODEL_DISPLAY_TYPE_[A-Z]+\n[A-Z]\n[A-Z]auxiliaryUi\.messageRenderers\.bkaEnforcementMessageViewModel\.isVisible.{2}(?:tru|fals)e/,'');return modifiedContent;}return content;};const handler={apply:wrapper};window.atob=new Proxy(window.atob,handler);})();
www.youtube.com#%#//scriptlet('set-constant', 'ytInitialPlayerResponse.auxiliaryUi.messageRenderers.bkaEnforcementMessageViewModel', 'undefined')
! Fix ads on https://www.youtube.com/shorts/
! TODO: If it does not cause any problems, move it to the Base filter
www.youtube.com#%#(()=>{window.JSON.parse=new Proxy(JSON.parse,{apply(r,e,t){const n=Reflect.apply(r,e,t);if(!location.pathname.startsWith("/shorts/"))return n;const a=n?.entries;return a&&Array.isArray(a)&&(n.entries=n.entries.filter((r=>{if(!r?.command?.reelWatchEndpoint?.adClientParams?.isAd)return r}))),n}});})();
! main youtube page - changing view for the first row of elements
www.youtube.com#$##contents ytd-rich-grid-row:has(> div[id="contents"] > ytd-rich-item-renderer[style="display: none !important;"]) > #contents:first-child { max-width: unset !important; }
www.youtube.com#$##contents ytd-rich-grid-row:has(> div[id="contents"] > ytd-rich-item-renderer[style="display: none !important;"]) ytd-rich-grid-media { max-width: unset !important; }
www.youtube.com#$##contents ytd-rich-grid-row:has(> div[id="contents"] > ytd-rich-item-renderer[style="display: none !important;"]) { --ytd-rich-grid-items-per-row: 1 !important; }
! https://github.com/AdguardTeam/AdguardFilters/issues/96262
developer.android.com,adssettings.google.com##sc-survey-survey-manager
!
! https://github.com/AdguardTeam/AdguardFilters/issues/174701#issuecomment-1991730425
foxtel.com.au#%#//scriptlet('xml-prune', 'xpath(//*[name()="MPD"]/@mediaPresentationDuration | //*[name()="Period"]/@start | //*[name()="Period"][.//*[name()="BaseURL" and contains(text(),"/adease/")]])', '', '.mpd')
foxtel.com.au#%#//scriptlet('json-prune', 'adease adeaseBlob vmap')
!
! Allowlist
! http://adguard.com/filterrules.html#exclusionRules
! http://adguard.com/filterrules.html#hideRulesExceptions
! http://adguard.com/filterrules.html#cssInjectionExceptions
! http://adguard.com/filterrules.html#javascriptInjectionExceptions
!
! This section contains all kinds of exception rules.
!
!-------------------------------------------------------------------!
!------- Experimental rules for Spyware filter ---------------------!
!-------------------------------------------------------------------!
!
! This file contains all experimental rules for Spyware filter.
!
!-------------------------------------------------------------------!
!------- Experimental rules for Social filter ----------------------!
!-------------------------------------------------------------------!
!
! This file contains all experimental rules for Social filter.
!
!-------------------------------------------------------------------!
!------- Experimental rules for Russian filter ---------------------!
!-------------------------------------------------------------------!
!
! Advertising networks known rotator domains
!
! This section contains the list of rules blocking requests
! to known rotator domains of the advertising networks.
! For example, "*.doubleclick.net" are rotator domains
! of Doubleclick ad network.
!
! Do not mix it up with direct adverts domains.
! Read about it in direct_adverts.txt
!
!
!
! Direct adverts
!
! Contains rules which are blocking URLs to direct adverts.
! What do we mean by direct adverts - it is all kind of advertisers
! who are not ad networks.
!
! For example, rules that block referral links.
!
!
! URL blocking rules unsorted list
! http://adguard.com/filterrules.html#baseRules
!
! Add basic rule here if it cannot be added to
! direct_adverts.txt or advertising_networks.txt.
! For example rules like "http://example.com/banner.png"
! blocking specific URL should be added to this section.
!
!
! Common CSS rules
! http://adguard.com/filterrules.html#hideRules
! http://adguard.com/filterrules.html#cssInjection
!
! This section contains CSS rules without domain restrictions.
! Be cautious and add rules here even if you are sure that this
! rule could be used for more than one web site.
!
!
! Common HTML rules
! http://adguard.com/filterrules.html#htmlContentFilter
!
! This section contains the list of common HTML rules
! without domain restrictions.
! Be aware that rules added to this section cannot be used
! by Adguard extensions.
! We advise you to stick to CSS/Javascript/URL rule types
! and use HTML rules if there is no other way only.
!
!
! Common javascript rules
! http://adguard.com/filterrules.html#javascriptInjection
!
! Javascript rules which are not restricted to specific domains.
! Be VERY cautious with this type of rules.
!
!
! Rules which are restricted to one or more domains.
! This section contain any type of rule grouped by domain.
!
mail.yandex.ru#?#.modal:has(> div[data-lego] div[class^="mail-SubscriptionsPopup"])
!
! Allowlist
!
! This section contains all kinds of exception rules.
!
!-------------------------------------------------------------------!
!------- Experimental rules for Other filters ----------------------!
!-------------------------------------------------------------------!
!
! This file contains all filters other than English, Social, Spyware and Russian.
! Also filters by platforms https://github.com/AdguardTeam/AdguardBrowserExtension/issues/917
!
! https://github.com/AdguardTeam/AdguardFilters/issues/169842
/videojs8/nuevo.min.js
/videojs/plugins/vastpro.js
! https://github.com/AdguardTeam/AdguardFilters/issues/142875
imdb.com#?#div[data-testid="promptable"]:has(.ipc-rating-display-with-poster__image)
imdb.com#$?#body:has(div[data-testid="promptable"] .ipc-rating-display-with-poster__image) { overflow: auto !important; }
!
! Special rules for AdGuard websites' test pages. The only purpose of these
! rules is to make test pages work so that users could verify that AdGuard
! is properly working.
!
!+ NOT_OPTIMIZED
adguard.info,adguard.com,adguard.app##.hello_from_adguard_experimental
! Detect of using AdGuard products
!+ NOT_PLATFORM(windows, mac, android, ios, ext_ublock) NOT_OPTIMIZED
adguard.info,adguard.com,adguard.app##.hello_from_adguard_ext
!
!-------------------------------------------------------------------!
!------- Experimental rules for Mobile ads filter-------------------!
!-------------------------------------------------------------------!
!
! Mobile advertising networks known rotator domains
! Used to show ads in mobile apps and websites
!
!-------------------------------------------------------------------!
!---------------------- Dangerous rules ----------------------------!
!-------------------------------------------------------------------!
!#######################################################
!######### The list of dangerous rules #################
!#######################################################
!
!################## For advertisement ##################
!
! https://github.com/AdguardTeam/AdguardFilters/issues/64754
!
!################## For tracking ##################
||uim.tifbs.net/js/2048.js