{"version":3,"sources":["../../../dev/j/v3/avast.js"],"names":["loadEmailForm","captchaText","locale","avastGlobals","web","fetch","domain","headers","Accept","X-Requested-With","then","response","text","html","formModal","document","querySelector","innerHTML","classList","add","setAttribute","getAttribute","undefined","initAvastForm","err","test","remove","submitForm","data","email","$","errors","captcha","avm","toString","Object","prototype","modules","define","namespace","value","space","spaces","split","spacesLength","length","spacesLast","spacesRoot","i","call","Error","require","required","console","warn","window","cash","once","init","appendPbld","this","regex","RegExp","results","exec","location","href","param","each","indexOf","input","find","cartLink","val","on","setTooltipOnButton","button","title","texts","chromeUnsupportedOS","version","detect","os","isWindows","querySelectorAll","forEach","addEventListener","e","detail","element","BSN","Tooltip","error","sdl","push","system","type","name","message","event","cj","getURLParameter","ref","toUpperCase","setCookie","decodeURI","search","path","age","exp","p","d","encodeURIComponent","Date","setTime","getTime","toUTCString","cookie","selectorButton","Emitter","obj","mixin","key","fn","_callbacks","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","emit","args","slice","len","listeners","hasListeners","checkWidth","width","footer","contains","first","footerListControls","trigger","toggle","documentElement","clientWidth","options","decimal","translate","number","root","isNaN","ds","numberDecimalSeparator","ts","numberThousandSeparator","number_format","numberOfDecimals","decimalSeparator","thousandSeparator","symbol","navigator","cookieEnabled","sessionStorage","localStorage","setItem","removeItem","mqMarker","selectors","sels","prefixRe","mqMarkerPrefix","match","els","nList","list","Array","el","cssClasses","detectedBrowser","browser","toLowerCase","detectedVersion","notSupportedBrowser","$body","isInternetExplorer","addClass","routes","self","w","$window","hashChangeListener","hash","substring","navigate","set","urlObject","hasOwnProperty","urlString","lang","setDate","getDate","toGMTString","slider","updateCounter","info","totalSlides","items","Math","ceil","slideCount","activeSlide","displayIndex","slideCounterEl","getInfo","container","sliderEl","events","getItem","decodeURIComponent","n","clear","$faq_holder","$breadcrumblist_holder","jsonInjection","contextType","content","createElement","jsonIntro","@context","@type","json","assign","JSON","stringify","appendChild","ready","contentJson","innerText","replace","acceptedAnswer","$crumbs","$crumbLink","crumbUrl","attr","crumbName","trim","URL","baseURI","position","item","dataLayer","trackEvents","chromeOffer","view","evt","eventCategory","eventAction","eventLabel","click","onPageLoad","downloadPopup","virtualPageURL","parentPage","page","close","passwordCheck","called","methods","track","evtName","evtObj","callback","handler","urlQuery","urlParameters","urlParametersLength","urlParameter","addValue","String","getData","getEncodedData","base64encode","t","v","arr","constructor","o1","o2","o3","h1","h2","h3","h4","bits","b64","ac","enc","tmp_arr","charCodeAt","charAt","join","r","waypointElement","offsetTop","offsetBottom","waypoint","Element","elTop","getBoundingClientRect","top","elBottom","bottom","elHeight","height","viewportHeight","clientHeight","urlBag","aswparam","inited","cartLinks","CX","urls","paramPattern","paramRegex","appendBeforeRegex","SL","globalCartLinks","cookies","p_pro","p_vbd","p_hid","testCookieFail","urlParams","p_glic","values","cookieFail","paramsFromUrl","pathname","ppc","updateAswparamPlaceholderLinks","paramName","cookieName","getClientInfo","inArray","urlParamName","urlParamValue","updateLinks","link","linkDecorator","getCookieValue","parts","pop","shift","urlBagEncodedData","provider","providerDef","providerUrl","client","aswparamValue","newLink","not","elDataAswparamPlaceholder","escape","setAswparamOnButton","buylinks","updateLink","aswObj","partnerid","programtype","clickID","trafficSource","btoa","unserialize","qs","valueTest","downloadURL","downloadQueryString","brcmpgid","URLSearchParams","source_tag","tracker","waypoints","hasBanner","isChrome","isAsb","isAvast","product","isMsBuild","show","trackClick","url","pExt","pExtVal","substr","isCookieEnabled","storageFactory","keys","cookieStorage","expires","secure","regExp","keysArray","keysArrayLength","regexS","providers","params","couponParam","cookieExpirationTime","setMonth","getMonth","hostnameSplitted","hostname","userPlatform","platform","trackingObj","pathFromRoot","popups","buttons","popupEl","setPopup","isCrosssellBtnCorrect","csrossSellModalElement","getElementById","bsnModal","Modal","modalButtons","closest","preventDefault","stopPropagation","btn","hide","isOopsBtnCorrect","downloadPlatform","modal","styleReset","x","style","display","setTimeout","disableDtyp","isDownloadBtnCorrect","downloadId","isRuExternalDownload","isPlExternalDownload","isAndroid","isIOS","searchParams","popup","hasAttribute","closeButton","progress","note","fallback","anchor","body","focus","history","pushState","state","closeHandler","activeElement","openBtn","closeBtn","fallbackLink","focusedElement","closeByEnter","keyCode","closePopup","keypress","dtypExists","selector","querystring","newValue","query","paramArr","$els","result","$el","prepend","hrefParams","pathName","fileName","unserializedUrl","cmpgContent","cmpg_for_af","detected","mobileTracking","avast","disableLanguageSelector","navSel","isDesktop","getComputedStyle","getPropertyValue","adjustDesktopHeaderHeight","$navElement","$headerElement","css","toFixed","clearFirstMenuClasses","config","firstMenu","removeClass","firstMenuClasses","clearSecondMenuClasses","secondMenu","secondMenuClasses","expandSecondLevel","classes","updateNavigation","openSecondMenu","$element","cachedSecondMenu","isSecondMenu","clickedSecondMenu","removeSpaces","defInnerLinks","parent","menuLinks","isHidden","thirdMenuLinks","openedThirdMenu","removeExpanded","menuOpened","menuOpenedClass","closeRegionModal","$langSelector","closeSubMenus","languageSelectorTrigger","$style","overflow","parentNode","toggleClass","str","strSplitted","map","desktopNav","navInit","preSelectLevels","subcategories","thirdMenuItems","elementFromPoint","clientX","clientY","parents","parentElement","previousElementSibling","$navigation","which","menuElement","openedSubMenu","children","setFocus","$secondMenuBlogs","target","matches","$languageSelectorButtons","from","avast_regions","detectLink","pageNotFound","selfHref","selfHrefParams","getParamsFromHref","isDevEnv","currentPage","isEmptyObject","currentPageParams","detectParent","$foundLinkElement","$parent","$parentWithData","parentClasses","availableClasses","linkFoundInNavigation","separator","$navigationSecondMenuLinks","ulocale","avastGlobalsAvailable","$pressCenter","$blogSecondMenu","$blogMenu","contentGroup","setDesktopNav","mqDesktop","setMqMarkers","setMobileNav","mobileNav","$toggleMenu","hintButtons","hasClass","$windowHeight","innerHeight","$cmpMessageBar","$cmpMessageBar__height","$cmpHeader","$cmpHeaderNavigation","$cmpHeaderNavigation__maxHeight","$target","is","cachedFirstMenu","clickedFirstMenu","mqMobile","$languageSelector","firstMenuItems","itemData","itemClass","secondMenuItems","matchMedia","addOpenClass","area","getUrlParameter","sParam","sParameterName","sPageURL","sURLVariables","getExpirationTime","hours","now","domainName","tables","influencerChanged","table","select","o","selectedIndex","removeAttribute","selectedOption","option","cells","subNames","selected","cell","dataset","influencerBgColor","subName","influencer","forInfluencer","affectedSetIndex","setIndex","selectedOptionIndex","optionIndex","parentTable","influencerCell","thisInfluencer","headerRow","headlineElHeight","$cartLink","cmpgMarker","campaignMarker","minutes","isCampaignMarker","updatedLink","campainMarker","CMPGNMARKER","cm","SMBCookeValue","getCampaignMarkerCookie","cookieValue","replaceCookieString","re","decorateCartLink","currentTarget","updateDataAttr","setCampaignMarkerCookie","nodeList","nodes","HTMLElement","SMBRegExp","links","dataAttr","cts","COOKIE_NAME","COOKIE_REGEX_MATCH_GROUP","PARAM_NAME","TARGET_EL","TARGET_MATCH_ELS","contentEl","getCookieGroupValue","cookieGroup","queryString","setCartTrackingConsent","CookieBar","$footer","footerInitialPadding","footerInitialMargin","mediaQuery","mobileScreen","cookieDom","cookieCloseDom","today","expire","log","initialise","opts","legacy","legacySettings","boot","exportLegacy","disabledModules","module","disableAppendPbld","disableAswparam","disableCj","disableShowCouponCode","disableSetLanguage","disableCookieConsent","product_list","moduleName","req","RootPath","responsive","rootPath","getOS","getWinVersion","src","skipped","getConfig"],"mappings":"AAwQA,QAASA,eAAcC,GACtB,GAAIC,GAAS,IAAMC,aAAaC,IAAIF,MAGpC,QAAQC,aAAaC,IAAIF,QACxB,IAAK,QAIL,IAAK,QAIL,IAAK,QAIL,IAAK,QACJA,EAAS,GAQXG,MAAM,WAAaF,aAAaC,IAAIE,OAASJ,EAAS,+BAAgCK,SACrFC,OAAU,mBACRC,mBAAoB,oBACnBC,KAAK,SAAUC,GAClB,MAAOA,GAASC,SACdF,KAAK,SAAUG,GAEjB,GAAIC,GAAYC,SAASC,cAAc,6BAGvCF,GAAUG,UAAYJ,EAGtBC,EAAUE,cAAc,eAAeE,UAAUC,IAAI,UAErDL,EAAUE,cAAc,iBAAiBE,UAAUC,IAAI,UAEnDL,EAAUE,cAAc,iBAC3BF,EAAUE,cAAc,gBAAgBI,aAAa,cAAeN,EAAUE,cAAc,cAAcK,aAAa,cAEpHpB,IAAgBqB,WACnBR,EAAUE,cAAc,gBAAgBI,aAAa,UAAWnB,GAGjEsB,kBAxBDlB,SAyBS,SAAUmB,GAIf,UAAUC,KAAKD,KACjBT,SAASC,cAAc,6BAA6BE,UAAUC,IAAI,UAClEJ,SAASC,cAAc,8BAA8BE,UAAUC,IAAI,UACnEJ,SAASC,cAAc,gCAAgCE,UAAUQ,OAAO,aAM3E,QAASC,YAAWC,GAGhBA,EAAKC,QACPd,SAASC,cAAc,6BAA6BE,UAAUC,IAAI,UAClEJ,SAASC,cAAc,8BAA8BE,UAAUQ,OAAO,UACtEX,SAASC,cAAc,gCAAgCE,UAAUC,IAAI,UACrEW,EAAE,sBAAsBjB,KAAKe,EAAKC,QAIhCD,EAAKG,SAEJH,EAAKG,OAAOC,QAEdhC,cAAc4B,EAAKG,OAAOC,UAG1BjB,SAASC,cAAc,6BAA6BE,UAAUC,IAAI,UAClEJ,SAASC,cAAc,8BAA8BE,UAAUC,IAAI,UACnEJ,SAASC,cAAc,gCAAgCE,UAAUQ,OAAO,YArV3E,GAAIO,KAAM,WACT,YACA,IAAIC,GAAWC,OAAOC,UAAUF,SAC/BG,IACD,QAQCC,OAAQ,SAASC,EAAWC,GAC3B,GAAyB,gBAAdD,QAA2C,KAAVC,EAAuB,CAMlE,IAAK,GADJC,GAJGC,EAASH,EAAUI,MAAM,KAC5BC,EAAeF,EAAOG,OACtBC,EAAaF,EAAe,EAC5BG,EAAaV,EAELW,EAAI,EAAGA,EAAIJ,EAAcI,IAEjC,GADAP,EAAQC,EAAOM,GACXA,EAAIF,IAAoD,oBAArCZ,EAASe,KAAKF,EAAWN,KAAuD,OAAtBM,EAAWN,MAAqBA,IAASM,KACzHA,EAAaA,EAAWN,GAASM,EAAWN,WACtC,CAAA,GAAIO,IAAMF,GAAgBL,IAASM,GAGzC,KAAM,IAAIG,OAAM,UAAYX,EAAY,kBAFxCQ,GAAaA,EAAWN,GAASD,EAKnC,MAAOO,GAEP,KAAM,IAAIG,OAAM,6BAUlBC,QAAS,SAASZ,EAAWa,GAE5B,GADAA,MAA+B,KAAbA,GAAkCA,EAC3B,gBAAdb,IAA8C,iBAAba,GAAwB,CAKnE,IAAK,GADJX,GAHGC,EAASH,EAAUI,MAAM,KAC5BC,EAAeF,EAAOG,OACtBE,EAAaV,EAELW,EAAI,EAAGA,EAAIJ,EAAcI,IAAK,CAEtC,GADAP,EAAQC,EAAOM,KACmB,oBAA9Bd,EAASe,KAAKF,IAAoD,OAAfA,GAAuBN,IAASM,IAEhF,CAAA,GAAIK,EACV,KAAM,IAAIF,OAAM,UAAYX,EAAY,kBAKxC,aAHuB,gBAAZc,UAAgD,kBAAjBA,SAAQC,MACjDD,QAAQC,KAAK,UAAYf,EAAY,oBALtCQ,EAAaA,EAAWN,GAU1B,MAAOM,GAEP,KAAM,IAAIG,OAAM,kCASpB,WACoB,gBAARjB,MAA0C,kBAAfA,KAAIK,QAAgD,kBAAhBiB,QAAOC,OAChFvB,IAAIK,OAAO,SAAUiB,OAAOC,MAC5BvB,IAAIK,OAAO,OAAQiB,OAAOC,UAW5BvB,IAAIK,OAAO,uBAAwB,WAC/B,YAEA,IAAIR,GAAIG,IAAIkB,QAAQ,SAEpB,QACIM,KAAM,EACNC,KAAM,WACF,GAAIC,GAAaC,KAEbC,EAAQ,GAAIC,QADP,uBACkB,KACvBC,EAAUF,EAAMG,KAAKT,OAAOU,SAASC,MACrCC,EAAQ,EAETJ,KAECjC,EAAE,KAAKsC,KAAK,YACqC,GAAzCR,KAAKM,KAAKG,QAAQ,qBAA4D,GAAhCT,KAAKM,KAAKG,QAAQ,YAChEF,EAAUP,KAAKM,KAAKG,QAAQ,MAAQ,EAAK,IAAMN,EAAQ,GAAK,IAAMA,EAAQ,GAC1EH,KAAKM,MAAQC,KAIrBrC,EAAE,UAAW,cAAcsC,KAAK,WAC5B,GAAIE,GAAQxC,EAAE8B,MAAMW,KAAK,qBACrBC,EAAWF,EAAMG,OACuB,GAAxCD,EAASH,QAAQ,qBAA2D,GAA/BG,EAASH,QAAQ,YAC9DF,EAAUK,EAASH,QAAQ,MAAQ,EAAK,IAAMN,EAAQ,GAAK,IAAMA,EAAQ,GACzEO,EAAMG,IAAID,EAAWL,OAK5BP,KAAKH,OACN3B,EAAEf,UAAU2D,GAAG,6CAA8C,WAAYf,EAAWD,SACpFE,KAAKH,KAAO,SAS5B,WACI,YA+BQ,SAASkB,GAAmBC,GACxBA,EAAOxD,aAAa,cAAe,WACnCwD,EAAOC,MAAQ1E,aAAa2E,MAAMC,oBA/B9C,IACI,GAAIC,GAAU7E,aAAa8E,OAAOC,GAAGF,OAGrC,IAAG7E,aAAa8E,OAAOC,GAAGC,YAA0B,MAAZH,GAA+B,MAAZA,GAA+B,QAAZA,GAAoB,CAChFjE,SAASqE,iBAAiB,+BAGhCC,QAAQ,SAAST,GACrBD,EAAmBC,KAIvBrB,OAAO+B,iBAAiB,oBAAqB,SAASC,GAClDA,EAAEC,OAAOC,QAAQL,iBAAiB,kDAAkDC,QAAQ,SAAST,GACjGD,EAAmBC,GACnB,GAAIc,KAAIC,QAAQf,OAKxBrB,OAAO+B,iBAAiB,cAAe,SAASC,GAC5CA,EAAEC,OAAOC,QAAQL,iBAAiB,kDAAkDC,QAAQ,SAAST,GACjGD,EAAmBC,GACnB,GAAIc,KAAIC,QAAQf,QAY9B,MAAOgB,GACLvC,QAAQuC,MAAMA,GACdC,IAAIC,MACAC,QACIH,OACII,KAAMJ,EAAMK,KACZC,QAASN,EAAMM,UAGvBC,MAAO,qBAgBnBlE,IAAIK,OAAO,eAAgB,WAqC3B,OAnCQoB,KAAM,WACF,GAAI0C,GAAKxC,KACLO,EAAQiC,EAAGC,gBAAgB,OAC3BC,EAAwB,gBAAVnC,GAAsBA,EAAMoC,cAAgB,IAM3D,QAARD,GAAwB,OAARA,GACPF,EAAGI,UANY,SAMYF,EAJlB,aACF,IAFD,SAQdD,gBAAiB,SAASJ,GACtB,MAAOQ,YAAW3C,OAAOmC,EAAO,eAAoBjC,KAAKC,SAASyC,UAAU,CAAC,OAAO,KAExFF,UAAW,SAASP,EAAKzD,EAAMlC,EAAOqG,EAAKC,GACvC,GAAIC,GAAM,GAAGC,EAAI,UAAUC,EAAI,GAC3BtC,EAAM,EAAUuC,mBAAmBxE,GAAS,EAC5CoE,KACAG,EAAI,GAAIE,MACRF,EAAEG,QAAQH,EAAEI,UAAe,IAAJP,GACvBC,EAAM,YAAYE,EAAEK,cAAc,YAAaR,GAEhDD,IACCG,EAAI,SAASH,GAEdrG,IACCyG,EAAI,WAAWzG,GAGnBS,SAASsG,OAASpB,EAAK,IAAIxB,EAAIoC,EAAIE,EAAED,EAAE,UAcnD,WAEC,GAAI/F,SAASC,cAAc,cAC1B,GAAqB,kBAAVX,OAAsB,CAChC,GAAIiH,GAAiBvG,SAASC,cAAc,aAE5CsG,GAAehC,iBAAiB,QAAS,WACxCtF,sBAIDe,UAASC,cAAc,cAAcE,UAAUC,IAAI,aAsGtDc,IAAIK,OAAO,sBAAuB,WACjC,YAyCA,SAASiF,GAAQC,GACf,GAAIA,EAAK,MAAOC,GAAMD,GAWxB,QAASC,GAAMD,GACb,IAAK,GAAIE,KAAOH,GAAQnF,UACzBoF,EAAIE,GAAOH,EAAQnF,UAAUsF,EAE5B,OAAOF,GAqIT,MAzHAD,GAAQnF,UAAUsC,GAClB6C,EAAQnF,UAAUkD,iBAAmB,SAASa,EAAOwB,GAInD,MAHA/D,MAAKgE,WAAahE,KAAKgE,gBACtBhE,KAAKgE,WAAW,IAAMzB,GAASvC,KAAKgE,WAAW,IAAMzB,QACtDL,KAAK6B,GACE/D,MAaT2D,EAAQnF,UAAUqB,KAAO,SAAS0C,EAAOwB,GACvC,QAASjD,KACVd,KAAKiE,IAAI1B,EAAOzB,GAChBiD,EAAGG,MAAMlE,KAAMmE,WAKd,MAFArD,GAAGiD,GAAKA,EACR/D,KAAKc,GAAGyB,EAAOzB,GACRd,MAaT2D,EAAQnF,UAAUyF,IAClBN,EAAQnF,UAAU4F,eAClBT,EAAQnF,UAAU6F,mBAClBV,EAAQnF,UAAU8F,oBAAsB,SAAS/B,EAAOwB,GAItD,GAHA/D,KAAKgE,WAAahE,KAAKgE,eAGnB,GAAKG,UAAUlF,OAEpB,MADAe,MAAKgE,cACEhE,IAIN,IAAIuE,GAAYvE,KAAKgE,WAAW,IAAMzB,EACtC,KAAKgC,EAAW,MAAOvE,KAGvB,IAAI,GAAKmE,UAAUlF,OAEpB,aADOe,MAAKgE,WAAW,IAAMzB,GACtBvC,IAKN,KAAK,GADDwE,GACKpF,EAAI,EAAGA,EAAImF,EAAUtF,OAAQG,IAEvC,IADAoF,EAAKD,EAAUnF,MACJ2E,GAAMS,EAAGT,KAAOA,EAAI,CAC7BQ,EAAUE,OAAOrF,EAAG,EACpB,OAGD,MAAOY,OAWT2D,EAAQnF,UAAUkG,KAAO,SAASnC,GAChCvC,KAAKgE,WAAahE,KAAKgE,cACvB,IAAIW,MAAUC,MAAMvF,KAAK8E,UAAW,GACnCI,EAAYvE,KAAKgE,WAAW,IAAMzB,EAEnC,IAAIgC,EAAW,CAChBA,EAAYA,EAAUK,MAAM,EAC5B,KAAK,GAAIxF,GAAI,EAAGyF,EAAMN,EAAUtF,OAAQG,EAAIyF,IAAOzF,EACjDmF,EAAUnF,GAAG8E,MAAMlE,KAAM2E,GAI1B,MAAO3E,OAWT2D,EAAQnF,UAAUsG,UAAY,SAASvC,GAErC,MADAvC,MAAKgE,WAAahE,KAAKgE,eAChBhE,KAAKgE,WAAW,IAAMzB,QAW/BoB,EAAQnF,UAAUuG,aAAe,SAASxC,GACxC,QAAUvC,KAAK8E,UAAUvC,GAAOtD,QAG3B0E,MAQR,WACC,YAkBC,SAASqB,GAAWC,GAEfA,EAAM,MAAQC,EAAO5H,UAAU6H,SAAS,eAE3CD,EAAO5H,UAAUC,IAAI,cAGjB6H,IACHA,GAAQ,EAERC,EAAmB5D,QAAQ,SAAS6D,GACnCA,EAAQ5D,iBAAiB,QAAS,SAASC,GAE1C3B,KAAK1C,UAAUiI,OAAO,qBAKfN,GAAO,KAAOC,EAAO5H,UAAU6H,SAAS,eAElDD,EAAO5H,UAAUQ,OAAO,cAnC3B,GAAIoH,GAAS/H,SAASC,cAAc,kCACnCiI,EAAqBlI,SAASqE,iBAAiB,oBAC/C4D,GAAQ,CAGLF,IAAUG,EAAmBpG,OAAO,IAEvC+F,EAAW7H,SAASqI,gBAAgBC,aAGpC9F,OAAO+B,iBAAiB,SAAU,WACjCsD,EAAW7H,SAASqI,gBAAgBC,mBAsCvCpH,IAAIK,OAAO,sBAAuB,WAC9B,YACA,IAAIR,GAAIG,IAAIkB,QAAQ,SACpB,QACImG,SACIC,QAAS,GAEbC,UAAW,SAAUC,EAAQF,GACzB,GAAIG,GAAO9F,KACPzD,EAAeoD,OAAOpD,YAO1B,IALIoJ,IAAYjI,UACZsC,KAAK0F,QAAQC,QAAUA,EAEvB3F,KAAK0F,QAAQC,QAAU,GAEtBI,MAAMF,IAAWtJ,GAA4C,gBAArBA,GAAaC,IAAkB,CACxE,GAAIwJ,GAAKzJ,EAAaC,IAAIyJ,uBACtBC,EAAK3J,EAAaC,IAAI2J,uBAC1B,IAAIH,GAAMA,EAAI,CAUV,MATU9H,KAAIkI,cACVP,GAEIQ,iBAAkBP,EAAKJ,QAAQC,QAC/BW,iBAAkBN,EAClBO,kBAAmBL,EACnBM,OAAQ,KAKhB,MAAOX,GAGX,MAAOA,SAWvBxH,IAAIK,OAAO,gCAAiC,WAC3C,YACA,IAAI+H,UAAUC,cACb,OAAO,CAEP,IAAI5C,GAAM,iBAEV,OADA3G,UAASsG,OAASK,EAAM,MACqB,IAAzC3G,SAASsG,OAAOhD,QAAQqD,EAAM,QACjC3G,SAASsG,OAASK,EAAM,4CACjB,OAaVzF,IAAIK,OAAO,iCAAkC,WAC5C,YACA,KACC,GAA8B,gBAAnBiI,iBAA+BA,gBAA0C,gBAAjBC,eAA6BA,aAAc,CAC7G,GAAI9C,GAAM,kBAKV,OAJA6C,gBAAeE,QAAQ/C,EAAK,KAC5B6C,eAAeG,WAAWhD,GAC1B8C,aAAaC,QAAQ/C,EAAK,KAC1B8C,aAAaE,WAAWhD,IACjB,GAEP,MAAO9B,GACe,gBAAZvC,UAAwBA,SAAmC,kBAAjBA,SAAQC,MAC5DD,QAAQC,KAAKsC,GAGf,OAAO,MAsER3D,IAAIK,OAAO,qBAAsB,SAASqI,EAAUC,GAEnD,GAAIC,GAAOD,GAAa,OACvBE,EAAW,QACXC,EAAiBJ,EAASK,MAAMF,GAChCG,KACAC,EAAQnK,SAASqE,iBAAiByF,GAClCM,EAAOC,MAAMhJ,UAAUoG,MAAMvF,KAAKiI,EAEnC,OAAwB,gBAAbP,IAAmD,IAA1BI,EAAelI,OAE3CoI,GAGRE,EAAK9F,QAAQ,SAASgG,GACrB,GAAIC,GAAaD,EAAGnK,SAIpB,IAAIoK,EAAWzI,QAAUkI,EACxB,IAAK,GAAI/H,GAAI,EAAGsI,EAAWzI,OAASG,EAAGA,IAClCsI,EAAWtI,GAAGgI,MAAMF,GAAU,KAAOC,EAAe,IAEvDM,EAAGnK,UAAUQ,OAAO4J,EAAWtI,GAK9B2H,IACHU,EAAGnK,UAAUC,IAAIwJ,GAGlBM,EAAInF,KAAKuF,KAGHJ,KAWRhJ,IAAIK,OAAO,gCAAiC,WAC3C,YACA,IAAIR,GAAIG,IAAIkB,QAAQ,UACnBoI,EAAkBpL,aAAa8E,OAAOuG,QAAQvF,KAAKwF,cACnDC,EAAkBvL,aAAa8E,OAAOuG,QAAQxG,QAAQyG,cACtDE,EAAsBJ,EAAkBG,EAAgB/I,MAAM,KAAK,GACnEiJ,EAAQ9J,EAAE,SAEP3B,aAAa8E,OAAOuG,QAAQK,oBAA8C,sBAAxBF,GAAuE,sBAAxBA,IACpGC,EAAME,SAAS,2BAYjB7J,IAAIK,OAAO,mBAAoB,WAC9B,YACA,IACCyJ,GACAC,EAFGlK,EAAIG,IAAIkB,QAAQ,UAGnB8I,EAAI1I,OACJ2I,EAAUpK,EAAEyB,OAEb,QAKC4I,mBAAoB,WACnBH,EAAOpI,KACPsI,EAAQxH,GAAG,aAAc,WACxBsH,EAAKhI,KAAKiI,EAAEhI,SAASmI,KAAKC,UAAU,OAOtCC,SAAU,SAAU3F,GACfsF,EAAEhI,SAASmI,KAAKC,UAAU,KAAO1F,EACpCsF,EAAEhI,SAASmI,KAAOzF,EAElB/C,KAAKI,KAAK2C,IAOZ3C,KAAM,SAAU2C,GACXoF,EAAOpF,IACVoF,EAAOpF,MAYT4F,IAAK,SAAU5F,GAKd,GAJAoF,EAASpF,EACTqF,EAAOpI,KACPoI,EAAKG,qBACLH,EAAKM,SAASL,EAAEhI,SAASmI,KAAKC,UAAU,IACpB,gBAAT1F,GACV,MAAOoF,EAEP,MAAM,IAAI7I,OAAM,iDAcpBjB,IAAIK,OAAO,sBAAuB,SAASkK,GAC1C,YACA,IAAIC,GAAiBtK,OAAOC,UAAUqK,cACtC,IAAyB,gBAAdD,IAA0BA,EAAW,CAC/C,GAAIE,GAAY,EAChB,KAAK,GAAIhF,KAAO8E,GACXC,EAAexJ,KAAKuJ,EAAW9E,KAC9BgF,EAAU7J,SACb6J,GAAa,KAEdA,GAAa1F,mBAAmBU,GAAO,IAAMV,mBAAmBwF,EAAU9E,IAG5E,OAAOgF,GAEP,KAAM,IAAIxJ,OAAM,qDAUlBjB,IAAIK,OAAO,wBAAyB,SAAUqK,GAC1C,YAEA,IAAI5F,GAAE,GAAIE,KACVF,GAAE6F,QAAQ7F,EAAE8F,UAAY,KACxB9L,SAASsG,OAAS,kBAAkBsF,EAAK,mBAAqB5F,EAAE+F,gBASpE7K,IAAIK,OAAO,yBAA0B,SAAUyK,GAC9C,YAOA,SAASC,GAAcC,GAGtB,GAAIC,GAAcD,EAAKE,MAAQ,EAAIC,KAAKC,KAAKJ,EAAKK,WAAaL,EAAKE,OAASF,EAAKK,WACjFC,EAAcN,EAAKE,MAAQ,EAAIC,KAAKC,KAAKJ,EAAKO,aAAeP,EAAKE,OAASF,EAAKO,YAEjFC,GAAexM,UAAYsM,EAAc,IAAML,EAXhD,GAAID,GAAOF,EAAOW,UACjBzH,EAAOgH,EAAKU,UAAUzM,UAAU,GAChC0M,EAAW7M,SAASC,cAAc,cAAgBiF,EAAO,KACzDwH,EAAiBG,EAAS5M,cAAc,kBAYzCgM,GAAcC,GAGdF,EAAOc,OAAOnJ,GAAG,kBAAmBsI,GAGpCD,EAAOc,OAAOnJ,GAAG,mBAAoBsI,KAUtC/K,IAAIK,OAAO,+BAAgC,WAC1C,YACA,IAAImK,GAAiBtK,OAAOC,UAAUqK,eACrC7K,IACD,QACCiB,OAAQ,EAOR4H,QAAS,SAAS/C,EAAKlF,GACtB,OAAmB,KAARkF,OAAwC,KAAVlF,EAQxC,KAAM,IAAIU,OAAM,mEAPhBwE,GAAMV,mBAAmBU,GACzBlF,EAAQwE,mBAAmBxE,GACtBiK,EAAexJ,KAAKrB,EAAM8F,IAC9B9D,KAAKf,SAENjB,EAAK8F,GAAOlF,GAWdsL,QAAS,SAASpG,GACjB,OAAmB,KAARA,EAEV,MADAA,GAAMV,mBAAmBU,GACG,mBAAd9F,GAAK8F,GAAuBqG,mBAAmBnM,EAAK8F,IAAQ,IAE1E,MAAM,IAAIxE,OAAM,qEAQlBwH,WAAY,SAAShD,GACpB,OAAmB,KAARA,EAOV,KAAM,IAAIxE,OAAM,sEANhBwE,GAAMV,mBAAmBU,GACrB+E,EAAexJ,KAAKrB,EAAM8F,WACtB9F,GAAK8F,GACZ9D,KAAKf,WAYR6E,IAAK,SAASsG,GACb,GAAiB,gBAANA,GAAgB,CAC1B,GAAIhL,GAAI,CACR,KAAK,GAAI0E,KAAO9F,GACf,GAAI6K,EAAexJ,KAAKrB,EAAM8F,GAAM,CACnC,GAAI1E,IAAMgL,EACT,MAAOD,oBAAmBrG,EAE1B1E,KAIH,MAAO,MAEP,KAAM,IAAIE,OAAM,iEAOlB+K,MAAO,WACNrM,KACAgC,KAAKf,OAAS,MAcjBZ,IAAIK,OAAO,2BAA4B,WACtC,YACA,IAAIR,GAAIG,IAAIkB,QAAQ,QACnB+K,EAAcpM,EAAE,gCAChBqM,EAAyBrM,EAAE,2CAE3BsM,EAAgB,SAASC,EAAaC,GACrC,GAAIjD,GAAKtK,SAASwN,cAAc,UAC5BC,GACFC,WAAY,oBACZC,QAASL,GAEVM,EAAOxM,OAAOyM,OAAOJ,EAAWF,EAEjCjD,GAAGrF,KAAO,sBACVqF,EAAGzK,KAAOiO,KAAKC,UAAUH,GACzB5N,SAASC,cAAc,QAAQ+N,YAAY1D,GAG7CvJ,GAAEf,UAAUiO,MAAM,WAGjB,GAAId,EAAYrL,OAAS,EAAG,CAC3B,GACCyL,MACAW,IAEDf,GAAY9J,KAAK,WACHtC,EAAE8B,MAAMW,KAAK,mBAEnBH,KAAK,WACX6K,EAAYnJ,MACX4I,QAAS,WACTzI,KAAQrC,KAAK5C,cAAc,qBAAqBkO,UAAUC,QAAQ,MAAM,IAAIA,QAAQ,MAAM,IAC1FC,gBACCV,QAAS,SACT9N,KAAQgD,KAAK5C,cAAc,mBAAmBC,UAAUkO,QAAQ,MAAM,IAAIA,QAAQ,MAAM,SAI3Fb,EAAoB,WAAIW,IAGzBb,EApBkB,UAoBSE,GAIxBH,EAAuBtL,OAAS,GACnCsL,EAAuB/J,KAAK,WAC3B,GACCiL,GAAUvN,EAAE8B,MAAMW,KAAK,oBACvB+J,KACAW,IAEDI,GAAQjL,KAAK,SAASpB,GACrB,GAAIsM,GAAaxN,EAAE8B,MAAMW,KAAK,sBAC7BgL,EAAWD,EAAWE,KAAK,QAC3BC,EAAY3N,EAAE8B,MAAMhD,OAAO8O,MAExBnM,QAAOxC,SAAS4O,KAAOpM,OAAOxC,SAAS6O,UAC1CL,EAAWA,EAAW,GAAII,KAAIJ,EAAUxO,SAAS6O,SAAS1L,KAAO5C,WAGlE2N,EAAYnJ,MACX4I,QAAS,WACTmB,SAAY7M,EAAE,EACdiD,KAAQwJ,EACRK,KAAQP,MAGVjB,EAAyB,gBAAIW,EAE7Bb,EAvBkB,iBAuBSE,SAc/BrM,IAAIK,OAAO,oBAAqB,WAC/B,YAEA,IAAIR,GAAIG,IAAIkB,QAAQ,SAEpBI,QAAOwM,UAAYxM,OAAOwM,aAQ1B,IAAIC,IACHC,aAKCC,KAAM,SAASC,GAEd,MAAO5M,QAAOwM,UAAUjK,MACvBK,MAAU,cACViK,cAAkB,SAClBC,YAAgB,eAChBC,WAAe,UAQjBC,MAAO,SAASJ,GAEf,MAAO5M,QAAOwM,UAAUjK,MACvBK,MAAU,cACViK,cAAkB,SAClBC,YAAgB,eAChBC,WAAe,WAQjBE,WAAY,SAASL,GAEpB,MAAO5M,QAAOwM,UAAUjK,MACvBK,MAAU,cACViK,cAAkB,SAClBC,YAAgB,eAChBC,WAAe,uBAIlBG,eACCP,KAAM,SAAS1I,GACd,MAAOjE,QAAOwM,UAAUjK,MACvBK,MAAS,qBACTuK,eAAkB,IAAMlJ,EAAItH,OAAS,oBACrCyQ,WAAcnJ,EAAIoJ,QAGpBC,MAAO,SAASrJ,GACf,MAAOjE,QAAOwM,UAAUjK,MACvBK,MAAS,qBACTuK,eAAkB,IAAMlJ,EAAItH,OAAS,oBACrCyQ,WAAcnJ,EAAIoJ,SASrBE,cAAkB,WACjB,GAAIC,GAAS,CAEb,OAAO,UAASZ,GACf,IAAIY,EAGH,MAFAA,GAAS,EAEFxN,OAAOwM,UAAUjK,MACvBK,MAAU,sBAQfrE,GAAEf,UAAU2D,GAAG,sBAAuB,WACrCsM,EAAQC,MAAM,kBAQf,IAAID,IAOHC,MAAO,SAASC,EAASC,EAAQC,GAChC,GAGC3O,GAHG4O,EAAUD,GAAYpB,EACzBtN,EAA6B,gBAAZwO,GAAwBA,EAAQvO,MAAM,KAAO,KAC9D4F,EAAO4I,GAAUA,MAEjBjP,EAAWC,OAAOC,UAAUF,QAG7B,KAAgC,sBAA3BA,EAASe,KAAKoO,IAA+D,oBAA3BnP,EAASe,KAAKoO,KAAmC3O,GAAUA,EAAOG,OAAS,EACjI,IAAK,GAAIG,GAAI,EAAGA,EAAIN,EAAOG,OAAQG,IAClCP,EAAQC,EAAOM,GACC,OAAZqO,GAAoB5O,IAAS4O,KAChCA,EAAUA,EAAQ5O,GAIa,sBAA3BP,EAASe,KAAKoO,IAAoCrO,IAAON,EAAOG,OAAS,IAC5EwO,EAAU,MAMd,IAAuB,kBAAZA,GACV,MAAOA,GAAQvJ,MAAMlE,KAAM2E,IAO9B,OAAOyI,OAWR/O,IAAIK,OAAO,wBAAyB,SAASoK,GAC5C,YAEA,IAAyB,iBADzBA,MAAiC,KAAdA,EAA4BzI,SAASyC,OAASgG,GAC9B,CAClC,GAAIF,MACH8E,EAAW5E,EAAUyC,QAAQ,YAAa,GAC3C,IAAImC,EAASzO,OAIZ,IAAK,GAHD0O,GAAgBD,EAAS3O,MAAM,KAClC6O,EAAsBD,EAAc1O,OACpC4O,KACQzO,EAAI,EAAGA,EAAIwO,EAAqBxO,IACxCyO,EAAeF,EAAcvO,GAAGL,MAAM,KACtC6J,EAAUuB,mBAAmB0D,EAAa,KAAO1D,mBAAmB0D,EAAa,IAAM,GAGzF,OAAOjF,GAEP,KAAM,IAAItJ,OAAM,uDAWlBjB,IAAIK,OAAO,mBAAoB,WAoE3B,OAlEIV,QACA8P,SAAU,SAAShK,EAAKlF,GACpBoB,KAAKhC,KAAK8F,GAAOiK,OAAOnP,IAE5BoP,QAAS,WACL,MAAOhO,MAAKhC,MAEhBiQ,eAAgB,WAEZ,MADajO,MAAKkO,aAAalO,KAAKkL,UAAUlL,KAAKhC,OACrCuN,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KAAKA,QAAQ,KAAM,KAExEL,UAAW,SAAStH,GAChB,GAAmB,mBAARqH,OAAuBA,MAAQA,KAAKC,UAC3C,MAAOD,MAAKC,UAAUtH,EAG5B,IAAIuK,SAAU,EACd,IAAS,UAALA,GAAyB,OAARvK,EAInB,MAHS,UAALuK,IACIvK,EAAM,IAAMA,EAAM,KAEnBmK,OAAOnK,EAGd,IAAIwG,GAAGgE,EAAGrD,KAAWsD,EAAOzK,GAAOA,EAAI0K,aAAe9G,KAEtD,KAAK4C,IAAKxG,GACRwK,EAAIxK,EAAIwG,GAAI+D,QAAU,GACb,UAALA,EAAeC,EAAI,IAAMA,EAAI,IACnB,UAALD,GAAuB,OAANC,IAAYA,EAAIpO,KAAKkL,UAAUkD,IACzDrD,EAAK7I,MAAMmM,EAAM,GAAK,IAAMjE,EAAI,MAAQ2D,OAAOK,GAEjD,QAAQC,EAAM,IAAM,KAAON,OAAOhD,IAASsD,EAAM,IAAM,MAI3DH,aAAc,SAASlQ,GACnB,IAAKA,EACD,MAAOA,EAGX,IACIuQ,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAD5BC,EAAM,oEAC4B3P,EAAI,EAAG4P,EAAK,EAAGC,EAAM,GAAIC,IAE/D,IACIX,EAAKvQ,EAAKmR,WAAW/P,KACrBoP,EAAKxQ,EAAKmR,WAAW/P,KACrBqP,EAAKzQ,EAAKmR,WAAW/P,KAErB0P,EAAOP,GAAM,GAAKC,GAAM,EAAIC,EAE5BC,EAAKI,GAAQ,GAAK,GAClBH,EAAKG,GAAQ,GAAK,GAClBF,EAAKE,GAAQ,EAAI,GACjBD,EAAY,GAAPC,EAGLI,EAAQF,KAAQD,EAAIK,OAAOV,GAAMK,EAAIK,OAAOT,GAAMI,EAAIK,OAAOR,GAAMG,EAAIK,OAAOP,SACzEzP,EAAIpB,EAAKiB,OAElBgQ,GAAMC,EAAQG,KAAK,GACnB,IAAIC,GAAItR,EAAKiB,OAAS,CACtB,QAAQqQ,EAAIL,EAAIrK,MAAM,EAAG0K,EAAI,GAAKL,GAAO,MAAMrK,MAAM0K,GAAK,SAsBtEjR,IAAIK,OAAO,sBAAuB,SAAS6Q,EAAiBC,EAAWC,EAAcC,GACpF,YAUA,IAECjI,GADAvJ,EAAIG,IAAIkB,QAAQ,OAejB,KAVEkI,EADuD,oBAApDlJ,OAAOC,UAAUF,SAASe,KAAKkQ,GAC7BpS,SAASC,cAAcmS,GAElBA,YAA2BI,SAChCJ,EAGArR,EAAEqR,GAAiB,KAIhB9H,YAAckI,SAAS,CAChC,GAECC,GAAQnI,EAAGoI,wBAAwBC,IACnCC,EAAWtI,EAAGoI,wBAAwBG,OACtCC,EAAWxI,EAAGoI,wBAAwBK,OAEtCC,EAAiBhT,SAASqI,gBAAgB4K,aAG1CZ,EAAYA,GAAwB,EAEpCC,EAAeA,GAA8B,CAa9C,OATID,GAAY,GAAmB,IAAdA,IACpBA,GAAYS,GAGTR,EAAe,GAAsB,IAAjBA,IACvBA,GAAeQ,GAIZP,EAIIE,GAASJ,EAKRI,EAAQJ,EAAYW,GAAoBJ,EAAWN,EAAe,EAG3E,OAAO,IAeTpR,IAAIK,OAAO,qBAAsB,WAE7B,GAAIR,GAAIG,IAAIkB,QAAQ,UAChB8Q,EAAShS,IAAIkB,QAAQ,oBAErB+Q,GACAC,QAAQ,EACRC,WACIC,IACIC,MAAO,mBACPC,aAAc,0BACdC,WAAY,uBACZC,kBAAmB,iBAEvBC,IACIJ,MAAO,iBAAkB,qBAAsB,iBAAkB,sBACjEC,aAAc,0BACdC,WAAY,2BACZC,kBAAmB,gBAG3BE,iBAAkB,kBAAmB,iBAAkB,qBAAsB,iBAAkB,sBAC/FjR,KAAM,WACF,GAAIkR,IAAWC,MAAS,cAAeC,MAAS,cAAeC,MAAS,eACpEC,GAAkB,QAAS,SAC3BC,GAAaC,OAAU,UACvBC,KACAC,GAAa,EACblB,EAAWtQ,KACXyR,EAAgBpT,IAAIkB,QAAQ,yBAAyBI,OAAOU,SAASC,KAGrEX,QAAOU,SAASqR,SAASjR,QAAQ,YAAc,GACX,mBAAtBgR,GAAcE,KAAuBF,EAAcE,IAAI1S,OAAS,IAC1EsS,EAAOI,IAAMF,EAAcE,KAMnCzT,EAAEf,UAAU2D,GAAG,kEAAmE,WAC9EwP,EAASsB,+BAA+BtB,EAASS,gBAAiBU,EAAcnB,YAGhFmB,EAAcnB,UAAYmB,EAAcnB,SAASrR,OAAS,EAC1DqR,EAASsB,+BAA+BtB,EAASS,gBAAiBU,EAAcnB,WAEhFA,EAASsB,+BAA+BtB,EAASS,iBAGjD7S,EAAEsC,KAAKwQ,EAAS,SAASa,EAAWC,GAChCP,EAAOM,GAAavB,EAASyB,cAAcF,EAAWC,GAClD5T,EAAE8T,QAAQH,EAAWT,IAAmB,IAAMG,EAAOM,KACrDL,GAAa,KAIhBA,IACDtT,EAAEsC,KAAK+Q,EAAQ,SAASlP,EAAMzD,GAC1ByR,EAAOvC,SAASzL,EAAMzD,KAG1BV,EAAEsC,KAAK6Q,EAAW,SAASQ,EAAWI,GAClC,GAAIC,GAAgB5B,EAAS7N,gBAAgBwP,EAEzCC,IACA7B,EAAOvC,SAAS+D,EAAWK,KAInClS,KAAKmS,iBAIjBA,YAAa,WACT,GAAI7B,GAAWtQ,IAGf9B,GAAE,KAAKsC,KAAK,WACR,GAAI4R,GAAO9B,EAAS+B,cAAcrS,KAAKM,KAEpC8R,KACCpS,KAAKM,KAAO8R,KAIpBlU,EAAE,UAAW,cAAcsC,KAAK,WAC5B,GAAIE,GAAQxC,EAAE8B,MAAMW,KAAK,qBACrByR,EAAO9B,EAAS+B,cAAc3R,EAAMG,MACrCuR,IACC1R,EAAMG,IAAIuR,KAIbpS,KAAKuQ,SAENrS,EAAEf,UAAU2D,GAAG,kEAAmE,WAAYwP,EAAS6B,gBACvGnS,KAAKuQ,QAAS,IAGtB+B,eAAgB,SAASjQ,GACrB,GAAIzD,GAAQ,KAAOzB,SAASsG,OACxB8O,EAAQ3T,EAAMG,MAAM,KAAOsD,EAAO,IACtC,OAAQkQ,GAAMtT,QAAU,EAAKsT,EAAMC,MAAMzT,MAAM,KAAK0T,QAAU,MAElEhQ,gBAAiB,SAASJ,GACtB,MAAOQ,YAAW3C,OAAOmC,EAAO,eAAoBjC,KAAKC,SAASyC,UAAU,CAAC,OAAO,KAExFuP,cAAe,SAASD,GACpB,GAAI9R,GACAoS,EAAoBrC,EAAOpC,gBAe/B,OAbIyE,IACAxU,EAAEsC,KAAKR,KAAKwQ,UAAW,SAAUmC,EAAUC,GACvC1U,EAAEsC,KAAKoS,EAAYlC,KAAM,SAAU5M,EAAK+O,IACF,GAA9BT,EAAK3R,QAAQoS,KAETvS,EADA8R,EAAKtP,OAAO8P,EAAYhC,aAAe,EAChCwB,EAAK7G,QAAQqH,EAAYhC,WAAY,KAAO8B,GAE5CN,EAAK7G,QAAQqH,EAAY/B,kBAAmB+B,EAAYjC,aAAapF,QAAQ,gBAAiBmH,GAAqB,WAMvIpS,GAEXyR,cAAe,SAASF,EAAWC,GAC/B,GAAIgB,GAAUnT,OAAOpD,cAAgBoD,OAAOpD,aAAauW,OAAUnT,OAAOpD,aAAauW,OAAS,IAShG,OANGA,GACgC,SAAtBA,EAAOjB,GAAyB,KAAOiB,EAAOjB,GAE/C7R,KAAKsS,eAAeR,EAAa,MAAQ9R,KAAKsS,eAAeR,EAAa,MAAQ9R,KAAKsS,eAAeR,IAKtHF,+BAAgC,SAASb,EAAiBgC,GAEtD,GAAIC,GACAxC,IAEJtS,GAAE,KAAK+U,IAAI,gBAAgBzS,KAAK,WAC5B,GAAIiH,GAAKzH,KACLoS,EAAO3K,EAAGnH,IACdpC,GAAEsC,KAAKuQ,EAAiB,SAAU4B,EAAUE,IACN,GAA9BT,EAAK3R,QAAQoS,IACbrC,EAAUtO,KAAKuF,OAK3BvJ,EAAEsC,KAAKgQ,EAAW,SAAU/I,EAAI2K,GAC5B,GAAGW,GAAiB7U,EAAE8B,MAAMhC,KAAK,wBAAyB,CACtD,GAAIkV,GAA4BhV,EAAE8B,MAAMhC,KAAK,uBAC7CsS,GAAW4C,EAA0B3H,QAAQ,aAAcwH,KAER,GAA/CX,EAAK9R,KAAKG,QAnBU,eAmBgC2R,EAAK9R,KAAKG,SAA4C,GAApC0S,OAnBlD,kBAoBpBH,GAAiE,GAAvDZ,EAAK9R,KAAKG,QAAQ0S,OApBR,eAoBiDf,EAAK9R,KAAKiL,QAAQ4H,OApBnE,cAoBoG7C,GAAY8B,EAAK9R,KAAKiL,QApB1H,aAoB2J+E,GAE/KpS,EAAEkU,GAAMxG,KAAK,OAAQoH,QAGzBA,IAAiE,GAAvDZ,EAAK9R,KAAKG,QAAQ0S,OAzBJ,eAyB6Cf,EAAK9R,KAAKiL,QAAQ4H,OAzB/D,cAyBgG,IAAMf,EAAK9R,KAAKiL,QAzBhH,aAyBiJ,IAEzKrN,EAAEkU,GAAMxG,KAAK,OAAQoH,MAOrC,OAAO1C,OAKV,WACG,YA8CI,SAAS8C,GAAoB9C,GACzB,GAAI+C,GAAWlW,SAASqE,iBAAiB,0BAErC6R,GAASpU,OAAS,GAGlBoU,EAAS5R,QAAQ,SAAS2Q,GACtBkB,EAAWlB,EAAM9B,KAKzB3Q,OAAO+B,iBAAiB,mBAAoB,SAASC,GACjDA,EAAEC,OAAOC,QAAQL,iBAAiB,2BAA2BC,QAAQ,SAAS2Q,GAC1EkB,EAAWlB,EAAM9B,OAO7B,QAASgD,GAAWlB,EAAM9B,GAClB,WAAWzS,KAAKuU,EAAK9R,QACrB8R,EAAK9R,KAAO8R,EAAK9R,KAAO,aAAegQ,GAnEnD,IAEI,GAAIe,GAAYhR,SAASyC,OAAO+E,aAGhC,IAAI,8CAA8ChK,KAAKwT,GAAY,CAC/D,GAAIkC,MACAjD,EAAW,EAQX,cAAazS,KAAKwT,KAClBkC,EAAOC,UAAYnC,EAAUjK,MAAM,6CAA6C,GAAGmE,QAAQ,aAAc,KAGzG,eAAe1N,KAAKwT,KACpBkC,EAAOE,YAAcpC,EAAUjK,MAAM,iDAAiD,GAAGmE,QAAQ,eAAgB,KAGjH,WAAW1N,KAAKwT,KAChBkC,EAAOG,QAAUrC,EAAUjK,MAAM,yCAAyC,GAAGmE,QAAQ,WAAY,KAGjG,iBAAiB1N,KAAKwT,KACtBkC,EAAOI,cAAgBtC,EAAUjK,MAAM,qDAAqD,GAAGmE,QAAQ,iBAAkB,KAI7H+E,EAAWsD,KAAK3I,KAAKC,UAAUqI,IAE1B5M,eAAeuD,QAAQ,aACxBvD,eAAeE,QAAQ,WAAYyJ,GAGvC8C,EAAoB9C,OAEb3J,gBAAeuD,QAAQ,aAC9BkJ,EAAoBzM,eAAeuD,QAAQ,aA8BjD,MAAOlI,GACLvC,QAAQuC,MAAMA,GACdC,IAAIC,MACAC,QACIH,OACII,KAAMJ,EAAMK,KACZC,QAASN,EAAMM,UAGvBC,MAAO,qBAenB,WACC,YAGA,IAAI,WAAW1E,KAAKwC,SAASyC,SAAW,mBAAqBnD,QAAQ,CACpE,GAAIkU,GAAcxV,IAAIkB,QAAQ,yBAC7BuU,EAAKD,IAELE,EAAY,cACD5W,UAASqE,iBAAiB,+BAE7BC,QAAQ,SAASgG,GACzB,IACC,GAAIuM,GACHC,GAEG,cAAcpW,KAAK4J,EAAGhK,aAAa,wBAA0BqW,GAAMA,EAAGI,UAAYH,EAAUlW,KAAKiW,EAAGI,WACnGzM,EAAGnH,OACN0T,EAAc,GAAIjI,KAAItE,EAAGnH,MACzB2T,EAAsB,GAAIE,iBAAgBH,EAAYlR,QAEtDmR,EAAoBtL,IAAI,WAAsD,OAA1ClB,EAAGhK,aAAa,sBAAiCgK,EAAGhK,aAAa,sBAAwBgK,EAAGhK,aAAa,0BAA4B,QAErKqW,EAAGI,WAAaxW,WACnBuW,EAAoBtL,IAAI,MAAOmL,EAAGI,UAG/BJ,EAAGM,aAAe1W,WACrBuW,EAAoBtL,IAAI,aAAcmL,EAAGM,YAG1CJ,EAAYlR,OAASmR,EAAoB3V,WACzCmJ,EAAGnH,KAAO0T,EAAY1V,YAIvB,MAAO0D,GAEW,mBAARC,OACVxC,QAAQuC,MAAMA,GACdC,IAAIC,MACHC,QACCH,OACCI,KAAMJ,EAAMK,KACZC,QAASN,EAAMM,UAGjBC,MAAO,yBAoBblE,IAAIK,OAAO,yBAA0B,WACpC,YAEA,IAAIR,GAAIG,IAAIkB,QAAQ,UAChB8B,EAAS9E,aAAa8E,OAAOuG,QAC7ByJ,EAAYhT,IAAIkB,QAAQ,2BACxB8U,EAAUhW,IAAIkB,QAAQ,qBACtB+I,EAAUpK,EAAEyB,QACZ2U,EAAYjW,IAAIkB,QAAQ,sBAgD5B,QA5CCO,KAAM,WACL,GAAIyU,GAAYrW,EAAE,iBAAiBe,OAClCuV,EAAWnT,EAAOmT,SAClBC,EAAQpT,EAAOqT,QACfC,EAAuC,gBAAtBtD,GAAUsD,QAAuBtD,EAAUsD,QAAU,GACtEC,EAAYD,EAAQlU,QAAQ,eAAiB,GAE1C8T,GAAcC,GAAaI,GAAcH,IAC5CzU,KAAK6U,OACL3W,EAAE,wCAAwC4C,GAAG,QAASd,KAAK8U,cAM7DD,KAAM,SAASlT,GACd,GAAIoT,GAAM5X,SAASkD,SAASC,KAC3B0U,EAAOD,EAAI3N,MAAM,qBACjB6N,EAAUD,EAAOA,EAAK,GAAGnN,cAAgB,EAEtCkN,GAAItU,QAAQ,MAAQ,IACvBsU,EAAMA,EAAIG,OAAO,EAAGH,EAAItU,QAAQ,QAGC,GAA9BwU,EAAQxU,QAAQ,WAAoB,iBAAiB5C,KAAKkX,IAAS,yBAAyBlX,KAAKkX,KACpG7W,EAAE,iBAAiB2W,OAEnBR,EAAQhH,MAAM,yBAA0B1L,GAGxC2G,EAAQxH,GAAG,kCAAmC,WACzCwT,EAAUpW,EAAE,iBAAkB,KAAM,QACvCmW,EAAQhH,MAAM,mBAAoB1L,GAClC2G,EAAQrE,IAAI,mBAAmBA,IAAI,wBAMvC6Q,WAAY,SAASnT,GACpB0S,EAAQhH,MAAM,oBAAqB1L,SAgBtCtD,IAAIK,OAAO,8BAA+B,WACzC,YACA,IAAIyW,GAAkB9W,IAAIkB,QAAQ,iCACjC6V,EAAiB/W,IAAIkB,QAAQ,gCAC7BjB,EAAWC,OAAOC,UAAUF,SAC5B+W,EAAO,WACN,MAAOlY,UAASsG,OAAO8H,QAAQ,wDAAyD,IAAIxM,MAAM,uBAEnGuW,GACCrW,OAA4B,KAApB9B,SAASsG,OAAgB4R,IAAOpW,OAAS,EAWjD4H,QAAS,SAAS/C,EAAKlF,EAAO2W,EAASxS,EAAMrG,EAAQ8Y,GACpD,OAAmB,KAAR1R,OAAwC,KAAVlF,EAgBxC,KAAM,IAAIU,OAAM,kEAfhB,IAAImW,GAAS,4CACb3R,GAAMV,mBAAmBU,GACzBlF,EAAQwE,mBAAmBxE,GACvBkF,IAAQ2R,EAAO5X,KAAKiG,MACe,IAAlC3G,SAASsG,OAAOhD,QAAQqD,IAC3B9D,KAAKf,SAEiB,gBAAZsW,GACVA,EAAU,aAAeA,EACY,kBAA3BjX,EAASe,KAAKkW,KACxBA,EAAU,aAAeA,EAAQ/R,eAElCrG,SAASsG,OAASK,EAAM,IAAMlF,GAA4B,gBAAZ2W,GAAuBA,EAAU,KAAyB,gBAAX7Y,GAAsB,YAAcA,EAAS,KAAuB,gBAATqG,GAAoB,UAAYA,EAAO,KAAOyS,EAAS,WAAa,MAY/NtL,QAAS,SAASpG,GACjB,OAAmB,KAARA,EAAqB,CAC/B,GAAI2R,GAAS,GAAIvV,QAAO,mBAAqBkD,mBAAmBU,GAAKyH,QAAQ,cAAe,QAAU,8BACtG,OAAOpB,oBAAmBhN,SAASsG,OAAO8H,QAAQkK,EAAQ,QAAU,KAEpE,KAAM,IAAInW,OAAM,oEAUlBwH,WAAY,SAAShD,EAAKf,EAAMrG,GAC/B,OAAmB,KAARoH,EAOV,KAAM,IAAIxE,OAAM,qEANhBwE,GAAMV,mBAAmBU,IACa,IAAlC3G,SAASsG,OAAOhD,QAAQqD,IAC3B9D,KAAKf,SAEN9B,SAASsG,OAASK,EAAM,4CAAgE,gBAAXpH,GAAsB,YAAcA,EAAS,KAAuB,gBAATqG,GAAoB,UAAYA,EAAO,KAWjLe,IAAK,SAASsG,GACb,GAAiB,gBAANA,GAAgB,CAC1B,GAAIsL,GAAYL,GAEhB,OAAIjL,GADesL,EAAUzW,OAErBkL,mBAAmBuL,EAAUtL,IAE7B,KAGR,KAAM,IAAI9K,OAAM,gEAOlB+K,MAAO,WAGN,IAAK,GAFDqL,GAAYL,IACfM,EAAkBD,EAAUzW,OACpBG,EAAI,EAAGA,EAAIuW,EAAiBvW,IACpCY,KAAK8G,WAAW4O,EAAUtW,GAE3BY,MAAKf,OAA6B,KAApB9B,SAASsG,OAAgB4R,IAAOpW,OAAS,GAI1D,OAAOkW,GAAkBG,EAAgBF,QAW1C/W,IAAIK,OAAO,uBAAwB,WAC/B,YAEA,IAAIR,GAAIG,IAAIkB,QAAQ,UAChB+V,EAAgBjX,IAAIkB,QAAQ,8BAEhC,QACImG,SACGkQ,OAAQ,gCACRC,WAAW,qBAAqB,kBAAkB,kBAClDnI,SAAU,uBAGZ5N,KAAM,SAASgW,GAEZ,GAAGA,IAAWpY,UACV,IAAI,GAAI6C,KAASuV,GACb9V,KAAK0F,QAAQnF,GAASuV,EAAOvV,EAOrC,IAAe,OAHH,GAAIL,QAAOF,KAAK0F,QAAQkQ,OAAO,KACvBxV,KAAKT,OAAOU,SAASC,MAGrC,MAAO,EAEP,IAAIA,GACAyV,EAAc/V,KAAK0F,QAAQgI,SAC3BmI,EAAY7V,KAAK0F,QAAQmQ,UACzBG,EAAuB,GAAI3S,KAY/BnF,GAAE,KAAKsC,KAAK,WACRF,EAAOpC,EAAE8B,MAAM4L,KAAK,QAAU1N,EAAE8B,MAAM4L,KAAK,QAAU,EACrD,KAAI,GAAIxM,GAAE,EAAEA,EAAEyW,EAAU5W,OAAOG,KACO,GAA/BkB,EAAKG,QAAQoV,EAAUzW,MAA2C,GAA9BkB,EAAKG,QAAQsV,KAChDzV,GAAcyV,EACd7X,EAAE8B,MAAM4L,KAAK,OAAOtL,MAKhC0V,EAAqBC,SAASD,EAAqBE,WAAa,GAChEZ,EAAczO,QAAQ,cAAe,MAAOmP,EAAsB,IArBlE,WACI,GAAIG,GAAmBxW,OAAOU,SAAS+V,SAASrX,MAAM,IAEtD,OAAsD,UAAlDoX,EAAiBA,EAAiBlX,OAAS,IAAoE,QAAlDkX,EAAiBA,EAAiBlX,OAAS,GACjG,aAEAU,OAAOU,SAAS+V,SAAS3N,UAAU,aA8BlEpK,IAAIK,OAAO,0BAA2B,WACrC,YAEA,IAAI2V,GAAUhW,IAAIkB,QAAQ,qBACzB8B,EAAS9E,aAAa8E,OACtBuG,EAAUvG,EAAOuG,QACjBtG,EAAKD,EAAOC,GACZ+U,EAAe9Z,aAAa8E,OAAOuG,QAAQ0O,SAC3CC,GACCja,OAAQC,aAAaC,IAAIF,OACzB0Q,KAAM,IAAMzQ,aAAaC,IAAIF,OAAS,IAAMC,aAAaC,IAAIga,aAoS/D,QAjSE1W,KAAM,WACL,GAAI2W,GAAStZ,SAASqE,iBAAiB,gEACtCkV,EAAUvZ,SAASqE,iBAAiB,qEACpC4G,EAAOpI,IAGJyW,GAAOxX,OAAS,GAEnBwX,EAAOhV,QAAQ,SAASkV,GAEvBA,EAAQnZ,aAAa,WAAY,MAE7BmZ,EAAQvZ,cAAc,mBACzBuZ,EAAQvZ,cAAc,iBAAiBI,aAAa,WAAY,GAChEmZ,EAAQvZ,cAAc,iBAAiBI,aAAa,OAAQ,aAM/DkZ,EAAQjV,QAAQ,SAAST,GACxBoH,EAAKwO,SAAS5V,MAGhB4V,SAAU,SAAS5V,GAClB,GAAIoH,GAAOpI,IAGmC,UAA1CgB,EAAOvD,aAAa,qBAIlBmK,EAAQ8M,SAAWpT,EAAGC,YAAchF,aAAauW,SAAWpV,WAAa,kBAAkBG,KAAKV,SAASsG,UAAY2E,EAAKyO,sBAAsB7V,KAsBtJ,SAAwBA,GACvB,GAAI8V,GAAyB3Z,SAAS4Z,eAAe,oBACpDC,EAAW,GAAIlV,KAAImV,MAAMH,GACzBI,EAAeJ,EAAuBtV,iBAAiB,8BAGlB,QAAlCR,EAAOmW,QAAQ,gBAClBnW,EAAOU,iBAAiB,QAAS,SAASa,GACzCA,EAAM6U,iBACN7U,EAAM8U,kBAGNL,EAASnC,OAGTqC,EAAazV,QAAQ,SAAS6V,GAC7BA,EAAI5V,iBAAiB,QAAS,WAC7BsV,EAASO,cArCGvW,GAEfA,EAAOxD,aAAa,iBAAkB,SAG5B4K,EAAKoP,iBAAiBxW,IAAWA,EAAOvD,aAAa,iBAAiBoK,gBAAkBwO,IAsHpG,SAAmBrV,GAElBA,EAAOU,iBAAiB,QAAS,SAAUC,GAC1C,GAAI8V,GAAmBzX,KAAKvC,aAAa,iBAAiBoK,cACzD6P,EAAQva,SAASC,cAAc,IAAM4C,KAAKvC,aAAa,qBACvDyZ,EAAeQ,EAAMlW,iBAAiB,8BAGvCG,GAAEyV,iBACFzV,EAAE0V,iBAIF,KAAK,GADDM,GAAaD,EAAMlW,iBAAiB,uBAC/BoW,EAAI,EAAGA,EAAID,EAAW1Y,OAAQ2Y,IACtCD,EAAWC,GAAGC,MAAMC,QAAU,MAI3BJ,GAAMta,cAAc,kBAAoBiZ,KAC3CqB,EAAMta,cAAc,kBAAoBiZ,GAAcwB,MAAMC,QAAU,SAInEJ,EAAMta,cAAc,wBAA0BiZ,KACjDqB,EAAMta,cAAc,wBAA0BiZ,GAAcwB,MAAMC,QAAU,SAEzEJ,EAAMta,cAAc,iBAAmBiZ,EAAe,IAAMoB,KAC/DC,EAAMta,cAAc,iBAAmBiZ,EAAe,IAAMoB,GAAkBI,MAAMC,QAAU,SAI3FJ,EAAMta,cAAc,oBAAsBiZ,KAC7CqB,EAAMta,cAAc,oBAAsBiZ,GAAcwB,MAAMC,QAAU,UAIpEJ,EAAMpa,UAAU6H,SAAS,oBAAsBkR,IAAiBqB,EAAMta,cAAc,sBAAwBqa,KAChHC,EAAMta,cAAc,sBAAwBqa,GAAkBI,MAAMC,QAAU,QAI/E,IAAId,GAAW,GAAIlV,KAAImV,MAAMS,EAC7BK,YAAW,WAEVf,EAASnC,QACP,KAGH6C,EAAMhW,iBAAiB,gBAAiB,WACd,mBAAdyK,YAA2BA,UAAUjK,MAAMK,MAAS,6BAC/DhG,aAAaC,IAAIwb,aAAc,IAC5BnY,MAAM,IAGVqX,EAAazV,QAAQ,SAAS6V,GAC7BA,EAAI5V,iBAAiB,QAAS,WAE7BsV,EAASO,cA7KDvW,GAEVA,EAAOxD,aAAa,iBAAkB,SAG5B4K,EAAK6P,qBAAqBjX,MAgCtC,SAAuBA,GACtB,GAAIkX,GAAalX,EAAOvD,aAAa,sBACpC0a,EAAmD,UAA5B5b,aAAaC,IAAIF,QAAsBsL,EAAQ4M,UAAY,OAAO3W,KAAKqa,GAC9FE,EAAmD,UAA5B7b,aAAaC,IAAIF,QAAsB,OAAOuB,KAAKqa,EAG3E,MAAK5W,EAAG+W,WAAc/W,EAAGgX,OAAUH,GAAyBC,GAAyB,yBAAyBva,KAAKmD,EAAOV,SAIrHU,EAAOvD,aAAa,gBAAkBN,SAASqE,iBAAiB,gCAAgCvC,OAAS,GAAG,CAG/G,GAAI8V,GAAM,GAAIhJ,KAAI/K,EAAOV,MACxBwV,EAASf,EAAMA,EAAIwD,aAAe,IAEnCzC,GAAOnN,IAAI,SAAU,GACrBoM,EAAIjS,OAASgT,EAAOxX,WACpB0C,EAAOV,KAAOyU,EAAIzW,WAElB0C,EAAOU,iBAAiB,QAAS,SAASC,GAEzC,GAAI6W,GAAQxX,EAAOyX,aAAa,eAAiBtb,SAAS4Z,eAAe/V,EAAOvD,aAAa,gBAAkBN,SAASC,cAAc,8CACrIsb,EAAcF,EAAMpb,cAAc,iBAClCub,EAAWH,EAAMpb,cAAc,kBAC/Bwb,EAAOJ,EAAMpb,cAAc,cAC3Byb,EAAWL,EAAMhX,iBAAiB,kCAG/BqX,IACHA,EAASpX,QAAQ,SAASqX,GACzBA,EAAOtb,aAAa,qBAAsBwD,EAAOvD,aAAa,uBAC9Dqb,EAAOtb,aAAa,wBAAyBwD,EAAOvD,aAAa,0BACjEqb,EAAOxY,KAAOU,EAAOV,OAKnBqY,GAAYC,IACfD,EAASrb,UAAUC,IAAI,sBACvBob,EAASrb,UAAUQ,OAAO,UAC1B8a,EAAKtb,UAAUQ,OAAO,kBACtB8a,EAAKtb,UAAUC,IAAI,UAEnBwa,WAAW,WACVY,EAASrb,UAAUQ,OAAO,sBAC1Bia,WAAW,WACVY,EAASrb,UAAUC,IAAI,UACvBqb,EAAKtb,UAAUQ,OAAO,UACtB8a,EAAKtb,UAAUC,IAAI,mBACjB,MACD,MAIJib,EAAMlb,UAAUQ,OAAO,UACvBia,WAAW,WACVS,EAAMlb,UAAUC,IAAI,WACpBJ,SAAS4b,KAAKzb,UAAUC,IAAI,gBAC1B,IAEH8W,EAAQhH,MAAM,qBAAsBkJ,GAGpCiC,EAAMhb,aAAa,WAAY,KAC/Bgb,EAAMQ,QAGNrZ,OAAOsZ,QAAQC,WACdC,MAAO,GACL,QAASxZ,OAAOU,SAASC,MAG5B8H,EAAKgR,aAAaZ,EAAOxX,EAAQ0X,EAAaG,EAAU1b,SAASkc,mBAvGrDrY,GAEdA,EAAOxD,aAAa,iBAAkB,WA2KzC4b,aAAc,SAASZ,EAAOc,EAASC,EAAUC,EAAcC,GAU9D,QAASC,GAAa/X,GACH,KAAdA,EAAEgY,SACLC,IAIF,QAASC,GAASlY,GACb6W,EAAMlb,UAAU6H,SAAS,aAEV,KAAdxD,EAAEgY,SACLC,IAIiB,IAAdjY,EAAEgY,UACLF,IAAmBD,EAAeD,EAASP,QAAUQ,EAAaR,QAClES,EAAiBtc,SAASkc,gBAK7B,QAASO,KACRpB,EAAMlb,UAAUQ,OAAO,WACvBX,SAAS4b,KAAKzb,UAAUQ,OAAO,eAC/Bia,WAAW,WACVS,EAAMlb,UAAUC,IAAI,WAClB,KAGHib,EAAMhb,aAAa,WAAY,MAC/B8b,EAAQN,QAERrZ,OAAO2E,oBAAoB,QAASuV,GACpCN,EAASjV,oBAAoB,QAASoV,GACtCH,EAASjV,oBAAoB,QAASsV,GACtCja,OAAO2E,oBAAoB,WAAYsV,GAEvCvF,EAAQhH,MAAM,sBAAuBkJ,GA7CtC5W,OAAO+B,iBAAiB,QAASmY,GAEjCN,EAAS7X,iBAAiB,QAASgY,GAEnCH,EAAS7X,iBAAiB,QAASkY,GAEnCja,OAAO+B,iBAAiB,WAAYkY,IA0CrCE,WAAY,WAEX,MAAO3c,UAASqE,iBAAiB,gEAAgEvC,OAAS,GAE3GgZ,qBAAsB,SAASjX,GAE9B,SAAQA,EAAOyX,aAAa,cAAqD,kBAArCzX,EAAOvD,aAAa,cAAqCuD,EAAO1D,UAAU6H,SAAS,mCAA8E,iBAAzCnE,EAAOvD,aAAa,mBAEzL+Z,iBAAkB,SAASxW,GAE1B,SAAQA,EAAOyX,aAAa,cAAqD,kBAArCzX,EAAOvD,aAAa,cAAoCuD,EAAOyX,aAAa,kBAAoBzX,EAAOyX,aAAa,qBAAmE,KAA5CzX,EAAOvD,aAAa,qBAA8BN,SAAS4Z,eAAe/V,EAAOvD,aAAa,sBAAwBN,SAASC,cAAc,IAAM4D,EAAOvD,aAAa,uBAE/VoZ,sBAAuB,SAAS7V,GAE/B,SAAQA,EAAOyX,aAAa,cAAqD,kBAArCzX,EAAOvD,aAAa,cAAoCuD,EAAOyX,aAAa,uBAAyB,MAAM5a,KAAKmD,EAAOvD,aAAa,yBAA2BuD,EAAO1D,UAAU6H,SAAS,mBAAqBhI,SAAS4Z,eAAe,2BAqBtR1Y,IAAIK,OAAO,0BAA2B,SAASqb,EAAUjE,EAAQkE,EAAaC,GAC7E,YAWA,KAAK,GATD/b,GAAIG,IAAIkB,QAAQ,UACnB2a,EAAQF,GAA4Btc,UACpCmW,EAAcxV,IAAIkB,QAAQ,yBAC1B8R,EAAYwC,EAAYqG,GACxBC,EAAuD,mBAA3C5b,OAAOC,UAAUF,SAASe,KAAKyW,GAAgCA,GAAUA,GACrFvV,EAAQ,KACR6Z,EAAO,KACPC,KAEQjb,EAAI,EAAGA,EAAI+a,EAASlb,OAAQG,IACpCmB,EAAQ4Z,EAAS/a,GAEdiS,EAAU9Q,KACZ6Z,EAAOlc,EAAE6b,GAAUvZ,KAAK,WACvB,GAAI8Z,GAAMpc,EAAE8B,MACXua,EAAUva,KAAK8C,QAAU9C,KAAK8C,OAAO7D,OAAS,EAAI,IAAM,IACxDub,EAAa3G,EAAYyG,EAAI1O,KAAK,SAClChN,EAAQqb,GAAY5I,EAAU9Q,EAE3Bia,GAAWnJ,EAAU9Q,KACxB+Z,EAAI1O,KAAK,OAAQ0O,EAAI1O,KAAK,QAAU2O,EAAUha,EAAQ,IAAM3B,KAG9Dyb,EAAOnY,KAAKkY,GAId,OAAOC,KAWR,WACC,YACA,IAAI3J,IACH,QAAS,uBAAwB,oBAAqB,mBAAoB,mBAAoB,iBAAkB,4BAA6B,gBAAiB,cAC9J+J,EAAW9a,OAAOpD,aAAaC,IAAIke,QAEpC,IAAIhK,EAAKjQ,QAAQga,IAAa,EAAG,CAEhC,GAAIE,GAAkBtc,IAAIkB,QAAQ,2BACjCqb,EAAcD,EAAgBE,WAE/B,QAA2B,KAAhBD,GAA+BA,EAAY3b,OAAS,EAAG,CAEjE,GAAI6b,GAAWve,aAAa8E,MAE5B,IAAIyZ,EAASxZ,GAAG+W,WAAayC,EAASxZ,GAAGgX,MAAO,CAC/Cpa,EAAE,QAAQgK,SAAS,kBACnB,IAAI6S,GAAiB7c,EAAE,qCAEvB6c,GAAenP,KAAK,OAAQ,gDAAkDgP,EAAc,iEAE3E,mBAAbH,GACHM,EAAenP,KAAK,OAAQ,gDAAkDgP,EAAc;iJAG5E,8BAAbH,GACHM,EAAenP,KAAK,OAAQ,gDAAkDgP,EAAc,2DAE5E,qBAAbH,GACHM,EAAenP,KAAK,OAAQ,+CAkBjC,IAAIoP,OAAQA,SAGZA,OAAMC,yBAA0B,EAMhC5c,IAAIK,OAAO,uBAAwB,SAASwc,GAC3C,YAqFA,SAASC,KAER,OADSxb,OAAOyb,iBAAmBzb,OAAOyb,iBAAiBje,SAAS4b,KAAM,WAAWsC,iBAAiB,WAAa,IACzG5a,QAAQ,uBAAyB,EAI5C,QAAS6a,KACJC,EAAYrL,SAAWsL,EAAetL,SACzCsL,EAAeC,KACdvL,OAAQqL,EAAYrL,SAASwL,YAG9BF,EAAeC,IAAI,SAAU,IAqB/B,QAASE,KACRC,EAAOC,WAAY,EACnB7T,EAAM8T,YAAYC,EAAiB1M,KAAK,MAQzC,QAAS2M,KACRJ,EAAOK,YAAa,EACpBjU,EAAM8T,YAAYI,EAAkB7M,KAAK,MAM1C,QAAS8M,KACR,GAAIC,GAAUF,EAAkB7M,KAAK,IACrCuM,GAAOK,WAAaG,EACpBC,IAMD,QAASC,GAAeC,EAAUha,GACjC,GAAIia,GAAmBZ,EAAOK,WAC7BQ,MAAuD,KAAjCF,EAASve,KAAK,eACpC0e,EAAoB,eAAiBH,EAASve,KAAK,cAEpD,IAAImd,IAEHa,QAIA,IAAIQ,EAAiBzd,MAAM,KAAKE,OAAS,GAAKwd,EAa7C,MAVKD,GAAiB/b,QAAQic,IAAsB,EACnDd,EAAOK,WAAaU,EAAaH,EAAiBjR,QAAQmR,EAAmB,KAK7Ed,EAAOK,WAAaU,EAAaH,EAAmB,IAAME,OAG3DL,GAAiB,SAAUK,EAMzBA,KAAsBF,GAAoBC,IAC7Cb,EAAOK,WAAaS,GAGrBL,IAQD,QAASO,GAAcC,GAGtB,IAAK,GAFDC,GAAYD,EAAOrb,iBAAiB,KAE/BpC,EAAI,EAAGA,EAAI0d,EAAU7d,OAAQG,IAAK,CAC1C,GAAIqI,GAAKqV,EAAU1d,EAEd2d,GAAStV,IACbuV,EAAe9a,KAAKuF,GAItBwV,EAAkBJ,EAMnB,QAASK,KACR,GAAIC,GAAahgB,SAASC,cAAc,wBACvCggB,EAAkBjgB,SAASqE,iBAAiB,uBAE9B,QAAf2b,GAAsBA,EAAW3f,aAAa,iBAAiB,EAE/D,KAAK,GAAI4B,GAAI,EAAGA,EAAIge,EAAgBne,OAAQG,IAC3Cge,EAAgBhe,GAAG9B,UAAUQ,OAAO,UAOtC,QAASuf,KACRC,EAAcxB,YAAY,UAC1B5d,EAAE,QAAQ4d,YAAY,6BACtB9T,EAAM8T,YAAY,sBAElByB,IAGIC,GACHA,EAAwBxE,QA2B1B,QAASuE,KACRpC,KAAca,IACdkB,IACAlV,EAAM8T,YAAY,4BAClB9T,EAAM8T,YAAY,6BAClB9T,EAAM8T,YAAY,sBAClB9T,EAAM8T,YAAY,sBAClBwB,EAAcxB,YAAY,UAC1BmB,EAAkB,KAMnB,QAASF,GAAStV,GACjB,KAAOA,GAAI,CACV,GAAIA,IAAOtK,SACV,OAAO,CAER,IAAIsgB,GAAS9d,OAAOyb,iBAAiB3T,EAAI,KACzC,QAAKA,KAEOgW,IAEkB,SAAnBA,EAAO3F,WAEa,UAAnB2F,EAAO3F,SAA0C,iBAAnB2F,EAAO3F,UAAiD,QAAlB2F,EAAOvN,QAAwC,WAApBuN,EAAOC,WAGtF,UAApBD,EAAOxR,UAAwB8Q,EAAStV,EAAGkW,iBAQrD,QAAStB,GAAiBre,EAAM4f,GAG/B,GAAa,UAAT5f,EAUH,MATAgK,GAAM8T,YAAY,2BAEbX,IAIJnT,EAAM8T,YAAY,sBAHlB9T,EAAME,SAAS,qBAUJ,YAATlK,GACHgK,EAAM4V,YAAYA,GAGfhC,EAAOC,WACV7T,EAAME,SAAS0T,EAAOC,WAGnBD,EAAOK,YACVjU,EAAME,SAAS0T,EAAOK,YAIV,4BAATje,GAEEmd,MACJQ,IACA3T,EAAM4V,YAAY,uBAGnB5V,EAAME,SAAS0T,EAAOC,YAItB7T,EAAM8T,YAAY,sBAOpB,QAASa,GAAakB,GACrB,GAAIC,GAAcD,EAAI9e,MAAM,KAC3Bsb,IAQD,OANAyD,GAAYC,IAAI,SAASnf,GACV,KAAVA,GACHyb,EAAOnY,KAAKtD,KAIPyb,EAAOhL,KAAK,KAQpB,QAAS2O,KACRC,EAAQD,YAAa,EACrBE,IACAlW,EAAME,SAAS,0BAEfoT,GAQA,KAAK,GAND6C,GAAgBhhB,SAASqE,iBAAiB,mCAC7C4c,EAAiBjhB,SAASqE,iBAAiB,eAKnCpC,EAAI,EAAGA,EAAI+e,EAAclf,OAAQG,IAAK,CAC9C,GAAI8M,GAAOiS,EAAc/e,EAEzB8M,GAAKxK,iBAAiB,aAAc,WACnCwK,EAAK1O,aAAa,iBAAiB,KAGpC0O,EAAKxK,iBAAiB,aAAc,SAASC,IACvCzD,EAAEf,SAASkhB,iBAAiB1c,EAAE2c,QAAS3c,EAAE4c,UAAUC,QAAQ,eAAevf,OAAS,IACvFiN,EAAK1O,aAAa,iBAAiB,GACnC0O,EAAKuS,cAAcnhB,UAAUQ,OAAO,aAKvC,IAAK,GAAIsB,GAAI,EAAGA,EAAIgf,EAAenf,OAAQG,IAAK,CAC/C,GAAI8M,GAAOkS,EAAehf,EAE1B8M,GAAKxK,iBAAiB,aAAc,SAASC,IACvCzD,EAAEf,SAASkhB,iBAAiB1c,EAAE2c,QAAS3c,EAAE4c,UAAUC,QAAQ,sBAAsBvf,OAAS,IAC9FiN,EAAKwS,uBAAuBlhB,aAAa,iBAAiB,GAC1D0O,EAAKwS,uBAAuBD,cAAcnhB,UAAUQ,OAAO,aAM9D6gB,EAAY7d,GAAG,QAAS,oCAAqC,SAASgD,GACrE,GAAiB,IAAbA,EAAI8a,OAA8B,IAAf9a,EAAI6V,QAAe,CACzC,GAAIkF,GAAc7e,KAAK5C,cAAc,iBACrC0hB,GAAgB3hB,SAASkc,cACzBkE,IACArf,EAAE8B,MAAM+e,SAAS,oBAAoBnT,KAAK,iBAAiB,GAC3D1N,EAAE8B,MAAMkI,SAAS,UAEjB8W,EAASH,GACTjC,EAAciC,MAIhB3gB,EAAEf,UAAU2D,GAAG,UAAW,SAASgD,GAGjB,IAAbA,EAAI8a,OAA8B,IAAf9a,EAAI6V,UACR,OAAlBmF,GAA0BA,IAAkBphB,WAAYohB,EAAc9F,QACtEkE,IACA4B,EAAgB,SAEe,KAApB7B,GAAuD,OAApBA,IAC7CA,EAAkB,KAClBD,MAGDO,KAIiB,IAAdzZ,EAAI8a,OAA+B,IAAhB9a,EAAI6V,aAEK,KAApBsD,GAAuD,OAApBA,GACzC/e,EAAEf,SAASkc,eAAe,GAAGhc,YAAca,EAAE8e,EAAepY,OAAO,IAAI,GAAGvH,WAC7E4f,EAAgBjE,UASpB2F,EAAY7d,GAAG,aAAc,2BAA4B,WACxDub,EAAiB,2BACjBrU,EAAME,SAAS,sBACfF,EAAM8T,YAAY,sBAClBmD,EAAiBzhB,aAAa,iBAAiB,KAIhDmhB,EAAY7d,GAAG,UAAW,2BAA4B,SAASgD,GAC7C,IAAbA,EAAI8a,OAA8B,IAAf9a,EAAI6V,UAC1BmF,EAAgB3hB,SAASkc,cACzBkE,IACA0B,EAAiBzhB,aAAa,iBAAiB,GAC/C6e,EAAiB,2BACjBrU,EAAME,SAAS,gDACf8W,EAASC,GACTrC,EAAcqC,MAKhBN,EAAY7d,GAAG,aAAc,2BAA4B,SAASa,GACT,OAApDxE,SAASkhB,iBAAiB1c,EAAE2c,QAAS3c,EAAE4c,UAAsBphB,SAASkhB,iBAAiB1c,EAAE2c,QAAS3c,EAAE4c,SAASjhB,UAAU6H,SAAS,cAAe,WAClJkX,EAAiB,SACjB4C,EAAiBzhB,aAAa,iBAAiB,MAK7CyhB,IAAqBvhB,WAAkC,OAArBuhB,GACrCA,EAAiBvd,iBAAiB,aAAc,SAAS6K,GAEpDA,EAAI2S,OAAOC,QAAQ,uCACtB9C,EAAiB,SACjB4C,EAAiBzhB,aAAa,iBAAiB,MASlD4hB,EAAyBte,GAAG,UAAW,SAASgD,GAC/C,GAAiB,IAAbA,EAAI8a,OAA8B,IAAf9a,EAAI6V,QAAe,CACzCmF,EAAgB3hB,SAASkc,cACzBmE,EAA0Btf,EAAE8B,MAAM,GAElCgI,EAAM8T,YAAY,gDAGlB9T,EAAME,SAAS,sBACfoV,EAAcpV,SAAS,UACvBhK,EAAE,QAAQgK,SAAS,4BACnB,IAAI2W,GAAc1hB,SAASC,cAAc,mBACzC4f,GAAiBxV,MAAM6X,KAAKR,EAAYrd,iBAAiB,MACzDyb,EAAkB4B,EAClBA,EAAYrhB,aAAa,iBAAiB,GAG1CwhB,EAASH,GAETlf,OAAOsZ,QAAQC,WACdoG,eAAe,GACb,gBAAiB3f,OAAOU,SAASC,SAQvC,QAAS0e,GAASnd,GACjBA,EAAQrE,aAAa,YAAa,GAClCua,WAAW,WACVlW,EAAQmX,SACN,KAMJ,QAASkF,KA6ER,QAASqB,GAAWhD,GACnB,GAAIiD,EAAc,CACjB,GAAIC,GAAWlD,EAAS3Q,KAAK,QAC5B8T,EAAiBC,EAAkBF,EAQpC,IALIG,GAAsC,MAA1BH,EAAS1gB,MAAM,IAAI,KAClC0gB,EAAW,IAAMA,EAAS1gB,MAAM,KAAK0F,OAAO,GAAG4K,KAAK,UAIvB,KAAnBqQ,GAAkCD,EAAS1gB,MAAM,KAAK,KAAO8gB,IAAgB3hB,EAAE4hB,cAAcC,GAGvG,IAAK,GAAIjc,KAAO4b,GAEf,GAAsC,mBAA3BK,GAAkBjc,IAAwBic,EAAkBjc,KAAS4b,EAAe5b,GAG9F,MAFA0b,IAAe,EACfQ,EAAazD,IACN,CAKV,IAAIsD,IAAgBJ,EAGnB,MAFAD,IAAe,EACfQ,EAAazD,IACN,GAQV,QAASyD,GAAaC,GACrB,GAAIC,GAAUD,EAAkB9I,QAAQ,gBACvCgJ,EAAkBF,EAAkB9I,QAAQ,sBAC5CiJ,EAAgBF,EAAQtU,KAAK,SAAS7M,MAAM,KAC5CshB,GAAoB,WAAY,eAAgB,eAAgB,YAChEC,GAAwB,CAEzBpiB,GAAEkiB,GAAe5f,KAAK,WACrB,GAAI6f,EAAiB5f,QAAQT,OAAS,EAiBrC,MAdA4b,GAAOC,UAAY,cAAgB7b,KACnCsgB,GAAwB,EAGxBpiB,EAAE,MAAQ8B,KAAO,MAAM4L,KAAK,gBAAgB,GAGxCuU,EAAgBlhB,OAAS,GAC5BkhB,EAAgBjY,SAAS,YAI1B+X,EAAkBpD,SAAS3U,SAAS,aAE7B,IAKJoY,IACJ1E,EAAOC,UAAY,uBAGpB7T,EAAME,SAAS0T,EAAOC,WAMvB,QAAS8D,GAAkBrf,GAC1B,GAAI+Z,EAKJ,OAHAA,GAAS/Z,EAAKvB,MAAM,KAAK,GACzBsb,EAAS/Z,EAAKvB,MAAM,KAAK,OAEA,KAAXsb,EAAyBxG,EAAYwG,GAAU3c,UA7J9D,GAWC6iB,GAXGC,EAA6B7B,EAAYhe,KAAK,gCACjD6e,GAAe,EAGfK,EAAclgB,OAAOU,SAASqR,SAASnG,QAAQ,OAAQ,IAGvDwU,EAAoBlM,EAAYlU,OAAOU,SAASyC,QAGhD2d,EAAU,EAwBX,IArBIC,IAGHD,EAAU9gB,OAAOpD,aAAaC,IAAIikB,QAAQlV,QAAQ,IAAK,IACvDgV,EAAYE,EAAQxhB,OAAS,EAAI,IAAM,GACvC4gB,EAAc,IAAMY,EAAUF,EAAY5gB,OAAOpD,aAAaC,IAAIke,SAASnP,QAAQ,OAAQ,KAG5FiV,EAA2BhgB,KAAK,WAC/B+e,EAAWrhB,EAAE8B,UAIVwf,GAA2D,QAA1C7f,OAAOU,SAAS+V,SAASlB,OAAO,EAAG,IAA0D,QAA1CvV,OAAOU,SAAS+V,SAASlB,OAAO,EAAG,KAG1G0G,EAAOC,UAAY,sBACnB7T,EAAME,SAAS0T,EAAOC,YAIU,oBAA7Blc,OAAOU,SAAS+V,SAAgC,CACnD,GAAIuK,GAAeziB,EAAE,sCAGrB0d,GAAOC,UAAY,sBACnB7T,EAAME,SAAS0T,EAAOC,WACtB8E,EAAazY,SAAS,YAIvB,GAAiC,mBAA7BvI,OAAOU,SAAS+V,SAA+B,CAClD,GAAIwK,GAAkB1iB,EAAE,wBACvB2iB,EAAY3iB,EAAE,oBAGf0d,GAAOK,WAAa,mBACpBjU,EAAME,SAAS0T,EAAOK,YACtB2E,EAAgB1Y,SAAS,YACzB2Y,EAAU3Y,SAAS,YAIhB3L,cAAgBA,aAAaC,KAAO,WAAWqB,KAAKtB,aAAaC,IAAIskB,aAAane,iBACrFgZ,IACAC,EAAOC,UAAY,0BACnB7T,EAAME,SAAS0T,EAAOC,YAInBtf,cAAgBA,aAAaC,KAAO,eAAeqB,KAAKtB,aAAaC,IAAIskB,aAAane,iBACzFgZ,IACAC,EAAOC,UAAY,0BACnB7T,EAAME,SAAS0T,EAAOC,YAInBtf,cAAgBA,aAAaC,KAAO,SAASqB,KAAKtB,aAAaC,IAAIskB,aAAane,iBACnFgZ,IACAC,EAAOC,UAAY,sBACnB7T,EAAME,SAAS0T,EAAOC,YA4FxB,QAASkF,KACR,GAAIC,EAAU7B,QAAS,CACtB,GAAIpG,GAAO5b,SAASC,cAAc,OAG7B6gB,GAAQD,YACZA,IAIDiD,EAAa,aAAc,cAG3B/iB,EAAEyB,QAAQsE,IAAI,SAAU8c,GACxB7iB,EAAEyB,QAAQmB,GAAG,SAAUogB,GACvBhjB,EAAEyB,QAAQmB,GAAG,SAAUwa,GAEvB4C,IAIAnF,EAAKzb,UAAUQ,OAAOoG,MAAM6U,EAAKzb,UAAWye,GAG5ChD,EAAKzb,UAAUC,IAAI,0BAEfqe,EAAOC,UACV9C,EAAKzb,UAAUC,IAAIqe,EAAOC,WAG1B9C,EAAKzb,UAAUC,IAAI,uBAIpBwb,EAAKzb,UAAUQ,OAAOoG,MAAM6U,EAAKzb,UAAW4e,GAG5CnD,EAAKzb,UAAUQ,OAAO,wBACrB,qBAGDI,EAAE,eAAeud,IAAI,aAAc,IAGnCG,EAAOC,UAAYD,EAAOC,YAAa,EAGvCD,EAAOK,WAAaL,EAAOK,aAAc,GAS3C,QAASkF,KACR,GAAIC,GAAczC,EAAYhe,KAAK,mBAClC0gB,EAAclkB,SAASqE,iBAAiB,wCAEzCyc,GAAQkD,WAAY,EACpBhF,IACAnU,EAAME,SAAS,yBACfF,EAAME,SAAS,qBAGfyW,EAAY7d,GAAG,QAAS,yBAA0B,WACjD6a,IAEIzd,EAAE8B,MAAMshB,SAAS,YACpBtZ,EAAM8T,YAAY,wBAKpB6C,EAAY7d,GAAG,QAAS,kBAAmB,WAE1C,GAAIygB,GAAgBrjB,EAAEyB,QAAQ6hB,cAC7BC,EAAiBvjB,EAAE,gBACnBwjB,EAAmD,IAA1BD,EAAexiB,OAAewiB,EAAeD,cAAgB,EACtFG,EAAazjB,EAAE,WACf0jB,EAAuB1jB,EAAE,MAAOyjB,GAEhCE,EAAkCN,EAAgBG,EAAyBC,EAAWH,cADlD,EAGjCxZ,GAAMsZ,SAAS,qBAClBM,EAAqBnG,IAAI,aAAcoG,EAAkC,MAEzED,EAAqBnG,IAAI,aAAc,IAGxCzT,EAAM4V,YAAY,qBAClBwD,EAAYxV,KAAK,yBAAyE,SAA/CwV,EAAYxV,KAAK,0BAAuC,SAAW,UAI/GtD,EAAQxH,GAAG,QAAS,SAASyB,GAC5B,GAAIuf,GAAU5jB,EAAEqE,EAAM2c,OAGlB4C,GAAQ3K,QAAQwH,GAAa1f,OAAS,GAEpCkc,KAAe2G,EAAQC,GAAGpD,IAC9BtC,EAAiB,SAMZyF,EAAQC,GAAG,mEAAqED,EAAQ3K,QAAQ,kBAAkBlY,OAAS,GAChIod,EAAiB,WAMpBsC,EAAY7d,GAAG,QAAS,8BAA+B,WACtB,mBAArBnB,QAAOwM,WACjBxM,OAAOwM,UAAUjK,MAChBK,MAAO,iBACPvB,OAAQhB,KAAKvC,aAAa,mBAQ7BkhB,EAAY7d,GAAG,QAAS,kCAAmC,WAC1D,GAAIkhB,GAAkBpG,EAAOC,UAC5BoG,EAAmB,cAAgB/jB,EAAE8B,MAAMhC,KAAK,aAEJ,kBAAzCgC,KAAKvC,aAAa,oBAAiG,OAAxDN,SAASC,cAAc,+BACrFuC,OAAOU,SAASC,KAAON,KAAK5C,cAAc,KAAKK,aAAa,SAG7Dke,IAEIsG,IAAqBD,IACxBpG,EAAOC,UAAYoG,GAGpB5F,MAMDsC,EAAY7d,GAAG,QAAS,wCAAyC,SAASyB,GAEzE+Z,EADepe,EAAE8B,MAAM6c,OAAO,MACLta,KAI1B8e,EAAY5f,QAAQ,SAAST,GAC5BA,EAAOU,iBAAiB,QAAS,WAChCV,EAAO1D,UAAUiI,OAAO,iBAO1BoZ,EAAY7d,GAAG,QAAS,0BAA2B,WAClDub,EAAiB,6BAIlBne,EAAE,6CAA6C4C,GAAG,QAAS,WAC1D5C,EAAE,qBAAqB0f,YAAY,UACnC1f,EAAE,+CAA+C0f,YAAY,YAsC/D,QAASsD,KACR,GAAIgB,EAAS/C,QAAS,CACrB,GAAIpG,GAAO5b,SAASC,cAAc,OAG7B6gB,GAAQkD,WACZA,IAIDF,EAAa,YAAa,cAG1B/iB,EAAEyB,QAAQsE,IAAI,SAAUid,GACxBhjB,EAAEyB,QAAQmB,GAAG,SAAUigB,GACvB7iB,EAAEyB,QAAQsE,IAAI,SAAUqX,GAGxBE,EAAeC,IAAI,SAAU,IAI7B1C,EAAKzb,UAAUC,IAAI,wBAClB,qBAIDwb,EAAKzb,UAAUC,IAAI2G,MAAM6U,EAAKzb,UAAW4e,GAGzCnD,EAAKzb,UAAUQ,OAAO,yBACrB,uBAGD8d,EAAOC,WAAY,EAEnBD,EAAOK,WAAaC,EAAkB7M,KAAK,MAh6B7C,GAoBC4N,GAEA6B,EACAtB,EAvBGtf,EAAIG,IAAIkB,QAAQ,QACnBsU,EAAcxV,IAAIkB,QAAQ,yBAC1B0hB,EAAe5iB,IAAIkB,QAAQ,sBAKxB+I,EAAUpK,EAAEyB,QACfqI,EAAQ9J,EAAE,QACVsd,EAAiBtd,EAAE,iBACnBqd,EAAcC,EAAe7a,KAAK,OAClCge,EAAuBzgB,EAATgd,EAAWA,EAAY,kBACrC+D,EAAmB9hB,SAASC,cAAc,sBAC1CkgB,EAAgBpf,EAAE,oBAClBkhB,EAA2BlhB,EAAE,iCAC7BikB,EAAoB7E,EAAc3c,KAAK,0BAGpCob,EAoBJ,WAGC,IAAK,GAFDK,MACAgG,EAAiBjlB,SAASqE,iBAAiB,iCACtCpC,EAAI,EAAGA,EAAIgjB,EAAenjB,OAAQG,IAAK,CAC/C,GAAIqI,GAAK2a,EAAehjB,GAEpBijB,EAAW5a,EAAGhK,aAAa,kBAE/B,IAAI4kB,EAAU,CACb,GAAIC,GAAY,cAAgBD,CAChCjG,GAAQla,KAAKogB,IAIf,MAAOlG,MAjCPF,EAuCD,WAIC,IAAK,GAHDE,MACAmG,EAAkBplB,SAASqE,iBAAiB,mBAEvCpC,EAAI,EAAGA,EAAImjB,EAAgBtjB,OAAQG,IAAK,CAChD,GAAIijB,GAAWE,EAAgBnjB,GAAG3B,aAAa,mBAE/C,IAAI4kB,EAAU,CACb,GAAIC,GAAY,eAAiBD,CACjCjG,GAAQla,KAAKogB,IAKf,MAAOlG,MAnDPY,KAGA0D,EAAuD,mBAAxB/gB,QAAOpD,cAAmE,mBAA5BoD,QAAOpD,aAAaC,IACjGojB,IAAWc,GAAwB/gB,OAAOpD,aAAaC,IAAIE,OAAOqC,MAAM,KAAKE,OAAS,EACtF2c,GACCC,WAAW,EACXI,YAAY,GAEbgC,GACCD,YAAY,EACZmD,WAAW,GA4CTe,EAAWviB,OAAO6iB,WAAW,yBAChCxB,EAAYrhB,OAAO6iB,WAAW,qBAu1B/B,OAj0BIrH,MACH6C,IACA9f,EAAEyB,QAAQmB,GAAG,SAAUigB,GACvBE,EAAa,aAAc,gBAE3BE,IACAjjB,EAAEyB,QAAQmB,GAAG,SAAUogB,GACvBhjB,EAAEyB,QAAQmB,GAAG,OAAQogB,GACrBD,EAAa,YAAa,eAyH3BkB,EAAkBrhB,GAAG,QAASuc,GAG9B+B,EAAyBte,GAAG,QAAS,WACpCkH,EAAM8T,YAAY,sBAClB0B,EAA0Btf,EAAE8B,MAAM,GAGlCgI,EAAME,SAAS,sBACf/K,SAASC,cAAc,oBAAoBI,aAAa,iBAAiB,GACzE8f,EAAcpV,SAAS,UACvBhK,EAAE,QAAQgK,SAAS,6BACnBvI,OAAOsZ,QAAQC,WACdoG,eAAe,GACb,gBAAiB3f,OAAOU,SAASC,QAGrCX,OAAO+B,iBAAiB,WAAY2b,GAAkB,GA6mBtD,WAWC,QAASoF,GAAavW,GACrBA,EAAK5O,UAAUiI,OAAO,UAVXpI,SAASqE,iBAAiB,YAEhCC,QAAQ,SAASE,GACtB,GAAI+gB,GAAO/gB,CACX+gB,GAAKtlB,cAAc,sBAAsBsE,iBAAiB,QAAS,WAClE+gB,EAAaC,cA8DjB,IAAIpN,eAAgBjX,IAAIkB,QAAQ,+BAC5BojB,gBAAkB,SAAyBC,GACvC,GAEIC,GACAzjB,EAHA0jB,EAAW3Y,mBAAmBxK,OAAOU,SAASyC,OAAO2F,UAAU,IAC/Dsa,EAAgBD,EAAS/jB,MAAM,IAInC,KAAKK,EAAI,EAAGA,EAAI2jB,EAAc9jB,OAAQG,IAGlC,GAFAyjB,EAAiBE,EAAc3jB,GAAGL,MAAM,KAEpC8jB,EAAe,KAAOD,EACtB,MAAOC,GAAe,KAAOnlB,WAAmBmlB,EAAe,IAI3EG,kBAAoB,SAAUC,GAC1B,GAAIC,GAAM,GAAI7f,KAEd,OADA6f,GAAI5f,QAAQ4f,EAAI3f,UAAoB,KAAR0f,EAAe,KACpCC,EAAI1f,cAGnB,IAAImf,gBAAgB,WAAaA,gBAAgB,SAAU,CACvD,GAAIQ,YAAaxjB,OAAOU,SAAS+V,SAAS3N,UAAU,EACpD6M,eAAczO,QAAQ,cAAe8b,gBAAgB,SAAUK,kBAAkB,IAAK,IAAKG,YAAY,GAS3G9kB,IAAIK,OAAO,oCAAqC,WAC/C,YACA,IAAI4W,GAAgBjX,IAAIkB,QAAQ,+BAE/BjD,EAAS,EASV,OAPAgZ,GAAcxO,WAHA,qBAKqB,mBAAxBnH,QAAOpD,cAAmE,mBAA5BoD,QAAOpD,aAAaC,KAAiE,mBAAnCmD,QAAOpD,aAAaC,IAAIF,QAA0BqD,OAAOpD,aAAaC,IAAIF,OAAO2C,OAAS,IACpM3C,EAASqD,OAAOpD,aAAaC,IAAIF,OACjCgZ,EAAczO,QAPD,oBAOqBvK,EAAQoB,UAAW,IAAK,gBAGpD,MASR,WACC,YAEA,KACC,GACC4W,GAAYjW,IAAIkB,QAAQ,uBACxB6jB,EAASjmB,SAASqE,iBAAiB,SAEpC,IAAI4hB,EAAQ,CAKX,GAAIC,GAAoB,SAASC,EAAOC,GAEvC,IAAI,GAAIC,GAAI,EAAGA,EAAID,EAAO7d,QAAQzG,OAAQukB,IACrCD,EAAOE,eAAiBD,EAC3BD,EAAO7d,QAAQ8d,GAAGhmB,aAAa,WAAW,IAE1C+lB,EAAO7d,QAAQ8d,GAAGE,gBAAgB,WAIpC,IAAIC,GAAiBJ,EAAO7d,QAAQ6d,EAAOE,eAAe7kB,KAG5C2kB,GAAO/hB,iBAAiB,UAC9BC,QAAQ,SAASmiB,GACxB,GACCC,GAAQP,EAAM9hB,iBAAiB,qBAAuBoiB,EAAOhlB,OAC7DklB,EAAWR,EAAM9hB,iBAAiB,oCAAsCoiB,EAAOhlB,MAE5EglB,GAAOG,UACVF,EAAMpiB,QAAQ,SAASuiB,GAClBA,EAAK1mB,UAAU6H,SAASye,EAAOhlB,SAClColB,EAAK1mB,UAAUC,IAAIymB,EAAKC,QAAQC,mBAChCF,EAAK5mB,cAAc,SAASE,UAAUiO,QAAQ,mBAAoB,uBAGpEuY,EAASriB,QAAQ,SAAS0iB,GACrBA,EAAQ7mB,UAAU6H,SAASye,EAAOhlB,QACrCulB,EAAQ7mB,UAAUQ,OAAO,cAK3B+lB,EAAMpiB,QAAQ,SAASuiB,GAClBA,EAAK1mB,UAAU6H,SAASye,EAAOhlB,SAAWolB,EAAK1mB,UAAU6H,SAASwe,KACrEK,EAAK1mB,UAAUQ,OAAOkmB,EAAKC,QAAQC,mBACnCF,EAAK5mB,cAAc,SAASE,UAAUiO,QAAQ,mBAAoB,uBAGpEuY,EAASriB,QAAQ,SAAS0iB,GACrBA,EAAQ7mB,UAAU6H,SAASye,EAAOhlB,SAAWulB,EAAQ7mB,UAAU6H,SAASwe,IAC3EQ,EAAQ7mB,UAAUC,IAAI,eAQ3B6lB,GAAO3hB,QAAQ,SAAS6hB,GACvB,GAAIA,EAAMhmB,UAAU6H,SAAS,mBAAoB,CAC9Bme,EAAM9hB,iBAAiB,eAE7BC,QAAQ,SAAS2iB,GAC5B,GAAIb,GAASa,EAAWhnB,cAAc,SAGtCimB,GAAkBC,EAAOC,GAGzBa,EAAW1iB,iBAAiB,SAAU,SAASC,GAG9C0hB,EAAkBC,EAAOC,UAO7B5jB,OAAO+B,iBAAiB,mBAAoB,SAASC,GACpD,GAAIA,EAAEC,OAAOyiB,cAAe,CAC3B,GACCC,GAAmB3iB,EAAEC,OAAO2iB,SAAW,EACvCC,EAAsB7iB,EAAEC,OAAO6iB,YAC/BC,EAAc/iB,EAAEC,OAAOC,QAAQsV,QAAQ,SAGxC,IAAIuN,GAAeA,EAAYpnB,UAAU6H,SAAS,mBAAoB,CASrE,IAAI,GAJH0e,GAAQa,EAAYljB,iBAAiB,0BACrC4iB,GAAa,EACbO,EAAiB,EAEVvlB,EAAI,EAAGA,EAAIykB,EAAM5kB,OAAQG,IAAK,CACrC,GAAIwlB,GAAiBf,EAAMzkB,GAAGhC,cAAc,cAExCwnB,KACHR,EAAaQ,GAAkC,KAC/CD,EAAiBvlB,EAAI,GAIvB,GAAIulB,GAAkBL,EAIrB,IAAI,GAFA5e,GAAU0e,EAAW5iB,iBAAiB,UAElCpC,EAAI,EAAGA,EAAIsG,EAAQzG,OAAQG,IAC9BA,GAAKolB,IACR9e,EAAQtG,GAAG2kB,UAAW,EAGtBV,EAAkBqB,EAAaN,EAAWhnB,cAAc,gBAe9DgmB,EAAO3hB,QAAQ,SAAS6hB,GACnBA,EAAMhmB,UAAU6H,SAAS,WAC5BxF,OAAO+B,iBAAiB,SAAU,WACjC,GAAImjB,GAAYvB,EAAMlmB,cAAc,yBAChC0nB,EAAmBxB,EAAMlmB,cAAc,eAAeyS,wBAAwBK,MAElF,IAAI2U,EAAW,CACMvQ,EAAUuQ,EAAW,EAAG,MAAM,IAASvQ,EAAUgP,IAEhD3jB,OAAO6iB,WAAW,sBAAsBrD,QAC5D0F,EAAUhN,MAAW,KAAKiN,EAAmB,KAE7CD,EAAUhN,MAAW,IAAI,QAS9B,MAAO7V,GAEW,mBAARC,OACVxC,QAAQuC,MAAMA,GACdC,IAAIC,MACHC,QACCH,OACCI,KAAMJ,EAAMK,KACZC,QAASN,EAAMM,UAGjBC,MAAO,sBAiBXlE,IAAIK,OAAO,oCAAqCR,EAAEf,UAAUiO,MAAM,WACjE,YACA,IAAIkK,GAAgBjX,IAAIkB,QAAQ,+BAC/BwlB,EAAY7mB,EAAE,iBACdyc,EAAkBtc,IAAIkB,QAAQ,yBAAyBI,OAAOU,SAASC,MACvE0kB,EAAarK,EAAgBsK,cAS1BD,IAAcA,EAAW/lB,OAAS,GACrCqW,EAAczO,QAAQ,iBAAkBme,EAPpB,SAASE,GAC5B,GAAIhC,GAAM,GAAI7f,KAEd,OADA6f,GAAI5f,QAAQ4f,EAAI3f,UAAsB,GAAV2hB,EAAe,KACpChC,EAAI1f,eAI0D,IAAK,IAAKnD,SAAS+V,UAAU,GAGpG2O,EAAUjkB,GAAG,QAAS,WACrB,GAAIwU,EAAcpL,QAAQ,mBAAqBoL,EAAcpL,QAAQ,kBAAkBjL,OAAS,EAAG,CAElG,GAAImT,GAAOlU,EAAE8B,MAAM4L,KAAK,QACvBuZ,EAAmB/S,EAAK3R,QAhBZ,kBAiBZ2kB,KACAC,EAAgB/P,EAAcpL,QAlBlB,iBAsBb,IAAIkI,EAAK3R,QAAQ,MAAQ,EAAG,CACN2R,EAAKrT,MAAM,KAEjB0C,QAAQ,SAASyK,GAC/B,GAAI4J,GAAS5J,EAAKnN,MAAM,IACN,oBAAd+W,EAAO,GACVsP,EAAYljB,KAAK4T,EAAO,GAAK,IAAMA,EAAO,GAAK,IAAMuP,GAErDD,EAAYljB,KAAKgK,KAGnBhO,EAAE8B,MAAM4L,KAAK,OAAQwZ,EAAY/V,KAAK,UAChC,CACc+C,EAAKrT,MAAM,KAEjB0C,QAAQ,SAASyK,GAC9B,GAAI4J,GAAS5J,EAAKnN,MAAM,IAtCb,oBAwCP+W,EAAO,GACVsP,EAAYljB,KAAK4T,EAAO,GAAK,IAAMA,EAAO,GAAK,IAAMuP,GAErDD,EAAYljB,KAAKgK,GAEA,aAAd4J,EAAO,KAA2C,IAAtBqP,GAC/BC,EAAYljB,KAAKojB,kBAAoBD,KAIvCnnB,EAAE8B,MAAM4L,KAAK,OAAQwZ,EAAY/V,KAAK,aAe1ChR,IAAIK,OAAO,iCAAkC,WAE5C,GAAI4W,GAAgBjX,IAAIkB,QAAQ,+BAE5BgmB,GACH9hB,OAAQ,UACR+hB,cAAelQ,EAAcpL,QAAQ,mBACrC7C,IAAKlK,SAASqE,iBAAiB,2BAC/BikB,wBAAyB,WACvB,GAAIpL,EAGH,IAAI9d,aAAaC,IAAIyoB,iBAAmBvnB,WAAiD,OAApCnB,aAAaC,IAAIyoB,eACrE5K,EAAS9d,aAAaC,IAAIyoB,mBACpB,CACN,GAAIS,GAAcpQ,EAAcpL,QAAQ,UAEpCwb,IAAetiB,qBAClBsiB,EAActiB,mBAAmBsiB,GACjCrL,EAASqL,EACTnpB,aAAaC,IAAIyoB,eAAiBS,GAIrC,MAAOrL,IAETsL,oBAAqB,SAAS9H,EAAKpa,GAClC,GAAImiB,GAAK,mBAET,OAAO/H,GAAItS,QAAQqa,EAAI,IAAMniB,IAE9BoiB,iBAAkB,SAAS7nB,GAC1B,GAAIsC,GACHmH,EAAKzJ,EAAK8nB,cACVJ,EAAcH,EAAGE,2BAA6B,EAO/C,OANIhe,KACHA,EAAGnH,KAAOilB,EAAGI,oBAAoBle,EAAGnH,KAAMolB,GAE1CplB,EAAOmH,EAAGnH,MAGJA,GAERylB,eAAgB,SAAS/nB,GACxB,GAAIinB,GACHxd,EAAKzJ,EAAK8nB,cACVJ,EAAcH,EAAGE,2BAA6B,EAQ/C,OANIhe,GAAGwc,SAAWxc,EAAGwc,QAAQgB,iBAC5Bxd,EAAGwc,QAAQgB,eAAiBM,EAAGI,oBAAoBle,EAAGwc,QAAQgB,eAAgBS,GAE9ET,EAAiBxd,EAAGwc,QAAQgB,gBAGtBA,GAQRe,wBAAyB,SAAS3e,GACjC,GAAI4e,GAAW5e,GAAOke,EAAGle,IACxB6e,EAAQ7e,YAAe8e,cAAe9e,GAAOG,MAAMhJ,UAAUoG,MAAMvF,KAAK4mB,GACxEP,EAAcH,EAAGE,wBAAwBF,EAAG9hB,QAE5C2iB,GADgBb,EAAGC,cACP,6BACZa,IAoDD,OAlDIX,GACHQ,EAAMzkB,QAAQ,SAASgG,GACtB,GAAI4S,IACH5S,GAAIA,EAGL4S,GAAOjI,KAAOmT,EAAGM,kBAChBC,cAAere,IAEhB4S,EAAOiM,SAAWf,EAAGQ,gBACpBD,cAAere,IAGhB4e,EAAMnkB,KAAKmY,KAKZ6L,EAAMzkB,QAAQ,SAASgG,GACtBA,EAAG/F,iBAAiB,YAAa6jB,EAAGM,kBACpCpe,EAAG/F,iBAAiB,YAAa6jB,EAAGQ,gBACpCte,EAAG/F,iBAAiB,QAAS6jB,EAAGM,kBAChCpe,EAAG/F,iBAAiB,QAAS6jB,EAAGQ,gBAEhCM,EAAMnkB,MACLuF,GAAIA,EACJ8E,IAAK,YACLiB,SAAU+X,EAAGM,mBAEdQ,EAAMnkB,MACLuF,GAAIA,EACJ8E,IAAK,YACLiB,SAAU+X,EAAGQ,mBAKhBG,EAAMzkB,QAAQ,SAASgG,GACtB,GAAIA,EAAGnH,KAAK8G,MAAMgf,IAAc3e,EAAGhK,aAAa,wBAAwB2J,MAAMgf,GAC7E,GAAyB,OAArBb,EAAGC,cAAwB,CAC9B,GAAIE,GAA6C,MAA/BH,EAAGC,cAAc5gB,OAAO,GAAa2gB,EAAGC,cAAgBD,EAAGC,cAAgB,GAC7F/d,GAAGnH,KAAOmH,EAAGnH,KAAKiL,QAAQ6a,EAAWV,GACrCje,EAAGwc,QAAQgB,eAAiBxd,EAAGwc,QAAQgB,eAAe1Z,QAAQ6a,EAAWV,OAEzEje,GAAGnH,KAAOmH,EAAGnH,KAAKiL,QAAQ6a,EAAW,IACrC3e,EAAGwc,QAAQgB,eAAiBxd,EAAGwc,QAAQgB,eAAe1Z,QAAQ6a,EAAW,MAKrEC,GAIT,OAAOd,KAeRlnB,IAAIK,OAAO,gCAAiC,WAC3C,GAAI4W,GAAgBjX,IAAIkB,QAAQ,+BAC/B8S,EAAgBhU,IAAIkB,QAAQ,2BAEzBgnB,GACHC,YAAa,iBACbC,yBAA0B,uBAC1BC,WAAY,mBACZC,UAAW,0BACXC,iBAAkB,qDAClBC,UAAW1pB,SAAS4Z,eAAe,gBAEnC+P,oBAAqB,WAGpB,QAFkBxR,EAAcpL,QAAQqc,EAAIC,cAAgB,IACpCpf,MAAMmf,EAAIE,2BAA6B,IAClD,IAAM,IAGpBZ,iBAAkB,SAAStjB,GAC1B,GAAIkF,GAAKlF,EAAM2c,MACf,IAAIzX,EAAG0X,QAAQoH,EAAIK,kBAAmB,CACrC,GAAIG,GAAcR,EAAIO,qBAMtB,IAJKrf,EAAGnH,OACPmH,EAAKA,EAAG0P,QAAQoP,EAAII,YAGjBI,GAAetf,EAAGnH,KACrB,GAAI,mBAAqBX,QACxBoV,IAAM,GAAIhJ,KAAItE,EAAGnH,MACjB0mB,YAAc,GAAI7S,iBAAgBY,IAAIjS,QACtCkkB,YAAYre,IAAI4d,EAAIG,WAAYK,GAEhChS,IAAIjS,OAASkkB,YAAY1oB,WACzBmJ,EAAGnH,KAAOyU,IAAIzW,eAGV,CACJ,GAAI2B,GAAQ,GAAIC,QAAO,OAASqmB,EAAIG,WAAa,gBAAiB,KAClEjf,GAAGnH,KAAOmH,EAAGnH,KAAKiL,QAAQtL,EAAO,IACjCoS,EAAc5K,EAAI8e,EAAIG,WAAYH,EAAIG,WAAa,QAAStjB,mBAAmB2jB,OAMnFE,uBAAwB,WACnBV,EAAIM,YACPN,EAAIM,UAAUnlB,iBAAiB,UAAW6kB,EAAIV,kBAC9CU,EAAIM,UAAUnlB,iBAAiB,YAAa6kB,EAAIV,oBAKnD,OAAOU,KAYRloB,IAAIK,OAAO,0BAA2B,WAClC,YACA,IAAIR,GAAIG,IAAIkB,QAAQ,UAChB+V,EAAgBjX,IAAIkB,QAAQ,+BAE5B4jB,EAAaxjB,OAAOU,SAAS+V,SAAS3N,UAAU,EAEpDvK,GAAEf,UAAUiO,MAAM,WACd,GAAI8b,MACAC,EAAUjpB,EAAE,WACZkpB,EAAuBD,EAAQ1L,IAAI,kBACnC4L,EAAsBF,EAAQ1L,IAAI,iBAClC6L,EAAa,WAET,MADc3nB,QAAuB,iBAAIA,OAAOyb,iBAAiBje,SAAS4b,KAAM,UAAUsC,iBAAiB,WAAa,IAG5HkM,EAAiC,aAAjBD,KAAkD,aAAjBA,KAAkD,WAAjBA,GAEtFJ,GAAUM,UAAYtpB,EAAE,kBACxBgpB,EAAUO,eAAiBvpB,EAAE,4BAK7BgpB,EAAUja,MAAQ,WACd,GAAIya,GAAQ,GAAIrkB,MACZskB,EAAS,GAAItkB,KAEjBskB,GAAOrkB,QAAQokB,EAAMnkB,UAAY,QAEjC,KACI+R,EAAczO,QA3BT,kBA2B6B,OAAQ8gB,EAAOze,cAAe,IAAKia,GACrEhX,UAAUjK,MACNK,MAAS,+BAEf,MAAOP,GACLvC,QAAQmoB,IAAI,mFAAoF5lB,GAGpGklB,EAAUM,UAAU1pB,SAEhBypB,EACAJ,EAAQ1L,IAAI,iBAAkB2L,GAE9BD,EAAQ1L,IAAI,gBAAiB4L,IAOrCH,EAAUW,WAAa,WAEuB,SAAtCvS,EAAcpL,QAjDT,oBAkDLgd,EAAUM,UAAUtf,SAAS,WAE7Bgf,EAAUM,UAAU1mB,GAAG,mDAAoD,SAASyB,GAC5EglB,EACAJ,EAAQ1L,IAAI,iBAAkByL,EAAUM,UAAUtX,SAAW,MAE7DiX,EAAQ1L,IAAI,gBAAiByL,EAAUM,UAAUtX,SAAW,QAGpE/D,UAAUjK,MACNK,MAAS,yBAEb2kB,EAAUO,eAAe3mB,GAAG,QAASomB,EAAUja,SAE/Cia,EAAUM,UAAU1pB,SAChBypB,GACAJ,EAAQ1L,IAAI,iBAAkB2L,KAK1CF,EAAUW,iBAwBlBxpB,IAAIK,OAAO,mBAAoB,WAC9B,YAEA,IAAIR,GAAIG,IAAIkB,QAAQ,OAGfI,QAAOF,UACXE,OAAOF,SACNmoB,IAAK,cAKP,IAAIhM,IACHlW,WAKA5F,KAAM,WACL,GAAIgoB,GAAOnoB,OAAOpD,aAAeoD,OAAOpD,aAAaC,WACjDurB,EAAS/nB,KAAKgoB,eAAeF,GAC7BG,EAAOjoB,KAAKioB,IAKhBjoB,MAAK0F,QAAUoiB,EAKf9nB,KAAKkoB,aAAaH,EAAQpoB,QAU1BtB,IAAIkB,QAAQ,qBASZrB,EAAEf,UAAUiO,MAAM,WACK7O,aAAa4rB,eAGnCF,GAAK,uBAAwB,SAASG,GACrC,GAAIlN,GAAS,0BACT/d,UAASC,cAAc8d,IAC1BkN,EAAOlN,KAKT+M,EAAK,uBAAwB,SAASG,GAChCpN,MAAMqN,mBACVD,EAAOtoB,SAKTmoB,EAAK,qBAAsB,SAASG,GAC9BpN,MAAMsN,iBACVF,EAAOtoB,SAKTmoB,EAAK,eAAgB,SAASG,GACxBpN,MAAMuN,WACVH,EAAOtoB,SAKTmoB,EAAK,uBAAwB,SAASG,GAChCpN,MAAMwN,uBACVJ,EAAOtoB,SAKTmoB,EAAK,yBAA0B,SAASG,GACvCA,EAAOtoB,SAIRmoB,EAAK,wBAAyB,SAASG,GACjCpN,MAAMyN,oBACVL,EAAON,EAAKxrB,QAAU,MAKxB2rB,EAAK,0BAA2B,SAASG,GACnCpN,MAAM0N,sBACVN,MAKFH,EAAK,iCAAkC,SAASG,GACtCA,IACNpC,4BAIJiC,EAAK,0BAA2B,SAASG,GACnC,sCAAsCvqB,KAAKwC,SAASqR,WAA+C,aAAlCnV,aAAaC,IAAIskB,cACtFsH,EAAOtoB,SAKTmoB,EAAK,gCAAiC,SAASG,GACpCA,IACNnB,2BAGLgB,EAAK,2BAA4B,SAASG,GACzCA,OAcF,KAC6B,mBAAjB7rB,eAAgCA,aAAasM,eAAe,UACtEsD,UAAUjK,MACTK,MAAO,kBACPiK,cAAe,oBACfC,YAAalQ,aAAauW,OAAO6V,aAAa,GAAGhU,QACjDjI,WAAY,KAGb/M,OAAO+B,iBAAiB,eAAgB,WACvCyK,UAAUjK,MACTK,MAAO,kBACPiK,cAAe,oBACfC,YAAalQ,aAAauW,OAAO6V,aAAa,GAAGhU,QACjDjI,WAAY,OAEV7M,MAAM,IAEV,MAAO8B,MAYVsmB,KAAM,SAASW,EAAY7kB,GAC1B,GAAI6X,GAAS5b,KACT6oB,EAAMxqB,IAAIkB,QACV6oB,EAASQ,EAAaC,EAAID,GAAY,GAAS,IAEnD,KACC7kB,EAAG1E,KAAKuc,EAAQwM,GACf,MAAOzmB,GACR,OAAO,EACN,QACD,MAAOymB,KASTJ,eAAgB,SAASF,GACxB,GAAIzmB,GAAS9E,aAAa8E,MAE1B,IAAIymB,EACH,OACCxrB,OAAQwrB,EAAKxrB,OACbwsB,SAAUhB,EAAKgB,SACf9N,OACC1e,OAAQwrB,EAAKxrB,OACb2J,uBAAwB6hB,EAAK7hB,uBAC7BE,wBAAyB2hB,EAAK3hB,wBAC9B4iB,WAAYjB,EAAKiB,WACjBC,SAAUlB,EAAKgB,SACfpjB,SACCpJ,OAAQwrB,EAAKxrB,OACb0sB,SAAUlB,EAAKgB,UAEhBG,MAAO,WACN,MAAO5nB,GAAOC,GAAGe,MAGlB6mB,cAAe,WACd,MAAO7nB,GAAOC,GAAGF,YActB8mB,aAAc,SAASiB,EAAKjK,GAC3B,GAAIkK,EAEJ,KAAK,GAAItlB,KAAOqlB,GACkC,oBAA7C5qB,OAAOC,UAAUF,SAASe,KAAK8pB,EAAIrlB,KAA4C,OAAbqlB,EAAIrlB,GACnEA,IAAOob,GAGZkK,EAAWA,EAAgBA,EAAU,KAAOtlB,EAAvBA,EAFrBob,EAAOpb,GAAOqlB,EAAIrlB,IAKnBob,EAAOpb,GAAOob,EAAOpb,OACrB9D,KAAKkoB,aAAaiB,EAAIrlB,GAAMob,EAAOpb,IAMrC,OAAOob,IAORmK,UAAW,WACV,MAAOrpB,MAAK0F,SAOd,OAFAkW,GAAO9b,OAEA8b","file":"avast.js","sourcesContent":["/**\n * Avast Module Definition\n * @version 1.1.0\n * @author Jiri Duchon \n * @copyright AVAST Software s.r.o.\n */\n\nvar avm = (function() {\n\t'use strict';\n\tvar toString = Object.prototype.toString,\n\t\tmodules = {};\n\treturn {\n\n\t\t/**\n\t\t * Define module\n\t\t * @param {string} namespace\n\t\t * @param {*} value\n\t\t * @returns {*}\n\t\t */\n\t\tdefine: function(namespace, value) {\n\t\t\tif (typeof namespace === 'string' && typeof value !== 'undefined') {\n\t\t\t\tvar spaces = namespace.split('.'),\n\t\t\t\t\tspacesLength = spaces.length,\n\t\t\t\t\tspacesLast = spacesLength - 1,\n\t\t\t\t\tspacesRoot = modules,\n\t\t\t\t\tspace;\n\t\t\t\tfor (var i = 0; i < spacesLength; i++) {\n\t\t\t\t\tspace = spaces[i];\n\t\t\t\t\tif (i < spacesLast && (toString.call(spacesRoot[space]) === '[object Object]' && spacesRoot[space] !== null || !(space in spacesRoot))) {\n\t\t\t\t\t\tspacesRoot = spacesRoot[space] = spacesRoot[space] || {};\n\t\t\t\t\t} else if (i === spacesLast && !(space in spacesRoot)) {\n\t\t\t\t\t\tspacesRoot = spacesRoot[space] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Module ' + namespace + ' already exists');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spacesRoot;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Require module\n\t\t * @param {string} namespace\n\t\t * @param {boolean} [required=true]\n\t\t * @returns {*}\n\t\t */\n\t\trequire: function(namespace, required) {\n\t\t\trequired = typeof required === 'undefined' ? true : required;\n\t\t\tif (typeof namespace === 'string' && typeof required === 'boolean') {\n\t\t\t\tvar spaces = namespace.split('.'),\n\t\t\t\t\tspacesLength = spaces.length,\n\t\t\t\t\tspacesRoot = modules,\n\t\t\t\t\tspace;\n\t\t\t\tfor (var i = 0; i < spacesLength; i++) {\n\t\t\t\t\tspace = spaces[i];\n\t\t\t\t\tif (toString.call(spacesRoot) === '[object Object]' && spacesRoot !== null && space in spacesRoot) {\n\t\t\t\t\t\tspacesRoot = spacesRoot[space];\n\t\t\t\t\t} else if (required) {\n\t\t\t\t\t\tthrow new Error('Module ' + namespace + ' does not exist');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (typeof console === 'object' && typeof console.warn === 'function') {\n\t\t\t\t\t\t\tconsole.warn('Module ' + namespace + ' does not exist');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spacesRoot;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments');\n\t\t\t}\n\t\t}\n\t};\n})();\n\n/**\n * Init cash\n */\n(function() {\n\tif (typeof avm === 'object' && typeof avm.define === 'function' && typeof window.cash === 'function') {\n\t\tavm.define('jquery', window.cash); //Replace jQuery with cash. Remove when migration done\n\t\tavm.define('cash', window.cash);\n\t}\n})();\n\n/**\n * Append p_bld param to cart links\n * @version 0.2.0\n * @author Ales Gabriel \n * @module avast.web.appendPbld\n * @requires jquery\n */\navm.define('avast.web.appendPbld', (function () {\n 'use strict';\n\n var $ = avm.require('jquery');\n\n return {\n once: 0,\n init: function(){\n var appendPbld = this;\n var re = '[\\\\?&](p_bld=[^&#]*)';\n var regex = new RegExp(re, 'i');\n var results = regex.exec(window.location.href);\n var param = '';\n\n if(results){\n // Web\n $('a').each(function() {\n if (this.href.indexOf('store.avast.com') != -1 && this.href.indexOf('p_bld=') == -1) {\n param = (this.href.indexOf('?') > -1) ? '&' + results[1] : '?' + results[1];\n this.href += param;\n }\n });\n // Ints\n $('.choice', '.selection').each(function() {\n var input = $(this).find('input[type=radio]');\n var cartLink = input.val();\n if (cartLink.indexOf('store.avast.com') != -1 && cartLink.indexOf('p_bld=') == -1) {\n param = (cartLink.indexOf('?') > -1) ? '&' + results[1] : '?' + results[1];\n input.val(cartLink + param);\n }\n });\n }\n\n if (!this.once) {\n $(document).on('avast.ab.updatePrice avast.bab.updatePrice', function() {appendPbld.init();});\n this.once = 1;\n }\n }\n };\n})());\n\n// unsupported chrome on older windows versions GLOWEB-7000\n\n\n(function() {\n 'use strict';\n\n try {\n var version = avastGlobals.detect.os.version;\n\n // check for windows version 7, 8, 8.1\n if(avastGlobals.detect.os.isWindows && (version === '7' || version === '8' || version === '8.1')) {\n var buttons = document.querySelectorAll('[data-download-name*=\"ASB\"]');\n\n // set tooltip on all download links contains ASB download ID\n buttons.forEach(function(button) {\n setTooltipOnButton(button);\n });\n\n // event listener for change in actionbox and search if in updated content isn't link with ASB download ID\n window.addEventListener('actionbox-updated', function(e) {\n e.detail.element.querySelectorAll('[data-download-name*=\"ASB\"]:not([data-toggle])').forEach(function(button) {\n setTooltipOnButton(button);\n new BSN.Tooltip(button);\n });\n });\n\n // event listener for opened modal and search if modal content contains not-updated link with ASB download ID\n window.addEventListener('modal-shown', function(e) {\n e.detail.element.querySelectorAll('[data-download-name*=\"ASB\"]:not([data-toggle])').forEach(function(button) {\n setTooltipOnButton(button);\n new BSN.Tooltip(button);\n });\n });\n\n // set tooltip with information about unsupported system version on provided button\n function setTooltipOnButton(button) {\n button.setAttribute('data-toggle', 'tooltip');\n button.title = avastGlobals.texts.chromeUnsupportedOS;\n }\n\n }\n\n } catch (error) {\n console.error(error);\n sdl.push({\n system: {\n error: {\n type: error.name,\n message: error.message,\n }\n },\n event: 'system.error'\n })\n }\n\n})();\n\n\n/**\n * Create SOURCE cookie from ref=cj, ref=td query string parameter\n * @version 0.2.0\n * @author Ales Gabriel, Michal Samaš\n * @module avast.web.cj\n * @todo use avast.storage modules for cookie\n * @copyright Avast Software s.r.o ©2015\n */\n\navm.define('avast.web.cj', (function() {\n var cj = {\n init: function(){\n var cj = this;\n var param = cj.getURLParameter('ref');\n var ref = (typeof param === 'string') ? param.toUpperCase() : null;\n var cjCookieName = 'SOURCE';\n var age = 7776000; // 90 days to expire\n var domain = '.avast.com';\n var path = '/';\n\n\t\t\tif (ref === 'CJ' || ref === 'TD') {\n cj.setCookie(cjCookieName, ref, domain, path, age);\n }\n },\n getURLParameter: function(name) {\n return decodeURI((RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]);\n },\n setCookie: function(name,value,domain,path,age) {\n var exp = \"\",p = \";path=/\",d = \"\";\n var val = (value) ? encodeURIComponent(value) : '';\n if (age) {\n d = new Date();\n d.setTime(d.getTime()+(age*1000));\n exp = \";expires=\"+d.toUTCString()+\";max-age=\"+ age;\n }\n if(path){\n p = \";path=\"+path;\n }\n if(domain){\n d = \";domain=\"+domain;\n }\n\n document.cookie = name+\"=\"+val+exp+d+p+\";\";\n }\n };\n\nreturn cj;\n\n})());\n\n/**\n* Avast Email capture form\n* @version 1.0.0\n* @author Jaroslav Slaby, Fedor Kuss\n*/\n\n(function(){\n\t// check if browser support fetch function\n\tif (document.querySelector('.e-capture')) {\n\t\tif (typeof fetch === 'function') {\n\t\t\tvar selectorButton = document.querySelector('.e-capture');\n\t\t\t// set event listener on email capture button\n\t\t\tselectorButton.addEventListener('click', function() {\n\t\t\t\tloadEmailForm();\n\t\t\t})\n\t\t} else {\n\t\t\t// hide email capture button (for IE R.I.P)\n\t\t\tdocument.querySelector('.e-capture').classList.add('d-none');\n\t\t}\n\t}\n})();\n\nfunction loadEmailForm(captchaText) {\n\tvar locale = '/' + avastGlobals.web.locale;\n\n\t// update locale on region with diferent 1. domain\n\tswitch (avastGlobals.web.locale) {\n\t\tcase 'en-ww':\n\t\t\tlocale = '';\n\t\t\tbreak;\n\n\t\tcase 'ja-jp':\n\t\t\tlocale = '';\n\t\t\tbreak;\n\n\t\tcase 'ru-ru':\n\t\t\tlocale = '';\n\t\t\tbreak;\n\n\t\tcase 'uk-ua':\n\t\t\tlocale = '';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\t// fetch content of email capture form from CMS\n\tfetch('https://' + avastGlobals.web.domain + locale + '/email-capture-form-content', {headers: {\n\t\t'Accept': 'application/json',\n\t\t 'X-Requested-With': 'XMLHttpRequest'\n\t}}).then(function (response) {\n\t\treturn response.text();\n\t}).then(function (html) {\n\t\t// get modal window body\n\t\tvar\tformModal = document.querySelector('#email-capture .modal-body');\n\n\t\t// assign response from fetch into modal\n\t\tformModal.innerHTML = html;\n\n\t\t// hide thank message (message after submiting)\n\t\tformModal.querySelector('#thank-page').classList.add('d-none');\n\t\t// hide error note of too many request from the same pc\n\t\tformModal.querySelector('#session-note').classList.add('d-none');\n\t\t// captcha\n\t\tif (formModal.querySelector('#frm-captcha')) {\n\t\t\tformModal.querySelector('#frm-captcha').setAttribute('placeholder', formModal.querySelector('#form-body').getAttribute('data-code'));\n\t\t}\n\t\tif (captchaText !== undefined) {\n\t\t\tformModal.querySelector('#frm-captcha').setAttribute('message', captchaText);\n\t\t}\n\t\t// run avast form linear/form fetch script\n\t\tinitAvastForm();\n\t}).catch(function (err) {\n\t\t// There was an error\n\n\t\t// show error note\n\t\tif(/captcha/.test(err)) {\n\t\t\tdocument.querySelector('#email-capture #form-body').classList.add('d-none')\n\t\t\tdocument.querySelector('#email-capture #thank-page').classList.add('d-none')\n\t\t\tdocument.querySelector('#email-capture #session-note').classList.remove('d-none')\n\t\t}\n\t});\n}\n\n// function called by response from CMS ??\nfunction submitForm(data) {\n\n\t// BE returns passed email -> show thank you\n\tif(data.email){\n\t\tdocument.querySelector('#email-capture #form-body').classList.add('d-none')\n\t\tdocument.querySelector('#email-capture #thank-page').classList.remove('d-none')\n\t\tdocument.querySelector('#email-capture #session-note').classList.add('d-none')\n\t\t$('#email-placeholder').html(data.email);\n\t}\n\n\t// BE returns error\n\tif(data.errors){\n\t\t// errror contains captcha\n\t\tif(data.errors.captcha) {\n\t\t\t// reload form with captcha field\n\t\t\tloadEmailForm(data.errors.captcha);\n\t\t} else {\n\t\t\t// show erro note\n\t\t\tdocument.querySelector('#email-capture #form-body').classList.add('d-none')\n\t\t\tdocument.querySelector('#email-capture #thank-page').classList.add('d-none')\n\t\t\tdocument.querySelector('#email-capture #session-note').classList.remove('d-none')\n\t\t}\n\t}\n}\n\n\n/**\n * Event emitter\n * @version 1.0.0\n * @author Ales Gabriel \n * @module avast.event.emitter\n * @return {Function} Emitter constructor\n */\navm.define('avast.event.emitter', (function(){\n\t'use strict';\n\n\t/**\n\t * Event emitter\n\t * @version 1.2.1\n\t * @see {@link https://github.com/component/emitter}\n\t */\n\n\t/*\n\t(The MIT License)\n\n\tCopyright (c) 2014 Component contributors \n\n\tPermission is hereby granted, free of charge, to any person\n\tobtaining a copy of this software and associated documentation\n\tfiles (the \"Software\"), to deal in the Software without\n\trestriction, including without limitation the rights to use,\n\tcopy, modify, merge, publish, distribute, sublicense, and/or sell\n\tcopies of the Software, and to permit persons to whom the\n\tSoftware is furnished to do so, subject to the following\n\tconditions:\n\n\tThe above copyright notice and this permission notice shall be\n\tincluded in all copies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n\tEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n\tOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n\tNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n\tHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n\tWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n\tFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n\tOTHER DEALINGS IN THE SOFTWARE.\n\t*/\n\n\t/**\n\t * Initialize a new `Emitter`.\n\t *\n\t * @api public\n\t */\n\n\tfunction Emitter(obj) {\n\t if (obj) return mixin(obj);\n\t};\n\n\t/**\n\t * Mixin the emitter properties.\n\t *\n\t * @param {Object} obj\n\t * @return {Object}\n\t * @api private\n\t */\n\n\tfunction mixin(obj) {\n\t for (var key in Emitter.prototype) {\n\t\tobj[key] = Emitter.prototype[key];\n\t }\n\t return obj;\n\t}\n\n\t/**\n\t * Listen on the given `event` with `fn`.\n\t *\n\t * @param {String} event\n\t * @param {Function} fn\n\t * @return {Emitter}\n\t * @api public\n\t */\n\n\tEmitter.prototype.on =\n\tEmitter.prototype.addEventListener = function(event, fn){\n\t this._callbacks = this._callbacks || {};\n\t (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n\t\t.push(fn);\n\t return this;\n\t};\n\n\t/**\n\t * Adds an `event` listener that will be invoked a single\n\t * time then automatically removed.\n\t *\n\t * @param {String} event\n\t * @param {Function} fn\n\t * @return {Emitter}\n\t * @api public\n\t */\n\n\tEmitter.prototype.once = function(event, fn){\n\t function on() {\n\t\tthis.off(event, on);\n\t\tfn.apply(this, arguments);\n\t }\n\n\t on.fn = fn;\n\t this.on(event, on);\n\t return this;\n\t};\n\n\t/**\n\t * Remove the given callback for `event` or all\n\t * registered callbacks.\n\t *\n\t * @param {String} event\n\t * @param {Function} fn\n\t * @return {Emitter}\n\t * @api public\n\t */\n\n\tEmitter.prototype.off =\n\tEmitter.prototype.removeListener =\n\tEmitter.prototype.removeAllListeners =\n\tEmitter.prototype.removeEventListener = function(event, fn){\n\t this._callbacks = this._callbacks || {};\n\n\t // all\n\t if (0 == arguments.length) {\n\t\tthis._callbacks = {};\n\t\treturn this;\n\t }\n\n\t // specific event\n\t var callbacks = this._callbacks['$' + event];\n\t if (!callbacks) return this;\n\n\t // remove all handlers\n\t if (1 == arguments.length) {\n\t\tdelete this._callbacks['$' + event];\n\t\treturn this;\n\t }\n\n\t // remove specific handler\n\t var cb;\n\t for (var i = 0; i < callbacks.length; i++) {\n\t\tcb = callbacks[i];\n\t\tif (cb === fn || cb.fn === fn) {\n\t\t callbacks.splice(i, 1);\n\t\t break;\n\t\t}\n\t }\n\t return this;\n\t};\n\n\t/**\n\t * Emit `event` with the given args.\n\t *\n\t * @param {String} event\n\t * @param {Mixed} ...\n\t * @return {Emitter}\n\t */\n\n\tEmitter.prototype.emit = function(event){\n\t this._callbacks = this._callbacks || {};\n\t var args = [].slice.call(arguments, 1)\n\t\t, callbacks = this._callbacks['$' + event];\n\n\t if (callbacks) {\n\t\tcallbacks = callbacks.slice(0);\n\t\tfor (var i = 0, len = callbacks.length; i < len; ++i) {\n\t\t callbacks[i].apply(this, args);\n\t\t}\n\t }\n\n\t return this;\n\t};\n\n\t/**\n\t * Return array of callbacks for `event`.\n\t *\n\t * @param {String} event\n\t * @return {Array}\n\t * @api public\n\t */\n\n\tEmitter.prototype.listeners = function(event){\n\t this._callbacks = this._callbacks || {};\n\t return this._callbacks['$' + event] || [];\n\t};\n\n\t/**\n\t * Check if this emitter has `event` handlers.\n\t *\n\t * @param {String} event\n\t * @return {Boolean}\n\t * @api public\n\t */\n\n\tEmitter.prototype.hasListeners = function(event){\n\t return !! this.listeners(event).length;\n\t};\n\n\treturn Emitter;\n})());\n\n/**\n * Footer\n * @version 1.0.0\n * @author Jaroslav Slaby \n */\n(function(){\n\t'use strict';\n\n\t// get footer element and lists control elements\n\tvar footer = document.querySelector('[data-cmp-name=\"footer-links\"]'),\n\t\tfooterListControls = document.querySelectorAll('.js-footer-links'),\n\t\tfirst = true; // first run \n\n\t// check if elements exists\n\tif (footer && footerListControls.length>0) {\n\t\t// check width on page load\n\t\tcheckWidth(document.documentElement.clientWidth);\n\n\t\t// set listener on page resize and check width\n\t\twindow.addEventListener(\"resize\", function() {\n\t\t\tcheckWidth(document.documentElement.clientWidth)\n\t\t});\n\n\t\t// set view between desktop and mobile (will be changed based on CSS pseudoelements)\n\t\tfunction checkWidth(width) {\n\t\t\t// mobile view\n\t\t\tif (width<992 && !footer.classList.contains('js-colapse')) {\n\t\t\t\t// set class on footer to avoid running this if if it is not needed\n\t\t\t\tfooter.classList.add('js-colapse');\n\n\t\t\t\t// at the first run, create event listener for click on lists control elements\n\t\t\t\tif (first) {\n\t\t\t\t\tfirst = false;\n\n\t\t\t\t\tfooterListControls.forEach(function(trigger) {\n\t\t\t\t\t\ttrigger.addEventListener('click', function(e) {\n\t\t\t\t\t\t\t// after click toggle class on control elements\n\t\t\t\t\t\t\tthis.classList.toggle('expand-list');\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t// desktop view\n\t\t\t} else if (width>=992 && footer.classList.contains('js-colapse')) {\n\t\t\t\t//remove class on footer\n\t\t\t\tfooter.classList.remove('js-colapse');\n\t\t\t}\n\t\t}\n\t}\n})();\n\n/**\n * Avast Number format\n * @version 2.1.0\n * @author Michal Langhoffer \n * @module avast.number.format\n * @requires jquery\n */\n\navm.define('avast.number.format', (function () {\n 'use strict';\n var $ = avm.require('jquery');\n return {\n options: {\n decimal: 0\n },\n translate: function (number, decimal) {\n var root = this,\n avastGlobals = window.avastGlobals;\n\n if (decimal !== undefined) {\n this.options.decimal = decimal;\n } else {\n this.options.decimal = 0;\n }\n if (!isNaN(number) && avastGlobals && typeof avastGlobals.web === 'object') {\n var ds = avastGlobals.web.numberDecimalSeparator,\n ts = avastGlobals.web.numberThousandSeparator;\n if (ds && ds) {\n var val = $().number_format(\n number,\n {\n numberOfDecimals: root.options.decimal,\n decimalSeparator: ds,\n thousandSeparator: ts,\n symbol: \"\"\n }\n );\n return val;\n } else {\n return number;\n }\n } else {\n return number;\n }\n }\n };\n})());\n/**\n * Check if cookie support is enabled\n * @version 1.0.0\n * @author Jiri Duchon \n * @module avast.storage.isCookieEnabled\n */\navm.define('avast.storage.isCookieEnabled', (function() {\n\t'use strict';\n\tif (navigator.cookieEnabled) {\n\t\treturn true;\n\t} else {\n\t\tvar key = 'isCookieEnabled';\n\t\tdocument.cookie = key + '=1';\n\t\tif (document.cookie.indexOf(key + '=1') !== -1) {\n\t\t\tdocument.cookie = key + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n})());\n\n/**\n * Check if storage support is enabled\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.storage.isStorageEnabled\n */\navm.define('avast.storage.isStorageEnabled', (function() {\n\t'use strict';\n\ttry {\n\t\tif (typeof sessionStorage === 'object' && sessionStorage && typeof localStorage === 'object' && localStorage) {\n\t\t\tvar key = 'isStorageEnabled';\n\t\t\tsessionStorage.setItem(key, '1');\n\t\t\tsessionStorage.removeItem(key);\n\t\t\tlocalStorage.setItem(key, '1');\n\t\t\tlocalStorage.removeItem(key);\n\t\t\treturn true;\n\t\t}\n\t} catch (error) {\n\t\tif (typeof console === 'object' && console && typeof console.warn === 'function') {\n\t\t\tconsole.warn(error);\n\t\t}\n\t}\n\treturn false;\n})());\n\n/**\n* Avast Language selector\n* @version 3\n* @author Michal Langhoffer, Ales Gabriel, Jaroslav Slaby, Cenek Hybler\n* @module avast.web.languageSelector\n* @requires cash\n*/\n/* \navm.define('avast.web.languageSelector', function () {\n\t'use strict';\n\tconsole.log(\"TEST\");\n\n\tvar $ = avm.require('cash'),\n\t\tregionModal = document.querySelector('.region-selector'), // modal with regions\n\t\tlangSelectorBtn = document.querySelectorAll('.js-language-selector-trigger'), // button to open modal (in header and footer)\n\t\tsubcategoryToggler = regionModal.querySelector('.js-subcategory'), // collapse toggler on mobile\n\t\tcloseBtn = regionModal.querySelector('.region-selector-close'), // modal closing icon\n\n\t\tlanguageSelector = {\n\t\t\tinit: function() {\n\t\t\t\tvar self = this;\n\t\t\t\t// Highligh current region\n\t\t\t\tregionModal.find('.' + avast.locale).addClass('highlight');\n\t\t\t\t$(document).on('keydown.languageSelector.avast', self.keyPressHandler);\n\t\t\t\tlangSelectorBtn.on('click', self.open);\n\t\t\t\tsubcategoryToggler.on('click', self.toggleContinents);\n\t\t\t\tcloseBtn.on('click', self.close);\n\t\t\t},\n\t\t\tkeyPressHandler: function(evt) {\n\t\t\t\tif (evt.which === 27) {\n\t\t\t\t\tlanguageSelector.close(evt);\n\t\t\t\t}\n\t\t\t},\n\t\t\topen: function(e) {\n\t\t\t\tconsole.log(\"modal opened\");\n\t\t\t\tregionModal.on('click', self.clickHandler);\n\t\t\t\tregionModal.addClass('active');\n\t\t\t\t$('body').addClass('js-language-selector-open');\n\t\t\t},\n\t\t\tclose: function(e) {\n\t\t\t\tregionModal.off('click', self.clickHandler);\n\t\t\t\tregionModal.removeClass('active');\n\t\t\t\t$('body').removeClass('js-language-selector-open');\n\t\t\t},\n\t\t\ttoggleContinents: function(e) {\n\t\t\t\tvar $target = $(e.currentTarget);\n\t\t\t\t$target.next().find('region').toggleClass('active');\n\t\t\t\t$target.next('.js-regions').toggleClass('hide-regions');\n\t\t\t}\n\t\t};\n\n\treturn languageSelector;\n}); */\n\n/**\n * mqMarker module - Replace existing CSS class with new one. Classes prefix must match.\n * If called with specific `mqMarker` class in parameter, adds a class and removes existing on with the same dash-separated prefix.\n * Usefull for event delegation on desktop/mobile.\n * Only one marker per element is possible.\n * @module avast.web.mqMarker\n * @version 0.0.2\n * @author Ales Gabriel \n * @param mqMarker {string} CSS class. Must have an unique prefix separated with \"-\".\n * @param selectors {String} Comma separated list of selectors\n * @returns els {Array} DOM elements\n */\n\navm.define('avast.web.mqMarker', function(mqMarker, selectors) {\n\t// Define selectors for elements which will be marked.\n\tvar sels = selectors || 'body',\n\t\tprefixRe = /^.*?-/,\n\t\tmqMarkerPrefix = mqMarker.match(prefixRe),\n\t\tels = [],\n\t\tnList = document.querySelectorAll(sels),\n\t\tlist = Array.prototype.slice.call(nList); // Support IE11\n\n\tif (typeof mqMarker !== 'string' && mqMarkerPrefix.length === 0) {\n\t\t//console.log('mqMarker prefix separated by \"-\" is missing: %s', mqMarker);\n\t\treturn els;\n\t}\n\n\tlist.forEach(function(el) {\n\t\tvar cssClasses = el.classList;\n\n\t\t// console.log(cssClasses.length);\n\t\t// Reset all classes with the same prefix to prevent duplicit classes\n\t\tif (cssClasses.length && mqMarkerPrefix) {\n\t\t\tfor (var i = 0; cssClasses.length > i; i++) {\n\t\t\t\tif (cssClasses[i].match(prefixRe)[0] === mqMarkerPrefix[0]) {\n\t\t\t\t\t// console.log('Removed class: %s', cssClasses[i]);\n\t\t\t\t\tel.classList.remove(cssClasses[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (mqMarker) {\n\t\t\tel.classList.add(mqMarker);\n\t\t}\n\n\t\tels.push(el);\n\t});\n\n\treturn els;\n});\n\n/**\n * Unsupported browser message\n * @module avast.web.notSupportedBrowser\n * @version 1.0.0\n * @author Fedor Kušš\n * @requires jquery\n */\n\navm.define('avast.web.notSupportedBrowser', function() {\n\t'use strict';\n\tvar $ = avm.require('jquery'),\n\t\tdetectedBrowser = avastGlobals.detect.browser.name.toLowerCase(),\n\t\tdetectedVersion = avastGlobals.detect.browser.version.toLowerCase(),\n\t\tnotSupportedBrowser = detectedBrowser + detectedVersion.split('.')[0],\n\t\t$body = $('body');\n\n\tif (avastGlobals.detect.browser.isInternetExplorer || notSupportedBrowser === 'internetexplorer8' || notSupportedBrowser === 'internetexplorer9') {\n\t\t$body.addClass('notSupportedBrowser');\n\t}\n\n})();\n\n/**\n * Avast Router\n * @version 1.0.1\n * @author Michal Langhoffer \n * @module avast.web.router\n * @requires jquery\n */\navm.define('avast.web.router', (function () {\n\t'use strict';\n\tvar $ = avm.require('jquery'),\n\t\troutes,\n\t\tself,\n\t\tw = window,\n\t\t$window = $(window);\n\n\treturn {\n\t\t/*\n\t\t * add window hashchange listener\n\t\t * look for key in routes object and execute its function\n\t\t */\n\t\thashChangeListener: function () {\n\t\t\tself = this;\n\t\t\t$window.on('hashchange', function () {\n\t\t\t\tself.exec(w.location.hash.substring(1));\n\t\t\t});\n\t\t},\n\t\t/*\n\t\t * @param {string} [path]\n\t\t * change hash in URL if it is not the same as current one, otherwise execute function from routes object\n\t\t */\n\t\tnavigate: function (path) {\n\t\t\tif (w.location.hash.substring(1) !== path) {\n\t\t\t\tw.location.hash = path;\n\t\t\t} else {\n\t\t\t\tthis.exec(path);\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t * @param {string} [path]\n\t\t * execute function from routes object\n\t\t */\n\t\texec: function (path) {\n\t\t\tif (routes[path]) {\n\t\t\t\troutes[path]();\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t * @param {object} [path]\n\t\t * set the routes object\n\t\t * add hashchange listener\n\t\t * after page load check hash and execute function from routes object\n\t\t * return routes object if path is object, otherwise throw error\n\t\t */\n\t\tset: function (path) {\n\t\t\troutes = path;\n\t\t\tself = this;\n\t\t\tself.hashChangeListener();\n\t\t\tself.navigate(w.location.hash.substring(1));\n\t\t\tif (typeof path === 'object') {\n\t\t\t\treturn routes;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Object has to be passed to router.set()');\n\t\t\t}\n\t\t}\n\t};\n})());\n\n/**\n * Serialize URL parameters from object to string\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.url.serialize\n * @param {Object} urlObject\n * @returns {string}\n */\navm.define('avast.url.serialize', function(urlObject) {\n\t'use strict';\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tif (typeof urlObject === 'object' && urlObject) {\n\t\tvar urlString = '';\n\t\tfor (var key in urlObject) {\n\t\t\tif (hasOwnProperty.call(urlObject, key)) {\n\t\t\t\tif (urlString.length) {\n\t\t\t\t\turlString += '&';\n\t\t\t\t}\n\t\t\t\turlString += encodeURIComponent(key) + '=' + encodeURIComponent(urlObject[key]);\n\t\t\t}\n\t\t}\n\t\treturn urlString;\n\t} else {\n\t\tthrow new Error('Invalid method arguments to avast.url.serialize');\n\t}\n});\n\n/**\n * Set cookie avastComLocale with locale value\n * @version 0.1.0\n * @author Ales Gabriel \n * @module avast.web.setLanguage\n */\navm.define('avast.web.setLanguage', function (lang) {\n 'use strict';\n\n var d=new Date();\n d.setDate(d.getDate() + 365);\n document.cookie = \"avastComLocale=\"+lang+\";path=/;EXPIRES=\" + d.toGMTString();\n});\n\n/**\n * Create slide counter bellow Carousel (TinySlider.js)\n * @version 0.1.0\n * @author Frantisek Rapcak \n * @module avast.web.slideCounter\n */\navm.define('avast.web.slideCounter', function (slider) {\n\t'use strict';\n\n\tvar info = slider.getInfo(),\n\t\tname = info.container.classList[0],\n\t\tsliderEl = document.querySelector('[data-name=' + name + ']'),\n\t\tslideCounterEl = sliderEl.querySelector('.tns-liveregion');\n\n\tfunction updateCounter(info) {\n\t\t// calculate total slides and active slide\n\t\t// info.items is a number of items visible in viewport\n\t\tvar totalSlides = info.items > 1 ? Math.ceil(info.slideCount / info.items) : info.slideCount,\n\t\t\tactiveSlide = info.items > 1 ? Math.ceil(info.displayIndex / info.items) : info.displayIndex;\n\n\t\tslideCounterEl.innerHTML = activeSlide + '/' + totalSlides;\n\t}\n\n\t// Set initial counter value\n\tupdateCounter(info);\n\n\t// Update the counter on slide change\n\tslider.events.on('transitionStart', updateCounter);\n\n\t// Update the counter on screen resize (new breakpoint)\n\tslider.events.on('newBreakpointEnd', updateCounter);\n});\n\n/**\n * Factory for storage object\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.storage.storageFactory\n * @returns {Object}\n */\navm.define('avast.storage.storageFactory', function() {\n\t'use strict';\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty,\n\t\tdata = {};\n\treturn {\n\t\tlength: 0,\n\n\t\t/**\n\t\t * Add key/value pair\n\t\t * @param {*} key\n\t\t * @param {*} value\n\t\t */\n\t\tsetItem: function(key, value) {\n\t\t\tif (typeof key !== 'undefined' && typeof value !== 'undefined') {\n\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\tvalue = encodeURIComponent(value);\n\t\t\t\tif (!hasOwnProperty.call(data, key)) {\n\t\t\t\t\tthis.length++;\n\t\t\t\t}\n\t\t\t\tdata[key] = value;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.setItem');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get value associated with key\n\t\t * @param {*} key\n\t\t * @returns {string}\n\t\t */\n\t\tgetItem: function(key) {\n\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\treturn typeof data[key] !== 'undefined' ? decodeURIComponent(data[key]) : null;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.getItem');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove key/value pair\n\t\t * @param {*} key\n\t\t */\n\t\tremoveItem: function(key) {\n\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\tif (hasOwnProperty.call(data, key)) {\n\t\t\t\t\tdelete data[key];\n\t\t\t\t\tthis.length--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.removeItem');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get name of nth key\n\t\t * @param {number} n\n\t\t * @returns {string}\n\t\t */\n\t\tkey: function(n) {\n\t\t\tif (typeof n === 'number') {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (var key in data) {\n\t\t\t\t\tif (hasOwnProperty.call(data, key)) {\n\t\t\t\t\t\tif (i === n) {\n\t\t\t\t\t\t\treturn decodeURIComponent(key);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.key');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Clear all items\n\t\t */\n\t\tclear: function() {\n\t\t\tdata = {};\n\t\t\tthis.length = 0;\n\t\t}\n\n\t};\n});\n\n/**\n * Script for adding Structured data to document head tag\n * @version 1.0.0\n * @author Cenek Hybler \n * @module avast.structuredData\n * @requires cash\n */\n\navm.define('avast.web.structuredData', function() {\n\t'use strict';\n\tvar $ = avm.require('cash'),\n\t\t$faq_holder = $('[data-structured-type=\"faq\"]'),\n\t\t$breadcrumblist_holder = $('[data-structured-type=\"breadcrumblist\"]'),\n\t\t/* Function for JSON stringify and Script injection */\n\t\tjsonInjection = function(contextType, content){\n\t\t\tvar el = document.createElement('script');\n\t\t\tvar jsonIntro = {\n\t\t\t\t\t\"@context\": \"http://schema.org\",\n\t\t\t\t\t\"@type\": contextType\n\t\t\t\t},\n\t\t\t\tjson = Object.assign(jsonIntro, content);\n\n\t\t\tel.type = 'application/ld+json';\n\t\t\tel.text = JSON.stringify(json);\n\t\t\tdocument.querySelector('head').appendChild(el);\n\t\t};\n\n\t$(document).ready(function(){\n\n\t\t//FAQ\n\t\tif ($faq_holder.length > 0) {\n\t\t\tvar contextType = 'FAQPage',\n\t\t\t\tcontent = {},\n\t\t\t\tcontentJson = [];\n\t\t\t\n\t\t\t$faq_holder.each(function(){\n\t\t\t\tvar $items = $(this).find('.accordion-item');\n\n\t\t\t\t$items.each(function() {\n\t\t\t\t\tcontentJson.push({\n\t\t\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\t\t\"name\": this.querySelector('.accordion-header').innerText.replace(/\\n/g,'').replace(/\\t/g,''),\n\t\t\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\t\t\"text\": this.querySelector('.accordion-body').innerHTML.replace(/\\n/g,'').replace(/\\t/g,'')\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tcontent['mainEntity'] = contentJson;\n\t\t\t});\n\n\t\t\tjsonInjection(contextType, content);\n\t\t}\n\n\t\t//BreadcrumbList\n\t\tif ($breadcrumblist_holder.length > 0) {\n\t\t\t$breadcrumblist_holder.each(function(){\n\t\t\t\tvar contextType = 'BreadcrumbList',\n\t\t\t\t\t$crumbs = $(this).find('.breadcrumb-item'),\n\t\t\t\t\tcontent = {},\n\t\t\t\t\tcontentJson = [];\n\n\t\t\t\t$crumbs.each(function(i) {\n\t\t\t\t\tvar $crumbLink = $(this).find('.breadcrumb-item a'),\n\t\t\t\t\t\tcrumbUrl = $crumbLink.attr('href'),\n\t\t\t\t\t\tcrumbName = $(this).text().trim();\n\n\t\t\t\t\tif (window.document.URL && window.document.baseURI) {\n\t\t\t\t\t\tcrumbUrl = crumbUrl ? new URL(crumbUrl, document.baseURI).href : undefined; // convert relative URL to absolute\n\t\t\t\t\t}\t\t\t\t\t\n\n\t\t\t\t\tcontentJson.push({\n\t\t\t\t\t\t\"@type\": \"ListItem\",\n\t\t\t\t\t\t\"position\": i+1,\n\t\t\t\t\t\t\"name\": crumbName,\n\t\t\t\t\t\t\"item\": crumbUrl\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t\tcontent['itemListElement'] = contentJson;\n\n\t\t\t\tjsonInjection(contextType, content);\n\t\t\t});\n\t\t}\n\t});\n});\n\n/**\n* Push data to GTM dataLayer.\n* @version 1.0.0\n* @author Ales Gabriel \n* @module avast.web.tracker\n* @desc GTM dataLayer helper. Primary centralize various window.datalayer pushes.\n* @requires jquery\n*/\navm.define('avast.web.tracker', (function () {\n\t'use strict';\n\n\tvar $ = avm.require('jquery');\n\n\twindow.dataLayer = window.dataLayer || [];\n\n\t/*\n\t *\tConfig events and handlers.\n\t *\tIf tracked via GTM, only datalayer.push should be required.\n\t */\n\n\t// Define callbacks for events\n\tvar trackEvents = {\n\t\t'chromeOffer': {\n\t\t\t/**\n\t\t\t * Track banner impression\n\t\t\t * @return {Integer} Length of datalayer\n\t\t\t */\n\t\t\tview: function(evt){\n\t\t\t\t//console.log(evt);\n\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t'event' : 'chromeOffer',\n\t\t\t\t\t'eventCategory' : 'Chrome',\n\t\t\t\t\t'eventAction' : 'Chrome Offer',\n\t\t\t\t\t'eventLabel' : 'View'\n\t\t\t\t});\n\t\t\t},\n\t\t\t/**\n\t\t\t * Track clicking on download Chrome button\n\t\t\t * @param {Object} evt Event object\n\t\t\t * @return {Integer} Length of dataLayer\n\t\t\t */\n\t\t\tclick: function(evt){\n\t\t\t\t//console.log(evt);\n\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t'event' : 'chromeOffer',\n\t\t\t\t\t'eventCategory' : 'Chrome',\n\t\t\t\t\t'eventAction' : 'Chrome Offer',\n\t\t\t\t\t'eventLabel' : 'Click'\n\t\t\t\t});\n\t\t\t},\n\t\t\t/**\n\t\t\t * Tracks Chrome Banner on page loads\n\t\t\t * @param {Object} evt Event object\n\t\t\t * @returns {Integer} Length of dataLayer\n\t\t\t */\n\t\t\tonPageLoad: function(evt){\n\t\t\t\t//console.log(evt);\n\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t'event' : 'chromeOffer',\n\t\t\t\t\t'eventCategory' : 'Chrome',\n\t\t\t\t\t'eventAction' : 'Chrome Offer',\n\t\t\t\t\t'eventLabel' : 'View Opportunity'\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t'downloadPopup' : {\n\t\t\tview: function(obj) {\n\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t'event': 'av.virtualPageview',\n\t\t\t\t\t'virtualPageURL': '/' + obj.locale + '/download-overlay',\n\t\t\t\t\t'parentPage': obj.page\n\t\t\t\t});\n\t\t\t},\n\t\t\tclose: function(obj) {\n\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t'event': 'downloadPopupClose',\n\t\t\t\t\t'virtualPageURL': '/' + obj.locale + '/download-overlay',\n\t\t\t\t\t'parentPage': obj.page\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Password checker on first char - only once per visit\n\t\t * @param {Object} evt Event object\n\t\t * @return {Int} Length of dataLayer array\n\t\t */\n\t\t'passwordCheck' : (function(){\n\t\t\tvar called = 0;\n\n\t\t\treturn function(evt){\n\t\t\t\tif(!called){\n\t\t\t\t\tcalled = 1;\n\t\t\t\t\t//console.log('passwordCheck event: %o', evt);\n\t\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t\t'event' : 'passwordCheck', // First char filled\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t})()\n\t};\n\n\t// Bind events\n\t$(document).on('passwordCheck.avast', function(){\n\t\tmethods.track('passwordCheck');\n\t});\n\n\t///////////////////////////////////////////////////////////////////////////////////\n\n\t/*\n\t * Methods\n\t */\n\tvar methods = {\n\t\t/**\n\t\t * Track event\n\t\t * @param {String} evtName Event name. Looking for callback. Dot notation allowed.\n\t\t * @param {Object} [evtObj] Event object\n\t\t * @param {Function} [callback] Callback handler. If not defined in param, lookup on module internal callbacks storage is made.\n\t\t */\n\t\ttrack: function(evtName, evtObj, callback){\n\t\t\tvar handler = callback || trackEvents,\n\t\t\t\tspaces = (typeof evtName === 'string') ? evtName.split('.') : null,\n\t\t\t\targs = evtObj ? [evtObj] : [], // IE 8 with no arguments\n\t\t\t\tspace,\n\t\t\t\ttoString = Object.prototype.toString;\n\n\t\t\t// TODO: Do not step into object cycles if callback is only plain function by default\n\t\t\tif ((toString.call(handler) === '[object Function]' || toString.call(handler) === '[object Object]') && spaces && spaces.length > 0){\n\t\t\t\tfor (var i = 0; i < spaces.length; i++) {\n\t\t\t\t\tspace = spaces[i];\n\t\t\t\t\tif (handler !== null && space in handler) {\n\t\t\t\t\t\thandler = handler[space];\n\n\t\t\t\t\t\t// Function founded earlier than in last cycle considered as incorrect.\n\t\t\t\t\t\t// So properties defined on functions are not allowed.\n\t\t\t\t\t\tif (toString.call(handler) === '[object Function]' && i !== (spaces.length - 1)) {\n\t\t\t\t\t\t\thandler = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof handler === 'function') {\n\t\t\t\treturn handler.apply(this, args); // FIXME: Change to call.\n\t\t\t}\n\t\t}\n\t};\n\n\n\t// Export methods\n\treturn methods;\n})());\n\n/**\n * Unserialize URL parameters from string to object\n * @version 1.2.0\n * @author Jiri Duchon \n * @module avast.url.unserialize\n * @param {string} [urlString]\n * @returns {Object}\n */\navm.define('avast.url.unserialize', function(urlString) {\n\t'use strict';\n\turlString = typeof urlString === 'undefined' ? location.search : urlString;\n\tif (typeof urlString === 'string') {\n\t\tvar urlObject = {},\n\t\t\turlQuery = urlString.replace(/#.*|.*\\?/g, '');\n\t\tif (urlQuery.length) {\n\t\t\tvar urlParameters = urlQuery.split('&'),\n\t\t\t\turlParametersLength = urlParameters.length,\n\t\t\t\turlParameter = [];\n\t\t\tfor (var i = 0; i < urlParametersLength; i++) {\n\t\t\t\turlParameter = urlParameters[i].split('=');\n\t\t\t\turlObject[decodeURIComponent(urlParameter[0])] = decodeURIComponent(urlParameter[1] || '');\n\t\t\t}\n\t\t}\n\t\treturn urlObject;\n\t} else {\n\t\tthrow new Error('Invalid method arguments to avast.url.unserialize');\n\t}\n});\n\n/**\n * Avast UrlBag (adds encoded params to cart links)\n * @version 0.1.0\n * @author Vojtech Sir \n * @module avast.web.urlBag\n * @copyright Avast Software s.r.o ©2014\n */\navm.define('avast.web.urlBag', (function() {\n var urlBag = {\n data: {},\n addValue: function(key, value) {\n this.data[key] = String(value);\n },\n getData: function() {\n return this.data;\n },\n getEncodedData: function() {\n var base64 = this.base64encode(this.stringify(this.data));\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n },\n stringify: function(obj) {\n if (typeof JSON != 'undefined' && JSON && JSON.stringify) {\n return JSON.stringify(obj);\n }\n\n var t = typeof(obj);\n if (t != 'object' || obj === null) {\n if (t == 'string') {\n obj = '\"' + obj + '\"';\n }\n return String(obj);\n }\n else {\n var n, v, json = [], arr = (obj && obj.constructor == Array);\n\n for (n in obj) {\n v = obj[n]; t = typeof(v);\n if (t == 'string') v = '\"' + v + '\"';\n else if (t == 'object' && v !== null) v = this.stringify(v);\n json.push((arr ? \"\" : '\"' + n + '\":') + String(v));\n }\n return (arr ? '[' : '{') + String(json) + (arr ? ']' : '}');\n }\n },\n // http://phpjs.org/functions/base64_encode/\n base64encode: function(data) {\n if (!data) {\n return data;\n }\n\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = '', tmp_arr = [];\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n var r = data.length % 3;\n return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n }\n };\n\n return urlBag;\n\n })());\n\n/**\n * Waypoints\n * @version 1.3.0\n * @author Michal Langhoffer , Ales Gabriel , Cenek Hybler \n * @module avast.web.waypoints\n * @description Waypoints return true if top/bottom coordinates of element are in the viewport (with optional offsets)\n * @requires cash\n * @param {jQuery Object / Element / String} waypointElement\n * @param {Number} offsetTop\n * @param {Number} offsetBottom\n * @param {Boolean} waypoint\n * @returns {boolean}\n */\n\navm.define('avast.web.waypoints', function(waypointElement, offsetTop, offsetBottom, waypoint) {\n\t'use strict';\n\n\t/*\n\twaypointElement - can be either String selector, Element (created by querySelector) or jQuery object (later is deprecated as we are trying to get rid of jQuery completely.)\n\n\tOffsets can be defined as:\n\ta) fraction of element height (decimal.value < 1)\n\tb) absolute pixel size (value >= 1)\n\t*/\n\n\tvar\n\t\t$ = avm.require('cash'),\n\t\tel;\n\n\t\t// is waypointElement String, Element or Object?\n\t\tif (Object.prototype.toString.call(waypointElement) === '[object String]') {\n\t\t\tel = document.querySelector(waypointElement); // select entity by string selector\n\n\t\t} else if (waypointElement instanceof Element) {\n\t\t\tel = waypointElement; // assign provided entity directly\n\n\t\t} else {\n\t\t\tel = $(waypointElement)[0]; // extract first entity from the object\n\t\t}\n\n\n\tif (el && el instanceof Element) {\n\t\tvar\n\t\t\t// Element's properties:\n\t\t\telTop = el.getBoundingClientRect().top,\n\t\t\telBottom = el.getBoundingClientRect().bottom,\n\t\t\telHeight = el.getBoundingClientRect().height,\n\n\t\t\tviewportHeight = document.documentElement.clientHeight,\n\n\t\t\t// Element offset above bottom viewport edge. How many pixels from top of the element must be visible above bottom of vieport.\n\t\t\toffsetTop = offsetTop ? offsetTop : 0,\n\t\t\t// Element offset under top viewport edge. How many pixels from bottom of the element is the maximum.\n\t\t\toffsetBottom = offsetBottom ? offsetBottom : 0;\n\n\n\t\t// calculte top offset as a fraction of height\n\t\tif (offsetTop < 1 && offsetTop !== 0) {\n\t\t\toffsetTop = elHeight * offsetTop;\n\t\t}\n\t\t// calculte bottom offset as a fraction of height\n\t\tif (offsetBottom < 1 && offsetBottom !== 0) {\n\t\t\toffsetBottom = elHeight * offsetBottom;\n\t\t}\n\n\n\t\tif (waypoint) {\n\t\t\t// If true, only returns whether the given element's top edge is scrolled above viewport.\n\t\t\t// OffsetTop moves the point above or below the element. Positive value triggers it sooner.\n\n\t\t\treturn elTop <= offsetTop;\n\n\t\t} else {\n\t\t\t// Else trigger true statement as long the element is in the viewport (minus offsets). If the element's top is above the viewport bottom AND element's bottom is bigger the 0 (means there is visible at least a part of it)\n\n\t\t\treturn (elTop - offsetTop < viewportHeight) && (elBottom - offsetBottom > 0);\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n});\n\n/**\n * Avast Aswparam (adds /ASWPARAM to cart links)\n * @version 0.5.0\n * @author Vojtech Sir , Ales Gabriel , Michal Langhoffer \n * @module avast.web.aswparam\n * @requires module:jquery\n * @requires module:avast.web.urlBag\n * @requires module:avast.web.clientInfo\n * @copyright Avast Software s.r.o ©2015\n */\n\navm.define('avast.web.aswparam', (function() {\n\n var $ = avm.require('jquery'),\n urlBag = avm.require('avast.web.urlBag');\n\n var aswparam = {\n inited: false,\n cartLinks: {\n 'CX': {\n urls: ['store.avast.com'],\n paramPattern: '/ASWPARAM.%urlBagValue%',\n paramRegex: /(\\/ASWPARAM\\.)[^/]+/,\n appendBeforeRegex: /(\\/ThemeID\\.)/\n },\n 'SL': {\n urls: ['store.avast.ru', 'store-kz.avast.com', 'store.avast.ua', 'store-sl.avast.com'],\n paramPattern: 'ASWPARAM=%urlBagValue%&',\n paramRegex: /(&(amp;)?ASWPARAM=)[^&]+/,\n appendBeforeRegex: /(quantity=)/\n }\n },\n globalCartLinks: ['store.avast.com', 'store.avast.ru', 'store-kz.avast.com', 'store.avast.ua', 'store-sl.avast.com'],\n init: function(){\n var cookies = {'p_pro': 'x-avast-pro', 'p_vbd': 'x-avast-vbd', 'p_hid': 'x-avast-hid'},\n testCookieFail = ['p_pro', 'p_vbd'],\n urlParams = {'p_glic': 'p_glic'},\n values = {},\n cookieFail = false,\n aswparam = this,\n paramsFromUrl = avm.require('avast.url.unserialize')(window.location.href);\n\n /* OO-8998 */\n if (window.location.pathname.indexOf('cleanup') > -1) {\n if (typeof paramsFromUrl.ppc !== 'undefined' && paramsFromUrl.ppc.length > 0) {\n values.ppc = paramsFromUrl.ppc;\n }\n }\n /* /OO-8998 */\n\n /* WCS-2448 */\n $(document).on('priceUpdate.ab.avast avast.ab.updatePrice avast.bab.updatePrice', function() {\n aswparam.updateAswparamPlaceholderLinks(aswparam.globalCartLinks, paramsFromUrl.aswparam);\n });\n\n if (paramsFromUrl.aswparam && paramsFromUrl.aswparam.length > 0) {\n aswparam.updateAswparamPlaceholderLinks(aswparam.globalCartLinks, paramsFromUrl.aswparam);\n } else {\n aswparam.updateAswparamPlaceholderLinks(aswparam.globalCartLinks);\n /* /WCS-2448 */\n\n $.each(cookies, function(paramName, cookieName) {\n values[paramName] = aswparam.getClientInfo(paramName, cookieName);\n if ($.inArray(paramName, testCookieFail) > -1 && !values[paramName]) {\n cookieFail = true;\n }\n });\n\n if (!cookieFail) {\n $.each(values, function(name, value) {\n urlBag.addValue(name, value);\n });\n\n $.each(urlParams, function(paramName, urlParamName) {\n var urlParamValue = aswparam.getURLParameter(urlParamName);\n\n if (urlParamValue) {\n urlBag.addValue(paramName, urlParamValue);\n }\n });\n\n this.updateLinks();\n }\n }\n },\n updateLinks: function(){\n var aswparam = this;\n\n // Web page\n $('a').each(function() {\n var link = aswparam.linkDecorator(this.href);\n // Decorate only cart links.\n if(link){\n this.href = link;\n }\n });\n // INTs, LPs\n $('.choice', '.selection').each(function() {\n var input = $(this).find('input[type=radio]');\n var link = aswparam.linkDecorator(input.val());\n if(link){\n input.val(link);\n }\n });\n // for dynamically loaded prices\n if (!this.inited) {\n // TODO: Remove 'avast.ab.updatePrice', 'avast.bab.updatePrice' events, when all triggers replaced with 'priceUpdate.ab.avast'.\n $(document).on('priceUpdate.ab.avast avast.ab.updatePrice avast.bab.updatePrice', function() {aswparam.updateLinks();});\n this.inited = true;\n }\n },\n getCookieValue: function(name) {\n var value = '; ' + document.cookie;\n var parts = value.split('; ' + name + '=');\n return (parts.length >= 2) ? parts.pop().split(';').shift() : null;\n },\n getURLParameter: function(name) {\n return decodeURI((RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]);\n },\n linkDecorator: function(link){\n var href;\n var urlBagEncodedData = urlBag.getEncodedData();\n\n if (urlBagEncodedData) {\n $.each(this.cartLinks, function (provider, providerDef) {\n $.each(providerDef.urls, function (key, providerUrl) {\n if (link.indexOf(providerUrl) != -1) {\n if (link.search(providerDef.paramRegex) > -1) {\n href = link.replace(providerDef.paramRegex, '$1' + urlBagEncodedData);\n } else {\n href = link.replace(providerDef.appendBeforeRegex, providerDef.paramPattern.replace('%urlBagValue%', urlBagEncodedData) + '$1');\n }\n }\n });\n });\n }\n return href;\n },\n getClientInfo: function(paramName, cookieName){\n var client = (window.avastGlobals && window.avastGlobals.client) ? window.avastGlobals.client : null,\n value;\n\n if(client){\n value = (client[paramName] === 'null') ? null : client[paramName];\n } else {\n value = this.getCookieValue(cookieName + '-i') ? this.getCookieValue(cookieName + '-i') : this.getCookieValue(cookieName);\n }\n\n return value;\n },\n updateAswparamPlaceholderLinks: function(globalCartLinks, aswparamValue) {\n const linkAswparamPlaceholder = '{aswparam}';\n var newLink,\n cartLinks = [];\n\n $('a').not('a[href^=\"#\"]').each(function() {\n var el = this;\n var link = el.href;\n $.each(globalCartLinks, function (provider, providerUrl) {\n if (link.indexOf(providerUrl) != -1) {\n cartLinks.push(el);\n }\n });\n });\n\n $.each(cartLinks, function (el, link) {\n if(aswparamValue && $(this).data('aswparam-placeholder')) {\n var elDataAswparamPlaceholder = $(this).data('aswparam-placeholder');\n aswparam = elDataAswparamPlaceholder.replace('{ASWPARAM}', aswparamValue);\n\n if (link.href.indexOf(linkAswparamPlaceholder) != -1 || link.href.indexOf(escape(linkAswparamPlaceholder) != -1)) {\n newLink = link.href.indexOf(escape(linkAswparamPlaceholder)) != -1 ? link.href.replace(escape(linkAswparamPlaceholder), aswparam) : link.href.replace(linkAswparamPlaceholder, aswparam);\n\n $(link).attr('href', newLink);\n }\n } else {\n newLink = link.href.indexOf(escape(linkAswparamPlaceholder)) != -1 ? link.href.replace(escape(linkAswparamPlaceholder), '') : link.href.replace(linkAswparamPlaceholder, '');\n\n $(link).attr('href', newLink);\n }\n });\n\n }\n };\n\n return aswparam;\n\n})());\n\n// affiliate aswparam from url parameters GLOWEB-7251\n(function() {\n 'use strict';\n\n try {\n // get parameters from url\n var urlParams = location.search.toLowerCase();\n\n // check if url contains some of the affiliate parameters\n if (/programtype|partnerid|clickid|trafficsource/.test(urlParams)) {\n var aswObj = {},\n aswparam = '';\n\n // put parameters from url to object\n //safari fix, remove when safari starts working\n //if (/partnerid=/.test(urlParams)) aswObj.partnerid = urlParams.match(/(?<=partnerid=).*?(?=&)|(?<=partnerid=).*?$/)[0];\n //if (/programtype=/.test(urlParams)) aswObj.programtype = urlParams.match(/(?<=programtype=).*?(?=&)|(?<=programtype=).*?$/)[0];\n //if (/clickid=/.test(urlParams)) aswObj.clickID = urlParams.match(/(?<=clickid=).*?(?=&)|(?<=clickid=).*?$/)[0];\n //if (/trafficsource=/.test(urlParams)) aswObj.trafficSource = urlParams.match(/(?<=trafficsource=).*?(?=&)|(?<=trafficsource=).*?$/)[0];\n if (/partnerid=/.test(urlParams)) {\n aswObj.partnerid = urlParams.match(/(?:partnerid=).*?(?=&)|(?:partnerid=).*?$/)[0].replace(/partnerid=/, '');\n }\n\n if (/programtype=/.test(urlParams)) {\n aswObj.programtype = urlParams.match(/(?:programtype=).*?(?=&)|(?:programtype=).*?$/)[0].replace(/programtype=/, '');\n }\n\n if (/clickid=/.test(urlParams)) {\n aswObj.clickID = urlParams.match(/(?:clickid=).*?(?=&)|(?:clickid=).*?$/)[0].replace(/clickid=/, '');\n }\n\n if (/trafficsource=/.test(urlParams)) {\n aswObj.trafficSource = urlParams.match(/(?:trafficsource=).*?(?=&)|(?:trafficsource=).*?$/)[0].replace(/trafficsource=/, '');\n }\n\n // encode object to base64\n aswparam = btoa(JSON.stringify(aswObj));\n\n if (!sessionStorage.getItem(\"aswparam\")) {\n sessionStorage.setItem(\"aswparam\", aswparam);\n }\n\n setAswparamOnButton(aswparam);\n\n } else if (sessionStorage.getItem(\"aswparam\")) {\n setAswparamOnButton(sessionStorage.getItem(\"aswparam\"));\n };\n\n function setAswparamOnButton(aswparam) {\n var buylinks = document.querySelectorAll('[data-role=\"cart-link\"]');\n // check if there any buttons on page\n if (buylinks.length > 0) {\n\n // for each buy link update href\n buylinks.forEach(function(link) {\n updateLink(link, aswparam)\n });\n };\n\n // event listener for change in actionbox\n window.addEventListener('pricebox-updated', function(e) {\n e.detail.element.querySelectorAll('[data-role=\"cart-link\"]').forEach(function(link) {\n updateLink(link, aswparam)\n });\n });\n\n }\n\n // check if link doesn't contain aswparam and add it\n function updateLink(link, aswparam) {\n if(!/aswparam/.test(link.href)) {\n link.href = link.href + '&aswparam=' + aswparam;\n };\n }\n\n } catch (error) {\n console.error(error);\n sdl.push({\n system: {\n error: {\n type: error.name,\n message: error.message,\n }\n },\n event: 'system.error'\n })\n }\n}());\n\n/**\n * Avast brcmpgid parameter\n * @version 1.0.0\n * @author Jaroslav Slaby \n * @module avast.web.brcmpgid\n * @requires avast.url.unserialize\n * @requires avast.web.linkDecorator\n * @copyright Avast Software s.r.o ©2021\n */\n\n(function() {\n\t'use strict';\n\t\n\t// check for brcmpgid parameter in url and if URLSearchParams method exists in browser\n\tif (/brcmpgid/.test(location.search) && 'URLSearchParams' in window) {\n\t\tvar unserialize = avm.require('avast.url.unserialize'),\n\t\t\tqs = unserialize(),\n\t\t\tproductId = 'ASB',\n\t\t\tvalueTest = /^[a-z0-9]+$/i,\n\t\t\tASBLinks = document.querySelectorAll('[data-download-name*=\"' + productId + '\"]');\n\n\t\tASBLinks.forEach(function(el) {\n\t\t\ttry {\n\t\t\t\tvar downloadURL,\n\t\t\t\t\tdownloadQueryString;\n\n\t\t\t\tif(!/ANDROID|IOS/.test(el.getAttribute('data-download-name')) && qs && qs.brcmpgid && valueTest.test(qs.brcmpgid)) {\n\t\t\t\t\tif (el.href) {\n\t\t\t\t\t\tdownloadURL = new URL(el.href);\n\t\t\t\t\t\tdownloadQueryString = new URLSearchParams(downloadURL.search);\n\n\t\t\t\t\t\tdownloadQueryString.set('product', (el.getAttribute('data-download-name') !== null ? el.getAttribute('data-download-name') : el.getAttribute('data-bi-download-name')) + '-CID');\n\n\t\t\t\t\t\tif (qs.brcmpgid !== undefined) {\n\t\t\t\t\t\t\tdownloadQueryString.set('tag', qs.brcmpgid);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (qs.source_tag !== undefined) {\n\t\t\t\t\t\t\tdownloadQueryString.set('source_tag', qs.source_tag);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdownloadURL.search = downloadQueryString.toString();\n\t\t\t\t\t\tel.href = downloadURL.toString();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} catch (error) {\n\t\t\t\t// singe data layer error tracking\n\t\t\t\tif (typeof sdl !== 'undefined') {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tsdl.push({\n\t\t\t\t\t\tsystem: {\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\ttype: error.name,\n\t\t\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tevent: 'system.error'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t})\t\n\t}\n\n\treturn;\n\n})();\n\n/**\n * Display Chrome Offer in non-chrome browsers\n * @version 1.2.0\n * @author Ales Gabriel \n * @module avast.web.chromeBanner\n * @requires jquery\n * @requires avast.url.unserialize\n * @requires avast.web.tracker\n */\navm.define('avast.web.chromeBanner', (function() {\n\t'use strict';\n\n\tvar $ = avm.require('jquery');\n\tvar detect = avastGlobals.detect.browser;\n\tvar urlParams = avm.require('avast.url.unserialize')();\n\tvar tracker = avm.require('avast.web.tracker');\n\tvar $window = $(window);\n\tvar waypoints = avm.require('avast.web.waypoints');\n\n\t// Chrome banner\n\tvar chromeBanner = {\n\t\tinit: function() {\n\t\t\tvar hasBanner = $('#offer-chrome').length,\n\t\t\t\tisChrome = detect.isChrome,\n\t\t\t\tisAsb = detect.isAvast,\n\t\t\t\tproduct = typeof urlParams.product === 'string' ? urlParams.product : '',\n\t\t\t\tisMsBuild = product.indexOf('-ONLINE-MS') > -1;\n\n\t\t\tif (hasBanner && !isChrome && !isMsBuild && !isAsb) {\n\t\t\t\tthis.show();\n\t\t\t\t$('#offer-chrome [data-role=\"cta-link\"]').on('click', this.trackClick);\n\t\t\t} /* else if (isChrome) {\n\t\t\t\t// Display Secure Browser product offer in chrome browsers inside Cross promo section\n\t\t\t\t// $('[data-product=\"secureBrowser\"]').removeClass('d-none');\n\t\t\t} */\n\t\t},\n\t\tshow: function(e) {\n\t\t\tvar url = document.location.href,\n\t\t\t\tpExt = url.match(/[?&]p_ext=([^&]*)/),\n\t\t\t\tpExtVal = pExt ? pExt[1].toLowerCase() : '';\n\n\t\t\tif (url.indexOf('?') > -1) {\n\t\t\t\turl = url.substr(0, url.indexOf('?'));\n\t\t\t}\n\n\t\t\tif (pExtVal.indexOf('chrome') == -1 && !/secure-browser/.test(url) && !/download-thank-you.php/.test(url)) {\n\t\t\t\t$('#offer-chrome').show();\n\n\t\t\t\ttracker.track('chromeOffer.onPageLoad', e);\n\n\t\t\t\t// adding custom name on query method allows to turn off resize, scroll events ONLY for this specific method\n\t\t\t\t$window.on('resize.myResize scroll.myScroll', function() {\n\t\t\t\t\tif (waypoints($('#offer-chrome'), null, null)) {\n\t\t\t\t\t\ttracker.track('chromeOffer.view', e)\n\t\t\t\t\t\t$window.off('resize.myResize').off('scroll.myScroll');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\t\t},\n\t\ttrackClick: function(e) {\n\t\t\ttracker.track('chromeOffer.click', e);\n\t\t}\n\t};\n\n\treturn chromeBanner;\n\n})());\n\n/**\n * Wrapper for cookieStorage object\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.storage.cookieStorage\n * @requires avast.storage.isCookieEnabled\n * @requires avast.storage.storageFactory\n */\navm.define('avast.storage.cookieStorage', (function() {\n\t'use strict';\n\tvar isCookieEnabled = avm.require('avast.storage.isCookieEnabled'),\n\t\tstorageFactory = avm.require('avast.storage.storageFactory'),\n\t\ttoString = Object.prototype.toString,\n\t\tkeys = function() {\n\t\t\treturn document.cookie.replace(/((?:^|\\s*;)[^=]+)(?=;|$)|^\\s*|\\s*(?:=[^;]*)?(?:\\1|$)/g, '').split(/\\s*(?:=[^;]*)?;\\s*/);\n\t\t},\n\t\tcookieStorage = {\n\t\t\tlength: document.cookie !== '' ? keys().length : 0,\n\n\t\t\t/**\n\t\t\t * Add key/value pair\n\t\t\t * @param {*} key\n\t\t\t * @param {*} value\n\t\t\t * @param {string|date} [expires]\n\t\t\t * @param {string} [path]\n\t\t\t * @param {string} [domain]\n\t\t\t * @param {boolean} [secure]\n\t\t\t */\n\t\t\tsetItem: function(key, value, expires, path, domain, secure) {\n\t\t\t\tif (typeof key !== 'undefined' && typeof value !== 'undefined') {\n\t\t\t\t\tvar regExp = /^(?:expires|max\\-age|path|domain|secure)$/i;\n\t\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\t\tvalue = encodeURIComponent(value);\n\t\t\t\t\tif (key && !regExp.test(key)) {\n\t\t\t\t\t\tif (document.cookie.indexOf(key) === -1) {\n\t\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof expires === 'string') {\n\t\t\t\t\t\t\texpires = '; expires=' + expires;\n\t\t\t\t\t\t} else if (toString.call(expires) === '[object Date]') {\n\t\t\t\t\t\t\texpires = '; expires=' + expires.toUTCString();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdocument.cookie = key + '=' + value + (typeof expires === 'string' ? expires : '') + (typeof domain === 'string' ? '; domain=' + domain : '') + (typeof path === 'string' ? '; path=' + path : '') + (secure ? '; secure' : '');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.setItem');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get value associated with key\n\t\t\t * @param {*} key\n\t\t\t * @returns {string|null}\n\t\t\t */\n\t\t\tgetItem: function(key) {\n\t\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\t\tvar regExp = new RegExp('(?:(?:^|.*;)\\\\s*' + encodeURIComponent(key).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$');\n\t\t\t\t\treturn decodeURIComponent(document.cookie.replace(regExp, '$1')) || null;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.getItem');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Remove key/value pair\n\t\t\t * @param {*} key\n\t\t\t * @param {string} [path]\n\t\t\t * @param {string} [domain]\n\t\t\t */\n\t\t\tremoveItem: function(key, path, domain) {\n\t\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\t\tif (document.cookie.indexOf(key) !== -1) {\n\t\t\t\t\t\tthis.length--;\n\t\t\t\t\t}\n\t\t\t\t\tdocument.cookie = key + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' + (typeof domain === 'string' ? '; domain=' + domain : '') + (typeof path === 'string' ? '; path=' + path : '');\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.removeItem');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get name of nth key\n\t\t\t * @param {number} n\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tkey: function(n) {\n\t\t\t\tif (typeof n === 'number') {\n\t\t\t\t\tvar keysArray = keys(),\n\t\t\t\t\t\tkeysArrayLength = keysArray.length;\n\t\t\t\t\tif (n < keysArrayLength) {\n\t\t\t\t\t\treturn decodeURIComponent(keysArray[n]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.key');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Clear all items\n\t\t\t */\n\t\t\tclear: function() {\n\t\t\t\tvar keysArray = keys(),\n\t\t\t\t\tkeysArrayLength = keysArray.length;\n\t\t\t\tfor (var i = 0; i < keysArrayLength; i++) {\n\t\t\t\t\tthis.removeItem(keysArray[i]);\n\t\t\t\t}\n\t\t\t\tthis.length = document.cookie !== '' ? keys().length : 0;\n\t\t\t}\n\n\t\t};\n\treturn isCookieEnabled ? cookieStorage : storageFactory();\n})());\n\n/**\n* Decorate cart link with showCuponeCode parameter\n* @version 1.1.3\n* @author Ales Gabriel, Michal Langhoffer\n* @module avast.web.couponCode\n* @requires jquery\n* @requires avast.storage.cookieStorage\n*/\navm.define('avast.web.couponCode', (function () {\n 'use strict';\n\n var $ = avm.require('jquery'),\n cookieStorage = avm.require('avast.storage.cookieStorage');\n\n return {\n options: {\n regexS: '[\\\\?&]couponfield=yes([^&#]*)',\n providers:['dr-store.avast.com','store.avast.com','store.avast.ru'],\n urlQuery: '/showCouponCode=yes'\n },\n\n init: function(params){\n var root = this;\n if(params !== undefined){\n for(var param in params){\n this.options[param] = params[param];\n }\n }\n\n var regex = new RegExp(this.options.regexS,\"i\");\n var results = regex.exec(window.location.href);\n\n if(results === null){\n return 1;\n } else {\n var href;\n var couponParam = this.options.urlQuery;\n var providers = this.options.providers;\n var cookieExpirationTime = new Date();\n\n function getHostname() {\n var hostnameSplitted = window.location.hostname.split('.');\n\n if (hostnameSplitted[hostnameSplitted.length - 2] === 'avast' && hostnameSplitted[hostnameSplitted.length - 1] === 'com') {\n return '.avast.com';\n } else {\n return window.location.hostname.substring(3);\n }\n }\n\n $(\"a\").each(function(){\n href = $(this).attr('href') ? $(this).attr('href') : \"\";\n for(var i=0;i\n * @module avast.web.downloadPopup\n * @requires avast.web.tracker\n * @copyright Avast Software s.r.o ©2023\n */\n\navm.define('avast.web.downloadPopup', (function() {\n\t'use strict';\n\n\tvar tracker = avm.require('avast.web.tracker'),\n\t\tdetect = avastGlobals.detect,\n\t\tbrowser = detect.browser,\n\t\tos = detect.os,\n\t\tuserPlatform = avastGlobals.detect.browser.platform,\n\t\ttrackingObj = {\n\t\t\tlocale: avastGlobals.web.locale,\n\t\t\tpage: '/' + avastGlobals.web.locale + '/' + avastGlobals.web.pathFromRoot\n\t\t},\n\t\tdownloadPopup = {\n\t\t\tinit: function() {\n\t\t\t\tvar popups = document.querySelectorAll('.js-popup-dtp[data-role=\"popup\"][data-cmp-name=\"dtyp-popup\"]'),\n\t\t\t\t\tbuttons = document.querySelectorAll('a[data-role=\"download-link\"]:not(.js-downloadPopup-fallback-link)'),\n\t\t\t\t\tself = this;\n\n\t\t\t\t// if some popup exist\n\t\t\t\tif (popups.length > 0) {\n\t\t\t\t\t// popup settings\n\t\t\t\t\tpopups.forEach(function(popupEl) {\n\t\t\t\t\t\t// A11y popup setup\n\t\t\t\t\t\tpopupEl.setAttribute('tabindex', '-1');\n\t\t\t\t\t\t// TODO: change HTML (span -> button) and remove this row\n\t\t\t\t\t\tif (popupEl.querySelector('.js-dtp-close')) {\n\t\t\t\t\t\t\tpopupEl.querySelector('.js-dtp-close').setAttribute('tabindex', 0);\n\t\t\t\t\t\t\tpopupEl.querySelector('.js-dtp-close').setAttribute('role', 'button');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// set popup on each download button\n\t\t\t\tbuttons.forEach(function(button) {\n\t\t\t\t\tself.setPopup(button);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetPopup: function(button) {\n\t\t\t\tvar self = this;\n\n\t\t\t\t// check if button hasn't already set some popup\n\t\t\t\tif (button.getAttribute('js-popup-event') !== 'true') {\n\n\t\t\t\t\t// check for cross sell\n\t\t\t\t\t// cross sell testing cookie: document.cookie = \"clientTest=true; max-age=60; path=/;\";\n\t\t\t\t\tif (!browser.isAvast && os.isWindows && (avastGlobals.client !== undefined || /clientTest=true/.test(document.cookie)) && self.isCrosssellBtnCorrect(button)) {\n\t\t\t\t\t\t// set cross sell popup\n\t\t\t\t\t\tcrossSellModal(button);\n\t\t\t\t\t\t// prevents duplicity of events on button\n\t\t\t\t\t\tbutton.setAttribute('js-popup-event', 'true');\n\n\t\t\t\t\t// check for oops\n\t\t\t\t\t} else if (self.isOopsBtnCorrect(button) && button.getAttribute('data-platform').toLowerCase() !== userPlatform) {\n\t\t\t\t\t\t// set oops\n\t\t\t\t\t\toopsModal(button);\n\t\t\t\t\t\t// prevents duplicity of events on button\n\t\t\t\t\t\tbutton.setAttribute('js-popup-event', 'true');\n\n\t\t\t\t\t// else check for dtyp\n\t\t\t\t\t} else if (self.isDownloadBtnCorrect(button)) {\n\t\t\t\t\t\t// set download popup\n\t\t\t\t\t\tdownloadModal(button);\n\t\t\t\t\t\t// prevents duplicity of events on button\n\t\t\t\t\t\tbutton.setAttribute('js-popup-event', 'true');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction crossSellModal(button) {\n\t\t\t\t\tvar csrossSellModalElement = document.getElementById('cross-sell-modal'),\n\t\t\t\t\t\tbsnModal = new BSN.Modal(csrossSellModalElement), // define bootstrap modal\n\t\t\t\t\t\tmodalButtons = csrossSellModalElement.querySelectorAll('[data-role=\"download-link\"]'); // download buttons in modal\n\n\t\t\t\t\t// exclude buttons in oops modal (prevents loop)\n\t\t\t\t\tif (button.closest('.modal-oops') === null) {\n\t\t\t\t\t\tbutton.addEventListener('click', function(event) {\n\t\t\t\t\t\t\tevent.preventDefault(); // disable file download\n\t\t\t\t\t\t\tevent.stopPropagation(); // disable download tracking\n\n\t\t\t\t\t\t\t// open bootstrap modal\n\t\t\t\t\t\t\tbsnModal.show()\n\n\t\t\t\t\t\t\t// closing modal by clicking download button\n\t\t\t\t\t\t\tmodalButtons.forEach(function(btn) {\n\t\t\t\t\t\t\t\tbtn.addEventListener('click', function() {\n\t\t\t\t\t\t\t\t\tbsnModal.hide();\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction downloadModal(button) {\n\t\t\t\t\tvar downloadId = button.getAttribute('data-download-name'),\n\t\t\t\t\t\tisRuExternalDownload = avastGlobals.web.locale === 'ru-ru' && browser.isChrome && /FAV-/.test(downloadId), // external download for RU chrome\n\t\t\t\t\t\tisPlExternalDownload = avastGlobals.web.locale === 'pl-pl' && /FAV-/.test(downloadId); // external download for PL\n\n\t\t\t\t\t// is not mobile platforms, external downloads or leads to app stores\n\t\t\t\t\tif (!os.isAndroid && !os.isIOS && !isRuExternalDownload && !isPlExternalDownload && !/apps.apple|play.google/.test(button.href)) {\n\n\n\t\t\t\t\t\t// default or alternative download popup exist\n\t\t\t\t\t\tif (button.getAttribute('data-target') || document.querySelectorAll('[data-cmp-name=\"dtyp-popup\"]').length > 0) {\n\n\t\t\t\t\t\t\t// set direct=1 parameter for direct download\n\t\t\t\t\t\t\tvar url = new URL(button.href),\n\t\t\t\t\t\t\t\tparams = url ? url.searchParams : null;\n\n\t\t\t\t\t\t\tparams.set('direct', 1);\n\t\t\t\t\t\t\turl.search = params.toString();\n\t\t\t\t\t\t\tbutton.href = url.toString();\n\n\t\t\t\t\t\t\tbutton.addEventListener('click', function(e) {\n\t\t\t\t\t\t\t\t// Check for alternative download popup or use default\n\t\t\t\t\t\t\t\tvar popup = button.hasAttribute('data-target') ? document.getElementById(button.getAttribute('data-target')) : document.querySelector('#downloadPopup[data-cmp-name=\"dtyp-popup\"]'),\n\t\t\t\t\t\t\t\t\tcloseButton = popup.querySelector('.js-dtp-close'),\n\t\t\t\t\t\t\t\t\tprogress = popup.querySelector('.dtyp-progress'),\n\t\t\t\t\t\t\t\t\tnote = popup.querySelector('.dtyp-note'),\n\t\t\t\t\t\t\t\t\tfallback = popup.querySelectorAll('.js-downloadPopup-fallback-link');\n\n\t\t\t\t\t\t\t\t// Set attributes to fallback links\n\t\t\t\t\t\t\t\tif (fallback) {\n\t\t\t\t\t\t\t\t\tfallback.forEach(function(anchor) {\n\t\t\t\t\t\t\t\t\t\tanchor.setAttribute('data-download-name', button.getAttribute('data-download-name'));\n\t\t\t\t\t\t\t\t\t\tanchor.setAttribute('data-bi-download-name', button.getAttribute('data-bi-download-name'));\n\t\t\t\t\t\t\t\t\t\tanchor.href = button.href;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Progress spinner and manual link animation\n\t\t\t\t\t\t\t\tif (progress && note) {\n\t\t\t\t\t\t\t\t\tprogress.classList.add('dtyp-progress-show');\n\t\t\t\t\t\t\t\t\tprogress.classList.remove('d-none');\n\t\t\t\t\t\t\t\t\tnote.classList.remove('dtyp-note-show');\n\t\t\t\t\t\t\t\t\tnote.classList.add('d-none');\n\n\t\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\tprogress.classList.remove('dtyp-progress-show');\n\t\t\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\t\tprogress.classList.add('d-none');\n\t\t\t\t\t\t\t\t\t\t\tnote.classList.remove('d-none');\n\t\t\t\t\t\t\t\t\t\t\tnote.classList.add('dtyp-note-show');\n\t\t\t\t\t\t\t\t\t\t}, 330);\n\t\t\t\t\t\t\t\t\t}, 3000);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Show popup\n\t\t\t\t\t\t\t\tpopup.classList.remove('d-none');\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tpopup.classList.add('is-open');\n\t\t\t\t\t\t\t\t\tdocument.body.classList.add('dtypup-open');\n\t\t\t\t\t\t\t\t}, 10);\n\n\t\t\t\t\t\t\t\ttracker.track('downloadPopup.view', trackingObj);\n\n\t\t\t\t\t\t\t\t// a11y\n\t\t\t\t\t\t\t\tpopup.setAttribute('tabindex', '0');\n\t\t\t\t\t\t\t\tpopup.focus();\n\n\t\t\t\t\t\t\t\t// Close popup by browser's back button\n\t\t\t\t\t\t\t\twindow.history.pushState({\n\t\t\t\t\t\t\t\t\tstate: 1\n\t\t\t\t\t\t\t\t}, 'Avast', window.location.href);\n\n\t\t\t\t\t\t\t\t// Close popup handlers\n\t\t\t\t\t\t\t\tself.closeHandler(popup, button, closeButton, fallback, document.activeElement);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction oopsModal(button) {\n\t\t\t\t\t// popup for wrong downloaded platform\n\t\t\t\t\tbutton.addEventListener('click', function (e) {\n\t\t\t\t\t\tvar downloadPlatform = this.getAttribute('data-platform').toLowerCase(),\n\t\t\t\t\t\t\tmodal = document.querySelector('#' + this.getAttribute('data-oops-target')),\n\t\t\t\t\t\t\tmodalButtons = modal.querySelectorAll('[data-role=\"download-link\"]');\n\n\t\t\t\t\t\t// interupt downloading file\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t// can be replaced by styles in css\n\t\t\t\t\t\tvar styleReset = modal.querySelectorAll('[class*=\"js-oops-\"]');\n\t\t\t\t\t\tfor (var x = 0; x < styleReset.length; x++) {\n\t\t\t\t\t\t\tstyleReset[x].style.display = 'none';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// show title by user's platform\n\t\t\t\t\t\tif (modal.querySelector('.js-oops-title-' + userPlatform)) {\n\t\t\t\t\t\t\tmodal.querySelector('.js-oops-title-' + userPlatform).style.display = 'block';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// show description by user's and downloaded platforms\n\t\t\t\t\t\tif (modal.querySelector('.js-oops-desc-custom-' + userPlatform)) {\n\t\t\t\t\t\t\tmodal.querySelector('.js-oops-desc-custom-' + userPlatform).style.display = 'block';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (modal.querySelector('.js-oops-desc-' + userPlatform + '-' + downloadPlatform)) {\n\t\t\t\t\t\t\tmodal.querySelector('.js-oops-desc-' + userPlatform + '-' + downloadPlatform).style.display = 'block';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// show primary button by user's platform\n\t\t\t\t\t\tif (modal.querySelector('.js-oops-primary-' + userPlatform)) {\n\t\t\t\t\t\t\tmodal.querySelector('.js-oops-primary-' + userPlatform).style.display = 'block';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// show secondary button by downloaded platform if 'secondaryDisabled' parameter is not set\n\t\t\t\t\t\tif (!modal.classList.contains('js-oops-disabled-' + userPlatform) && modal.querySelector('.js-oops-secondary-' + downloadPlatform)) {\n\t\t\t\t\t\t\tmodal.querySelector('.js-oops-secondary-' + downloadPlatform).style.display = 'block';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prevent incorrect behavior while popup in popup is used\n\t\t\t\t\t\tvar bsnModal = new BSN.Modal(modal);\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t// show oops modal\n\t\t\t\t\t\t\tbsnModal.show()\n\t\t\t\t\t\t}, 300);\n\n\t\t\t\t\t\t// tracking of closing modal without download\n\t\t\t\t\t\tmodal.addEventListener('hide.bs.modal', function(){\n\t\t\t\t\t\t\tif (typeof dataLayer !== 'undefined') dataLayer.push({\"event\": \"compatibilityPopupClosed\"});\n\t\t\t\t\t\t\tavastGlobals.web.disableDtyp = false;\n\t\t\t\t\t\t},{ once: true });\n\n\t\t\t\t\t\t// closing modal by clicking download button\n\t\t\t\t\t\tmodalButtons.forEach(function(btn) {\n\t\t\t\t\t\t\tbtn.addEventListener('click', function() {\n\t\t\t\t\t\t\t\t// close modal\n\t\t\t\t\t\t\t\tbsnModal.hide();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tcloseHandler: function(popup, openBtn, closeBtn, fallbackLink, focusedElement) {\n\t\t\t\t// close on ESC or tabindex by TAB\n\t\t\t\twindow.addEventListener('keyup', keypress);\n\t\t\t\t// press enter on close button\n\t\t\t\tcloseBtn.addEventListener('keyup', closeByEnter);\n\t\t\t\t// click on close button\n\t\t\t\tcloseBtn.addEventListener('click', closePopup);\n\t\t\t\t// browser history back\n\t\t\t\twindow.addEventListener('popstate', closePopup);\n\n\t\t\t\tfunction closeByEnter(e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\tclosePopup();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction keypress(e) {\n\t\t\t\t\tif (popup.classList.contains('is-open')) {\n\t\t\t\t\t\t// close popup by ESC\n\t\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\t\tclosePopup();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// A11y Tab in popup\n\t\t\t\t\t\tif (e.keyCode === 9) {\n\t\t\t\t\t\t\tfocusedElement === fallbackLink ? closeBtn.focus() : fallbackLink.focus();\n\t\t\t\t\t\t\tfocusedElement = document.activeElement;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction closePopup() {\n\t\t\t\t\tpopup.classList.remove('is-open');\n\t\t\t\t\tdocument.body.classList.remove('dtypup-open');\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpopup.classList.add('d-none');\n\t\t\t\t\t}, 250);\n\n\t\t\t\t\t// a11y disable tab index and set focus to button\n\t\t\t\t\tpopup.setAttribute('tabindex', '-1');\n\t\t\t\t\topenBtn.focus();\n\n\t\t\t\t\twindow.removeEventListener('keyup', keypress);\n\t\t\t\t\tcloseBtn.removeEventListener('keyup', closeByEnter);\n\t\t\t\t\tcloseBtn.removeEventListener('click', closePopup);\n\t\t\t\t\twindow.removeEventListener('popstate', closePopup);\n\n\t\t\t\t\ttracker.track('downloadPopup.close', trackingObj);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdtypExists: function() {\n\t\t\t\t// check if download popup exist on page\n\t\t\t\treturn document.querySelectorAll('.js-popup-dtp[data-role=\"popup\"][data-cmp-name=\"dtyp-popup\"]').length > 0 ? true : false;\n\t\t\t},\n\t\t\tisDownloadBtnCorrect: function(button) {\n\t\t\t\t// check if it is correct download button\n\t\t\t\treturn (button.hasAttribute('data-role') && button.getAttribute('data-role') === 'download-link' && !button.classList.contains('js-downloadPopup-fallback-link') && button.getAttribute('data-behavior') !== 'downloadPage') ? true : false;\n\t\t\t},\n\t\t\tisOopsBtnCorrect: function(button) {\n\t\t\t\t// check if button has all needed attributes for oops\n\t\t\t\treturn (button.hasAttribute('data-role') && button.getAttribute('data-role') === 'download-link' && button.hasAttribute('data-platform') && button.hasAttribute('data-oops-target') && button.getAttribute('data-oops-target') !== '' && document.getElementById(button.getAttribute('data-oops-target')) && document.querySelector('#' + button.getAttribute('data-oops-target'))) ? true : false;\n\t\t\t},\n\t\t\tisCrosssellBtnCorrect: function(button) {\n\t\t\t\t// check if button has all needed attributes for cross sell\n\t\t\t\treturn (button.hasAttribute('data-role') && button.getAttribute('data-role') === 'download-link' && button.hasAttribute('data-download-name') && /FAV/.test(button.getAttribute('data-download-name')) && !button.classList.contains('cross-sell-btn') && document.getElementById('cross-sell-modal')) ? true : false;\n\t\t\t}\n\t\t};\n\n\treturn downloadPopup;\n})());\n\n/**\n * Decorate link with params\n * @version 1.1.0\n * @author Ales Gabriel \n * @module avast.web.linkdecorator\n * @requires jquery\n * @requires avast.url.unserialize\n * @param {string} selector Css selector. Matched elements will be decorated\n * @param {(string|string[])} params Name or array of names\n * @param {string} [querystring] Optionally you can set querystring parameter manually. In this case querystring from URL will be ignored.\n * @param {string} [newValue] Optionally value can be set\n * @returns {object} jQuery object of selected elements\n */\n\navm.define('avast.web.linkDecorator', function(selector, params, querystring, newValue){\n\t'use strict';\n\n\tvar $ = avm.require('jquery'),\n\t\tquery = querystring ? querystring : undefined,\n\t\tunserialize = avm.require('avast.url.unserialize'),\n\t\turlParams = unserialize(query),\n\t\tparamArr = (Object.prototype.toString.call(params) === '[object Array]') ? params : [params],\n\t\tparam = null,\n\t\t$els = null,\n\t\tresult = [];\n\n\tfor (var i = 0; i < paramArr.length; i++ ) {\n\t\tparam = paramArr[i];\n\n\t\tif(urlParams[param]){\n\t\t\t$els = $(selector).each(function () {\n\t\t\t\tvar $el = $(this),\n\t\t\t\t\tprepend = this.search && this.search.length > 0 ? '&' : '?',\n\t\t\t\t\threfParams = unserialize($el.attr('href')),\n\t\t\t\t\tvalue = newValue || urlParams[param];\n\n\t\t\t\tif(!hrefParams[urlParams[param]]){\n\t\t\t\t\t$el.attr('href', $el.attr('href') + prepend + param + '=' + value );\n\t\t\t\t}\n\t\t\t});\n\t\t\tresult.push($els)\n\t\t}\n\t}\n\n\treturn result;\n});\n/**\n * Tracking for Mobile Campaigns\n * @version 1.0.2\n * @author Fedor Kušš \n * @module avast.web.mobileTracking\n * @requires jquery\n * @requires avast.url.unserialize\n */\n\n(function() {\n\t'use strict';\n\tvar urls =\n\t['index', 'free-mobile-security', 'free-ios-security', 'lp-ppc-protect-a', 'lp-ppc-protect-b', 'secureline-vpn', 'lp-ppc-secureline-vpn-buy', 'lp-protection', 'protection'],\n\t\tpathName = window.avastGlobals.web.fileName;\n\n\tif (urls.indexOf(pathName) > -1) {\n\n\t\tvar unserializedUrl = avm.require('avast.url.unserialize')(),\n\t\t\tcmpgContent = unserializedUrl.cmpg_for_af;\n\n\t\tif (typeof cmpgContent !== 'undefined' && cmpgContent.length > 0) {\n\n\t\t\tvar detected = avastGlobals.detect;\n\n\t\t\tif (detected.os.isAndroid || detected.os.isIOS) {\n\t\t\t\t$('body').addClass('mobile-tracking');\n\t\t\t\tvar mobileTracking = $('.mobile-tracking .bi-download-link');\n\n\t\t\t\tmobileTracking.attr('href', 'https://go.onelink.me/gM36?pid=AdWords-Web&c=' + cmpgContent + '&af_web_dp=https%3A%2F%2Fwww.avast.com%2Ffree-mobile-security');\n\n\t\t\t\tif (pathName === 'secureline-vpn') {\n\t\t\t\t\tmobileTracking.attr('href', 'https://go.onelink.me/KhNk?pid=AdWords-Web&c=' + cmpgContent + '&af_web_dp=https%3A%2F%2Fwww.avast.com%2Fsecureline-vpn');\n\n\t\t\t\t}\n\t\t\t\tif (pathName === 'lp-ppc-secureline-vpn-buy') {\n\t\t\t\t\tmobileTracking.attr('href', 'https://go.onelink.me/KhNk?pid=AdWords-Web&c=' + cmpgContent + '&af_web_dp=https%3A%2F%2Fwww.avast.com%2Fsecureline-vpn');\n\t\t\t\t}\n\t\t\t\tif (pathName === 'lp-safe-emailing') {\n\t\t\t\t\tmobileTracking.attr('href', 'https://avast.sng.link/Dp3jo/4129/jvio');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n})();\n\n/**\n * Navigation - global navigation\n * @version 1.4.0\n * @author Michal Langhoffer , Ales Gabriel , Jaroslav Slaby \n * @module avast.web.navigation\n * @requires cash\n * @requires avast.url.unserialize\n * @requires avast.web.mqMarker\n * @return {Function} Emitter constructor\n */\n\nvar avast = avast || {};\n\n// Disables language selector\navast.disableLanguageSelector = true;\n\n\n/**\n * Definiton of modules for 'avast.web.navigation'\n */\navm.define('avast.web.navigation', function(navSel) {\n\t'use strict';\n\n\t// Required modules\n\tvar $ = avm.require('cash'),\n\t\tunserialize = avm.require('avast.url.unserialize'),\n\t\tsetMqMarkers = avm.require('avast.web.mqMarker');\n\n\t// --------------------------------- Communal ---------------------------------\n\n\t// Universal Selectors\n\tvar $window = $(window),\n\t\t$body = $('body'),\n\t\t$headerElement = $('header.header'),\n\t\t$navElement = $headerElement.find('nav'),\n\t\t$navigation = navSel ? $(navSel) : $('.js-navigation'),\n\t\t$secondMenuBlogs = document.querySelector('.second-menu.blogs'),\n\t\t$langSelector = $('.region-selector'),\n\t\t$languageSelectorButtons = $('.js-language-selector-trigger'),\n\t\t$languageSelector = $langSelector.find('.region-selector-close');\n\n\t// Universal variables\n\tvar firstMenuClasses = getFirstMenuClasses(),\n\t\tsecondMenuClasses = getSecondMenuClasses(),\n\t\topenedThirdMenu,\n\t\tthirdMenuLinks = [],\n\t\topenedSubMenu,\n\t\tlanguageSelectorTrigger,\n\t\tavastGlobalsAvailable = typeof window.avastGlobals !== 'undefined' && typeof window.avastGlobals.web !== 'undefined',\n\t\tisDevEnv = avastGlobalsAvailable ? window.avastGlobals.web.domain.split('/').length > 1 : false,\n\t\tconfig = {\n\t\t\tfirstMenu: false,\n\t\t\tsecondMenu: false\n\t\t},\n\t\tnavInit = {\n\t\t\tdesktopNav: false,\n\t\t\tmobileNav: false\n\t\t};\n\n\t/**\n\t* Get all 1st menu classes to an array\n\t*/\n\tfunction getFirstMenuClasses() {\n\t\tvar classes = [];\n\t\tvar firstMenuItems = document.querySelectorAll('.first-menu .item:not(.blogs)');\n\t\tfor (var i = 0; i < firstMenuItems.length; i++) {\n\t\t\tvar el = firstMenuItems[i];\n\n\t\t\tvar itemData = el.getAttribute('data-first-menu');\n\n\t\t\tif (itemData) {\n\t\t\t\tvar itemClass = 'first-menu-' + itemData;\n\t\t\t\tclasses.push(itemClass);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\t/**\n\t* Get all 2nd menu classes to an array\n\t*/\n\tfunction getSecondMenuClasses() {\n\t\tvar classes = [];\n\t\tvar secondMenuItems = document.querySelectorAll('.second-menu li');\n\n\t\tfor (var i = 0; i < secondMenuItems.length; i++) {\n\t\t\tvar itemData = secondMenuItems[i].getAttribute('data-second-menu');\n\n\t\t\tif (itemData) {\n\t\t\t\tvar itemClass = 'second-menu-' + itemData;\n\t\t\t\tclasses.push(itemClass);\n\t\t\t}\n\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\t// Determines whether desktop / mobile navigation should be shown\n\tvar mqMobile = window.matchMedia('(max-width: 991.98px)'),\n\t\tmqDesktop = window.matchMedia('(min-width: 992px)');\n\n\t/**\n\t* Extracts the value of ':before' class from the 'body' and if the navigation is viewed from desktop, returns 'navigation-desktop', if from mobile, returns 'none'\n\t*/\n\tfunction isDesktop() {\n\t\tvar mq = window.getComputedStyle ? window.getComputedStyle(document.body, ':before').getPropertyValue('content') : '';\n\t\treturn mq.indexOf('navigation-desktop') > -1;\n\t}\n\n\t// Set
height to fit the content of the