Google werkt artikelrichtlijnen voor gestructureerde gegevens bij

Google werkt artikelrichtlijnen voor gestructureerde gegevens bij post thumbnail image

Google heeft de documentatie voor Article Structured Data geüpdatet, die schematypen voor artikelen, nieuwsartikelen en blogberichten ondersteunt. De bijgewerkte richtlijnen zijn van invloed op kopteksteigenschappen zodat deze overeenkomen met de richtlijnen voor koptekstelementen en koptekstkoppelingen.

Artikel Structurele gegevens

Artikelgestructureerde gegevens zijn misschien wel een van de meest populaire typen gestructureerde gegevens die worden gebruikt, omdat er zoveel inhoud bestaat in de vorm van verschillende artikelen. Het is belangrijk om gestructureerde gegevens correct te gebruiken, omdat dit een webpagina geschikt kan maken voor gedetailleerde resultaten. Met artikelgestructureerde gegevens en zijn varianten (NewsArticle en BlogPosting) kunnen uitgevers verschillende informatie op een webpagina structureren. Er zijn veel gestructureerde gegevenseigenschappen gekoppeld aan het artikeltypeschema. De richtlijnen van Google geven over het algemeen aanbevelingen over de soorten gestructureerde gegevens die vereist of optioneel zijn om de zoekresultaten te verbeteren. Wijzigingen in richtlijnen worden meestal gevolgd door wijzigingen in plug-ins voor gestructureerde gegevens.

Google versoepelt de eigendomsrichtlijnen voor header-gestructureerde gegevens

Het wijzigen van de richtlijnen is van invloed op de titeleigenschap die Google presenteert als aanbevolen. De titel van het artikel is de titel die gewoonlijk wordt weergegeven in het titelelement in het metadatagebied. In het verleden beperkte Google het aantal tekens dat een kop kon bevatten.
Dit is de oorspronkelijke aanbeveling: (link naar Archive.org) “Artikeltitel. De waarde mag niet langer zijn dan 110 tekens.
De nieuwe eigendomsrichtlijnen van Google beperken niet langer de lengte van artikelkoppen:
“Titel van het artikel. Overweeg een korte naam te gebruiken, aangezien lange namen op sommige apparaten kunnen worden afgekort. De nieuwe richtlijnen voor koppen komen overeen met de best practices van Google voor het titelelement (vaak de title-tag genoemd) in de richtlijnen voor koppen. De titelreferentierichtlijnen adviseren: “Schrijf beschrijvend en beknopt de tekst van de elementen”. De aankondiging van Google beschrijft de wijziging: “3 januari: Limiet van 110 tekens voor titeleigenschap in de documentatie van Article Structured Data verwijderd. Er is geen strikte tekenlimiet; we raden aan om in plaats daarvan beknopte titels te schrijven, aangezien lange titels op sommige apparaten kunnen worden ingekort. Het is altijd een goede gewoonte om beknopt te zijn, wat betekent dat u zoveel mogelijk informatie in zo min mogelijk woorden moet overbrengen. Het is echter ook mogelijk om zoveel woorden als nodig in de titel te gebruiken, rekening houdend met hoe de titel in de zoekresultaten van Google kan verschijnen.</p> <p><em>Uitgelichte afbeelding door Shutterstock / Asier Romero</em></p> </div> <div class="tags-bg p-2 mt-3 mb-3"> </div> <nav class="navigation post-navigation" aria-label="Berichten"> <h2 class="screen-reader-text">Berichtnavigatie</h2> <div class="nav-links"><div class="nav-previous"><a href="https://seoblog.be/blog/2023/01/04/deze-dag-in-de-geschiedenis-van-zoekmarketing-4-januari/" rel="prev"><span class="meta-nav" aria-hidden="true">Previous</span> <span class="screen-reader-text">Previous post:</span> <span class="post-title">Deze dag in de geschiedenis van zoekmarketing: 4 januari</span></a></div><div class="nav-next"><a href="https://seoblog.be/blog/2023/01/04/microsoft-voegt-chatgpt-functionaliteit-toe-aan-bing-search/" rel="next"><span class="meta-nav" aria-hidden="true">Next</span> <span class="screen-reader-text">Next post:</span> <span class="post-title">Microsoft voegt ChatGPT-functionaliteit toe aan Bing Search</span></a></div></div> </nav> <div class="related-post"> <h3 class="py-3">Relevante berichten</h3> <div class="row"> <div class="col-lg-4 col-md-6"> <article id="post-945" class="inner-service post-945 post type-post status-publish format-standard has-post-thumbnail category-uncategorized"> <div class="post-main-box p-3 mb-3 text-center wow zoomIn" data-wow-duration="2s"> <div class="box-image"> </div> <h2 class="section-title mt-0 pt-0"><a href="https://seoblog.be/blog/2022/09/27/5-google-ads-voorbeelden-met-relevante-en-hoogwaardige-advertentietekst/">5 Google Ads-voorbeelden met relevante en hoogwaardige advertentietekst<span class="screen-reader-text">5 Google Ads-voorbeelden met relevante en hoogwaardige advertentietekst</span></a></h2> <div class="new-text"> <p> Bij effectief gebruik kunnen al deze elementen uw prestaties verbeteren. Onthoud de gegevens over de relevantie van de advertentie. Een relevantere advertentie kan uw CTR verbeteren en uw CPC verlagen. </p> </div> <div class="more-btn mt-4 mb-4"> <a class="p-3" href="https://seoblog.be/blog/2022/09/27/5-google-ads-voorbeelden-met-relevante-en-hoogwaardige-advertentietekst/">Verder lezen<span class="screen-reader-text">Verder lezen</span></a> </div> </div> <div class="clearfix"></div> </article> </div> <div class="col-lg-4 col-md-6"> <article id="post-3735" class="inner-service post-3735 post type-post status-publish format-standard category-uncategorized"> <div class="post-main-box p-3 mb-3 text-center wow zoomIn" data-wow-duration="2s"> <div class="box-image"> </div> <h2 class="section-title mt-0 pt-0"><a href="https://seoblog.be/blog/2022/12/20/modellen-voor-klantsegmentatie-om-de-prestaties-van-de-loyaliteitsmarketingcampagnes-van-comarch-te-verbeteren/">Modellen voor klantsegmentatie om de prestaties van de loyaliteitsmarketingcampagnes van Comarch te verbeteren<span class="screen-reader-text">Modellen voor klantsegmentatie om de prestaties van de loyaliteitsmarketingcampagnes van Comarch te verbeteren</span></a></h2> <div class="new-text"> <p> Begrijpen dat elke klant uniek is, is de sleutel tot het creëren van een loyaliteitsmarketingstrategie. Elk lid heeft andere behoeften, voorkeuren, communicatiekanalen, gedragingen en emoties. Al deze unieke leden bereiken </p> </div> <div class="more-btn mt-4 mb-4"> <a class="p-3" href="https://seoblog.be/blog/2022/12/20/modellen-voor-klantsegmentatie-om-de-prestaties-van-de-loyaliteitsmarketingcampagnes-van-comarch-te-verbeteren/">Verder lezen<span class="screen-reader-text">Verder lezen</span></a> </div> </div> <div class="clearfix"></div> </article> </div> <div class="col-lg-4 col-md-6"> <article id="post-3835" class="inner-service post-3835 post type-post status-publish format-standard category-uncategorized"> <div class="post-main-box p-3 mb-3 text-center wow zoomIn" data-wow-duration="2s"> <div class="box-image"> </div> <h2 class="section-title mt-0 pt-0"><a href="https://seoblog.be/blog/2022/12/22/twitter-voegt-het-aantal-openbare-weergaven-toe-aan-tweets/">Twitter voegt het aantal openbare weergaven toe aan Tweets.<span class="screen-reader-text">Twitter voegt het aantal openbare weergaven toe aan Tweets.</span></a></h2> <div class="new-text"> <p> Elon Musk heeft vandaag aangekondigd dat Twitter nu het aantal weergaven op tweets zal weergeven, waardoor gebruikers een beter inzicht krijgen in het bereik van de inhoud van andere gebruikers. </p> </div> <div class="more-btn mt-4 mb-4"> <a class="p-3" href="https://seoblog.be/blog/2022/12/22/twitter-voegt-het-aantal-openbare-weergaven-toe-aan-tweets/">Verder lezen<span class="screen-reader-text">Verder lezen</span></a> </div> </div> <div class="clearfix"></div> </article> </div> </div> </div> </article> <div class="navigation"> <div class="clearfix"></div> </div> </div> <div class="col-lg-4 col-md-4" id="sidebar"><aside id="search-2" class="widget mb-5 p-3 widget_search"> <form method="get" class="search-form" action="https://seoblog.be/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="SEARCH" value="" name="s"> </label> <input type="submit" class="search-submit" value="SEARCH"> </form></aside> <aside id="recent-posts-2" class="widget mb-5 p-3 widget_recent_entries"> <h3 class="widget-title py-3 px-4">Meest recente berichten</h3> <ul> <li> <a href="https://seoblog.be/blog/2023/07/19/8-manieren-om-je-alt-tekst-seo-strategie-aan-te-vullen-via-sejournal-alttext_ai/">8 manieren om je alt-tekst SEO-strategie aan te vullen via @sejournal, @alttext_ai</a> </li> <li> <a href="https://seoblog.be/blog/2023/07/19/microsoft-vermindert-ai-om-menselijk-werk-en-zoeken-te-vervangen/">Microsoft vermindert AI om menselijk werk en zoeken te vervangen</a> </li> <li> <a href="https://seoblog.be/blog/2023/07/18/meta-rolt-verschillende-updates-uit-om-de-facebook-video-ervaring-te-verbeteren/">Meta rolt verschillende updates uit om de Facebook-video-ervaring te verbeteren</a> </li> <li> <a href="https://seoblog.be/blog/2023/07/18/google-tips-om-de-reputatie-en-het-vertrouwen-van-uw-bedrijf-te-verbeteren/">Google-tips om de reputatie en het vertrouwen van uw bedrijf te verbeteren</a> </li> <li> <a href="https://seoblog.be/blog/2023/07/18/meta-en-microsoft-brengen-llama-2-gratis-uit-voor-commercieel-gebruik-en-onderzoek/">Meta en Microsoft brengen Llama 2 gratis uit voor commercieel gebruik en onderzoek</a> </li> </ul> </aside><aside id="archives-2" class="widget mb-5 p-3 widget_archive"><h3 class="widget-title py-3 px-4">Archieven</h3> <ul> <li><a href='https://seoblog.be/blog/2023/07/'>juli 2023</a></li> <li><a href='https://seoblog.be/blog/2023/06/'>juni 2023</a></li> <li><a href='https://seoblog.be/blog/2023/05/'>mei 2023</a></li> <li><a href='https://seoblog.be/blog/2023/04/'>april 2023</a></li> <li><a href='https://seoblog.be/blog/2023/03/'>maart 2023</a></li> <li><a href='https://seoblog.be/blog/2023/02/'>februari 2023</a></li> <li><a href='https://seoblog.be/blog/2023/01/'>januari 2023</a></li> <li><a href='https://seoblog.be/blog/2022/12/'>december 2022</a></li> <li><a href='https://seoblog.be/blog/2022/11/'>november 2022</a></li> <li><a href='https://seoblog.be/blog/2022/10/'>oktober 2022</a></li> <li><a href='https://seoblog.be/blog/2022/09/'>september 2022</a></li> <li><a href='https://seoblog.be/blog/2022/08/'>augustus 2022</a></li> <li><a href='https://seoblog.be/blog/2022/07/'>juli 2022</a></li> <li><a href='https://seoblog.be/blog/2022/06/'>juni 2022</a></li> <li><a href='https://seoblog.be/blog/2022/05/'>mei 2022</a></li> <li><a href='https://seoblog.be/blog/2022/04/'>april 2022</a></li> <li><a href='https://seoblog.be/blog/2022/03/'>maart 2022</a></li> <li><a href='https://seoblog.be/blog/2022/01/'>januari 2022</a></li> <li><a href='https://seoblog.be/blog/2021/12/'>december 2021</a></li> <li><a href='https://seoblog.be/blog/2021/11/'>november 2021</a></li> <li><a href='https://seoblog.be/blog/2021/10/'>oktober 2021</a></li> <li><a href='https://seoblog.be/blog/2021/09/'>september 2021</a></li> <li><a href='https://seoblog.be/blog/2021/08/'>augustus 2021</a></li> <li><a href='https://seoblog.be/blog/2021/07/'>juli 2021</a></li> <li><a href='https://seoblog.be/blog/2021/06/'>juni 2021</a></li> <li><a href='https://seoblog.be/blog/2021/05/'>mei 2021</a></li> <li><a href='https://seoblog.be/blog/2021/04/'>april 2021</a></li> <li><a href='https://seoblog.be/blog/2021/03/'>maart 2021</a></li> <li><a href='https://seoblog.be/blog/2021/02/'>februari 2021</a></li> <li><a href='https://seoblog.be/blog/2021/01/'>januari 2021</a></li> <li><a href='https://seoblog.be/blog/2020/12/'>december 2020</a></li> <li><a href='https://seoblog.be/blog/2020/11/'>november 2020</a></li> <li><a href='https://seoblog.be/blog/2020/10/'>oktober 2020</a></li> <li><a href='https://seoblog.be/blog/2020/09/'>september 2020</a></li> <li><a href='https://seoblog.be/blog/2019/02/'>februari 2019</a></li> <li><a href='https://seoblog.be/blog/2018/12/'>december 2018</a></li> <li><a href='https://seoblog.be/blog/2018/09/'>september 2018</a></li> <li><a href='https://seoblog.be/blog/2018/08/'>augustus 2018</a></li> <li><a href='https://seoblog.be/blog/2018/06/'>juni 2018</a></li> <li><a href='https://seoblog.be/blog/2018/04/'>april 2018</a></li> <li><a href='https://seoblog.be/blog/2018/02/'>februari 2018</a></li> <li><a href='https://seoblog.be/blog/2018/01/'>januari 2018</a></li> <li><a href='https://seoblog.be/blog/2017/12/'>december 2017</a></li> <li><a href='https://seoblog.be/blog/2017/11/'>november 2017</a></li> <li><a href='https://seoblog.be/blog/2017/10/'>oktober 2017</a></li> <li><a href='https://seoblog.be/blog/2017/09/'>september 2017</a></li> <li><a href='https://seoblog.be/blog/2017/07/'>juli 2017</a></li> <li><a href='https://seoblog.be/blog/2017/06/'>juni 2017</a></li> <li><a href='https://seoblog.be/blog/1970/01/'>januari 1970</a></li> </ul> </aside><aside id="categories-2" class="widget mb-5 p-3 widget_categories"><h3 class="widget-title py-3 px-4">Categorieën</h3> <ul> <li class="cat-item cat-item-1"><a href="https://seoblog.be/blog/uncategorized/">Uncategorized</a> </li> </ul> </aside></div> </div> <div class="clearfix"></div> </main> </div> <footer role="contentinfo"> <aside id="footer" class="copyright-wrapper" role="complementary" aria-label="Footer"> <div class="container"> <div class="row"> <div class="footer_hide col-xs-12 footer-block"> </div> <div class="footer_hide col-xs-12 footer-block"> </div> <div class="footer_hide col-xs-12 col-xs-12 footer-block"> </div> <div class="footer_hide col-xs-12 footer-block"> </div> </div> </div> </aside> <div id="footer-2" class="pt-3 pb-3 text-center"> <div class="copyright container"> <p class="mb-0"><a href=https://www.vwthemes.com/themes/free-review-wordpress-theme/ target='_blank'>Affiliate Review WordPress Theme</a> By VWThemes</p> <a href="#" class="scrollup"><i class="fas fa-long-arrow-alt-up"></i><span class="screen-reader-text">Scroll Up</span></a> </div> <div class="clear"></div> </div> </footer> <script data-phast-original-src="https://seoblog.be/wp-content/themes/affiliate-review/assets/js/jquery.superfish.js?ver=2.1.2" data-phast-params='{"ref":"M9nOVqek_ls"}' data-phast-original-type="text/javascript" type="text/phast" id="jquery-superfish-js"></script> <script data-phast-original-src="https://seoblog.be/wp-content/themes/affiliate-review/assets/js/bootstrap.js?ver=6.0.9" data-phast-params='{"ref":"ESPXGPH0osA"}' data-phast-original-type="text/javascript" type="text/phast" id="bootstrap-js-js"></script> <script data-phast-original-src="https://seoblog.be/wp-content/themes/affiliate-review/assets/js/owl.carousel.js?ver=6.0.9" data-phast-params='{"ref":"45eaRkf1uQo"}' data-phast-original-type="text/javascript" type="text/phast" id="owl-carousel-js-js"></script> <script data-phast-original-src="https://seoblog.be/wp-content/themes/affiliate-review/assets/js/custom.js?ver=6.0.9" data-phast-params='{"ref":"mKXLKkcRUHU"}' data-phast-original-type="text/javascript" type="text/phast" id="affiliate-review-custom-scripts-jquery-js"></script> <script data-phast-original-src="https://seoblog.be/wp-content/themes/affiliate-review/assets/js/wow.js?ver=6.0.9" data-phast-params='{"ref":"Cs08YhjIRew"}' data-phast-original-type="text/javascript" type="text/phast" id="affiliate-review-wow-jquery-js"></script> <script data-phast-compiled-js-names="ScriptsProxyService/rewrite-function.js,CSSInlining/ie-fallback.js,CSSInlining/inlined-css-retriever.js,ScriptsDeferring/scripts-loader.js,ScriptsDeferring/rewrite.js">(function phastScripts(phast){phast.scripts=[(function(){phast.config=JSON.parse(atob(phast.config));while(phast.scripts.length){phast.scripts.shift()()} }),(function(){(function(a,b){typeof exports==="object"&&typeof module!=="undefined"?module.exports=b():typeof define==="function"&&define.amd?define(b):a.ES6Promise=b()})(phast,function(){"use strict";function c(ia){var ja=typeof ia;return ia!==null&&(ja==="object"||ja==="function")}function d(ka){return typeof ka==="function"}var e=void 0;if(Array.isArray){e=Array.isArray}else{e=function(la){return Object.prototype.toString.call(la)==="[object Array]"}}var f=e;var g=0;var h=void 0;var i=void 0;var j=function ma(na,oa){w[g]=na;w[g+1]=oa;g+=2;if(g===2){if(i){i(x)}else{z()}}};function k(pa){i=pa}function l(qa){j=qa}var m=typeof window!=="undefined"?window:undefined;var n=m||{};var o=n.MutationObserver||n.WebKitMutationObserver;var p=typeof self==="undefined"&&typeof process!=="undefined"&&{}.toString.call(process)==="[object process]";var q=typeof Uint8ClampedArray!=="undefined"&&typeof importScripts!=="undefined"&&typeof MessageChannel!=="undefined";function r(){return function(){return process.nextTick(x)}}function s(){if(typeof h!=="undefined"){return function(){h(x)}}return v()}function t(){var ra=0;var sa=new o(x);var ta=document.createTextNode("");sa.observe(ta,{characterData:true});return function(){ta.data=ra=++ra%2}}function u(){var ua=new MessageChannel;ua.port1.onmessage=x;return function(){return ua.port2.postMessage(0)}}function v(){var va=setTimeout;return function(){return va(x,1)}}var w=new Array(1e3);function x(){for(var wa=0;wa<g;wa+=2){var xa=w[wa];var ya=w[wa+1];xa(ya);w[wa]=undefined;w[wa+1]=undefined}g=0}function y(){try{var za=Function("return this")().require("vertx");h=za.runOnLoop||za.runOnContext;return s()}catch(Aa){return v()}}var z=void 0;if(p){z=r()}else if(o){z=t()}else if(q){z=u()}else if(m===undefined&&typeof require==="function"){z=y()}else{z=v()}function A(Ba,Ca){var Da=this;var Ea=new this.constructor(D);if(Ea[C]===undefined){$(Ea)}var Fa=Da._state;if(Fa){var Ga=arguments[Fa-1];j(function(){return W(Fa,Ea,Ga,Da._result)})}else{T(Da,Ea,Ba,Ca)}return Ea}function B(Ha){var Ia=this;if(Ha&&typeof Ha==="object"&&Ha.constructor===Ia){return Ha}var Ja=new Ia(D);P(Ja,Ha);return Ja}var C=Math.random().toString(36).substring(2);function D(){}var E=void 0;var F=1;var G=2;var H={error:null};function I(){return new TypeError("You cannot resolve a promise with itself")}function J(){return new TypeError("A promises callback cannot return that same promise.")}function K(Ka){try{return Ka.then}catch(La){H.error=La;return H}}function L(Ma,Na,Oa,Pa){try{Ma.call(Na,Oa,Pa)}catch(Qa){return Qa}}function M(Ra,Sa,Ta){j(function(Ua){var Va=false;var Wa=L(Ta,Sa,function(Xa){if(Va){return}Va=true;if(Sa!==Xa){P(Ua,Xa)}else{R(Ua,Xa)}},function(Ya){if(Va){return}Va=true;S(Ua,Ya)},"Settle: "+(Ua._label||" unknown promise"));if(!Va&&Wa){Va=true;S(Ua,Wa)}},Ra)}function N(Za,$a){if($a._state===F){R(Za,$a._result)}else if($a._state===G){S(Za,$a._result)}else{T($a,undefined,function(_a){return P(Za,_a)},function(a0){return S(Za,a0)})}}function O(b0,c0,d0){if(c0.constructor===b0.constructor&&d0===A&&c0.constructor.resolve===B){N(b0,c0)}else{if(d0===H){S(b0,H.error);H.error=null}else if(d0===undefined){R(b0,c0)}else if(d(d0)){M(b0,c0,d0)}else{R(b0,c0)}}}function P(e0,f0){if(e0===f0){S(e0,I())}else if(c(f0)){O(e0,f0,K(f0))}else{R(e0,f0)}}function Q(g0){if(g0._onerror){g0._onerror(g0._result)}U(g0)}function R(h0,i0){if(h0._state!==E){return}h0._result=i0;h0._state=F;if(h0._subscribers.length!==0){j(U,h0)}}function S(j0,k0){if(j0._state!==E){return}j0._state=G;j0._result=k0;j(Q,j0)}function T(l0,m0,n0,o0){var p0=l0._subscribers;var q0=p0.length;l0._onerror=null;p0[q0]=m0;p0[q0+F]=n0;p0[q0+G]=o0;if(q0===0&&l0._state){j(U,l0)}}function U(r0){var s0=r0._subscribers;var t0=r0._state;if(s0.length===0){return}var u0=void 0,v0=void 0,w0=r0._result;for(var x0=0;x0<s0.length;x0+=3){u0=s0[x0];v0=s0[x0+t0];if(u0){W(t0,u0,v0,w0)}else{v0(w0)}}r0._subscribers.length=0}function V(y0,z0){try{return y0(z0)}catch(A0){H.error=A0;return H}}function W(B0,C0,D0,E0){var F0=d(D0),G0=void 0,H0=void 0,I0=void 0,J0=void 0;if(F0){G0=V(D0,E0);if(G0===H){J0=true;H0=G0.error;G0.error=null}else{I0=true}if(C0===G0){S(C0,J());return}}else{G0=E0;I0=true}if(C0._state!==E){}else if(F0&&I0){P(C0,G0)}else if(J0){S(C0,H0)}else if(B0===F){R(C0,G0)}else if(B0===G){S(C0,G0)}}function X(K0,L0){try{L0(function M0(N0){P(K0,N0)},function O0(P0){S(K0,P0)})}catch(Q0){S(K0,Q0)}}var Y=0;function Z(){return Y++}function $(R0){R0[C]=Y++;R0._state=undefined;R0._result=undefined;R0._subscribers=[]}function _(){return new Error("Array Methods must be provided an Array")}var aa=function(){function S0(T0,U0){this._instanceConstructor=T0;this.promise=new T0(D);if(!this.promise[C]){$(this.promise)}if(f(U0)){this.length=U0.length;this._remaining=U0.length;this._result=new Array(this.length);if(this.length===0){R(this.promise,this._result)}else{this.length=this.length||0;this._enumerate(U0);if(this._remaining===0){R(this.promise,this._result)}}}else{S(this.promise,_())}}S0.prototype._enumerate=function V0(W0){for(var X0=0;this._state===E&&X0<W0.length;X0++){this._eachEntry(W0[X0],X0)}};S0.prototype._eachEntry=function Y0(Z0,$0){var _0=this._instanceConstructor;var ab=_0.resolve;if(ab===B){var bb=K(Z0);if(bb===A&&Z0._state!==E){this._settledAt(Z0._state,$0,Z0._result)}else if(typeof bb!=="function"){this._remaining--;this._result[$0]=Z0}else if(_0===ga){var cb=new _0(D);O(cb,Z0,bb);this._willSettleAt(cb,$0)}else{this._willSettleAt(new _0(function(db){return db(Z0)}),$0)}}else{this._willSettleAt(ab(Z0),$0)}};S0.prototype._settledAt=function eb(fb,gb,hb){var ib=this.promise;if(ib._state===E){this._remaining--;if(fb===G){S(ib,hb)}else{this._result[gb]=hb}}if(this._remaining===0){R(ib,this._result)}};S0.prototype._willSettleAt=function jb(kb,lb){var mb=this;T(kb,undefined,function(nb){return mb._settledAt(F,lb,nb)},function(ob){return mb._settledAt(G,lb,ob)})};return S0}();function ba(pb){return new aa(this,pb).promise}function ca(qb){var rb=this;if(!f(qb)){return new rb(function(sb,tb){return tb(new TypeError("You must pass an array to race."))})}else{return new rb(function(ub,vb){var wb=qb.length;for(var xb=0;xb<wb;xb++){rb.resolve(qb[xb]).then(ub,vb)}})}}function da(yb){var zb=this;var Ab=new zb(D);S(Ab,yb);return Ab}function ea(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function fa(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}var ga=function(){function Bb(Cb){this[C]=Z();this._result=this._state=undefined;this._subscribers=[];if(D!==Cb){typeof Cb!=="function"&&ea();this instanceof Bb?X(this,Cb):fa()}}Bb.prototype.catch=function Db(Eb){return this.then(null,Eb)};Bb.prototype.finally=function Fb(Gb){var Hb=this;var Ib=Hb.constructor;return Hb.then(function(Jb){return Ib.resolve(Gb()).then(function(){return Jb})},function(Kb){return Ib.resolve(Gb()).then(function(){throw Kb})})};return Bb}();ga.prototype.then=A;ga.all=ba;ga.race=ca;ga.resolve=B;ga.reject=da;ga._setScheduler=k;ga._setAsap=l;ga._asap=j;function ha(){var Lb=void 0;if(typeof global!=="undefined"){Lb=global}else if(typeof self!=="undefined"){Lb=self}else{try{Lb=Function("return this")()}catch(Ob){throw new Error("polyfill failed because global object is unavailable in this environment")}}var Mb=Lb.Promise;if(Mb){var Nb=null;try{Nb=Object.prototype.toString.call(Mb.resolve())}catch(Pb){}if(Nb==="[object Promise]"&&!Mb.cast){return}}Lb.Promise=ga}ga.polyfill=ha;ga.Promise=ga;return ga}); }),(function(){function murmurhash3_32_gc(a,b){var c,d,e,f,g,h,i,j,k,l;c=a.length&3;d=a.length-c;e=b;g=3432918353;i=461845907;l=0;while(l<d){k=a.charCodeAt(l)&255|(a.charCodeAt(++l)&255)<<8|(a.charCodeAt(++l)&255)<<16|(a.charCodeAt(++l)&255)<<24;++l;k=(k&65535)*g+(((k>>>16)*g&65535)<<16)&4294967295;k=k<<15|k>>>17;k=(k&65535)*i+(((k>>>16)*i&65535)<<16)&4294967295;e^=k;e=e<<13|e>>>19;f=(e&65535)*5+(((e>>>16)*5&65535)<<16)&4294967295;e=(f&65535)+27492+(((f>>>16)+58964&65535)<<16)}k=0;switch(c){case 3:k^=(a.charCodeAt(l+2)&255)<<16;case 2:k^=(a.charCodeAt(l+1)&255)<<8;case 1:k^=a.charCodeAt(l)&255;k=(k&65535)*g+(((k>>>16)*g&65535)<<16)&4294967295;k=k<<15|k>>>17;k=(k&65535)*i+(((k>>>16)*i&65535)<<16)&4294967295;e^=k}e^=a.length;e^=e>>>16;e=(e&65535)*2246822507+(((e>>>16)*2246822507&65535)<<16)&4294967295;e^=e>>>13;e=(e&65535)*3266489909+(((e>>>16)*3266489909&65535)<<16)&4294967295;e^=e>>>16;return e>>>0}phast.hash=murmurhash3_32_gc; }),(function(){phast.buildServiceUrl=function(a,b){if(a.pathInfo){return appendPathInfo(a.serviceUrl,buildQuery(b))}else{return appendQueryString(a.serviceUrl,buildQuery(b))}};function buildQuery(c){if(typeof c==="string"){return c}var d=[];for(var e in c){if(c.hasOwnProperty(e)){d.push(encodeURIComponent(e)+"="+encodeURIComponent(c[e]))}}return d.join("&")}function appendPathInfo(f,g){var h=btoa(g).replace(/=/g,"").replace(/\//g,"_").replace(/\+/g,"-");var i=j(h+".q.js");return f.replace(/\?.*$/,"").replace(/\/__p__\.js$/,"")+"/"+i;function j(l){return k(k(l).match(/[\s\S]{1,255}/g).join("/"))}function k(m){return m.split("").reverse().join("")}}function appendQueryString(n,o){var p=n.indexOf("?")>-1?"&":"?";return n+p+o} }),(function(){var Promise=phast.ES6Promise.Promise;phast.ResourceLoader=function(a,b){this.get=function(c){return b.get(c).then(function(d){if(typeof d!=="string"){throw new Error("response should be string")}return d}).catch(function(){var e=a.get(c);e.then(function(f){b.set(c,f)});return e})}};phast.ResourceLoader.RequestParams={};phast.ResourceLoader.RequestParams.FaultyParams={};phast.ResourceLoader.RequestParams.fromString=function(g){try{return JSON.parse(g)}catch(h){return phast.ResourceLoader.RequestParams.FaultyParams}};phast.ResourceLoader.BundlerServiceClient=function(i,j,k){var l=phast.ResourceLoader.BundlerServiceClient.RequestsPack;var m=l.PackItem;var n;this.get=function(q){if(q===phast.ResourceLoader.RequestParams.FaultyParams){return Promise.reject(new Error("Parameters did not parse as JSON"))}return new Promise(function(r,s){if(n===undefined){n=new l(j)}n.add(new m({success:r,error:s},q));setTimeout(o);if(n.toQuery().length>4500){console.log("[Phast] Resource loader: Pack got too big; flushing early...");o()}})};function o(){if(n===undefined){return}var t=n;n=undefined;p(t)}function p(u){var v=phast.buildServiceUrl({serviceUrl:i,pathInfo:k},"service=bundler&"+u.toQuery());var w=function(){console.error("[Phast] Request to bundler failed with status",y.status);console.log("URL:",v);u.handleError()};var x=function(){if(y.status>=200&&y.status<300){u.handleResponse(y.responseText)}else{u.handleError()}};var y=new XMLHttpRequest;y.open("GET",v);y.addEventListener("error",w);y.addEventListener("abort",w);y.addEventListener("load",x);y.send()}};phast.ResourceLoader.BundlerServiceClient.RequestsPack=function(z){var A={};this.getLength=function(){var F=0;for(var G in A){F++}return F};this.add=function(H){var I;if(H.params.token){I="token="+H.params.token}else if(H.params.ref){I="ref="+H.params.ref}else{I=""}if(!A[I]){A[I]={params:H.params,requests:[H.request]}}else{A[I].requests.push(H.request)}};this.toQuery=function(){var J=[],K=[],L="";B().forEach(function(M){var N,O;for(var P in A[M].params){if(P==="cacheMarker"){K.push(A[M].params.cacheMarker);continue}N=z[P]?z[P]:P;if(P==="strip-imports"){O=encodeURIComponent(N)}else if(P==="src"){O=encodeURIComponent(N)+"="+encodeURIComponent(C(A[M].params.src,L));L=A[M].params.src}else{O=encodeURIComponent(N)+"="+encodeURIComponent(A[M].params[P])}J.push(O)}});if(K.length>0){J.unshift("c="+phast.hash(K.join("|"),23045))}return E(J.join("&"))};function B(){return Object.keys(A).sort(function(R,S){return Q(R,S)?1:Q(S,R)?-1:0});function Q(T,U){if(typeof A[T].params.src!=="undefined"&&typeof A[U].params.src!=="undefined"){return A[T].params.src>A[U].params.src}return T>U}}function C(V,W){var X=0,Y=Math.pow(36,2)-1;while(X<W.length&&V[X]===W[X]){X++}X=Math.min(X,Y);return D(X)+""+V.substr(X)}function D(Z){var $=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];var _=Z%36;var aa=Math.floor((Z-_)/36);return $[aa]+$[_]}function E(ba){if(!/(^|&)s=/.test(ba)){return ba}return ba.replace(/(%..)|([A-M])|([N-Z])/gi,function(ca,da,ea,fa){if(da){return ca}return String.fromCharCode(ca.charCodeAt(0)+(ea?13:-13))})}this.handleResponse=function(ga){try{var ha=JSON.parse(ga)}catch(ja){this.handleError();return}var ia=B();if(ha.length!==ia.length){console.error("[Phast] Requested",ia.length,"items from bundler, but got",ha.length,"response(s)");this.handleError();return}ha.forEach(function(ka,la){if(ka.status===200){A[ia[la]].requests.forEach(function(ma){ma.success(ka.content)})}else{A[ia[la]].requests.forEach(function(na){na.error(new Error("Got from bundler: "+JSON.stringify(ka)))})}})}.bind(this);this.handleError=function(){for(var oa in A){A[oa].requests.forEach(function(pa){pa.error()})}}};phast.ResourceLoader.BundlerServiceClient.RequestsPack.PackItem=function(qa,ra){this.request=qa;this.params=ra};phast.ResourceLoader.IndexedDBStorage=function(sa){var ta=phast.ResourceLoader.IndexedDBStorage;var ua=ta.logPrefix;var va=ta.requestToPromise;var wa;Ba();this.get=function(Ca){return xa("readonly").then(function(Da){return va(Da.get(Ca)).catch(ya("reading from store"))})};this.store=function(Ea){return xa("readwrite").then(function(Fa){return va(Fa.put(Ea)).catch(ya("writing to store"))})};this.clear=function(){return xa("readwrite").then(function(Ga){return va(Ga.clear())})};this.iterateOnAll=function(Ha){return xa("readonly").then(function(Ia){return za(Ha,Ia.openCursor()).catch(ya("iterating on all"))})};function xa(Ja){return wa.get().then(function(Ka){try{return Ka.transaction(sa.storeName,Ja).objectStore(sa.storeName)}catch(La){console.error(ua,"Could not open store; recreating database:",La);Aa();throw La}})}function ya(Ma){return function(Na){console.error(ua,"Error "+Ma+":",Na);Aa();throw Na}}function za(Oa,Pa){return new Promise(function(Qa,Ra){Pa.onsuccess=function(Sa){var Ta=Sa.target.result;if(Ta){Oa(Ta.value);Ta.continue()}else{Qa()}};Pa.onerror=Ra})}function Aa(){var Ua=wa.dropDB().then(Ba);wa={get:function(){return Promise.reject(new Error("Database is being dropped and recreated"))},dropDB:function(){return Ua}}}function Ba(){wa=new phast.ResourceLoader.IndexedDBStorage.Connection(sa)}};phast.ResourceLoader.IndexedDBStorage.logPrefix="[Phast] Resource loader:";phast.ResourceLoader.IndexedDBStorage.requestToPromise=function(Va){return new Promise(function(Wa,Xa){Va.onsuccess=function(){Wa(Va.result)};Va.onerror=function(){Xa(Va.error)}})};phast.ResourceLoader.IndexedDBStorage.ConnectionParams=function(){this.dbName="phastResourcesCache";this.dbVersion=1;this.storeName="resources"};phast.ResourceLoader.IndexedDBStorage.StoredResource=function(Ya,Za){this.token=Ya;this.content=Za};phast.ResourceLoader.IndexedDBStorage.Connection=function($a){var _a=phast.ResourceLoader.IndexedDBStorage.logPrefix;var a0=phast.ResourceLoader.IndexedDBStorage.requestToPromise;var b0;this.get=c0;this.dropDB=d0;function c0(){if(!b0){b0=e0($a)}return b0}function d0(){return c0().then(function(g0){console.error(_a,"Dropping DB");g0.close();b0=null;return a0(window.indexedDB.deleteDatabase($a.dbName))})}function e0(h0){if(typeof window.indexedDB==="undefined"){return Promise.reject(new Error("IndexedDB is not available"))}var i0=window.indexedDB.open(h0.dbName,h0.dbVersion);i0.onupgradeneeded=function(){f0(i0.result,h0)};return a0(i0).then(function(j0){j0.onversionchange=function(){console.debug(_a,"Closing DB");j0.close();if(b0){b0=null}};return j0}).catch(function(k0){console.log(_a,"IndexedDB cache is not available. This is usually due to using private browsing mode.");throw k0})}function f0(l0,m0){l0.createObjectStore(m0.storeName,{keyPath:"token"})}};phast.ResourceLoader.StorageCache=function(n0,o0){var p0=phast.ResourceLoader.IndexedDBStorage.StoredResource;this.get=function(x0){return s0(r0(x0))};this.set=function(y0,z0){return t0(r0(y0),z0,false)};var q0=null;function r0(A0){return JSON.stringify(A0)}function s0(B0){return o0.get(B0).then(function(C0){if(C0){return Promise.resolve(C0.content)}return Promise.resolve()})}function t0(D0,E0,F0){return w0().then(function(G0){var H0=E0.length+G0;if(H0>n0.maxStorageSize){return F0||E0.length>n0.maxStorageSize?Promise.reject(new Error("Storage quota will be exceeded")):u0(D0,E0)}q0=H0;var I0=new p0(D0,E0);return o0.store(I0)})}function u0(J0,K0){return v0().then(function(){return t0(J0,K0,true)})}function v0(){return o0.clear().then(function(){q0=0})}function w0(){if(q0!==null){return Promise.resolve(q0)}var L0=0;return o0.iterateOnAll(function(M0){L0+=M0.content.length}).then(function(){q0=L0;return Promise.resolve(q0)})}};phast.ResourceLoader.StorageCache.StorageCacheParams=function(){this.maxStorageSize=4.5*1024*1024};phast.ResourceLoader.BlackholeCache=function(){this.get=function(){return Promise.reject()};this.set=function(){return Promise.reject()}};phast.ResourceLoader.make=function(N0,O0,P0){var Q0=S0();var R0=new phast.ResourceLoader.BundlerServiceClient(N0,O0,P0);return new phast.ResourceLoader(R0,Q0);function S0(){var T0=window.navigator.userAgent;if(/safari/i.test(T0)&&!/chrome|android/i.test(T0)){console.log("[Phast] Not using IndexedDB cache on Safari");return new phast.ResourceLoader.BlackholeCache}else{var U0=new phast.ResourceLoader.IndexedDBStorage.ConnectionParams;var V0=new phast.ResourceLoader.IndexedDBStorage(U0);var W0=new phast.ResourceLoader.StorageCache.StorageCacheParams;return new phast.ResourceLoader.StorageCache(W0,V0)}}}; }),(function(){var Promise=phast.ES6Promise;phast.ResourceLoader.instance=phast.ResourceLoader.make(phast.config.resourcesLoader.serviceUrl,phast.config.resourcesLoader.shortParamsMappings,phast.config.resourcesLoader.pathInfo);phast.forEachSelectedElement=function(a,b){Array.prototype.forEach.call(window.document.querySelectorAll(a),b)};phast.once=function(c){var d=false;return function(){if(!d){d=true;c.apply(this,Array.prototype.slice(arguments))}}};phast.on=function(e,f){return new Promise(function(g){e.addEventListener(f,g)})};phast.wait=function(h){return new Promise(function(i){setTimeout(i,h)})};phast.on(document,"DOMContentLoaded").then(function(){var j,k;function l(n){return n&&n.nodeType===8&&/^\s*\[Phast\]/.test(n.textContent)}function m(o){while(o){if(l(o)){return o}o=o.nextSibling}return false}k=m(document.documentElement.nextSibling);if(k===false){k=m(document.body.firstChild)}if(k){j=k.textContent.replace(/^\s+|\s+$/g,"").split("\n");console.groupCollapsed(j.shift());console.log(j.join("\n"));console.groupEnd()}});phast.on(document,"DOMContentLoaded").then(function(){var p=performance.timing;var q=[];q.push(["Downloading phases:"]);q.push([" Look up hostname in DNS + %s ms",t(p.domainLookupEnd-p.fetchStart)]);q.push([" Establish connection + %s ms",t(p.connectEnd-p.domainLookupEnd)]);q.push([" Send request + %s ms",t(p.requestStart-p.connectEnd)]);q.push([" Receive first byte + %s ms",t(p.responseStart-p.requestStart)]);q.push([" Download page + %s ms",t(p.responseEnd-p.responseStart)]);q.push([""]);q.push(["Totals:"]);q.push([" Time to first byte %s ms",t(p.responseStart-p.fetchStart)]);q.push([" (since request start) %s ms",t(p.responseStart-p.requestStart)]);q.push([" Total request time %s ms",t(p.responseEnd-p.fetchStart)]);q.push([" (since request start) %s ms",t(p.responseEnd-p.requestStart)]);q.push([" "]);var r=[];var s=[];q.forEach(function(u){r.push(u.shift());s=s.concat(u)});console.groupCollapsed("[Phast] Client-side performance metrics");console.log.apply(console,[r.join("\n")].concat(s));console.groupEnd();function t(v){v=""+v;while(v.length<4){v=" "+v}return v}}); }),(function(){var config=phast.config["script-proxy-service"];var urlPattern=/^(https?:)?\/\//;var typePattern=/^\s*(application|text)\/(x-)?(java|ecma|j|live)script/i;var cacheMarker=Math.floor((new Date).getTime()/1e3/config.urlRefreshTime);var whitelist=compileWhitelistPatterns(config.whitelist);phast.scripts.push(function(){overrideDOMMethod("appendChild");overrideDOMMethod("insertBefore")});function compileWhitelistPatterns(a){var b=/^(.)(.*)\1([a-z]*)$/i;var c=[];a.forEach(function(d){var e=b.exec(d);if(!e){window.console&&window.console.log("Phast: Not a pattern:",d);return}try{c.push(new RegExp(e[2],e[3]))}catch(f){window.console&&window.console.log("Phast: Failed to compile pattern:",d)}});return c}function checkWhitelist(g){for(var h=0;h<whitelist.length;h++){if(whitelist[h].exec(g)){return true}}return false}function overrideDOMMethod(i){var j=Element.prototype[i];var k=function(){var l=processNode(arguments[0]);var m=j.apply(this,arguments);l();return m};Element.prototype[i]=k;window.addEventListener("load",function(){if(Element.prototype[i]===k){delete Element.prototype[i]}})}function processNode(n){if(!n||n.nodeType!==Node.ELEMENT_NODE||n.tagName!=="SCRIPT"||!urlPattern.test(n.src)||n.type&&!typePattern.test(n.type)||n.src.substr(0,config.serviceUrl.length)===config.serviceUrl||!checkWhitelist(n.src)){return function(){}}var o=n.src;n.src=phast.buildServiceUrl(config,{service:"scripts",src:o,cacheMarker:cacheMarker});n.setAttribute("data-phast-rewritten","");return function(){n.src=o}} }),(function(){(function(){var a=function(){if(!("FontFace"in window)){return false}var b=new FontFace("t",'url( "data:font/woff2;base64,d09GMgABAAAAAADwAAoAAAAAAiQAAACoAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAALAogOAE2AiQDBgsGAAQgBSAHIBuDAciO1EZ3I/mL5/+5/rfPnTt9/9Qa8H4cUUZxaRbh36LiKJoVh61XGzw6ufkpoeZBW4KphwFYIJGHB4LAY4hby++gW+6N1EN94I49v86yCpUdYgqeZrOWN34CMQg2tAmthdli0eePIwAKNIIRS4AGZFzdX9lbBUAQlm//f262/61o8PlYO/D1/X4FrWFFgdCQD9DpGJSxmFyjOAGUU4P0qigcNb82GAAA" ) format( "woff2" )',{});b.load()["catch"](function(){});return b.status=="loading"||b.status=="loaded"}();if(a){return}console.log("[Phast] Browser does not support WOFF2, falling back to original stylesheets");Array.prototype.forEach.call(document.querySelectorAll("style[data-phast-ie-fallback-url]"),function(c){var d=document.createElement("link");if(c.hasAttribute("media")){d.setAttribute("media",c.getAttribute("media"))}d.setAttribute("rel","stylesheet");d.setAttribute("href",c.getAttribute("data-phast-ie-fallback-url"));c.parentNode.insertBefore(d,c);c.parentNode.removeChild(c)});Array.prototype.forEach.call(document.querySelectorAll("style[data-phast-nested-inlined]"),function(e){e.parentNode.removeChild(e)})})(); }),(function(){phast.stylesLoading=0;var resourceLoader=phast.ResourceLoader.instance;phast.forEachSelectedElement("style[data-phast-params]",function(a){var b=a.getAttribute("data-phast-params");var c=phast.ResourceLoader.RequestParams.fromString(b);phast.stylesLoading++;resourceLoader.get(c).then(function(d){a.textContent=d;a.removeAttribute("data-phast-params")}).catch(function(e){console.warn("[Phast] Failed to load CSS",c,e);var f=a.getAttribute("data-phast-original-src");if(!f){console.error("[Phast] No data-phast-original-src on <style>!",a);return}console.info("[Phast] Falling back to <link> element for",f);var g=document.createElement("link");g.href=f;g.media=a.media;g.rel="stylesheet";g.addEventListener("load",function(){if(a.parentNode){a.parentNode.removeChild(a)}});a.parentNode.insertBefore(g,a.nextSibling)}).finally(function(){phast.stylesLoading--;if(phast.stylesLoading===0&&phast.onStylesLoaded){phast.onStylesLoaded()}})});(function(){var h=[];phast.forEachSelectedElement("style[data-phast-original-id]",function(i){var j=i.getAttribute("data-phast-original-id");if(h[j]){return}h[j]=true;console.warn("[Phast] The style element with id",j,"has been split into multiple style tags due to @import statements and the id attribute has been removed. Normally, this does not cause any issues.")})})(); }),(function(){var Promise=phast.ES6Promise;var hasCurrentScript=!!document.currentScript;phast.ScriptsLoader={};phast.ScriptsLoader.getScriptsInExecutionOrder=function(a,b){var c=Array.prototype.slice.call(a.querySelectorAll('script[type="text/phast"]')).filter(g);var d=[],e=[];for(var f=0;f<c.length;f++){if(getSrc(c[f])!==undefined&&isDefer(c[f])){e.push(c[f])}else{d.push(c[f])}}return d.concat(e).map(function(j){return b.makeScriptFromElement(j)});function g(k){try{var l=phast.config.scriptsLoader.csp}catch(m){return true}if(l.nonce==null){return true}if(k.nonce===l.nonce){return true}try{h(l,k)}catch(n){console.error("Could not send CSP report due to error:",n)}if(l.reportOnly){console.warn("Script with missing or invalid nonce would not be executed (but report-only mode is enabled):",k);return true}console.warn("Script with missing or invalid nonce will not be executed:",k);return false}function h(o,p){var q={"blocked-uri":getSrc(p),disposition:o.reportOnly?"report":"enforce","document-uri":location.href,referrer:a.referrer,"script-sample":i(p),implementation:"phast"};try{p.dispatchEvent(new SecurityPolicyViolationEvent("securitypolicyviolation",{blockedURI:q["blocked-uri"],disposition:q["disposition"],documentURI:q["document-uri"],effectiveDirective:"script-src-elem",originalPolicy:"phast",referrer:q["referrer"],sample:q["script-sample"],statusCode:200,violatedDirective:"script-src-elem"}))}catch(s){console.error("[Phast] Could not dispatch securitypolicyviolation event",s)}if(!o.reportUri){return}var r={"csp-report":q};fetch(o.reportUri,{method:"POST",headers:{"Content-Type":"application/csp-report"},credentials:"same-origin",redirect:"error",keepalive:true,body:JSON.stringify(r)})}function i(t){if(!t.hasAttribute("src")){return t.textContent.substr(0,40)}}};phast.ScriptsLoader.executeScripts=function(u){var v=u.map(function(x){return x.init()});var w=Promise.resolve();u.forEach(function(y){w=phast.ScriptsLoader.chainScript(w,y)});return w.then(function(){return Promise.all(v).catch(function(){})})};phast.ScriptsLoader.chainScript=function(z,A){var B;try{if(A.describe){B=A.describe()}else{B="unknown script"}}catch(C){B="script.describe() failed"}return z.then(function(){var D=A.execute();D.then(function(){console.debug("✓",B)});return D}).catch(function(E){console.error("✘",B);if(E){console.log(E)}})};var insertBefore=window.Element.prototype.insertBefore;phast.ScriptsLoader.Utilities=function(F){this._document=F;var G=0;function H(R){return new Promise(function(S){var T="PhastCompleteScript"+ ++G;var U=I(R);var V=I(T+"()");window[T]=W;F.body.appendChild(U);F.body.appendChild(V);function W(){S();F.body.removeChild(U);F.body.removeChild(V);delete window[T]}})}function I(X){var Y=F.createElement("script");Y.textContent=X;Y.nonce=phast.config.scriptsLoader.csp.nonce;return Y}function J(Z){var $=F.createElement(Z.nodeName);Array.prototype.forEach.call(Z.attributes,function(_){$.setAttribute(_.nodeName,_.nodeValue)});return $}function K(aa){aa.removeAttribute("data-phast-params");var ba={};Array.prototype.map.call(aa.attributes,function(ca){return ca.nodeName}).map(function(da){var ea=da.match(/^data-phast-original-(.*)/i);if(ea){ba[ea[1].toLowerCase()]=aa.getAttribute(da);aa.removeAttribute(da)}});Object.keys(ba).sort().map(function(fa){aa.setAttribute(fa,ba[fa])});if(!("type"in ba)){aa.removeAttribute("type")}}function L(ga,ha){return new Promise(function(ia,ja){var ka=ha.getAttribute("src");ha.addEventListener("load",ia);ha.addEventListener("error",ja);ha.removeAttribute("src");insertBefore.call(ga.parentNode,ha,ga);ga.parentNode.removeChild(ga);if(ka){ha.setAttribute("src",ka)}})}function M(la,ma){return O(la,function(){return P(la,function(){return H(ma)})})}function N(na,oa){return O(oa,function(){return L(na,oa)})}function O(pa,qa){var ra=pa.nextElementSibling;var sa=Promise.resolve();var ta;if(isAsync(pa)){ta="async"}else if(isDefer(pa)){ta="defer"}F.write=function(xa){if(ta){console.warn("document.write call from "+ta+" script ignored");return}ua(xa)};F.writeln=function(ya){if(ta){console.warn("document.writeln call from "+ta+" script ignored");return}ua(ya+"\n")};function ua(za){var Aa=F.createElement("div");Aa.innerHTML=za;var Ba=va(Aa);if(ra&&ra.parentNode!==pa.parentNode){ra=pa.nextElementSibling}while(Aa.firstChild){pa.parentNode.insertBefore(Aa.firstChild,ra)}Ba.map(wa)}function va(Ca){return Array.prototype.slice.call(Ca.getElementsByTagName("script")).filter(function(Da){var Ea=Da.getAttribute("type");return!Ea||/^(text|application)\/javascript(;|$)/i.test(Ea)})}function wa(Fa){var Ga=new phast.ScriptsLoader.Scripts.Factory(F);var Ha=Ga.makeScriptFromElement(Fa);sa=phast.ScriptsLoader.chainScript(sa,Ha)}return qa().then(function(){return sa}).finally(function(){delete F.write;delete F.writeln})}function P(Ia,Ja){if(hasCurrentScript){try{Object.defineProperty(F,"currentScript",{configurable:true,get:function(){return Ia}})}catch(Ka){console.error("[Phast] Unable to override document.currentScript on this browser: ",Ka)}}return Ja().finally(function(){if(hasCurrentScript){delete F.currentScript}})}function Q(La){var Ma=F.createElement("link");Ma.setAttribute("rel","preload");Ma.setAttribute("as","script");Ma.setAttribute("href",La);F.head.appendChild(Ma)}this.executeString=H;this.copyElement=J;this.restoreOriginals=K;this.replaceElement=L;this.writeProtectAndExecuteString=M;this.writeProtectAndReplaceElement=N;this.addPreload=Q};phast.ScriptsLoader.Scripts={};phast.ScriptsLoader.Scripts.InlineScript=function(Na,Oa){this._utils=Na;this._element=Oa;this.init=function(){return Promise.resolve()};this.execute=function(){var Pa=Oa.textContent.replace(/^\s*<!--.*\n/i,"");Na.restoreOriginals(Oa);return Na.writeProtectAndExecuteString(Oa,Pa)};this.describe=function(){return"inline script"}};phast.ScriptsLoader.Scripts.AsyncBrowserScript=function(Qa,Ra){var Sa;this._utils=Qa;this._element=Ra;this.init=function(){Qa.addPreload(getSrc(Ra));return new Promise(function(Ta){Sa=Ta})};this.execute=function(){var Ua=Qa.copyElement(Ra);Qa.restoreOriginals(Ua);Qa.replaceElement(Ra,Ua).then(Sa).catch(Sa);return Promise.resolve()};this.describe=function(){return"async script at "+getSrc(Ra)}};phast.ScriptsLoader.Scripts.SyncBrowserScript=function(Va,Wa){this._utils=Va;this._element=Wa;this.init=function(){Va.addPreload(getSrc(Wa));return Promise.resolve()};this.execute=function(){var Xa=Va.copyElement(Wa);Va.restoreOriginals(Xa);return Va.writeProtectAndReplaceElement(Wa,Xa)};this.describe=function(){return"sync script at "+getSrc(Wa)}};phast.ScriptsLoader.Scripts.AsyncAJAXScript=function(Ya,Za,$a,_a){this._utils=Ya;this._element=Za;this._fetch=$a;this._fallback=_a;var a0;var b0;this.init=function(){a0=$a(Za);return new Promise(function(c0){b0=c0})};this.execute=function(){a0.then(function(d0){Ya.restoreOriginals(Za);return Ya.writeProtectAndExecuteString(Za,d0).then(b0)}).catch(function(){_a.init();return _a.execute().then(b0)});return Promise.resolve()};this.describe=function(){return"bundled async script at "+Za.getAttribute("data-phast-original-src")}};phast.ScriptsLoader.Scripts.SyncAJAXScript=function(e0,f0,g0,h0){this._utils=e0;this._element=f0;this._fetch=g0;this._fallback=h0;var i0;this.init=function(){i0=g0(f0);return i0};this.execute=function(){return i0.then(function(j0){e0.restoreOriginals(f0);return e0.writeProtectAndExecuteString(f0,j0)}).catch(function(){h0.init();return h0.execute()})};this.describe=function(){return"bundled sync script at "+f0.getAttribute("data-phast-original-src")}};phast.ScriptsLoader.Scripts.Factory=function(k0,l0){var m0=phast.ScriptsLoader.Scripts;var n0=new phast.ScriptsLoader.Utilities(k0);this.makeScriptFromElement=function(q0){var r0;if(q0.getAttribute("data-phast-debug-force-method")&&window.location.host.match(/\.test$/)){return new m0[q0.getAttribute("data-phast-debug-force-method")](n0,q0)}if(o0(q0)){if(isAsync(q0)){r0=new m0.AsyncBrowserScript(n0,q0);return l0?new m0.AsyncAJAXScript(n0,q0,l0,r0):r0}r0=new m0.SyncBrowserScript(n0,q0);return l0?new m0.SyncAJAXScript(n0,q0,l0,r0):r0}if(p0(q0)){return new m0.InlineScript(n0,q0)}if(isAsync(q0)){return new m0.AsyncBrowserScript(n0,q0)}return new m0.SyncBrowserScript(n0,q0)};function o0(s0){return s0.hasAttribute("data-phast-params")}function p0(t0){return!t0.hasAttribute("src")}};function getSrc(u0){if(u0.hasAttribute("data-phast-original-src")){return u0.getAttribute("data-phast-original-src")}else if(u0.hasAttribute("src")){return u0.getAttribute("src")}}function isAsync(v0){return v0.hasAttribute("async")||v0.hasAttribute("data-phast-async")}function isDefer(w0){return w0.hasAttribute("defer")||w0.hasAttribute("data-phast-defer")} }),(function(){var Promise=phast.ES6Promise;var go=phast.once(loadScripts);phast.on(document,"DOMContentLoaded").then(function(){if(phast.stylesLoading){phast.onStylesLoaded=go;setTimeout(go,4e3)}else{Promise.resolve().then(go)}});var loadFiltered=false;window.addEventListener("load",function(a){if(!loadFiltered){a.stopImmediatePropagation()}loadFiltered=true});document.addEventListener("readystatechange",function(b){if(document.readyState==="loading"){b.stopImmediatePropagation()}});var didSetTimeout=false;var originalSetTimeout=window.setTimeout;window.setTimeout=function(c,d){if(!d||d<0){didSetTimeout=true}return originalSetTimeout.apply(window,arguments)};function loadScripts(){var e=new phast.ScriptsLoader.Scripts.Factory(document,fetchScript);var f=phast.ScriptsLoader.getScriptsInExecutionOrder(document,e);if(f.length===0){return}setReadyState("loading");phast.ScriptsLoader.executeScripts(f).then(restoreReadyState)}function setReadyState(g){try{Object.defineProperty(document,"readyState",{configurable:true,get:function(){return g}})}catch(h){console.warn("[Phast] Unable to override document.readyState on this browser: ",h)}}function restoreReadyState(){i().then(function(){setReadyState("interactive");triggerEvent(document,"readystatechange");return i()}).then(function(){triggerEvent(document,"DOMContentLoaded");return i()}).then(function(){delete document["readyState"];triggerEvent(document,"readystatechange");if(loadFiltered){triggerEvent(window,"load")}loadFiltered=true});function i(){return new Promise(function(j){(function k(l){if(didSetTimeout&&l<10){didSetTimeout=false;originalSetTimeout.call(window,function(){k(l+1)})}else{requestAnimationFrame(j)}})(0)})}}function triggerEvent(m,n){var o=document.createEvent("Event");o.initEvent(n,true,true);m.dispatchEvent(o)}function fetchScript(p){return phast.ResourceLoader.instance.get(phast.ResourceLoader.RequestParams.fromString(p.getAttribute("data-phast-params")))} })];(phast.scripts.shift())();})({"config":"eyJyZXNvdXJjZXNMb2FkZXIiOnsic2VydmljZVVybCI6Imh0dHBzOi8vc2VvYmxvZy5iZS93cC1jb250ZW50L3BsdWdpbnMvcGhhc3RwcmVzcy9waGFzdC5waHAvX19wX18uanM/Iiwic2hvcnRQYXJhbXNNYXBwaW5ncyI6eyJzcmMiOiJzIiwic3RyaXAtaW1wb3J0cyI6ImkiLCJjYWNoZU1hcmtlciI6ImMiLCJ0b2tlbiI6InQiLCJpc1NjcmlwdCI6ImoiLCJyZWYiOiJyIn0sInBhdGhJbmZvIjp0cnVlfSwic2NyaXB0LXByb3h5LXNlcnZpY2UiOnsic2VydmljZVVybCI6Imh0dHBzOi8vc2VvYmxvZy5iZS93cC1jb250ZW50L3BsdWdpbnMvcGhhc3RwcmVzcy9waGFzdC5waHAiLCJwYXRoSW5mbyI6dHJ1ZSwidXJsUmVmcmVzaFRpbWUiOjcyMDAsIndoaXRlbGlzdCI6WyJ+Xmh0dHBzPzovL3Nlb2Jsb2dcXC5iZS9+Il19LCJzY3JpcHRzTG9hZGVyIjp7ImNzcCI6eyJub25jZSI6bnVsbCwicmVwb3J0T25seSI6ZmFsc2UsInJlcG9ydFVyaSI6bnVsbH19fQ=="});</script></body> </html> <!-- [Phast] Document optimized in 55ms -->