PageSourceSearch

https://welifefestival.es/Content/WF2022/js/libs.js?v=15.33

js welifefestival.es collected 2026-10-05 05:51:31 UTC 940,592 bytes, 24,007 lines download raw bytes

vendor: 15,068 bytes, line 1
1var tns=function(){var t=window,Ai=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.msRequestAnimationFrame||function(t){return setTimeout(t,16)},e=window,Ni=e.cancelAnimationFrame||e.mozCancelAnimationFrame||function(t){clearTimeout(t)};function Li(){for(var t,e,n,i=arguments[0]||{},a=1,r=arguments.length;a<r;a++)if(null!==(t=arguments[a]))for(e in t)i!==(n=t[e])&&void 0!==n&&(i[e]=n);return i}function Bi(t){return 0<=["true","false"].indexOf(t)?JSON.parse(t):t}function Si(t,e,n,i){if(i)try{t.setItem(e,n)}catch(t){}return n}function Hi(){var t=document,e=t.body;return e||((e=t.createElement("body")).fake=!0),e}var n=document.documentElement;function Oi(t){var e="";return t.fake&&(e=n.style.overflow,t.style.background="",t.style.overflow=n.style.overflow="hidden",n.appendChild(t)),e}function Di(t,e){t.fake&&(t.remove(),n.style.overflow=e,n.offsetHeight)}function ki(t,e,n,i){"insertRule"in t?t.insertRule(e+"{"+n+"}",i):t.addRule(e,n,i)}function Ri(t){return("insertRule"in t?t.cssRules:t.rules).length}function Ii(t,e,n){for(var i=0,a=t.length;i<a;i++)e.call(n,t[i],i)}var i="classList"in document.createElement("_"),Pi=i?function(t,e){return t.classList.contains(e)}:function(t,e){return 0<=t.className.indexOf(e)},zi=i?function(t,e){Pi(t,e)||t.classList.add(e)}:function(t,e){Pi(t,e)||(t.className+=" "+e)},Wi=i?function(t,e){Pi(t,e)&&t.classList.remove(e)}:function(t,e){Pi(t,e)&&(t.className=t.className.replace(e,""))};function qi(t,e){return t.hasAttribute(e)}function Fi(t,e){return t.getAttribute(e)}function r(t){return void 0!==t.item}function ji(t,e){if(t=r(t)||t instanceof Array?t:[t],"[object Object]"===Object.prototype.toString.call(e))for(var n=t.length;n--;)for(var i in e)t[n].setAttribute(i,e[i])}function Vi(t,e){t=r(t)||t instanceof Array?t:[t];for(var n=(e=e instanceof Array?e:[e]).length,i=t.length;i--;)for(var a=n;a--;)t[i].removeAttribute(e[a])}function Gi(t){for(var e=[],n=0,i=t.length;n<i;n++)e.push(t[n]);return e}function Qi(t,e){"none"!==t.style.display&&(t.style.display="none")}function Xi(t,e){"none"===t.style.display&&(t.style.display="")}function Yi(t){return"none"!==window.getComputedStyle(t).display}function Ki(e){if("string"==typeof e){var n=[e],i=e.charAt(0).toUpperCase()+e.substr(1);["Webkit","Moz","ms","O"].forEach(function(t){"ms"===t&&"transform"!==e||n.push(t+i)}),e=n}for(var t=document.createElement("fakeelement"),a=(e.length,0);a<e.length;a++){var r=e[a];if(void 0!==t.style[r])return r}return!1}function Ji(t,e){var n=!1;return/^Webkit/.test(t)?n="webkit"+e+"End":/^O/.test(t)?n="o"+e+"End":t&&(n=e.toLowerCase()+"end"),n}var a=!1;try{var o=Object.defineProperty({},"passive",{get:function(){a=!0}});window.addEventListener("test",null,o)}catch(t){}var u=!!a&&{passive:!0};function Ui(t,e,n){for(var i in e){var a=0<=["touchstart","touchmove"].indexOf(i)&&!n&&u;t.addEventListener(i,e[i],a)}}function _i(t,e){for(var n in e){var i=0<=["touchstart","touchmove"].indexOf(n)&&u;t.removeEventListener(n,e[n],i)}}function Zi(){return{topics:{},on:function(t,e){this.topics[t]=this.topics[t]||[],this.topics[t].push(e)},off:function(t,e){if(this.topics[t])for(var n=0;n<this.topics[t].length;n++)if(this.topics[t][n]===e){this.topics[t].splice(n,1);break}},emit:function(e,n){n.type=e,this.topics[e]&&this.topics[e].forEach(function(t){t(n,e)})}}}Object.keys||(Object.keys=function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}),"remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)});var $i=function(H){H=Li({container:".slider",mode:"carousel",axis:"horizontal",items:1,gutter:0,edgePadding:0,fixedWidth:!1,autoWidth:!1,viewportMax:!1,slideBy:1,center:!1,controls:!0,controlsPosition:"top",controlsText:["prev","next"],controlsContainer:!1,prevButton:!1,nextButton:!1,nav:!0,navPosition:"top",navContainer:!1,navAsThumbnails:!1,arrowKeys:!1,speed:300,autoplay:!1,autoplayPosition:"top",autoplayTimeout:5e3,autoplayDirection:"forward",autoplayText:["start","stop"],autoplayHoverPause:!1,autoplayButton:!1,autoplayButtonOutput:!0,autoplayResetOnVisibility:!0,animateIn:"tns-fadeIn",animateOut:"tns-fadeOut",animateNormal:"tns-normal",animateDelay:!1,loop:!0,rewind:!1,autoHeight:!1,responsive:!1,lazyload:!1,lazyloadSelector:".tns-lazy-img",touch:!0,mouseDrag:!1,swipeAngle:15,nested:!1,preventActionWhenRunning:!1,preventScrollOnTouch:!1,freezable:!0,onInit:!1,useLocalStorage:!0,nonce:!1},H||{});var O=document,m=window,a={ENTER:13,SPACE:32,LEFT:37,RIGHT:39},e={},n=H.useLocalStorage;if(n){var t=navigator.userAgent,i=new Date;try{(e=m.localStorage)?(e.setItem(i,i),n=e.getItem(i)==i,e.removeItem(i)):n=!1,n||(e={})}catch(t){n=!1}n&&(e.tnsApp&&e.tnsApp!==t&&["tC","tPL","tMQ","tTf","t3D","tTDu","tTDe","tADu","tADe","tTE","tAE"].forEach(function(t){e.removeItem(t)}),localStorage.tnsApp=t)}var y=e.tC?Bi(e.tC):Si(e,"tC",function(){var t=document,e=Hi(),n=Oi(e),i=t.createElement("div"),a=!1;e.appendChild(i);try{for(var r,o="(10px * 10)",u=["calc"+o,"-moz-calc"+o,"-webkit-calc"+o],l=0;l<3;l++)if(r=u[l],i.style.width=r,100===i.offsetWidth){a=r.replace(o,"");break}}catch(t){}return e.fake?Di(e,n):i.remove(),a}(),n),g=e.tPL?Bi(e.tPL):Si(e,"tPL",function(){var t,e=document,n=Hi(),i=Oi(n),a=e.createElement("div"),r=e.createElement("div"),o="";a.className="tns-t-subp2",r.className="tns-t-ct";for(var u=0;u<70;u++)o+="<div></div>";return r.innerHTML=o,a.appendChild(r),n.appendChild(a),t=Math.abs(a.getBoundingClientRect().left-r.children[67].getBoundingClientRect().left)<2,n.fake?Di(n,i):a.remove(),t}(),n),D=e.tMQ?Bi(e.tMQ):Si(e,"tMQ",function(){if(window.matchMedia||window.msMatchMedia)return!0;var t,e=document,n=Hi(),i=Oi(n),a=e.createElement("div"),r=e.createElement("style"),o="@media all and (min-width:1px){.tns-mq-test{position:absolute}}";return r.type="text/css",a.className="tns-mq-test",n.appendChild(r),n.appendChild(a),r.styleSheet?r.styleSheet.cssText=o:r.appendChild(e.createTextNode(o)),t=window.getComputedStyle?window.getComputedStyle(a).position:a.currentStyle.position,n.fake?Di(n,i):a.remove(),"absolute"===t}(),n),r=e.tTf?Bi(e.tTf):Si(e,"tTf",Ki("transform"),n),o=e.t3D?Bi(e.t3D):Si(e,"t3D",function(t){if(!t)return!1;if(!window.getComputedStyle)return!1;var e,n=document,i=Hi(),a=Oi(i),r=n.createElement("p"),o=9<t.length?"-"+t.slice(0,-9).toLowerCase()+"-":"";return o+="transform",i.insertBefore(r,null),r.style[t]="translate3d(1px,1px,1px)",e=window.getComputedStyle(r).getPropertyValue(o),i.fake?Di(i,a):r.remove(),void 0!==e&&0<e.length&&"none"!==e}(r),n),x=e.tTDu?Bi(e.tTDu):Si(e,"tTDu",Ki("transitionDuration"),n),u=e.tTDe?Bi(e.tTDe):Si(e,"tTDe",Ki("transitionDelay"),n),b=e.tADu?Bi(e.tADu):Si(e,"tADu",Ki("animationDuration"),n),l=e.tADe?Bi(e.tADe):Si(e,"tADe",Ki("animationDelay"),n),s=e.tTE?Bi(e.tTE):Si(e,"tTE",Ji(x,"Transition"),n),c=e.tAE?Bi(e.tAE):Si(e,"tAE",Ji(b,"Animation"),n),f=m.console&&"function"==typeof m.console.warn,d=["container","controlsContainer","prevButton","nextButton","navContainer","autoplayButton"],v={};if(d.forEach(function(t){if("string"==typeof H[t]){var e=H[t],n=O.querySelector(e);if(v[t]=e,!n||!n.nodeName)return void(f&&console.warn("Can't find",H[t]));H[t]=n}}),!(H.container.children.length<1)){var k=H.responsive,R=H.nested,I="carousel"===H.mode;if(k){0 in k&&(H=Li(H,k[0]),delete k[0]);var p={};for(var h in k){var w=k[h];w="number"==typeof w?{items:w}:w,p[h]=w}k=p,p=null}if(I||function t(e){for(var n in e)I||("slideBy"===n&&(e[n]="page"),"edgePadding"===n&&(e[n]=!1),"autoHeight"===n&&(e[n]=!1)),"responsive"===n&&t(e[n])}(H),!I){H.axis="horizontal",H.slideBy="page",H.edgePadding=!1;var P=H.animateIn,z=H.animateOut,C=H.animateDelay,W=H.animateNormal}var M,q,F="horizontal"===H.axis,T=O.createElement("div"),j=O.createElement("div"),V=H.container,E=V.parentNode,A=V.outerHTML,G=V.children,Q=G.length,X=rn(),Y=!1;k&&En(),I&&(V.className+=" tns-vpfix");var N,L,B,S,K,J,U,_,Z,$=H.autoWidth,tt=sn("fixedWidth"),et=sn("edgePadding"),nt=sn("gutter"),it=un(),at=sn("center"),rt=$?1:Math.floor(sn("items")),ot=sn("slideBy"),ut=H.viewportMax||H.fixedWidthViewportWidth,lt=sn("arrowKeys"),st=sn("speed"),ct=H.rewind,ft=!ct&&H.loop,dt=sn("autoHeight"),vt=sn("controls"),pt=sn("controlsText"),ht=sn("nav"),mt=sn("touch"),yt=sn("mouseDrag"),gt=sn("autoplay"),xt=sn("autoplayTimeout"),bt=sn("autoplayText"),wt=sn("autoplayHoverPause"),Ct=sn("autoplayResetOnVisibility"),Mt=(U=null,_=sn("nonce"),Z=document.createElement("style"),U&&Z.setAttribute("media",U),_&&Z.setAttribute("nonce",_),document.querySelector("head").appendChild(Z),Z.sheet?Z.sheet:Z.styleSheet),Tt=H.lazyload,Et=H.lazyloadSelector,At=[],Nt=ft?(K=function(){{if($||tt&&!ut)return Q-1;var t=tt?"fixedWidth":"items",e=[];if((tt||H[t]<Q)&&e.push(H[t]),k)for(var n in k){var i=k[n][t];i&&(tt||i<Q)&&e.push(i)}return e.length||e.push(0),Math.ceil(tt?ut/Math.min.apply(null,e):Math.max.apply(null,e))}}(),J=I?Math.ceil((5*K-Q)/2):4*K-Q,J=Math.max(K,J),ln("edgePadding")?J+1:J):0,Lt=I?Q+2*Nt:Q+Nt,Bt=!(!tt&&!$||ft),St=tt?_n():null,Ht=!I||!ft,Ot=F?"left":"top",Dt="",kt="",Rt=tt?function(){return at&&!ft?Q-1:Math.ceil(-St/(tt+nt))}:$?function(){for(var t=0;t<Lt;t++)if(N[t]>=-St)return t}:function(){return at&&I&&!ft?Q-1:ft||I?Math.max(0,Lt-Math.ceil(rt)):Lt-1},It=en(sn("startIndex")),Pt=It,zt=(tn(),0),Wt=$?null:Rt(),qt=H.preventActionWhenRunning,Ft=H.swipeAngle,jt=!Ft||"?",Vt=!1,Gt=H.onInit,Qt=new Zi,Xt=" tns-slider tns-"+H.mode,Yt=V.id||(S=window.tnsId,window.tnsId=S?S+1:1,"tns"+window.tnsId),Kt=sn("disable"),Jt=!1,Ut=H.freezable,_t=!(!Ut||$)&&Tn(),Zt=!1,$t={click:oi,keydown:function(t){t=pi(t);var e=[a.LEFT,a.RIGHT].indexOf(t.keyCode);0<=e&&(0===e?we.disabled||oi(t,-1):Ce.disabled||oi(t,1))}},te={click:function(t){if(Vt){if(qt)return;ai()}var e=hi(t=pi(t));for(;e!==Ae&&!qi(e,"data-nav");)e=e.parentNode;if(qi(e,"data-nav")){var n=Se=Number(Fi(e,"data-nav")),i=tt||$?n*Q/Le:n*rt,a=le?n:Math.min(Math.ceil(i),Q-1);ri(a,t),He===n&&(Pe&&fi(),Se=-1)}},keydown:function(t){t=pi(t);var e=O.activeElement;if(!qi(e,"data-nav"))return;var n=[a.LEFT,a.RIGHT,a.ENTER,a.SPACE].indexOf(t.keyCode),i=Number(Fi(e,"data-nav"));0<=n&&(0===n?0<i&&vi(Ee[i-1]):1===n?i<Le-1&&vi(Ee[i+1]):ri(Se=i,t))}},ee={mouseover:function(){Pe&&(li(),ze=!0)},mouseout:function(){ze&&(ui(),ze=!1)}},ne={visibilitychange:function(){O.hidden?Pe&&(li(),qe=!0):qe&&(ui(),qe=!1)}},ie={keydown:function(t){t=pi(t);var e=[a.LEFT,a.RIGHT].indexOf(t.keyCode);0<=e&&oi(t,0===e?-1:1)}},ae={touchstart:xi,touchmove:bi,touchend:wi,touchcancel:wi},re={mousedown:xi,mousemove:bi,mouseup:wi,mouseleave:wi},oe=ln("controls"),ue=ln("nav"),le=!!$||H.navAsThumbnails,se=ln("autoplay"),ce=ln("touch"),fe=ln("mouseDrag"),de="tns-slide-active",ve="tns-slide-cloned",pe="tns-complete",he={load:function(t){kn(hi(t))},error:function(t){e=hi(t),zi(e,"failed"),Rn(e);var e}},me="force"===H.preventScrollOnTouch;if(oe)var ye,ge,xe=H.controlsContainer,be=H.controlsContainer?H.controlsContainer.outerHTML:"",we=H.prevButton,Ce=H.nextButton,Me=H.prevButton?H.prevButton.outerHTML:"",Te=H.nextButton?H.nextButton.outerHTML:"";if(ue)var Ee,Ae=H.navContainer,Ne=H.navContainer?H.navContainer.outerHTML:"",Le=$?Q:Mi(),Be=0,Se=-1,He=an(),Oe=He,De="tns-nav-active",ke="Carousel Page ",Re=" (Current Slide)";if(se)var Ie,Pe,ze,We,qe,Fe="forward"===H.autoplayDirection?1:-1,je=H.autoplayButton,Ve=H.autoplayButton?H.autoplayButton.outerHTML:"",Ge=["<span class='tns-visually-hidden'>"," animation</span>"];if(ce||fe)var Qe,Xe,Ye={},Ke={},Je=!1,Ue=F?function(t,e){return t.x-e.x}:function(t,e){return t.y-e.y};$||$e(Kt||_t),r&&(Ot=r,Dt="translate",o?(Dt+=F?"3d(":"3d(0px, ",kt=F?", 0px, 0px)":", 0px)"):(Dt+=F?"X(":"Y(",kt=")")),I&&(V.className=V.className.replace("tns-vpfix","")),function(){ln("gutter");T.className="tns-outer",j.className="tns-inner",T.id=Yt+"-ow",j.id=Yt+"-iw",""===V.id&&(V.id=Yt);Xt+=g||$?" tns-subpixel":" tns-no-subpixel",Xt+=y?" tns-calc":" tns-no-calc",$&&(Xt+=" tns-autowidth");Xt+=" tns-"+H.axis,V.className+=Xt,I?((M=O.createElement("div")).id=Yt+"-mw",M.className="tns-ovh",T.appendChild(M),M.appendChild(j)):T.appendChild(j);if(dt){var t=M||j;t.className+=" tns-ah"}if(E.insertBefore(T,V),j.appendChild(V),Ii(G,function(t,e){zi(t,"tns-item"),t.id||(t.id=Yt+"-item"+e),!I&&W&&zi(t,W),ji(t,{"aria-hidden":"true",tabindex:"-1"})}),Nt){for(var e=O.createDocumentFragment(),n=O.createDocumentFragment(),i=Nt;i--;){var a=i%Q,r=G[a].cloneNode(!0);if(zi(r,ve),Vi(r,"id"),n.insertBefore(r,n.firstChild),I){var o=G[Q-1-a].cloneNode(!0);zi(o,ve),Vi(o,"id"),e.appendChild(o)}}V.insertBefore(e,V.firstChild),V.appendChild(n),G=V.children}}(),function(){if(!I)for(var t=It,e=It+Math.min(Q,rt);t<e;t++){var n=G[t];n.style.left=100*(t-It)/rt+"%",zi(n,P),Wi(n,W)}F&&(g||$?(ki(Mt,"#"+Yt+" > .tns-item","font-size:"+m.getComputedStyle(G[0]).fontSize+";",Ri(Mt)),ki(Mt,"#"+Yt,"font-size:0;",Ri(Mt))):I&&Ii(G,function(t,e){var n;t.style.marginLeft=(n=e,y?y+"("+100*n+"% / "+Lt+")":100*n/Lt+"%")}));if(D){if(x){var i=M&&H.autoHeight?hn(H.speed):"";ki(Mt,"#"+Yt+"-mw",i,Ri(Mt))}i=cn(H.edgePadding,H.gutter,H.fixedWidth,H.speed,H.autoHeight),ki(Mt,"#"+Yt+"-iw",i,Ri(Mt)),I&&(i=F&&!$?"width:"+fn(H.fixedWidth,H.gutter,H.items)+";":"",x&&(i+=hn(st)),ki(Mt,"#"+Yt,i,Ri(Mt))),i=F&&!$?dn(H.fixedWidth,H.gutter,H.items):"",H.gutter&&(i+=vn(H.gutter)),I||(x&&(i+=hn(st)),b&&(i+=mn(st))),i&&ki(Mt,"#"+Yt+" > .tns-item",i,Ri(Mt))}else{I&&dt&&(M.style[x]=st/1e3+"s"),j.style.cssText=cn(et,nt,tt,dt),I&&F&&!$&&(V.style.width=fn(tt,nt,rt));var i=F&&!$?dn(tt,nt,rt):"";nt&&(i+=vn(nt)),i&&ki(Mt,"#"+Yt+" > .tns-item",i,Ri(Mt))}if(k&&D)for(var a in k){a=parseInt(a);var r=k[a],i="",o="",u="",l="",s="",c=$?null:sn("items",a),f=sn("fixedWidth",a),d=sn("speed",a),v=sn("edgePadding",a),p=sn("autoHeight",a),h=sn("gutter",a);x&&M&&sn("autoHeight",a)&&"speed"in r&&(o="#"+Yt+"-mw{"+hn(d)+"}"),("edgePadding"in r||"gutter"in r)&&(u="#"+Yt+"-iw{"+cn(v,h,f,d,p)+"}"),I&&F&&!$&&("fixedWidth"in r||"items"in r||tt&&"gutter"in r)&&(l="width:"+fn(f,h,c)+";"),x&&"speed"in r&&(l+=hn(d)),l&&(l="#"+Yt+"{"+l+"}"),("fixedWidth"in r||tt&&"gutter"in r||!I&&"items"in r)&&(s+=dn(f,h,c)),"gutter"in r&&(s+=vn(h)),!I&&"speed"in r&&(x&&(s+=hn(d)),b&&(s+=mn(d))),s&&(s="#"+Yt+" > .tns-item{"+s+"}"),(i=o+u+l+s)&&Mt.insertRule("@media (min-width: "+a/16+"em) {"+i+"}",Mt.cssRules.length)}}(),yn();var _e=ft?I?function(){var t=zt,e=Wt;t+=ot,e-=ot,et?(t+=1,e-=1):tt&&(it+nt)%(tt+nt)&&(e-=1),Nt&&(e<It?It-=Q:It<t&&(It+=Q))}:function(){if(Wt<It)for(;zt+Q<=It;)It-=Q;else if(It<zt)for(;It<=Wt-Q;)It+=Q}:function(){It=Math.max(zt,Math.min(Wt,It))},Ze=I?function(){var e,n,i,a,t,r,o,u,l,s,c;Jn(V,""),x||!st?(ti(),st&&Yi(V)||ai()):(e=V,n=Ot,i=Dt,a=kt,t=Zn(),r=st,o=ai,u=Math.min(r,10),l=0<=t.indexOf("%")?"%":"px",t=t.replace(l,""),s=Number(e.style[n].replace(i,"").replace(a,"").replace(l,"")),c=(t-s)/r*u,setTimeout(function t(){r-=u,s+=c,e.style[n]=i+s+l+a,0<r?setTimeout(t,u):o()},u)),F||Ci()}:function(){At=[];var t={};t[s]=t[c]=ai,_i(G[Pt],t),Ui(G[It],t),ei(Pt,P,z,!0),ei(It,W,P),s&&c&&st&&Yi(V)||ai()};return{version:"2.9.
13
vendor: 16,897 bytes, lines 1-2
1",getInfo:Ei,events:Qt,goTo:ri,play:function(){gt&&!Pe&&(ci(),We=!1)},pause:function(){Pe&&(fi(),We=!0)},isOn:Y,updateSliderHeight:Fn,refresh:yn,destroy:function(){if(Mt.disabled=!0,Mt.ownerNode&&Mt.ownerNode.remove(),_i(m,{resize:Cn}),lt&&_i(O,ie),xe&&_i(xe,$t),Ae&&_i(Ae,te),_i(V,ee),_i(V,ne),je&&_i(je,{click:di}),gt&&clearInterval(Ie),I&&s){var t={};t[s]=ai,_i(V,t)}mt&&_i(V,ae),yt&&_i(V,re);var r=[A,be,Me,Te,Ne,Ve];for(var e in d.forEach(function(t,e){var n="container"===t?T:H[t];if("object"==typeof n&&n){var i=!!n.previousElementSibling&&n.previousElementSibling,a=n.parentNode;n.outerHTML=r[e],H[t]=i?i.nextElementSibling:a.firstElementChild}}),d=P=z=C=W=F=T=j=V=E=A=G=Q=q=X=$=tt=et=nt=it=rt=ot=ut=lt=st=ct=ft=dt=Mt=Tt=N=At=Nt=Lt=Bt=St=Ht=Ot=Dt=kt=Rt=It=Pt=zt=Wt=Ft=jt=Vt=Gt=Qt=Xt=Yt=Kt=Jt=Ut=_t=Zt=$t=te=ee=ne=ie=ae=re=oe=ue=le=se=ce=fe=de=pe=he=L=vt=pt=xe=be=we=Ce=ye=ge=ht=Ae=Ne=Ee=Le=Be=Se=He=Oe=De=ke=Re=gt=xt=Fe=bt=wt=je=Ve=Ct=Ge=Ie=Pe=ze=We=qe=Ye=Ke=Qe=Je=Xe=Ue=mt=yt=null,this)"rebuild"!==e&&(this[e]=null);Y=!1},rebuild:function(){return $i(Li(H,v))}}}function $e(t){t&&(vt=ht=mt=yt=lt=gt=wt=Ct=!1)}function tn(){for(var t=I?It-Nt:It;t<0;)t+=Q;return t%Q+1}function en(t){return t=t?Math.max(0,Math.min(ft?Q-1:Q-rt,t)):0,I?t+Nt:t}function nn(t){for(null==t&&(t=It),I&&(t-=Nt);t<0;)t+=Q;return Math.floor(t%Q)}function an(){var t,e=nn();return t=le?e:tt||$?Math.ceil((e+1)*Le/Q-1):Math.floor(e/rt),!ft&&I&&It===Wt&&(t=Le-1),t}function rn(){return m.innerWidth||O.documentElement.clientWidth||O.body.clientWidth}function on(t){return"top"===t?"afterbegin":"beforeend"}function un(){var t=et?2*et-nt:0;return function t(e){if(null!=e){var n,i,a=O.createElement("div");return e.appendChild(a),i=(n=a.getBoundingClientRect()).right-n.left,a.remove(),i||t(e.parentNode)}}(E)-t}function ln(t){if(H[t])return!0;if(k)for(var e in k)if(k[e][t])return!0;return!1}function sn(t,e){if(null==e&&(e=X),"items"===t&&tt)return Math.floor((it+nt)/(tt+nt))||1;var n=H[t];if(k)for(var i in k)e>=parseInt(i)&&t in k[i]&&(n=k[i][t]);return"slideBy"===t&&"page"===n&&(n=sn("items")),I||"slideBy"!==t&&"items"!==t||(n=Math.floor(n)),n}function cn(t,e,n,i,a){var r="";if(void 0!==t){var o=t;e&&(o-=e),r=F?"margin: 0 "+o+"px 0 "+t+"px;":"margin: "+t+"px 0 "+o+"px 0;"}else if(e&&!n){var u="-"+e+"px";r="margin: 0 "+(F?u+" 0 0":"0 "+u+" 0")+";"}return!I&&a&&x&&i&&(r+=hn(i)),r}function fn(t,e,n){return t?(t+e)*Lt+"px":y?y+"("+100*Lt+"% / "+n+")":100*Lt/n+"%"}function dn(t,e,n){var i;if(t)i=t+e+"px";else{I||(n=Math.floor(n));var a=I?Lt:n;i=y?y+"(100% / "+a+")":100/a+"%"}return i="width:"+i,"inner"!==R?i+";":i+" !important;"}function vn(t){var e="";!1!==t&&(e=(F?"padding-":"margin-")+(F?"right":"bottom")+": "+t+"px;");return e}function pn(t,e){var n=t.substring(0,t.length-e).toLowerCase();return n&&(n="-"+n+"-"),n}function hn(t){return pn(x,18)+"transition-duration:"+t/1e3+"s;"}function mn(t){return pn(b,17)+"animation-duration:"+t/1e3+"s;"}function yn(){if(ln("autoHeight")||$||!F){var t=V.querySelectorAll("img");Ii(t,function(t){var e=t.src;Tt||(e&&e.indexOf("data:image")<0?(t.src="",Ui(t,he),zi(t,"loading"),t.src=e):kn(t))}),Ai(function(){zn(Gi(t),function(){L=!0})}),ln("autoHeight")&&(t=In(It,Math.min(It+rt-1,Lt-1))),Tt?gn():Ai(function(){zn(Gi(t),gn)})}else I&&$n(),bn(),wn()}function gn(){if($&&1<Q){var i=ft?It:Q-1;!function t(){var e=G[i].getBoundingClientRect().left,n=G[i-1].getBoundingClientRect().right;Math.abs(e-n)<=1?xn():setTimeout(function(){t()},16)}()}else xn()}function xn(){F&&!$||(jn(),$?(St=_n(),Ut&&(_t=Tn()),Wt=Rt(),$e(Kt||_t)):Ci()),I&&$n(),bn(),wn()}function bn(){if(Vn(),T.insertAdjacentHTML("afterbegin",'<div class="tns-liveregion tns-visually-hidden" aria-live="polite" aria-atomic="true">slide <span class="current">'+Hn()+"</span>  of "+Q+"</div>"),B=T.querySelector(".tns-liveregion .current"),se){var t=gt?"stop":"start";je?ji(je,{"data-action":t}):H.autoplayButtonOutput&&(T.insertAdjacentHTML(on(H.autoplayPosition),'<button type="button" data-action="'+t+'">'+Ge[0]+t+Ge[1]+bt[0]+"</button>"),je=T.querySelector("[data-action]")),je&&Ui(je,{click:di}),gt&&(ci(),wt&&Ui(V,ee),Ct&&Ui(V,ne))}if(ue){if(Ae)ji(Ae,{"aria-label":"Carousel Pagination"}),Ii(Ee=Ae.children,function(t,e){ji(t,{"data-nav":e,tabindex:"-1","aria-label":ke+(e+1),"aria-controls":Yt})});else{for(var e="",n=le?"":'style="display:none"',i=0;i<Q;i++)e+='<button type="button" data-nav="'+i+'" tabindex="-1" aria-controls="'+Yt+'" '+n+' aria-label="'+ke+(i+1)+'"></button>';e='<div class="tns-nav" aria-label="Carousel Pagination">'+e+"</div>",T.insertAdjacentHTML(on(H.navPosition),e),Ae=T.querySelector(".tns-nav"),Ee=Ae.children}if(Ti(),x){var a=x.substring(0,x.length-18).toLowerCase(),r="transition: all "+st/1e3+"s";a&&(r="-"+a+"-"+r),ki(Mt,"[aria-controls^="+Yt+"-item]",r,Ri(Mt))}ji(Ee[He],{"aria-label":ke+(He+1)+Re}),Vi(Ee[He],"tabindex"),zi(Ee[He],De),Ui(Ae,te)}oe&&(xe||we&&Ce||(T.insertAdjacentHTML(on(H.controlsPosition),'<div class="tns-controls" aria-label="Carousel Navigation" tabindex="0"><button type="button" data-controls="prev" tabindex="-1" aria-controls="'+Yt+'">'+pt[0]+'</button><button type="button" data-controls="next" tabindex="-1" aria-controls="'+Yt+'">'+pt[1]+"</button></div>"),xe=T.querySelector(".tns-controls")),we&&Ce||(we=xe.children[0],Ce=xe.children[1]),H.controlsContainer&&ji(xe,{"aria-label":"Carousel Navigation",tabindex:"0"}),(H.controlsContainer||H.prevButton&&H.nextButton)&&ji([we,Ce],{"aria-controls":Yt,tabindex:"-1"}),(H.controlsContainer||H.prevButton&&H.nextButton)&&(ji(we,{"data-controls":"prev"}),ji(Ce,{"data-controls":"next"})),ye=Qn(we),ge=Qn(Ce),Kn(),xe?Ui(xe,$t):(Ui(we,$t),Ui(Ce,$t))),An()}function wn(){if(I&&s){var t={};t[s]=ai,Ui(V,t)}mt&&Ui(V,ae,H.preventScrollOnTouch),yt&&Ui(V,re),lt&&Ui(O,ie),"inner"===R?Qt.on("outerResized",function(){Mn(),Qt.emit("innerLoaded",Ei())}):(k||tt||$||dt||!F)&&Ui(m,{resize:Cn}),dt&&("outer"===R?Qt.on("innerLoaded",Pn):Kt||Pn()),Dn(),Kt?Bn():_t&&Ln(),Qt.on("indexChanged",Wn),"inner"===R&&Qt.emit("innerLoaded",Ei()),"function"==typeof Gt&&Gt(Ei()),Y=!0}function Cn(t){Ai(function(){Mn(pi(t))})}function Mn(t){if(Y){"outer"===R&&Qt.emit("outerResized",Ei(t)),X=rn();var e,n=q,i=!1;k&&(En(),(e=n!==q)&&Qt.emit("newBreakpointStart",Ei(t)));var a,r,o,u,l=rt,s=Kt,c=_t,f=lt,d=vt,v=ht,p=mt,h=yt,m=gt,y=wt,g=Ct,x=It;if(e){var b=tt,w=dt,C=pt,M=at,T=bt;if(!D)var E=nt,A=et}if(lt=sn("arrowKeys"),vt=sn("controls"),ht=sn("nav"),mt=sn("touch"),at=sn("center"),yt=sn("mouseDrag"),gt=sn("autoplay"),wt=sn("autoplayHoverPause"),Ct=sn("autoplayResetOnVisibility"),e&&(Kt=sn("disable"),tt=sn("fixedWidth"),st=sn("speed"),dt=sn("autoHeight"),pt=sn("controlsText"),bt=sn("autoplayText"),xt=sn("autoplayTimeout"),D||(et=sn("edgePadding"),nt=sn("gutter"))),$e(Kt),it=un(),F&&!$||Kt||(jn(),F||(Ci(),i=!0)),(tt||$)&&(St=_n(),Wt=Rt()),(e||tt)&&(rt=sn("items"),ot=sn("slideBy"),(r=rt!==l)&&(tt||$||(Wt=Rt()),_e())),e&&Kt!==s&&(Kt?Bn():function(){if(!Jt)return;if(Mt.disabled=!1,V.className+=Xt,$n(),ft)for(var t=Nt;t--;)I&&Xi(G[t]),Xi(G[Lt-t-1]);if(!I)for(var e=It,n=It+Q;e<n;e++){var i=G[e],a=e<It+rt?P:W;i.style.left=100*(e-It)/rt+"%",zi(i,a)}Nn(),Jt=!1}()),Ut&&(e||tt||$)&&(_t=Tn())!==c&&(_t?(ti(Zn(en(0))),Ln()):(!function(){if(!Zt)return;et&&D&&(j.style.margin="");if(Nt)for(var t="tns-transparent",e=Nt;e--;)I&&Wi(G[e],t),Wi(G[Lt-e-1],t);Nn(),Zt=!1}(),i=!0)),$e(Kt||_t),gt||(wt=Ct=!1),lt!==f&&(lt?Ui(O,ie):_i(O,ie)),vt!==d&&(vt?xe?Xi(xe):(we&&Xi(we),Ce&&Xi(Ce)):xe?Qi(xe):(we&&Qi(we),Ce&&Qi(Ce))),ht!==v&&(ht?(Xi(Ae),Ti()):Qi(Ae)),mt!==p&&(mt?Ui(V,ae,H.preventScrollOnTouch):_i(V,ae)),yt!==h&&(yt?Ui(V,re):_i(V,re)),gt!==m&&(gt?(je&&Xi(je),Pe||We||ci()):(je&&Qi(je),Pe&&fi())),wt!==y&&(wt?Ui(V,ee):_i(V,ee)),Ct!==g&&(Ct?Ui(O,ne):_i(O,ne)),e){if(tt===b&&at===M||(i=!0),dt!==w&&(dt||(j.style.height="")),vt&&pt!==C&&(we.innerHTML=pt[0],Ce.innerHTML=pt[1]),je&&bt!==T){var N=gt?1:0,L=je.innerHTML,B=L.length-T[N].length;L.substring(B)===T[N]&&(je.innerHTML=L.substring(0,B)+bt[N])}}else at&&(tt||$)&&(i=!0);if((r||tt&&!$)&&(Le=Mi(),Ti()),(a=It!==x)?(Qt.emit("indexChanged",Ei()),i=!0):r?a||Wn():(tt||$)&&(Dn(),Vn(),Sn()),r&&!I&&function(){for(var t=It+Math.min(Q,rt),e=Lt;e--;){var n=G[e];It<=e&&e<t?(zi(n,"tns-moving"),n.style.left=100*(e-It)/rt+"%",zi(n,P),Wi(n,W)):n.style.left&&(n.style.left="",zi(n,W),Wi(n,P)),Wi(n,z)}setTimeout(function(){Ii(G,function(t){Wi(t,"tns-moving")})},300)}(),!Kt&&!_t){if(e&&!D&&(et===A&&nt===E||(j.style.cssText=cn(et,nt,tt,st,dt)),F)){I&&(V.style.width=fn(tt,nt,rt));var S=dn(tt,nt,rt)+vn(nt);u=Ri(o=Mt)-1,"deleteRule"in o?o.deleteRule(u):o.removeRule(u),ki(Mt,"#"+Yt+" > .tns-item",S,Ri(Mt))}dt&&Pn(),i&&($n(),Pt=It)}e&&Qt.emit("newBreakpointEnd",Ei(t))}}function Tn(){if(!tt&&!$)return Q<=(at?rt-(rt-1)/2:rt);var t=tt?(tt+nt)*Q:N[Q],e=et?it+2*et:it+nt;return at&&(e-=tt?(it-tt)/2:(it-(N[It+1]-N[It]-nt))/2),t<=e}function En(){for(var t in q=0,k)(t=parseInt(t))<=X&&(q=t)}function An(){!gt&&je&&Qi(je),!ht&&Ae&&Qi(Ae),vt||(xe?Qi(xe):(we&&Qi(we),Ce&&Qi(Ce)))}function Nn(){gt&&je&&Xi(je),ht&&Ae&&Xi(Ae),vt&&(xe?Xi(xe):(we&&Xi(we),Ce&&Xi(Ce)))}function Ln(){if(!Zt){if(et&&(j.style.margin="0px"),Nt)for(var t="tns-transparent",e=Nt;e--;)I&&zi(G[e],t),zi(G[Lt-e-1],t);An(),Zt=!0}}function Bn(){if(!Jt){if(Mt.disabled=!0,V.className=V.className.replace(Xt.substring(1),""),Vi(V,["style"]),ft)for(var t=Nt;t--;)I&&Qi(G[t]),Qi(G[Lt-t-1]);if(F&&I||Vi(j,["style"]),!I)for(var e=It,n=It+Q;e<n;e++){var i=G[e];Vi(i,["style"]),Wi(i,P),Wi(i,W)}An(),Jt=!0}}function Sn(){var t=Hn();B.innerHTML!==t&&(B.innerHTML=t)}function Hn(){var t=On(),e=t[0]+1,n=t[1]+1;return e===n?e+"":e+" to "+n}function On(t){null==t&&(t=Zn());var n,i,a,r=It;if(at||et?($||tt)&&(i=-(parseFloat(t)+et),a=i+it+2*et):$&&(i=N[It],a=i+it),$)N.forEach(function(t,e){e<Lt&&((at||et)&&t<=i+.5&&(r=e),.5<=a-t&&(n=e))});else{if(tt){var e=tt+nt;at||et?(r=Math.floor(i/e),n=Math.ceil(a/e-1)):n=r+Math.ceil(it/e)-1}else if(at||et){var o=rt-1;if(at?(r-=o/2,n=It+o/2):n=It+o,et){var u=et*rt/it;r-=u,n+=u}r=Math.floor(r),n=Math.ceil(n)}else n=r+rt-1;r=Math.max(r,0),n=Math.min(n,Lt-1)}return[r,n]}function Dn(){if(Tt&&!Kt){var t=On();t.push(Et),In.apply(null,t).forEach(function(t){if(!Pi(t,pe)){var e={};e[s]=function(t){t.stopPropagation()},Ui(t,e),Ui(t,he),t.src=Fi(t,"data-src");var n=Fi(t,"data-srcset");n&&(t.srcset=n),zi(t,"loading")}})}}function kn(t){zi(t,"loaded"),Rn(t)}function Rn(t){zi(t,pe),Wi(t,"loading"),_i(t,he)}function In(t,e,n){var i=[];for(n||(n="img");t<=e;)Ii(G[t].querySelectorAll(n),function(t){i.push(t)}),t++;return i}function Pn(){var t=In.apply(null,On());Ai(function(){zn(t,Fn)})}function zn(n,t){return L?t():(n.forEach(function(t,e){!Tt&&t.complete&&Rn(t),Pi(t,pe)&&n.splice(e,1)}),n.length?void Ai(function(){zn(n,t)}):t())}function Wn(){Dn(),Vn(),Sn(),Kn(),function(){if(ht&&(He=0<=Se?Se:an(),Se=-1,He!==Oe)){var t=Ee[Oe],e=Ee[He];ji(t,{tabindex:"-1","aria-label":ke+(Oe+1)}),Wi(t,De),ji(e,{"aria-label":ke+(He+1)+Re}),Vi(e,"tabindex"),zi(e,De),Oe=He}}()}function qn(t,e){for(var n=[],i=t,a=Math.min(t+e,Lt);i<a;i++)n.push(G[i].offsetHeight);return Math.max.apply(null,n)}function Fn(){var t=dt?qn(It,rt):qn(Nt,Q),e=M||j;e.style.height!==t&&(e.style.height=t+"px")}function jn(){N=[0];var n=F?"left":"top",i=F?"right":"bottom",a=G[0].getBoundingClientRect()[n];Ii(G,function(t,e){e&&N.push(t.getBoundingClientRect()[n]-a),e===Lt-1&&N.push(t.getBoundingClientRect()[i]-a)})}function Vn(){var t=On(),n=t[0],i=t[1];Ii(G,function(t,e){n<=e&&e<=i?qi(t,"aria-hidden")&&(Vi(t,["aria-hidden","tabindex"]),zi(t,de)):qi(t,"aria-hidden")||(ji(t,{"aria-hidden":"true",tabindex:"-1"}),Wi(t,de))})}function Gn(t){return t.nodeName.toLowerCase()}function Qn(t){return"button"===Gn(t)}function Xn(t){return"true"===t.getAttribute("aria-disabled")}function Yn(t,e,n){t?e.disabled=n:e.setAttribute("aria-disabled",n.toString())}function Kn(){if(vt&&!ct&&!ft){var t=ye?we.disabled:Xn(we),e=ge?Ce.disabled:Xn(Ce),n=It<=zt,i=!ct&&Wt<=It;n&&!t&&Yn(ye,we,!0),!n&&t&&Yn(ye,we,!1),i&&!e&&Yn(ge,Ce,!0),!i&&e&&Yn(ge,Ce,!1)}}function Jn(t,e){x&&(t.style[x]=e)}function Un(t){return null==t&&(t=It),$?(it-(et?nt:0)-(N[t+1]-N[t]-nt))/2:tt?(it-tt)/2:(rt-1)/2}function _n(){var t=it+(et?nt:0)-(tt?(tt+nt)*Lt:N[Lt]);return at&&!ft&&(t=tt?-(tt+nt)*(Lt-1)-Un():Un(Lt-1)-N[Lt-1]),0<t&&(t=0),t}function Zn(t){var e;if(null==t&&(t=It),F&&!$)if(tt)e=-(tt+nt)*t,at&&(e+=Un());else{var n=r?Lt:rt;at&&(t-=Un()),e=100*-t/n}else e=-N[t],at&&$&&(e+=Un());return Bt&&(e=Math.max(e,St)),e+=!F||$||tt?"px":"%"}function $n(t){Jn(V,"0s"),ti(t)}function ti(t){null==t&&(t=Zn()),V.style[Ot]=Dt+t+kt}function ei(t,e,n,i){var a=t+rt;ft||(a=Math.min(a,Lt));for(var r=t;r<a;r++){var o=G[r];i||(o.style.left=100*(r-It)/rt+"%"),C&&u&&(o.style[u]=o.style[l]=C*(r-t)/1e3+"s"),Wi(o,e),zi(o,n),i&&At.push(o)}}function ni(t,e){Ht&&_e(),(It!==Pt||e)&&(Qt.emit("indexChanged",Ei()),Qt.emit("transitionStart",Ei()),dt&&Pn(),Pe&&t&&0<=["click","keydown"].indexOf(t.type)&&fi(),Vt=!0,Ze())}function ii(t){return t.toLowerCase().replace(/-/g,"")}function ai(t){if(I||Vt){if(Qt.emit("transitionEnd",Ei(t)),!I&&0<At.length)for(var e=0;e<At.length;e++){var n=At[e];n.style.left="",l&&u&&(n.style[l]="",n.style[u]=""),Wi(n,z),zi(n,W)}if(!t||!I&&t.target.parentNode===V||t.target===V&&ii(t.propertyName)===ii(Ot)){if(!Ht){var i=It;_e(),It!==i&&(Qt.emit("indexChanged",Ei()),$n())}"inner"===R&&Qt.emit("innerLoaded",Ei()),Vt=!1,Pt=It}}}function ri(t,e){if(!_t)if("prev"===t)oi(e,-1);else if("next"===t)oi(e,1);else{if(Vt){if(qt)return;ai()}var n=nn(),i=0;if("first"===t?i=-n:"last"===t?i=I?Q-rt-n:Q-1-n:("number"!=typeof t&&(t=parseInt(t)),isNaN(t)||(e||(t=Math.max(0,Math.min(Q-1,t))),i=t-n)),!I&&i&&Math.abs(i)<rt){var a=0<i?1:-1;i+=zt<=It+i-Q?Q*a:2*Q*a*-1}It+=i,I&&ft&&(It<zt&&(It+=Q),Wt<It&&(It-=Q)),nn(It)!==nn(Pt)&&ni(e)}}function oi(t,e){if(Vt){if(qt)return;ai()}var n;if(!e){for(var i=hi(t=pi(t));i!==xe&&[we,Ce].indexOf(i)<0;)i=i.parentNode;var a=[we,Ce].indexOf(i);0<=a&&(n=!0,e=0===a?-1:1)}if(ct){if(It===zt&&-1===e)return void ri("last",t);if(It===Wt&&1===e)return void ri("first",t)}e&&(It+=ot*e,$&&(It=Math.floor(It)),ni(n||t&&"keydown"===t.type?t:null))}function ui(){Ie=setInterval(function(){oi(null,Fe)},xt),Pe=!0}function li(){clearInterval(Ie),Pe=!1}function si(t,e){ji(je,{"data-action":t}),je.innerHTML=Ge[0]+t+Ge[1]+e}function ci(){ui(),je&&si("stop",bt[1])}function fi(){li(),je&&si("start",bt[0])}function di(){Pe?(fi(),We=!0):(ci(),We=!1)}function vi(t){t.focus()}function pi(t){return mi(t=t||m.event)?t.changedTouches[0]:t}function hi(t){return t.target||m.event.srcElement}function mi(t){return 0<=t.type.indexOf("touch")}function yi(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function gi(){return a=Ke.y-Ye.y,r=Ke.x-Ye.x,t=Math.atan2(a,r)*(180/Math.PI),e=Ft,n=!1,i=Math.abs(90-Math.abs(t)),90-e<=i?n="horizontal":i<=e&&(n="vertical"),n===H.axis;var t,e,n,i,a,r}function xi(t){if(Vt){if(qt)return;ai()}gt&&Pe&&li(),Je=!0,Xe&&(Ni(Xe),Xe=null);var e=pi(t);Qt.emit(mi(t)?"touchStart":"dragStart",Ei(t)),!mi(t)&&0<=["img","a"].indexOf(Gn(hi(t)))&&yi(t),Ke.x=Ye.x=e.clientX,Ke.y=Ye.y=e.clientY,I&&(Qe=parseFloat(V.style[Ot].replace(Dt,"")),Jn(V,"0s"))}function bi(t){if(Je){var e=pi(t);Ke.x=e.clientX,Ke.y=e.clientY,I?Xe||(Xe=Ai(function(){!function t(e){if(!jt)return void(Je=!1);Ni(Xe);Je&&(Xe=Ai(function(){t(e)}));"?"===jt&&(jt=gi());if(jt){!me&&mi(e)&&(me=!0);try{e.type&&Qt.emit(mi(e)?"touchMove":"dragMove",Ei(e))}catch(t){}var n=Qe,i=Ue(Ke,Ye);if(!F||tt||$)n+=i,n+="px";else{var a=r?i*rt*100/((it+nt)*Lt):100*i/(it+nt);n+=a,n+="%"}V.style[Ot]=Dt+n+kt}}(t)})):("?"===jt&&(jt=gi()),jt&&(me=!0)),("boolean"!=typeof t.cancelable||t.cancelable)&&me&&t.preventDefault()}}function wi(i){if(Je){Xe&&(Ni(Xe),Xe=null),I&&Jn(V,""),Je=!1;var t=pi(i);Ke.x=t.clientX,Ke.y=t.clientY;var a=Ue(Ke,Ye);if(Math.abs(a)){if(!mi(i)){var n=hi(i);Ui(n,{click:function t(e){yi(e),_i(n,{click:t})}})}I?Xe=Ai(function(){if(F&&!$){var t=-a*rt/(it+nt);t=0<a?Math.floor(t):Math.ceil(t),It+=t}else{var e=-(Qe+a);if(e<=0)It=zt;else if(e>=N[Lt-1])It=Wt;else for(var n=0;n<Lt&&e>=N[n];)e>N[It=n]&&a<0&&(It+=1),n++}ni(i,a),Qt.emit(mi(i)?"touchEnd":"dragEnd",Ei(i))}):jt&&oi(i,0<a?-1:1)}}"auto"===H.preventScrollOnTouch&&(me=!1),Ft&&(jt="?"),gt&&!Pe&&ui()}function Ci(){(M||j).style.height=N[It+rt]-N[It]+"px"}function Mi(){var t=tt?(tt+nt)*Q/it:Q/rt;return Math.min(Math.ceil(t),Q)}function Ti(){if(ht&&!le&&Le!==Be){var t=Be,e=Le,n=Xi;for(Le<Be&&(t=Le,e=Be,n=Qi);t<e;)n(Ee[t]),t++;Be=Le}}function Ei(t){return{container:V,slideItems:G,navContainer:Ae,navItems:Ee,controlsContainer:xe,hasControls:oe,prevButton:we,nextButton:Ce,items:rt,slideBy:ot,cloneCount:Nt,slideCount:Q,slideCountNew:Lt,index:It,indexCached:Pt,displayIndex:tn(),navCurrentIndex:He,navCurrentIndexCached:Oe,pages:Le,pagesCached:Be,sheet:Mt,isOn:Y,event:t||{}}}f&&console.warn("No slides found in",H.container)};return $i}();
2//# sourceMappingURL=../sourcemaps/tiny-slider.js.map
3
4/*SIGUIENTE LIBRERIA*/
5/*!
6 * jQuery JavaScript Library v3.6.0
7 * https://jquery.com/
8 *
9 * Includes Sizzle.js
10 * https://sizzlejs.com/
11 *
12 * Copyright OpenJS Foundation and other contributors
13 * Released under the MIT license
14 * https://jquery.org/license
15 *
16 * Date: 2021-03-02T17:08Z
17 */
18( function( global, factory ) {
19
20	"use strict";
21
22	if ( typeof module === "object" && typeof module.exports === "object" ) {
23
24		// For CommonJS and CommonJS-like environments where a proper `window`
25		// is present, execute the factory and get jQuery.
26		// For environments that do not have a `window` with a `document`
27		// (such as Node.js), expose a factory as module.exports.
28		// This accentuates the need for the creation of a real `window`.
29		// e.g. var jQuery = require("jquery")(window);
30		// See ticket #14549 for more info.
31		module.exports = global.document ?
32			factory( global, true ) :
33			function( w ) {
34				if ( !w.document ) {
35					throw new Error( "jQuery requires a window with a document" );
36				}
37				return factory( w );
38			};
39	} else {
40		factory( global );
41	}
42
43// Pass this if window is not defined yet
44} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
45
46// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
47// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
48// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), str
vendor: 2,883 bytes, lines 48-158
48ict mode should be common
49// enough that all such attempts are guarded in a try block.
50"use strict";
51
52var arr = [];
53
54var getProto = Object.getPrototypeOf;
55
56var slice = arr.slice;
57
58var flat = arr.flat ? function( array ) {
59	return arr.flat.call( array );
60} : function( array ) {
61	return arr.concat.apply( [], array );
62};
63
64
65var push = arr.push;
66
67var indexOf = arr.indexOf;
68
69var class2type = {};
70
71var toString = class2type.toString;
72
73var hasOwn = class2type.hasOwnProperty;
74
75var fnToString = hasOwn.toString;
76
77var ObjectFunctionString = fnToString.call( Object );
78
79var support = {};
80
81var isFunction = function isFunction( obj ) {
82
83		// Support: Chrome <=57, Firefox <=52
84		// In some browsers, typeof returns "function" for HTML <object> elements
85		// (i.e., `typeof document.createElement( "object" ) === "function"`).
86		// We don't want to classify *any* DOM node as a function.
87		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
88		// Plus for old WebKit, typeof returns "function" for HTML collections
89		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
90		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
91			typeof obj.item !== "function";
92	};
93
94
95var isWindow = function isWindow( obj ) {
96		return obj != null && obj === obj.window;
97	};
98
99
100var document = window.document;
101
102
103
104	var preservedScriptAttributes = {
105		type: true,
106		src: true,
107		nonce: true,
108		noModule: true
109	};
110
111	function DOMEval( code, node, doc ) {
112		doc = doc || document;
113
114		var i, val,
115			script = doc.createElement( "script" );
116
117		script.text = code;
118		if ( node ) {
119			for ( i in preservedScriptAttributes ) {
120
121				// Support: Firefox 64+, Edge 18+
122				// Some browsers don't support the "nonce" property on scripts.
123				// On the other hand, just using `getAttribute` is not enough as
124				// the `nonce` attribute is reset to an empty string whenever it
125				// becomes browsing-context connected.
126				// See https://github.com/whatwg/html/issues/2369
127				// See https://html.spec.whatwg.org/#nonce-attributes
128				// The `node.getAttribute` check was added for the sake of
129				// `jQuery.globalEval` so that it can fake a nonce-containing node
130				// via an object.
131				val = node[ i ] || node.getAttribute && node.getAttribute( i );
132				if ( val ) {
133					script.setAttribute( i, val );
134				}
135			}
136		}
137		doc.head.appendChild( script ).parentNode.removeChild( script );
138	}
139
140
141function toType( obj ) {
142	if ( obj == null ) {
143		return obj + "";
144	}
145
146	// Support: Android <=2.3 only (functionish RegExp)
147	return typeof obj === "object" || typeof obj === "function" ?
148		class2type[ toString.call( obj ) ] || "object" :
149		typeof obj;
150}
151/* global Symbol */
152// Defining this global in .eslintrc.json would create a danger of using the global
153// unguarded in another place, it seems safer to define global only for this module
154
155
156
157var
158	version = "3.6.0
vendor: 183,283 bytes, lines 158-6953
158",
159
160	// Define a local copy of jQuery
161	jQuery = function( selector, context ) {
162
163		// The jQuery object is actually just the init constructor 'enhanced'
164		// Need init if jQuery is called (just allow error to be thrown if not included)
165		return new jQuery.fn.init( selector, context );
166	};
167
168jQuery.fn = jQuery.prototype = {
169
170	// The current version of jQuery being used
171	jquery: version,
172
173	constructor: jQuery,
174
175	// The default length of a jQuery object is 0
176	length: 0,
177
178	toArray: function() {
179		return slice.call( this );
180	},
181
182	// Get the Nth element in the matched element set OR
183	// Get the whole matched element set as a clean array
184	get: function( num ) {
185
186		// Return all the elements in a clean array
187		if ( num == null ) {
188			return slice.call( this );
189		}
190
191		// Return just the one element from the set
192		return num < 0 ? this[ num + this.length ] : this[ num ];
193	},
194
195	// Take an array of elements and push it onto the stack
196	// (returning the new matched element set)
197	pushStack: function( elems ) {
198
199		// Build a new jQuery matched element set
200		var ret = jQuery.merge( this.constructor(), elems );
201
202		// Add the old object onto the stack (as a reference)
203		ret.prevObject = this;
204
205		// Return the newly-formed element set
206		return ret;
207	},
208
209	// Execute a callback for every element in the matched set.
210	each: function( callback ) {
211		return jQuery.each( this, callback );
212	},
213
214	map: function( callback ) {
215		return this.pushStack( jQuery.map( this, function( elem, i ) {
216			return callback.call( elem, i, elem );
217		} ) );
218	},
219
220	slice: function() {
221		return this.pushStack( slice.apply( this, arguments ) );
222	},
223
224	first: function() {
225		return this.eq( 0 );
226	},
227
228	last: function() {
229		return this.eq( -1 );
230	},
231
232	even: function() {
233		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
234			return ( i + 1 ) % 2;
235		} ) );
236	},
237
238	odd: function() {
239		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
240			return i % 2;
241		} ) );
242	},
243
244	eq: function( i ) {
245		var len = this.length,
246			j = +i + ( i < 0 ? len : 0 );
247		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
248	},
249
250	end: function() {
251		return this.prevObject || this.constructor();
252	},
253
254	// For internal use only.
255	// Behaves like an Array's method, not like a jQuery method.
256	push: push,
257	sort: arr.sort,
258	splice: arr.splice
259};
260
261jQuery.extend = jQuery.fn.extend = function() {
262	var options, name, src, copy, copyIsArray, clone,
263		target = arguments[ 0 ] || {},
264		i = 1,
265		length = arguments.length,
266		deep = false;
267
268	// Handle a deep copy situation
269	if ( typeof target === "boolean" ) {
270		deep = target;
271
272		// Skip the boolean and the target
273		target = arguments[ i ] || {};
274		i++;
275	}
276
277	// Handle case when target is a string or something (possible in deep copy)
278	if ( typeof target !== "object" && !isFunction( target ) ) {
279		target = {};
280	}
281
282	// Extend jQuery itself if only one argument is passed
283	if ( i === length ) {
284		target = this;
285		i--;
286	}
287
288	for ( ; i < length; i++ ) {
289
290		// Only deal with non-null/undefined values
291		if ( ( options = arguments[ i ] ) != null ) {
292
293			// Extend the base object
294			for ( name in options ) {
295				copy = options[ name ];
296
297				// Prevent Object.prototype pollution
298				// Prevent never-ending loop
299				if ( name === "__proto__" || target === copy ) {
300					continue;
301				}
302
303				// Recurse if we're merging plain objects or arrays
304				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
305					( copyIsArray = Array.isArray( copy ) ) ) ) {
306					src = target[ name ];
307
308					// Ensure proper type for the source value
309					if ( copyIsArray && !Array.isArray( src ) ) {
310						clone = [];
311					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
312						clone = {};
313					} else {
314						clone = src;
315					}
316					copyIsArray = false;
317
318					// Never move original objects, clone them
319					target[ name ] = jQuery.extend( deep, clone, copy );
320
321				// Don't bring in undefined values
322				} else if ( copy !== undefined ) {
323					target[ name ] = copy;
324				}
325			}
326		}
327	}
328
329	// Return the modified object
330	return target;
331};
332
333jQuery.extend( {
334
335	// Unique for each copy of jQuery on the page
336	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
337
338	// Assume jQuery is ready without the ready module
339	isReady: true,
340
341	error: function( msg ) {
342		throw new Error( msg );
343	},
344
345	noop: function() {},
346
347	isPlainObject: function( obj ) {
348		var proto, Ctor;
349
350		// Detect obvious negatives
351		// Use toString instead of jQuery.type to catch host objects
352		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
353			return false;
354		}
355
356		proto = getProto( obj );
357
358		// Objects with no prototype (e.g., `Object.create( null )`) are plain
359		if ( !proto ) {
360			return true;
361		}
362
363		// Objects with prototype are plain iff they were constructed by a global Object function
364		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
365		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
366	},
367
368	isEmptyObject: function( obj ) {
369		var name;
370
371		for ( name in obj ) {
372			return false;
373		}
374		return true;
375	},
376
377	// Evaluates a script in a provided context; falls back to the global one
378	// if not specified.
379	globalEval: function( code, options, doc ) {
380		DOMEval( code, { nonce: options && options.nonce }, doc );
381	},
382
383	each: function( obj, callback ) {
384		var length, i = 0;
385
386		if ( isArrayLike( obj ) ) {
387			length = obj.length;
388			for ( ; i < length; i++ ) {
389				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
390					break;
391				}
392			}
393		} else {
394			for ( i in obj ) {
395				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
396					break;
397				}
398			}
399		}
400
401		return obj;
402	},
403
404	// results is for internal usage only
405	makeArray: function( arr, results ) {
406		var ret = results || [];
407
408		if ( arr != null ) {
409			if ( isArrayLike( Object( arr ) ) ) {
410				jQuery.merge( ret,
411					typeof arr === "string" ?
412						[ arr ] : arr
413				);
414			} else {
415				push.call( ret, arr );
416			}
417		}
418
419		return ret;
420	},
421
422	inArray: function( elem, arr, i ) {
423		return arr == null ? -1 : indexOf.call( arr, elem, i );
424	},
425
426	// Support: Android <=4.0 only, PhantomJS 1 only
427	// push.apply(_, arraylike) throws on ancient WebKit
428	merge: function( first, second ) {
429		var len = +second.length,
430			j = 0,
431			i = first.length;
432
433		for ( ; j < len; j++ ) {
434			first[ i++ ] = second[ j ];
435		}
436
437		first.length = i;
438
439		return first;
440	},
441
442	grep: function( elems, callback, invert ) {
443		var callbackInverse,
444			matches = [],
445			i = 0,
446			length = elems.length,
447			callbackExpect = !invert;
448
449		// Go through the array, only saving the items
450		// that pass the validator function
451		for ( ; i < length; i++ ) {
452			callbackInverse = !callback( elems[ i ], i );
453			if ( callbackInverse !== callbackExpect ) {
454				matches.push( elems[ i ] );
455			}
456		}
457
458		return matches;
459	},
460
461	// arg is for internal usage only
462	map: function( elems, callback, arg ) {
463		var length, value,
464			i = 0,
465			ret = [];
466
467		// Go through the array, translating each of the items to their new values
468		if ( isArrayLike( elems ) ) {
469			length = elems.length;
470			for ( ; i < length; i++ ) {
471				value = callback( elems[ i ], i, arg );
472
473				if ( value != null ) {
474					ret.push( value );
475				}
476			}
477
478		// Go through every key on the object,
479		} else {
480			for ( i in elems ) {
481				value = callback( elems[ i ], i, arg );
482
483				if ( value != null ) {
484					ret.push( value );
485				}
486			}
487		}
488
489		// Flatten any nested arrays
490		return flat( ret );
491	},
492
493	// A global GUID counter for objects
494	guid: 1,
495
496	// jQuery.support is not used in Core but other projects attach their
497	// properties to it so it needs to exist.
498	support: support
499} );
500
501if ( typeof Symbol === "function" ) {
502	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
503}
504
505// Populate the class2type map
506jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
507	function( _i, name ) {
508		class2type[ "[object " + name + "]" ] = name.toLowerCase();
509	} );
510
511function isArrayLike( obj ) {
512
513	// Support: real iOS 8.2 only (not reproducible in simulator)
514	// `in` check used to prevent JIT error (gh-2145)
515	// hasOwn isn't used here due to false negatives
516	// regarding Nodelist length in IE
517	var length = !!obj && "length" in obj && obj.length,
518		type = toType( obj );
519
520	if ( isFunction( obj ) || isWindow( obj ) ) {
521		return false;
522	}
523
524	return type === "array" || length === 0 ||
525		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
526}
527var Sizzle =
528/*!
529 * Sizzle CSS Selector Engine v2.3.6
530 * https://sizzlejs.com/
531 *
532 * Copyright JS Foundation and other contributors
533 * Released under the MIT license
534 * https://js.foundation/
535 *
536 * Date: 2021-02-16
537 */
538( function( window ) {
539var i,
540	support,
541	Expr,
542	getText,
543	isXML,
544	tokenize,
545	compile,
546	select,
547	outermostContext,
548	sortInput,
549	hasDuplicate,
550
551	// Local document vars
552	setDocument,
553	document,
554	docElem,
555	documentIsHTML,
556	rbuggyQSA,
557	rbuggyMatches,
558	matches,
559	contains,
560
561	// Instance-specific data
562	expando = "sizzle" + 1 * new Date(),
563	preferredDoc = window.document,
564	dirruns = 0,
565	done = 0,
566	classCache = createCache(),
567	tokenCache = createCache(),
568	compilerCache = createCache(),
569	nonnativeSelectorCache = createCache(),
570	sortOrder = function( a, b ) {
571		if ( a === b ) {
572			hasDuplicate = true;
573		}
574		return 0;
575	},
576
577	// Instance methods
578	hasOwn = ( {} ).hasOwnProperty,
579	arr = [],
580	pop = arr.pop,
581	pushNative = arr.push,
582	push = arr.push,
583	slice = arr.slice,
584
585	// Use a stripped-down indexOf as it's faster than native
586	// https://jsperf.com/thor-indexof-vs-for/5
587	indexOf = function( list, elem ) {
588		var i = 0,
589			len = list.length;
590		for ( ; i < len; i++ ) {
591			if ( list[ i ] === elem ) {
592				return i;
593			}
594		}
595		return -1;
596	},
597
598	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
599		"ismap|loop|multiple|open|readonly|required|scoped",
600
601	// Regular expressions
602
603	// http://www.w3.org/TR/css3-selectors/#whitespace
604	whitespace = "[\\x20\\t\\r\\n\\f]",
605
606	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
607	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
608		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
609
610	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
611	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
612
613		// Operator (capture 2)
614		"*([*^$|!~]?=)" + whitespace +
615
616		// "Attribute values must be CSS identifiers [capture 5]
617		// or strings [capture 3 or capture 4]"
618		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
619		whitespace + "*\\]",
620
621	pseudos = ":(" + identifier + ")(?:\\((" +
622
623		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
624		// 1. quoted (capture 3; capture 4 or capture 5)
625		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
626
627		// 2. simple (capture 6)
628		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
629
630		// 3. anything else (capture 2)
631		".*" +
632		")\\)|)",
633
634	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
635	rwhitespace = new RegExp( whitespace + "+", "g" ),
636	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
637		whitespace + "+$", "g" ),
638
639	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
640	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
641		"*" ),
642	rdescend = new RegExp( whitespace + "|>" ),
643
644	rpseudo = new RegExp( pseudos ),
645	ridentifier = new RegExp( "^" + identifier + "$" ),
646
647	matchExpr = {
648		"ID": new RegExp( "^#(" + identifier + ")" ),
649		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
650		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
651		"ATTR": new RegExp( "^" + attributes ),
652		"PSEUDO": new RegExp( "^" + pseudos ),
653		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
654			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
655			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
656		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
657
658		// For use in libraries implementing .is()
659		// We use this for POS matching in `select`
660		"needsContext": new RegExp( "^" + whitespace +
661			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
662			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
663	},
664
665	rhtml = /HTML$/i,
666	rinputs = /^(?:input|select|textarea|button)$/i,
667	rheader = /^h\d$/i,
668
669	rnative = /^[^{]+\{\s*\[native \w/,
670
671	// Easily-parseable/retrievable ID or TAG or CLASS selectors
672	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
673
674	rsibling = /[+~]/,
675
676	// CSS escapes
677	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
678	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
679	funescape = function( escape, nonHex ) {
680		var high = "0x" + escape.slice( 1 ) - 0x10000;
681
682		return nonHex ?
683
684			// Strip the backslash prefix from a non-hex escape sequence
685			nonHex :
686
687			// Replace a hexadecimal escape sequence with the encoded Unicode code point
688			// Support: IE <=11+
689			// For values outside the Basic Multilingual Plane (BMP), manually construct a
690			// surrogate pair
691			high < 0 ?
692				String.fromCharCode( high + 0x10000 ) :
693				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
694	},
695
696	// CSS string/identifier serialization
697	// https://drafts.csswg.org/cssom/#common-serializing-idioms
698	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
699	fcssescape = function( ch, asCodePoint ) {
700		if ( asCodePoint ) {
701
702			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
703			if ( ch === "\0" ) {
704				return "\uFFFD";
705			}
706
707			// Control characters and (dependent upon position) numbers get escaped as code points
708			return ch.slice( 0, -1 ) + "\\" +
709				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
710		}
711
712		// Other potentially-special ASCII characters get backslash-escaped
713		return "\\" + ch;
714	},
715
716	// Used for iframes
717	// See setDocument()
718	// Removing the function wrapper causes a "Permission Denied"
719	// error in IE
720	unloadHandler = function() {
721		setDocument();
722	},
723
724	inDisabledFieldset = addCombinator(
725		function( elem ) {
726			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
727		},
728		{ dir: "parentNode", next: "legend" }
729	);
730
731// Optimize for push.apply( _, NodeList )
732try {
733	push.apply(
734		( arr = slice.call( preferredDoc.childNodes ) ),
735		preferredDoc.childNodes
736	);
737
738	// Support: Android<4.0
739	// Detect silently failing push.apply
740	// eslint-disable-next-line no-unused-expressions
741	arr[ preferredDoc.childNodes.length ].nodeType;
742} catch ( e ) {
743	push = { apply: arr.length ?
744
745		// Leverage slice if possible
746		function( target, els ) {
747			pushNative.apply( target, slice.call( els ) );
748		} :
749
750		// Support: IE<9
751		// Otherwise append directly
752		function( target, els ) {
753			var j = target.length,
754				i = 0;
755
756			// Can't trust NodeList.length
757			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
758			target.length = j - 1;
759		}
760	};
761}
762
763function Sizzle( selector, context, results, seed ) {
764	var m, i, elem, nid, match, groups, newSelector,
765		newContext = context && context.ownerDocument,
766
767		// nodeType defaults to 9, since context defaults to document
768		nodeType = context ? context.nodeType : 9;
769
770	results = results || [];
771
772	// Return early from calls with invalid selector or context
773	if ( typeof selector !== "string" || !selector ||
774		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
775
776		return results;
777	}
778
779	// Try to shortcut find operations (as opposed to filters) in HTML documents
780	if ( !seed ) {
781		setDocument( context );
782		context = context || document;
783
784		if ( documentIsHTML ) {
785
786			// If the selector is sufficiently simple, try using a "get*By*" DOM method
787			// (excepting DocumentFragment context, where the methods don't exist)
788			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
789
790				// ID selector
791				if ( ( m = match[ 1 ] ) ) {
792
793					// Document context
794					if ( nodeType === 9 ) {
795						if ( ( elem = context.getElementById( m ) ) ) {
796
797							// Support: IE, Opera, Webkit
798							// TODO: identify versions
799							// getElementById can match elements by name instead of ID
800							if ( elem.id === m ) {
801								results.push( elem );
802								return results;
803							}
804						} else {
805							return results;
806						}
807
808					// Element context
809					} else {
810
811						// Support: IE, Opera, Webkit
812						// TODO: identify versions
813						// getElementById can match elements by name instead of ID
814						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
815							contains( context, elem ) &&
816							elem.id === m ) {
817
818							results.push( elem );
819							return results;
820						}
821					}
822
823				// Type selector
824				} else if ( match[ 2 ] ) {
825					push.apply( results, context.getElementsByTagName( selector ) );
826					return results;
827
828				// Class selector
829				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
830					context.getElementsByClassName ) {
831
832					push.apply( results, context.getElementsByClassName( m ) );
833					return results;
834				}
835			}
836
837			// Take advantage of querySelectorAll
838			if ( support.qsa &&
839				!nonnativeSelectorCache[ selector + " " ] &&
840				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
841
842				// Support: IE 8 only
843				// Exclude object elements
844				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
845
846				newSelector = selector;
847				newContext = context;
848
849				// qSA considers elements outside a scoping root when evaluating child or
850				// descendant combinators, which is not what we want.
851				// In such cases, we work around the behavior by prefixing every selector in the
852				// list with an ID selector referencing the scope context.
853				// The technique has to be used as well when a leading combinator is used
854				// as such selectors are not recognized by querySelectorAll.
855				// Thanks to Andrew Dupont for this technique.
856				if ( nodeType === 1 &&
857					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
858
859					// Expand context for sibling selectors
860					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
861						context;
862
863					// We can use :scope instead of the ID hack if the browser
864					// supports it & if we're not changing the context.
865					if ( newContext !== context || !support.scope ) {
866
867						// Capture the context ID, setting it first if necessary
868						if ( ( nid = context.getAttribute( "id" ) ) ) {
869							nid = nid.replace( rcssescape, fcssescape );
870						} else {
871							context.setAttribute( "id", ( nid = expando ) );
872						}
873					}
874
875					// Prefix every selector in the list
876					groups = tokenize( selector );
877					i = groups.length;
878					while ( i-- ) {
879						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
880							toSelector( groups[ i ] );
881					}
882					newSelector = groups.join( "," );
883				}
884
885				try {
886					push.apply( results,
887						newContext.querySelectorAll( newSelector )
888					);
889					return results;
890				} catch ( qsaError ) {
891					nonnativeSelectorCache( selector, true );
892				} finally {
893					if ( nid === expando ) {
894						context.removeAttribute( "id" );
895					}
896				}
897			}
898		}
899	}
900
901	// All others
902	return select( selector.replace( rtrim, "$1" ), context, results, seed );
903}
904
905/**
906 * Create key-value caches of limited size
907 * @returns {function(string, object)} Returns the Object data after storing it on itself with
908 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
909 *	deleting the oldest entry
910 */
911function createCache() {
912	var keys = [];
913
914	function cache( key, value ) {
915
916		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
917		if ( keys.push( key + " " ) > Expr.cacheLength ) {
918
919			// Only keep the most recent entries
920			delete cache[ keys.shift() ];
921		}
922		return ( cache[ key + " " ] = value );
923	}
924	return cache;
925}
926
927/**
928 * Mark a function for special use by Sizzle
929 * @param {Function} fn The function to mark
930 */
931function markFunction( fn ) {
932	fn[ expando ] = true;
933	return fn;
934}
935
936/**
937 * Support testing using an element
938 * @param {Function} fn Passed the created element and returns a boolean result
939 */
940function assert( fn ) {
941	var el = document.createElement( "fieldset" );
942
943	try {
944		return !!fn( el );
945	} catch ( e ) {
946		return false;
947	} finally {
948
949		// Remove from its parent by default
950		if ( el.parentNode ) {
951			el.parentNode.removeChild( el );
952		}
953
954		// release memory in IE
955		el = null;
956	}
957}
958
959/**
960 * Adds the same handler for all of the specified attrs
961 * @param {String} attrs Pipe-separated list of attributes
962 * @param {Function} handler The method that will be applied
963 */
964function addHandle( attrs, handler ) {
965	var arr = attrs.split( "|" ),
966		i = arr.length;
967
968	while ( i-- ) {
969		Expr.attrHandle[ arr[ i ] ] = handler;
970	}
971}
972
973/**
974 * Checks document order of two siblings
975 * @param {Element} a
976 * @param {Element} b
977 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
978 */
979function siblingCheck( a, b ) {
980	var cur = b && a,
981		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
982			a.sourceIndex - b.sourceIndex;
983
984	// Use IE sourceIndex if available on both nodes
985	if ( diff ) {
986		return diff;
987	}
988
989	// Check if b follows a
990	if ( cur ) {
991		while ( ( cur = cur.nextSibling ) ) {
992			if ( cur === b ) {
993				return -1;
994			}
995		}
996	}
997
998	return a ? 1 : -1;
999}
1000
1001/**
1002 * Returns a function to use in pseudos for input types
1003 * @param {String} type
1004 */
1005function createInputPseudo( type ) {
1006	return function( elem ) {
1007		var name = elem.nodeName.toLowerCase();
1008		return name === "input" && elem.type === type;
1009	};
1010}
1011
1012/**
1013 * Returns a function to use in pseudos for buttons
1014 * @param {String} type
1015 */
1016function createButtonPseudo( type ) {
1017	return function( elem ) {
1018		var name = elem.nodeName.toLowerCase();
1019		return ( name === "input" || name === "button" ) && elem.type === type;
1020	};
1021}
1022
1023/**
1024 * Returns a function to use in pseudos for :enabled/:disabled
1025 * @param {Boolean} disabled true for :disabled; false for :enabled
1026 */
1027function createDisabledPseudo( disabled ) {
1028
1029	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
1030	return function( elem ) {
1031
1032		// Only certain elements can match :enabled or :disabled
1033		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
1034		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
1035		if ( "form" in elem ) {
1036
1037			// Check for inherited disabledness on relevant non-disabled elements:
1038			// * listed form-associated elements in a disabled fieldset
1039			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
1040			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
1041			// * option elements in a disabled optgroup
1042			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
1043			// All such elements have a "form" property.
1044			if ( elem.parentNode && elem.disabled === false ) {
1045
1046				// Option elements defer to a parent optgroup if present
1047				if ( "label" in elem ) {
1048					if ( "label" in elem.parentNode ) {
1049						return elem.parentNode.disabled === disabled;
1050					} else {
1051						return elem.disabled === disabled;
1052					}
1053				}
1054
1055				// Support: IE 6 - 11
1056				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
1057				return elem.isDisabled === disabled ||
1058
1059					// Where there is no isDisabled, check manually
1060					/* jshint -W018 */
1061					elem.isDisabled !== !disabled &&
1062					inDisabledFieldset( elem ) === disabled;
1063			}
1064
1065			return elem.disabled === disabled;
1066
1067		// Try to winnow out elements that can't be disabled before trusting the disabled property.
1068		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
1069		// even exist on them, let alone have a boolean value.
1070		} else if ( "label" in elem ) {
1071			return elem.disabled === disabled;
1072		}
1073
1074		// Remaining elements are neither :enabled nor :disabled
1075		return false;
1076	};
1077}
1078
1079/**
1080 * Returns a function to use in pseudos for positionals
1081 * @param {Function} fn
1082 */
1083function createPositionalPseudo( fn ) {
1084	return markFunction( function( argument ) {
1085		argument = +argument;
1086		return markFunction( function( seed, matches ) {
1087			var j,
1088				matchIndexes = fn( [], seed.length, argument ),
1089				i = matchIndexes.length;
1090
1091			// Match elements found at the specified indexes
1092			while ( i-- ) {
1093				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
1094					seed[ j ] = !( matches[ j ] = seed[ j ] );
1095				}
1096			}
1097		} );
1098	} );
1099}
1100
1101/**
1102 * Checks a node for validity as a Sizzle context
1103 * @param {Element|Object=} context
1104 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1105 */
1106function testContext( context ) {
1107	return context && typeof context.getElementsByTagName !== "undefined" && context;
1108}
1109
1110// Expose support vars for convenience
1111support = Sizzle.support = {};
1112
1113/**
1114 * Detects XML nodes
1115 * @param {Element|Object} elem An element or a document
1116 * @returns {Boolean} True iff elem is a non-HTML XML node
1117 */
1118isXML = Sizzle.isXML = function( elem ) {
1119	var namespace = elem && elem.namespaceURI,
1120		docElem = elem && ( elem.ownerDocument || elem ).documentElement;
1121
1122	// Support: IE <=8
1123	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
1124	// https://bugs.jquery.com/ticket/4833
1125	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
1126};
1127
1128/**
1129 * Sets document-related variables once based on the current document
1130 * @param {Element|Object} [doc] An element or document object to use to set the document
1131 * @returns {Object} Returns the current document
1132 */
1133setDocument = Sizzle.setDocument = function( node ) {
1134	var hasCompare, subWindow,
1135		doc = node ? node.ownerDocument || node : preferredDoc;
1136
1137	// Return early if doc is invalid or already selected
1138	// Support: IE 11+, Edge 17 - 18+
1139	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1140	// two documents; shallow comparisons work.
1141	// eslint-disable-next-line eqeqeq
1142	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
1143		return document;
1144	}
1145
1146	// Update global variables
1147	document = doc;
1148	docElem = document.documentElement;
1149	documentIsHTML = !isXML( document );
1150
1151	// Support: IE 9 - 11+, Edge 12 - 18+
1152	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
1153	// Support: IE 11+, Edge 17 - 18+
1154	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1155	// two documents; shallow comparisons work.
1156	// eslint-disable-next-line eqeqeq
1157	if ( preferredDoc != document &&
1158		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
1159
1160		// Support: IE 11, Edge
1161		if ( subWindow.addEventListener ) {
1162			subWindow.addEventListener( "unload", unloadHandler, false );
1163
1164		// Support: IE 9 - 10 only
1165		} else if ( subWindow.attachEvent ) {
1166			subWindow.attachEvent( "onunload", unloadHandler );
1167		}
1168	}
1169
1170	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
1171	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
1172	// IE/Edge & older browsers don't support the :scope pseudo-class.
1173	// Support: Safari 6.0 only
1174	// Safari 6.0 supports :scope but it's an alias of :root there.
1175	support.scope = assert( function( el ) {
1176		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
1177		return typeof el.querySelectorAll !== "undefined" &&
1178			!el.querySelectorAll( ":scope fieldset div" ).length;
1179	} );
1180
1181	/* Attributes
1182	---------------------------------------------------------------------- */
1183
1184	// Support: IE<8
1185	// Verify that getAttribute really returns attributes and not properties
1186	// (excepting IE8 booleans)
1187	support.attributes = assert( function( el ) {
1188		el.className = "i";
1189		return !el.getAttribute( "className" );
1190	} );
1191
1192	/* getElement(s)By*
1193	---------------------------------------------------------------------- */
1194
1195	// Check if getElementsByTagName("*") returns only elements
1196	support.getElementsByTagName = assert( function( el ) {
1197		el.appendChild( document.createComment( "" ) );
1198		return !el.getElementsByTagName( "*" ).length;
1199	} );
1200
1201	// Support: IE<9
1202	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
1203
1204	// Support: IE<10
1205	// Check if getElementById returns elements by name
1206	// The broken getElementById methods don't pick up programmatically-set names,
1207	// so use a roundabout getElementsByName test
1208	support.getById = assert( function( el ) {
1209		docElem.appendChild( el ).id = expando;
1210		return !document.getElementsByName || !document.getElementsByName( expando ).length;
1211	} );
1212
1213	// ID filter and find
1214	if ( support.getById ) {
1215		Expr.filter[ "ID" ] = function( id ) {
1216			var attrId = id.replace( runescape, funescape );
1217			return function( elem ) {
1218				return elem.getAttribute( "id" ) === attrId;
1219			};
1220		};
1221		Expr.find[ "ID" ] = function( id, context ) {
1222			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1223				var elem = context.getElementById( id );
1224				return elem ? [ elem ] : [];
1225			}
1226		};
1227	} else {
1228		Expr.filter[ "ID" ] =  function( id ) {
1229			var attrId = id.replace( runescape, funescape );
1230			return function( elem ) {
1231				var node = typeof elem.getAttributeNode !== "undefined" &&
1232					elem.getAttributeNode( "id" );
1233				return node && node.value === attrId;
1234			};
1235		};
1236
1237		// Support: IE 6 - 7 only
1238		// getElementById is not reliable as a find shortcut
1239		Expr.find[ "ID" ] = function( id, context ) {
1240			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1241				var node, i, elems,
1242					elem = context.getElementById( id );
1243
1244				if ( elem ) {
1245
1246					// Verify the id attribute
1247					node = elem.getAttributeNode( "id" );
1248					if ( node && node.value === id ) {
1249						return [ elem ];
1250					}
1251
1252					// Fall back on getElementsByName
1253					elems = context.getElementsByName( id );
1254					i = 0;
1255					while ( ( elem = elems[ i++ ] ) ) {
1256						node = elem.getAttributeNode( "id" );
1257						if ( node && node.value === id ) {
1258							return [ elem ];
1259						}
1260					}
1261				}
1262
1263				return [];
1264			}
1265		};
1266	}
1267
1268	// Tag
1269	Expr.find[ "TAG" ] = support.getElementsByTagName ?
1270		function( tag, context ) {
1271			if ( typeof context.getElementsByTagName !== "undefined" ) {
1272				return context.getElementsByTagName( tag );
1273
1274			// DocumentFragment nodes don't have gEBTN
1275			} else if ( support.qsa ) {
1276				return context.querySelectorAll( tag );
1277			}
1278		} :
1279
1280		function( tag, context ) {
1281			var elem,
1282				tmp = [],
1283				i = 0,
1284
1285				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
1286				results = context.getElementsByTagName( tag );
1287
1288			// Filter out possible comments
1289			if ( tag === "*" ) {
1290				while ( ( elem = results[ i++ ] ) ) {
1291					if ( elem.nodeType === 1 ) {
1292						tmp.push( elem );
1293					}
1294				}
1295
1296				return tmp;
1297			}
1298			return results;
1299		};
1300
1301	// Class
1302	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
1303		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
1304			return context.getElementsByClassName( className );
1305		}
1306	};
1307
1308	/* QSA/matchesSelector
1309	---------------------------------------------------------------------- */
1310
1311	// QSA and matchesSelector support
1312
1313	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
1314	rbuggyMatches = [];
1315
1316	// qSa(:focus) reports false when true (Chrome 21)
1317	// We allow this because of a bug in IE8/9 that throws an error
1318	// whenever `document.activeElement` is accessed on an iframe
1319	// So, we allow :focus to pass through QSA all the time to avoid the IE error
1320	// See https://bugs.jquery.com/ticket/13378
1321	rbuggyQSA = [];
1322
1323	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
1324
1325		// Build QSA regex
1326		// Regex strategy adopted from Diego Perini
1327		assert( function( el ) {
1328
1329			var input;
1330
1331			// Select is set to empty string on purpose
1332			// This is to test IE's treatment of not explicitly
1333			// setting a boolean content attribute,
1334			// since its presence should be enough
1335			// https://bugs.jquery.com/ticket/12359
1336			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
1337				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
1338				"<option selected=''></option></select>";
1339
1340			// Support: IE8, Opera 11-12.16
1341			// Nothing should be selected when empty strings follow ^= or $= or *=
1342			// The test attribute must be unknown in Opera but "safe" for WinRT
1343			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
1344			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
1345				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
1346			}
1347
1348			// Support: IE8
1349			// Boolean attributes and "value" are not treated correctly
1350			if ( !el.querySelectorAll( "[selected]" ).length ) {
1351				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1352			}
1353
1354			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
1355			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1356				rbuggyQSA.push( "~=" );
1357			}
1358
1359			// Support: IE 11+, Edge 15 - 18+
1360			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
1361			// Adding a temporary attribute to the document before the selection works
1362			// around the issue.
1363			// Interestingly, IE 10 & older don't seem to have the issue.
1364			input = document.createElement( "input" );
1365			input.setAttribute( "name", "" );
1366			el.appendChild( input );
1367			if ( !el.querySelectorAll( "[name='']" ).length ) {
1368				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
1369					whitespace + "*(?:''|\"\")" );
1370			}
1371
1372			// Webkit/Opera - :checked should return selected option elements
1373			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1374			// IE8 throws error here and will not see later tests
1375			if ( !el.querySelectorAll( ":checked" ).length ) {
1376				rbuggyQSA.push( ":checked" );
1377			}
1378
1379			// Support: Safari 8+, iOS 8+
1380			// https://bugs.webkit.org/show_bug.cgi?id=136851
1381			// In-page `selector#id sibling-combinator selector` fails
1382			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
1383				rbuggyQSA.push( ".#.+[+~]" );
1384			}
1385
1386			// Support: Firefox <=3.6 - 5 only
1387			// Old Firefox doesn't throw on a badly-escaped identifier.
1388			el.querySelectorAll( "\\\f" );
1389			rbuggyQSA.push( "[\\r\\n\\f]" );
1390		} );
1391
1392		assert( function( el ) {
1393			el.innerHTML = "<a href='' disabled='disabled'></a>" +
1394				"<select disabled='disabled'><option/></select>";
1395
1396			// Support: Windows 8 Native Apps
1397			// The type and name attributes are restricted during .innerHTML assignment
1398			var input = document.createElement( "input" );
1399			input.setAttribute( "type", "hidden" );
1400			el.appendChild( input ).setAttribute( "name", "D" );
1401
1402			// Support: IE8
1403			// Enforce case-sensitivity of name attribute
1404			if ( el.querySelectorAll( "[name=d]" ).length ) {
1405				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
1406			}
1407
1408			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
1409			// IE8 throws error here and will not see later tests
1410			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
1411				rbuggyQSA.push( ":enabled", ":disabled" );
1412			}
1413
1414			// Support: IE9-11+
1415			// IE's :disabled selector does not pick up the children of disabled fieldsets
1416			docElem.appendChild( el ).disabled = true;
1417			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
1418				rbuggyQSA.push( ":enabled", ":disabled" );
1419			}
1420
1421			// Support: Opera 10 - 11 only
1422			// Opera 10-11 does not throw on post-comma invalid pseudos
1423			el.querySelectorAll( "*,:x" );
1424			rbuggyQSA.push( ",.*:" );
1425		} );
1426	}
1427
1428	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
1429		docElem.webkitMatchesSelector ||
1430		docElem.mozMatchesSelector ||
1431		docElem.oMatchesSelector ||
1432		docElem.msMatchesSelector ) ) ) ) {
1433
1434		assert( function( el ) {
1435
1436			// Check to see if it's possible to do matchesSelector
1437			// on a disconnected node (IE 9)
1438			support.disconnectedMatch = matches.call( el, "*" );
1439
1440			// This should fail with an exception
1441			// Gecko does not error, returns false instead
1442			matches.call( el, "[s!='']:x" );
1443			rbuggyMatches.push( "!=", pseudos );
1444		} );
1445	}
1446
1447	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
1448	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
1449
1450	/* Contains
1451	---------------------------------------------------------------------- */
1452	hasCompare = rnative.test( docElem.compareDocumentPosition );
1453
1454	// Element contains another
1455	// Purposefully self-exclusive
1456	// As in, an element does not contain itself
1457	contains = hasCompare || rnative.test( docElem.contains ) ?
1458		function( a, b ) {
1459			var adown = a.nodeType === 9 ? a.documentElement : a,
1460				bup = b && b.parentNode;
1461			return a === bup || !!( bup && bup.nodeType === 1 && (
1462				adown.contains ?
1463					adown.contains( bup ) :
1464					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1465			) );
1466		} :
1467		function( a, b ) {
1468			if ( b ) {
1469				while ( ( b = b.parentNode ) ) {
1470					if ( b === a ) {
1471						return true;
1472					}
1473				}
1474			}
1475			return false;
1476		};
1477
1478	/* Sorting
1479	---------------------------------------------------------------------- */
1480
1481	// Document order sorting
1482	sortOrder = hasCompare ?
1483	function( a, b ) {
1484
1485		// Flag for duplicate removal
1486		if ( a === b ) {
1487			hasDuplicate = true;
1488			return 0;
1489		}
1490
1491		// Sort on method existence if only one input has compareDocumentPosition
1492		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
1493		if ( compare ) {
1494			return compare;
1495		}
1496
1497		// Calculate position if both inputs belong to the same document
1498		// Support: IE 11+, Edge 17 - 18+
1499		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1500		// two documents; shallow comparisons work.
1501		// eslint-disable-next-line eqeqeq
1502		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
1503			a.compareDocumentPosition( b ) :
1504
1505			// Otherwise we know they are disconnected
1506			1;
1507
1508		// Disconnected nodes
1509		if ( compare & 1 ||
1510			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
1511
1512			// Choose the first element that is related to our preferred document
1513			// Support: IE 11+, Edge 17 - 18+
1514			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1515			// two documents; shallow comparisons work.
1516			// eslint-disable-next-line eqeqeq
1517			if ( a == document || a.ownerDocument == preferredDoc &&
1518				contains( preferredDoc, a ) ) {
1519				return -1;
1520			}
1521
1522			// Support: IE 11+, Edge 17 - 18+
1523			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1524			// two documents; shallow comparisons work.
1525			// eslint-disable-next-line eqeqeq
1526			if ( b == document || b.ownerDocument == preferredDoc &&
1527				contains( preferredDoc, b ) ) {
1528				return 1;
1529			}
1530
1531			// Maintain original order
1532			return sortInput ?
1533				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1534				0;
1535		}
1536
1537		return compare & 4 ? -1 : 1;
1538	} :
1539	function( a, b ) {
1540
1541		// Exit early if the nodes are identical
1542		if ( a === b ) {
1543			hasDuplicate = true;
1544			return 0;
1545		}
1546
1547		var cur,
1548			i = 0,
1549			aup = a.parentNode,
1550			bup = b.parentNode,
1551			ap = [ a ],
1552			bp = [ b ];
1553
1554		// Parentless nodes are either documents or disconnected
1555		if ( !aup || !bup ) {
1556
1557			// Support: IE 11+, Edge 17 - 18+
1558			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1559			// two documents; shallow comparisons work.
1560			/* eslint-disable eqeqeq */
1561			return a == document ? -1 :
1562				b == document ? 1 :
1563				/* eslint-enable eqeqeq */
1564				aup ? -1 :
1565				bup ? 1 :
1566				sortInput ?
1567				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1568				0;
1569
1570		// If the nodes are siblings, we can do a quick check
1571		} else if ( aup === bup ) {
1572			return siblingCheck( a, b );
1573		}
1574
1575		// Otherwise we need full lists of their ancestors for comparison
1576		cur = a;
1577		while ( ( cur = cur.parentNode ) ) {
1578			ap.unshift( cur );
1579		}
1580		cur = b;
1581		while ( ( cur = cur.parentNode ) ) {
1582			bp.unshift( cur );
1583		}
1584
1585		// Walk down the tree looking for a discrepancy
1586		while ( ap[ i ] === bp[ i ] ) {
1587			i++;
1588		}
1589
1590		return i ?
1591
1592			// Do a sibling check if the nodes have a common ancestor
1593			siblingCheck( ap[ i ], bp[ i ] ) :
1594
1595			// Otherwise nodes in our document sort first
1596			// Support: IE 11+, Edge 17 - 18+
1597			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1598			// two documents; shallow comparisons work.
1599			/* eslint-disable eqeqeq */
1600			ap[ i ] == preferredDoc ? -1 :
1601			bp[ i ] == preferredDoc ? 1 :
1602			/* eslint-enable eqeqeq */
1603			0;
1604	};
1605
1606	return document;
1607};
1608
1609Sizzle.matches = function( expr, elements ) {
1610	return Sizzle( expr, null, null, elements );
1611};
1612
1613Sizzle.matchesSelector = function( elem, expr ) {
1614	setDocument( elem );
1615
1616	if ( support.matchesSelector && documentIsHTML &&
1617		!nonnativeSelectorCache[ expr + " " ] &&
1618		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
1619		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
1620
1621		try {
1622			var ret = matches.call( elem, expr );
1623
1624			// IE 9's matchesSelector returns false on disconnected nodes
1625			if ( ret || support.disconnectedMatch ||
1626
1627				// As well, disconnected nodes are said to be in a document
1628				// fragment in IE 9
1629				elem.document && elem.document.nodeType !== 11 ) {
1630				return ret;
1631			}
1632		} catch ( e ) {
1633			nonnativeSelectorCache( expr, true );
1634		}
1635	}
1636
1637	return Sizzle( expr, document, null, [ elem ] ).length > 0;
1638};
1639
1640Sizzle.contains = function( context, elem ) {
1641
1642	// Set document vars if needed
1643	// Support: IE 11+, Edge 17 - 18+
1644	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1645	// two documents; shallow comparisons work.
1646	// eslint-disable-next-line eqeqeq
1647	if ( ( context.ownerDocument || context ) != document ) {
1648		setDocument( context );
1649	}
1650	return contains( context, elem );
1651};
1652
1653Sizzle.attr = function( elem, name ) {
1654
1655	// Set document vars if needed
1656	// Support: IE 11+, Edge 17 - 18+
1657	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1658	// two documents; shallow comparisons work.
1659	// eslint-disable-next-line eqeqeq
1660	if ( ( elem.ownerDocument || elem ) != document ) {
1661		setDocument( elem );
1662	}
1663
1664	var fn = Expr.attrHandle[ name.toLowerCase() ],
1665
1666		// Don't get fooled by Object.prototype properties (jQuery #13807)
1667		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
1668			fn( elem, name, !documentIsHTML ) :
1669			undefined;
1670
1671	return val !== undefined ?
1672		val :
1673		support.attributes || !documentIsHTML ?
1674			elem.getAttribute( name ) :
1675			( val = elem.getAttributeNode( name ) ) && val.specified ?
1676				val.value :
1677				null;
1678};
1679
1680Sizzle.escape = function( sel ) {
1681	return ( sel + "" ).replace( rcssescape, fcssescape );
1682};
1683
1684Sizzle.error = function( msg ) {
1685	throw new Error( "Syntax error, unrecognized expression: " + msg );
1686};
1687
1688/**
1689 * Document sorting and removing duplicates
1690 * @param {ArrayLike} results
1691 */
1692Sizzle.uniqueSort = function( results ) {
1693	var elem,
1694		duplicates = [],
1695		j = 0,
1696		i = 0;
1697
1698	// Unless we *know* we can detect duplicates, assume their presence
1699	hasDuplicate = !support.detectDuplicates;
1700	sortInput = !support.sortStable && results.slice( 0 );
1701	results.sort( sortOrder );
1702
1703	if ( hasDuplicate ) {
1704		while ( ( elem = results[ i++ ] ) ) {
1705			if ( elem === results[ i ] ) {
1706				j = duplicates.push( i );
1707			}
1708		}
1709		while ( j-- ) {
1710			results.splice( duplicates[ j ], 1 );
1711		}
1712	}
1713
1714	// Clear input after sorting to release objects
1715	// See https://github.com/jquery/sizzle/pull/225
1716	sortInput = null;
1717
1718	return results;
1719};
1720
1721/**
1722 * Utility function for retrieving the text value of an array of DOM nodes
1723 * @param {Array|Element} elem
1724 */
1725getText = Sizzle.getText = function( elem ) {
1726	var node,
1727		ret = "",
1728		i = 0,
1729		nodeType = elem.nodeType;
1730
1731	if ( !nodeType ) {
1732
1733		// If no nodeType, this is expected to be an array
1734		while ( ( node = elem[ i++ ] ) ) {
1735
1736			// Do not traverse comment nodes
1737			ret += getText( node );
1738		}
1739	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1740
1741		// Use textContent for elements
1742		// innerText usage removed for consistency of new lines (jQuery #11153)
1743		if ( typeof elem.textContent === "string" ) {
1744			return elem.textContent;
1745		} else {
1746
1747			// Traverse its children
1748			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1749				ret += getText( elem );
1750			}
1751		}
1752	} else if ( nodeType === 3 || nodeType === 4 ) {
1753		return elem.nodeValue;
1754	}
1755
1756	// Do not include comment or processing instruction nodes
1757
1758	return ret;
1759};
1760
1761Expr = Sizzle.selectors = {
1762
1763	// Can be adjusted by the user
1764	cacheLength: 50,
1765
1766	createPseudo: markFunction,
1767
1768	match: matchExpr,
1769
1770	attrHandle: {},
1771
1772	find: {},
1773
1774	relative: {
1775		">": { dir: "parentNode", first: true },
1776		" ": { dir: "parentNode" },
1777		"+": { dir: "previousSibling", first: true },
1778		"~": { dir: "previousSibling" }
1779	},
1780
1781	preFilter: {
1782		"ATTR": function( match ) {
1783			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
1784
1785			// Move the given value to match[3] whether quoted or unquoted
1786			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
1787				match[ 5 ] || "" ).replace( runescape, funescape );
1788
1789			if ( match[ 2 ] === "~=" ) {
1790				match[ 3 ] = " " + match[ 3 ] + " ";
1791			}
1792
1793			return match.slice( 0, 4 );
1794		},
1795
1796		"CHILD": function( match ) {
1797
1798			/* matches from matchExpr["CHILD"]
1799				1 type (only|nth|...)
1800				2 what (child|of-type)
1801				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
1802				4 xn-component of xn+y argument ([+-]?\d*n|)
1803				5 sign of xn-component
1804				6 x of xn-component
1805				7 sign of y-component
1806				8 y of y-component
1807			*/
1808			match[ 1 ] = match[ 1 ].toLowerCase();
1809
1810			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
1811
1812				// nth-* requires argument
1813				if ( !match[ 3 ] ) {
1814					Sizzle.error( match[ 0 ] );
1815				}
1816
1817				// numeric x and y parameters for Expr.filter.CHILD
1818				// remember that false/true cast respectively to 0/1
1819				match[ 4 ] = +( match[ 4 ] ?
1820					match[ 5 ] + ( match[ 6 ] || 1 ) :
1821					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
1822				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
1823
1824				// other types prohibit arguments
1825			} else if ( match[ 3 ] ) {
1826				Sizzle.error( match[ 0 ] );
1827			}
1828
1829			return match;
1830		},
1831
1832		"PSEUDO": function( match ) {
1833			var excess,
1834				unquoted = !match[ 6 ] && match[ 2 ];
1835
1836			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
1837				return null;
1838			}
1839
1840			// Accept quoted arguments as-is
1841			if ( match[ 3 ] ) {
1842				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
1843
1844			// Strip excess characters from unquoted arguments
1845			} else if ( unquoted && rpseudo.test( unquoted ) &&
1846
1847				// Get excess from tokenize (recursively)
1848				( excess = tokenize( unquoted, true ) ) &&
1849
1850				// advance to the next closing parenthesis
1851				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
1852
1853				// excess is a negative index
1854				match[ 0 ] = match[ 0 ].slice( 0, excess );
1855				match[ 2 ] = unquoted.slice( 0, excess );
1856			}
1857
1858			// Return only captures needed by the pseudo filter method (type and argument)
1859			return match.slice( 0, 3 );
1860		}
1861	},
1862
1863	filter: {
1864
1865		"TAG": function( nodeNameSelector ) {
1866			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1867			return nodeNameSelector === "*" ?
1868				function() {
1869					return true;
1870				} :
1871				function( elem ) {
1872					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
1873				};
1874		},
1875
1876		"CLASS": function( className ) {
1877			var pattern = classCache[ className + " " ];
1878
1879			return pattern ||
1880				( pattern = new RegExp( "(^|" + whitespace +
1881					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
1882						className, function( elem ) {
1883							return pattern.test(
1884								typeof elem.className === "string" && elem.className ||
1885								typeof elem.getAttribute !== "undefined" &&
1886									elem.getAttribute( "class" ) ||
1887								""
1888							);
1889				} );
1890		},
1891
1892		"ATTR": function( name, operator, check ) {
1893			return function( elem ) {
1894				var result = Sizzle.attr( elem, name );
1895
1896				if ( result == null ) {
1897					return operator === "!=";
1898				}
1899				if ( !operator ) {
1900					return true;
1901				}
1902
1903				result += "";
1904
1905				/* eslint-disable max-len */
1906
1907				return operator === "=" ? result === check :
1908					operator === "!=" ? result !== check :
1909					operator === "^=" ? check && result.indexOf( check ) === 0 :
1910					operator === "*=" ? check && result.indexOf( check ) > -1 :
1911					operator === "$=" ? check && result.slice( -check.length ) === check :
1912					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
1913					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
1914					false;
1915				/* eslint-enable max-len */
1916
1917			};
1918		},
1919
1920		"CHILD": function( type, what, _argument, first, last ) {
1921			var simple = type.slice( 0, 3 ) !== "nth",
1922				forward = type.slice( -4 ) !== "last",
1923				ofType = what === "of-type";
1924
1925			return first === 1 && last === 0 ?
1926
1927				// Shortcut for :nth-*(n)
1928				function( elem ) {
1929					return !!elem.parentNode;
1930				} :
1931
1932				function( elem, _context, xml ) {
1933					var cache, uniqueCache, outerCache, node, nodeIndex, start,
1934						dir = simple !== forward ? "nextSibling" : "previousSibling",
1935						parent = elem.parentNode,
1936						name = ofType && elem.nodeName.toLowerCase(),
1937						useCache = !xml && !ofType,
1938						diff = false;
1939
1940					if ( parent ) {
1941
1942						// :(first|last|only)-(child|of-type)
1943						if ( simple ) {
1944							while ( dir ) {
1945								node = elem;
1946								while ( ( node = node[ dir ] ) ) {
1947									if ( ofType ?
1948										node.nodeName.toLowerCase() === name :
1949										node.nodeType === 1 ) {
1950
1951										return false;
1952									}
1953								}
1954
1955								// Reverse direction for :only-* (if we haven't yet done so)
1956								start = dir = type === "only" && !start && "nextSibling";
1957							}
1958							return true;
1959						}
1960
1961						start = [ forward ? parent.firstChild : parent.lastChild ];
1962
1963						// non-xml :nth-child(...) stores cache data on `parent`
1964						if ( forward && useCache ) {
1965
1966							// Seek `elem` from a previously-cached index
1967
1968							// ...in a gzip-friendly way
1969							node = parent;
1970							outerCache = node[ expando ] || ( node[ expando ] = {} );
1971
1972							// Support: IE <9 only
1973							// Defend against cloned attroperties (jQuery gh-1709)
1974							uniqueCache = outerCache[ node.uniqueID ] ||
1975								( outerCache[ node.uniqueID ] = {} );
1976
1977							cache = uniqueCache[ type ] || [];
1978							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1979							diff = nodeIndex && cache[ 2 ];
1980							node = nodeIndex && parent.childNodes[ nodeIndex ];
1981
1982							while ( ( node = ++nodeIndex && node && node[ dir ] ||
1983
1984								// Fallback to seeking `elem` from the start
1985								( diff = nodeIndex = 0 ) || start.pop() ) ) {
1986
1987								// When found, cache indexes on `parent` and break
1988								if ( node.nodeType === 1 && ++diff && node === elem ) {
1989									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
1990									break;
1991								}
1992							}
1993
1994						} else {
1995
1996							// Use previously-cached element index if available
1997							if ( useCache ) {
1998
1999								// ...in a gzip-friendly way
2000								node = elem;
2001								outerCache = node[ expando ] || ( node[ expando ] = {} );
2002
2003								// Support: IE <9 only
2004								// Defend against cloned attroperties (jQuery gh-1709)
2005								uniqueCache = outerCache[ node.uniqueID ] ||
2006									( outerCache[ node.uniqueID ] = {} );
2007
2008								cache = uniqueCache[ type ] || [];
2009								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
2010								diff = nodeIndex;
2011							}
2012
2013							// xml :nth-child(...)
2014							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
2015							if ( diff === false ) {
2016
2017								// Use the same loop as above to seek `elem` from the start
2018								while ( ( node = ++nodeIndex && node && node[ dir ] ||
2019									( diff = nodeIndex = 0 ) || start.pop() ) ) {
2020
2021									if ( ( ofType ?
2022										node.nodeName.toLowerCase() === name :
2023										node.nodeType === 1 ) &&
2024										++diff ) {
2025
2026										// Cache the index of each encountered element
2027										if ( useCache ) {
2028											outerCache = node[ expando ] ||
2029												( node[ expando ] = {} );
2030
2031											// Support: IE <9 only
2032											// Defend against cloned attroperties (jQuery gh-1709)
2033											uniqueCache = outerCache[ node.uniqueID ] ||
2034												( outerCache[ node.uniqueID ] = {} );
2035
2036											uniqueCache[ type ] = [ dirruns, diff ];
2037										}
2038
2039										if ( node === elem ) {
2040											break;
2041										}
2042									}
2043								}
2044							}
2045						}
2046
2047						// Incorporate the offset, then check against cycle size
2048						diff -= last;
2049						return diff === first || ( diff % first === 0 && diff / first >= 0 );
2050					}
2051				};
2052		},
2053
2054		"PSEUDO": function( pseudo, argument ) {
2055
2056			// pseudo-class names are case-insensitive
2057			// http://www.w3.org/TR/selectors/#pseudo-classes
2058			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
2059			// Remember that setFilters inherits from pseudos
2060			var args,
2061				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
2062					Sizzle.error( "unsupported pseudo: " + pseudo );
2063
2064			// The user may use createPseudo to indicate that
2065			// arguments are needed to create the filter function
2066			// just as Sizzle does
2067			if ( fn[ expando ] ) {
2068				return fn( argument );
2069			}
2070
2071			// But maintain support for old signatures
2072			if ( fn.length > 1 ) {
2073				args = [ pseudo, pseudo, "", argument ];
2074				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
2075					markFunction( function( seed, matches ) {
2076						var idx,
2077							matched = fn( seed, argument ),
2078							i = matched.length;
2079						while ( i-- ) {
2080							idx = indexOf( seed, matched[ i ] );
2081							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
2082						}
2083					} ) :
2084					function( elem ) {
2085						return fn( elem, 0, args );
2086					};
2087			}
2088
2089			return fn;
2090		}
2091	},
2092
2093	pseudos: {
2094
2095		// Potentially complex pseudos
2096		"not": markFunction( function( selector ) {
2097
2098			// Trim the selector passed to compile
2099			// to avoid treating leading and trailing
2100			// spaces as combinators
2101			var input = [],
2102				results = [],
2103				matcher = compile( selector.replace( rtrim, "$1" ) );
2104
2105			return matcher[ expando ] ?
2106				markFunction( function( seed, matches, _context, xml ) {
2107					var elem,
2108						unmatched = matcher( seed, null, xml, [] ),
2109						i = seed.length;
2110
2111					// Match elements unmatched by `matcher`
2112					while ( i-- ) {
2113						if ( ( elem = unmatched[ i ] ) ) {
2114							seed[ i ] = !( matches[ i ] = elem );
2115						}
2116					}
2117				} ) :
2118				function( elem, _context, xml ) {
2119					input[ 0 ] = elem;
2120					matcher( input, null, xml, results );
2121
2122					// Don't keep the element (issue #299)
2123					input[ 0 ] = null;
2124					return !results.pop();
2125				};
2126		} ),
2127
2128		"has": markFunction( function( selector ) {
2129			return function( elem ) {
2130				return Sizzle( selector, elem ).length > 0;
2131			};
2132		} ),
2133
2134		"contains": markFunction( function( text ) {
2135			text = text.replace( runescape, funescape );
2136			return function( elem ) {
2137				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
2138			};
2139		} ),
2140
2141		// "Whether an element is represented by a :lang() selector
2142		// is based solely on the element's language value
2143		// being equal to the identifier C,
2144		// or beginning with the identifier C immediately followed by "-".
2145		// The matching of C against the element's language value is performed case-insensitively.
2146		// The identifier C does not have to be a valid language name."
2147		// http://www.w3.org/TR/selectors/#lang-pseudo
2148		"lang": markFunction( function( lang ) {
2149
2150			// lang value must be a valid identifier
2151			if ( !ridentifier.test( lang || "" ) ) {
2152				Sizzle.error( "unsupported lang: " + lang );
2153			}
2154			lang = lang.replace( runescape, funescape ).toLowerCase();
2155			return function( elem ) {
2156				var elemLang;
2157				do {
2158					if ( ( elemLang = documentIsHTML ?
2159						elem.lang :
2160						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
2161
2162						elemLang = elemLang.toLowerCase();
2163						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
2164					}
2165				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
2166				return false;
2167			};
2168		} ),
2169
2170		// Miscellaneous
2171		"target": function( elem ) {
2172			var hash = window.location && window.location.hash;
2173			return hash && hash.slice( 1 ) === elem.id;
2174		},
2175
2176		"root": function( elem ) {
2177			return elem === docElem;
2178		},
2179
2180		"focus": function( elem ) {
2181			return elem === document.activeElement &&
2182				( !document.hasFocus || document.hasFocus() ) &&
2183				!!( elem.type || elem.href || ~elem.tabIndex );
2184		},
2185
2186		// Boolean properties
2187		"enabled": createDisabledPseudo( false ),
2188		"disabled": createDisabledPseudo( true ),
2189
2190		"checked": function( elem ) {
2191
2192			// In CSS3, :checked should return both checked and selected elements
2193			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2194			var nodeName = elem.nodeName.toLowerCase();
2195			return ( nodeName === "input" && !!elem.checked ) ||
2196				( nodeName === "option" && !!elem.selected );
2197		},
2198
2199		"selected": function( elem ) {
2200
2201			// Accessing this property makes selected-by-default
2202			// options in Safari work properly
2203			if ( elem.parentNode ) {
2204				// eslint-disable-next-line no-unused-expressions
2205				elem.parentNode.selectedIndex;
2206			}
2207
2208			return elem.selected === true;
2209		},
2210
2211		// Contents
2212		"empty": function( elem ) {
2213
2214			// http://www.w3.org/TR/selectors/#empty-pseudo
2215			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2216			//   but not by others (comment: 8; processing instruction: 7; etc.)
2217			// nodeType < 6 works because attributes (2) do not appear as children
2218			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
2219				if ( elem.nodeType < 6 ) {
2220					return false;
2221				}
2222			}
2223			return true;
2224		},
2225
2226		"parent": function( elem ) {
2227			return !Expr.pseudos[ "empty" ]( elem );
2228		},
2229
2230		// Element/input types
2231		"header": function( elem ) {
2232			return rheader.test( elem.nodeName );
2233		},
2234
2235		"input": function( elem ) {
2236			return rinputs.test( elem.nodeName );
2237		},
2238
2239		"button": function( elem ) {
2240			var name = elem.nodeName.toLowerCase();
2241			return name === "input" && elem.type === "button" || name === "button";
2242		},
2243
2244		"text": function( elem ) {
2245			var attr;
2246			return elem.nodeName.toLowerCase() === "input" &&
2247				elem.type === "text" &&
2248
2249				// Support: IE<8
2250				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
2251				( ( attr = elem.getAttribute( "type" ) ) == null ||
2252					attr.toLowerCase() === "text" );
2253		},
2254
2255		// Position-in-collection
2256		"first": createPositionalPseudo( function() {
2257			return [ 0 ];
2258		} ),
2259
2260		"last": createPositionalPseudo( function( _matchIndexes, length ) {
2261			return [ length - 1 ];
2262		} ),
2263
2264		"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
2265			return [ argument < 0 ? argument + length : argument ];
2266		} ),
2267
2268		"even": createPositionalPseudo( function( matchIndexes, length ) {
2269			var i = 0;
2270			for ( ; i < length; i += 2 ) {
2271				matchIndexes.push( i );
2272			}
2273			return matchIndexes;
2274		} ),
2275
2276		"odd": createPositionalPseudo( function( matchIndexes, length ) {
2277			var i = 1;
2278			for ( ; i < length; i += 2 ) {
2279				matchIndexes.push( i );
2280			}
2281			return matchIndexes;
2282		} ),
2283
2284		"lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
2285			var i = argument < 0 ?
2286				argument + length :
2287				argument > length ?
2288					length :
2289					argument;
2290			for ( ; --i >= 0; ) {
2291				matchIndexes.push( i );
2292			}
2293			return matchIndexes;
2294		} ),
2295
2296		"gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
2297			var i = argument < 0 ? argument + length : argument;
2298			for ( ; ++i < length; ) {
2299				matchIndexes.push( i );
2300			}
2301			return matchIndexes;
2302		} )
2303	}
2304};
2305
2306Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
2307
2308// Add button/input type pseudos
2309for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
2310	Expr.pseudos[ i ] = createInputPseudo( i );
2311}
2312for ( i in { submit: true, reset: true } ) {
2313	Expr.pseudos[ i ] = createButtonPseudo( i );
2314}
2315
2316// Easy API for creating new setFilters
2317function setFilters() {}
2318setFilters.prototype = Expr.filters = Expr.pseudos;
2319Expr.setFilters = new setFilters();
2320
2321tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2322	var matched, match, tokens, type,
2323		soFar, groups, preFilters,
2324		cached = tokenCache[ selector + " " ];
2325
2326	if ( cached ) {
2327		return parseOnly ? 0 : cached.slice( 0 );
2328	}
2329
2330	soFar = selector;
2331	groups = [];
2332	preFilters = Expr.preFilter;
2333
2334	while ( soFar ) {
2335
2336		// Comma and first run
2337		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
2338			if ( match ) {
2339
2340				// Don't consume trailing commas as valid
2341				soFar = soFar.slice( match[ 0 ].length ) || soFar;
2342			}
2343			groups.push( ( tokens = [] ) );
2344		}
2345
2346		matched = false;
2347
2348		// Combinators
2349		if ( ( match = rcombinators.exec( soFar ) ) ) {
2350			matched = match.shift();
2351			tokens.push( {
2352				value: matched,
2353
2354				// Cast descendant combinators to space
2355				type: match[ 0 ].replace( rtrim, " " )
2356			} );
2357			soFar = soFar.slice( matched.length );
2358		}
2359
2360		// Filters
2361		for ( type in Expr.filter ) {
2362			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
2363				( match = preFilters[ type ]( match ) ) ) ) {
2364				matched = match.shift();
2365				tokens.push( {
2366					value: matched,
2367					type: type,
2368					matches: match
2369				} );
2370				soFar = soFar.slice( matched.length );
2371			}
2372		}
2373
2374		if ( !matched ) {
2375			break;
2376		}
2377	}
2378
2379	// Return the length of the invalid excess
2380	// if we're just parsing
2381	// Otherwise, throw an error or return tokens
2382	return parseOnly ?
2383		soFar.length :
2384		soFar ?
2385			Sizzle.error( selector ) :
2386
2387			// Cache the tokens
2388			tokenCache( selector, groups ).slice( 0 );
2389};
2390
2391function toSelector( tokens ) {
2392	var i = 0,
2393		len = tokens.length,
2394		selector = "";
2395	for ( ; i < len; i++ ) {
2396		selector += tokens[ i ].value;
2397	}
2398	return selector;
2399}
2400
2401function addCombinator( matcher, combinator, base ) {
2402	var dir = combinator.dir,
2403		skip = combinator.next,
2404		key = skip || dir,
2405		checkNonElements = base && key === "parentNode",
2406		doneName = done++;
2407
2408	return combinator.first ?
2409
2410		// Check against closest ancestor/preceding element
2411		function( elem, context, xml ) {
2412			while ( ( elem = elem[ dir ] ) ) {
2413				if ( elem.nodeType === 1 || checkNonElements ) {
2414					return matcher( elem, context, xml );
2415				}
2416			}
2417			return false;
2418		} :
2419
2420		// Check against all ancestor/preceding elements
2421		function( elem, context, xml ) {
2422			var oldCache, uniqueCache, outerCache,
2423				newCache = [ dirruns, doneName ];
2424
2425			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
2426			if ( xml ) {
2427				while ( ( elem = elem[ dir ] ) ) {
2428					if ( elem.nodeType === 1 || checkNonElements ) {
2429						if ( matcher( elem, context, xml ) ) {
2430							return true;
2431						}
2432					}
2433				}
2434			} else {
2435				while ( ( elem = elem[ dir ] ) ) {
2436					if ( elem.nodeType === 1 || checkNonElements ) {
2437						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
2438
2439						// Support: IE <9 only
2440						// Defend against cloned attroperties (jQuery gh-1709)
2441						uniqueCache = outerCache[ elem.uniqueID ] ||
2442							( outerCache[ elem.uniqueID ] = {} );
2443
2444						if ( skip && skip === elem.nodeName.toLowerCase() ) {
2445							elem = elem[ dir ] || elem;
2446						} else if ( ( oldCache = uniqueCache[ key ] ) &&
2447							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2448
2449							// Assign to newCache so results back-propagate to previous elements
2450							return ( newCache[ 2 ] = oldCache[ 2 ] );
2451						} else {
2452
2453							// Reuse newcache so results back-propagate to previous elements
2454							uniqueCache[ key ] = newCache;
2455
2456							// A match means we're done; a fail means we have to keep checking
2457							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
2458								return true;
2459							}
2460						}
2461					}
2462				}
2463			}
2464			return false;
2465		};
2466}
2467
2468function elementMatcher( matchers ) {
2469	return matchers.length > 1 ?
2470		function( elem, context, xml ) {
2471			var i = matchers.length;
2472			while ( i-- ) {
2473				if ( !matchers[ i ]( elem, context, xml ) ) {
2474					return false;
2475				}
2476			}
2477			return true;
2478		} :
2479		matchers[ 0 ];
2480}
2481
2482function multipleContexts( selector, contexts, results ) {
2483	var i = 0,
2484		len = contexts.length;
2485	for ( ; i < len; i++ ) {
2486		Sizzle( selector, contexts[ i ], results );
2487	}
2488	return results;
2489}
2490
2491function condense( unmatched, map, filter, context, xml ) {
2492	var elem,
2493		newUnmatched = [],
2494		i = 0,
2495		len = unmatched.length,
2496		mapped = map != null;
2497
2498	for ( ; i < len; i++ ) {
2499		if ( ( elem = unmatched[ i ] ) ) {
2500			if ( !filter || filter( elem, context, xml ) ) {
2501				newUnmatched.push( elem );
2502				if ( mapped ) {
2503					map.push( i );
2504				}
2505			}
2506		}
2507	}
2508
2509	return newUnmatched;
2510}
2511
2512function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
2513	if ( postFilter && !postFilter[ expando ] ) {
2514		postFilter = setMatcher( postFilter );
2515	}
2516	if ( postFinder && !postFinder[ expando ] ) {
2517		postFinder = setMatcher( postFinder, postSelector );
2518	}
2519	return markFunction( function( seed, results, context, xml ) {
2520		var temp, i, elem,
2521			preMap = [],
2522			postMap = [],
2523			preexisting = results.length,
2524
2525			// Get initial elements from seed or context
2526			elems = seed || multipleContexts(
2527				selector || "*",
2528				context.nodeType ? [ context ] : context,
2529				[]
2530			),
2531
2532			// Prefilter to get matcher input, preserving a map for seed-results synchronization
2533			matcherIn = preFilter && ( seed || !selector ) ?
2534				condense( elems, preMap, preFilter, context, xml ) :
2535				elems,
2536
2537			matcherOut = matcher ?
2538
2539				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2540				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2541
2542					// ...intermediate processing is necessary
2543					[] :
2544
2545					// ...otherwise use results directly
2546					results :
2547				matcherIn;
2548
2549		// Find primary matches
2550		if ( matcher ) {
2551			matcher( matcherIn, matcherOut, context, xml );
2552		}
2553
2554		// Apply postFilter
2555		if ( postFilter ) {
2556			temp = condense( matcherOut, postMap );
2557			postFilter( temp, [], context, xml );
2558
2559			// Un-match failing elements by moving them back to matcherIn
2560			i = temp.length;
2561			while ( i-- ) {
2562				if ( ( elem = temp[ i ] ) ) {
2563					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
2564				}
2565			}
2566		}
2567
2568		if ( seed ) {
2569			if ( postFinder || preFilter ) {
2570				if ( postFinder ) {
2571
2572					// Get the final matcherOut by condensing this intermediate into postFinder contexts
2573					temp = [];
2574					i = matcherOut.length;
2575					while ( i-- ) {
2576						if ( ( elem = matcherOut[ i ] ) ) {
2577
2578							// Restore matcherIn since elem is not yet a final match
2579							temp.push( ( matcherIn[ i ] = elem ) );
2580						}
2581					}
2582					postFinder( null, ( matcherOut = [] ), temp, xml );
2583				}
2584
2585				// Move matched elements from seed to results to keep them synchronized
2586				i = matcherOut.length;
2587				while ( i-- ) {
2588					if ( ( elem = matcherOut[ i ] ) &&
2589						( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
2590
2591						seed[ temp ] = !( results[ temp ] = elem );
2592					}
2593				}
2594			}
2595
2596		// Add elements to results, through postFinder if defined
2597		} else {
2598			matcherOut = condense(
2599				matcherOut === results ?
2600					matcherOut.splice( preexisting, matcherOut.length ) :
2601					matcherOut
2602			);
2603			if ( postFinder ) {
2604				postFinder( null, results, matcherOut, xml );
2605			} else {
2606				push.apply( results, matcherOut );
2607			}
2608		}
2609	} );
2610}
2611
2612function matcherFromTokens( tokens ) {
2613	var checkContext, matcher, j,
2614		len = tokens.length,
2615		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
2616		implicitRelative = leadingRelative || Expr.relative[ " " ],
2617		i = leadingRelative ? 1 : 0,
2618
2619		// The foundational matcher ensures that elements are reachable from top-level context(s)
2620		matchContext = addCombinator( function( elem ) {
2621			return elem === checkContext;
2622		}, implicitRelative, true ),
2623		matchAnyContext = addCombinator( function( elem ) {
2624			return indexOf( checkContext, elem ) > -1;
2625		}, implicitRelative, true ),
2626		matchers = [ function( elem, context, xml ) {
2627			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
2628				( checkContext = context ).nodeType ?
2629					matchContext( elem, context, xml ) :
2630					matchAnyContext( elem, context, xml ) );
2631
2632			// Avoid hanging onto element (issue #299)
2633			checkContext = null;
2634			return ret;
2635		} ];
2636
2637	for ( ; i < len; i++ ) {
2638		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
2639			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
2640		} else {
2641			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
2642
2643			// Return special upon seeing a positional matcher
2644			if ( matcher[ expando ] ) {
2645
2646				// Find the next relative operator (if any) for proper handling
2647				j = ++i;
2648				for ( ; j < len; j++ ) {
2649					if ( Expr.relative[ tokens[ j ].type ] ) {
2650						break;
2651					}
2652				}
2653				return setMatcher(
2654					i > 1 && elementMatcher( matchers ),
2655					i > 1 && toSelector(
2656
2657					// If the preceding token was a descendant combinator, insert an implicit any-element `*`
2658					tokens
2659						.slice( 0, i - 1 )
2660						.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
2661					).replace( rtrim, "$1" ),
2662					matcher,
2663					i < j && matcherFromTokens( tokens.slice( i, j ) ),
2664					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
2665					j < len && toSelector( tokens )
2666				);
2667			}
2668			matchers.push( matcher );
2669		}
2670	}
2671
2672	return elementMatcher( matchers );
2673}
2674
2675function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2676	var bySet = setMatchers.length > 0,
2677		byElement = elementMatchers.length > 0,
2678		superMatcher = function( seed, context, xml, results, outermost ) {
2679			var elem, j, matcher,
2680				matchedCount = 0,
2681				i = "0",
2682				unmatched = seed && [],
2683				setMatched = [],
2684				contextBackup = outermostContext,
2685
2686				// We must always have either seed elements or outermost context
2687				elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
2688
2689				// Use integer dirruns iff this is the outermost matcher
2690				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
2691				len = elems.length;
2692
2693			if ( outermost ) {
2694
2695				// Support: IE 11+, Edge 17 - 18+
2696				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2697				// two documents; shallow comparisons work.
2698				// eslint-disable-next-line eqeqeq
2699				outermostContext = context == document || context || outermost;
2700			}
2701
2702			// Add elements passing elementMatchers directly to results
2703			// Support: IE<9, Safari
2704			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
2705			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
2706				if ( byElement && elem ) {
2707					j = 0;
2708
2709					// Support: IE 11+, Edge 17 - 18+
2710					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2711					// two documents; shallow comparisons work.
2712					// eslint-disable-next-line eqeqeq
2713					if ( !context && elem.ownerDocument != document ) {
2714						setDocument( elem );
2715						xml = !documentIsHTML;
2716					}
2717					while ( ( matcher = elementMatchers[ j++ ] ) ) {
2718						if ( matcher( elem, context || document, xml ) ) {
2719							results.push( elem );
2720							break;
2721						}
2722					}
2723					if ( outermost ) {
2724						dirruns = dirrunsUnique;
2725					}
2726				}
2727
2728				// Track unmatched elements for set filters
2729				if ( bySet ) {
2730
2731					// They will have gone through all possible matchers
2732					if ( ( elem = !matcher && elem ) ) {
2733						matchedCount--;
2734					}
2735
2736					// Lengthen the array for every element, matched or not
2737					if ( seed ) {
2738						unmatched.push( elem );
2739					}
2740				}
2741			}
2742
2743			// `i` is now the count of elements visited above, and adding it to `matchedCount`
2744			// makes the latter nonnegative.
2745			matchedCount += i;
2746
2747			// Apply set filters to unmatched elements
2748			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
2749			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
2750			// no element matchers and no seed.
2751			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
2752			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
2753			// numerically zero.
2754			if ( bySet && i !== matchedCount ) {
2755				j = 0;
2756				while ( ( matcher = setMatchers[ j++ ] ) ) {
2757					matcher( unmatched, setMatched, context, xml );
2758				}
2759
2760				if ( seed ) {
2761
2762					// Reintegrate element matches to eliminate the need for sorting
2763					if ( matchedCount > 0 ) {
2764						while ( i-- ) {
2765							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
2766								setMatched[ i ] = pop.call( results );
2767							}
2768						}
2769					}
2770
2771					// Discard index placeholder values to get only actual matches
2772					setMatched = condense( setMatched );
2773				}
2774
2775				// Add matches to results
2776				push.apply( results, setMatched );
2777
2778				// Seedless set matches succeeding multiple successful matchers stipulate sorting
2779				if ( outermost && !seed && setMatched.length > 0 &&
2780					( matchedCount + setMatchers.length ) > 1 ) {
2781
2782					Sizzle.uniqueSort( results );
2783				}
2784			}
2785
2786			// Override manipulation of globals by nested matchers
2787			if ( outermost ) {
2788				dirruns = dirrunsUnique;
2789				outermostContext = contextBackup;
2790			}
2791
2792			return unmatched;
2793		};
2794
2795	return bySet ?
2796		markFunction( superMatcher ) :
2797		superMatcher;
2798}
2799
2800compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2801	var i,
2802		setMatchers = [],
2803		elementMatchers = [],
2804		cached = compilerCache[ selector + " " ];
2805
2806	if ( !cached ) {
2807
2808		// Generate a function of recursive functions that can be used to check each element
2809		if ( !match ) {
2810			match = tokenize( selector );
2811		}
2812		i = match.length;
2813		while ( i-- ) {
2814			cached = matcherFromTokens( match[ i ] );
2815			if ( cached[ expando ] ) {
2816				setMatchers.push( cached );
2817			} else {
2818				elementMatchers.push( cached );
2819			}
2820		}
2821
2822		// Cache the compiled function
2823		cached = compilerCache(
2824			selector,
2825			matcherFromGroupMatchers( elementMatchers, setMatchers )
2826		);
2827
2828		// Save selector and tokenization
2829		cached.selector = selector;
2830	}
2831	return cached;
2832};
2833
2834/**
2835 * A low-level selection function that works with Sizzle's compiled
2836 *  selector functions
2837 * @param {String|Function} selector A selector or a pre-compiled
2838 *  selector function built with Sizzle.compile
2839 * @param {Element} context
2840 * @param {Array} [results]
2841 * @param {Array} [seed] A set of elements to match against
2842 */
2843select = Sizzle.select = function( selector, context, results, seed ) {
2844	var i, tokens, token, type, find,
2845		compiled = typeof selector === "function" && selector,
2846		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
2847
2848	results = results || [];
2849
2850	// Try to minimize operations if there is only one selector in the list and no seed
2851	// (the latter of which guarantees us context)
2852	if ( match.length === 1 ) {
2853
2854		// Reduce context if the leading compound selector is an ID
2855		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
2856		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
2857			context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
2858
2859			context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
2860				.replace( runescape, funescape ), context ) || [] )[ 0 ];
2861			if ( !context ) {
2862				return results;
2863
2864			// Precompiled matchers will still verify ancestry, so step up a level
2865			} else if ( compiled ) {
2866				context = context.parentNode;
2867			}
2868
2869			selector = selector.slice( tokens.shift().value.length );
2870		}
2871
2872		// Fetch a seed set for right-to-left matching
2873		i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
2874		while ( i-- ) {
2875			token = tokens[ i ];
2876
2877			// Abort if we hit a combinator
2878			if ( Expr.relative[ ( type = token.type ) ] ) {
2879				break;
2880			}
2881			if ( ( find = Expr.find[ type ] ) ) {
2882
2883				// Search, expanding context for leading sibling combinators
2884				if ( ( seed = find(
2885					token.matches[ 0 ].replace( runescape, funescape ),
2886					rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
2887						context
2888				) ) ) {
2889
2890					// If seed is empty or no tokens remain, we can return early
2891					tokens.splice( i, 1 );
2892					selector = seed.length && toSelector( tokens );
2893					if ( !selector ) {
2894						push.apply( results, seed );
2895						return results;
2896					}
2897
2898					break;
2899				}
2900			}
2901		}
2902	}
2903
2904	// Compile and execute a filtering function if one is not provided
2905	// Provide `match` to avoid retokenization if we modified the selector above
2906	( compiled || compile( selector, match ) )(
2907		seed,
2908		context,
2909		!documentIsHTML,
2910		results,
2911		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
2912	);
2913	return results;
2914};
2915
2916// One-time assignments
2917
2918// Sort stability
2919support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
2920
2921// Support: Chrome 14-35+
2922// Always assume duplicates if they aren't passed to the comparison function
2923support.detectDuplicates = !!hasDuplicate;
2924
2925// Initialize against the default document
2926setDocument();
2927
2928// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
2929// Detached nodes confoundingly follow *each other*
2930support.sortDetached = assert( function( el ) {
2931
2932	// Should return 1, but returns 4 (following)
2933	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
2934} );
2935
2936// Support: IE<8
2937// Prevent attribute/property "interpolation"
2938// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
2939if ( !assert( function( el ) {
2940	el.innerHTML = "<a href='#'></a>";
2941	return el.firstChild.getAttribute( "href" ) === "#";
2942} ) ) {
2943	addHandle( "type|href|height|width", function( elem, name, isXML ) {
2944		if ( !isXML ) {
2945			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
2946		}
2947	} );
2948}
2949
2950// Support: IE<9
2951// Use defaultValue in place of getAttribute("value")
2952if ( !support.attributes || !assert( function( el ) {
2953	el.innerHTML = "<input/>";
2954	el.firstChild.setAttribute( "value", "" );
2955	return el.firstChild.getAttribute( "value" ) === "";
2956} ) ) {
2957	addHandle( "value", function( elem, _name, isXML ) {
2958		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
2959			return elem.defaultValue;
2960		}
2961	} );
2962}
2963
2964// Support: IE<9
2965// Use getAttributeNode to fetch booleans when getAttribute lies
2966if ( !assert( function( el ) {
2967	return el.getAttribute( "disabled" ) == null;
2968} ) ) {
2969	addHandle( booleans, function( elem, name, isXML ) {
2970		var val;
2971		if ( !isXML ) {
2972			return elem[ name ] === true ? name.toLowerCase() :
2973				( val = elem.getAttributeNode( name ) ) && val.specified ?
2974					val.value :
2975					null;
2976		}
2977	} );
2978}
2979
2980return Sizzle;
2981
2982} )( window );
2983
2984
2985
2986jQuery.find = Sizzle;
2987jQuery.expr = Sizzle.selectors;
2988
2989// Deprecated
2990jQuery.expr[ ":" ] = jQuery.expr.pseudos;
2991jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
2992jQuery.text = Sizzle.getText;
2993jQuery.isXMLDoc = Sizzle.isXML;
2994jQuery.contains = Sizzle.contains;
2995jQuery.escapeSelector = Sizzle.escape;
2996
2997
2998
2999
3000var dir = function( elem, dir, until ) {
3001	var matched = [],
3002		truncate = until !== undefined;
3003
3004	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
3005		if ( elem.nodeType === 1 ) {
3006			if ( truncate && jQuery( elem ).is( until ) ) {
3007				break;
3008			}
3009			matched.push( elem );
3010		}
3011	}
3012	return matched;
3013};
3014
3015
3016var siblings = function( n, elem ) {
3017	var matched = [];
3018
3019	for ( ; n; n = n.nextSibling ) {
3020		if ( n.nodeType === 1 && n !== elem ) {
3021			matched.push( n );
3022		}
3023	}
3024
3025	return matched;
3026};
3027
3028
3029var rneedsContext = jQuery.expr.match.needsContext;
3030
3031
3032
3033function nodeName( elem, name ) {
3034
3035	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
3036
3037}
3038var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
3039
3040
3041
3042// Implement the identical functionality for filter and not
3043function winnow( elements, qualifier, not ) {
3044	if ( isFunction( qualifier ) ) {
3045		return jQuery.grep( elements, function( elem, i ) {
3046			return !!qualifier.call( elem, i, elem ) !== not;
3047		} );
3048	}
3049
3050	// Single element
3051	if ( qualifier.nodeType ) {
3052		return jQuery.grep( elements, function( elem ) {
3053			return ( elem === qualifier ) !== not;
3054		} );
3055	}
3056
3057	// Arraylike of elements (jQuery, arguments, Array)
3058	if ( typeof qualifier !== "string" ) {
3059		return jQuery.grep( elements, function( elem ) {
3060			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
3061		} );
3062	}
3063
3064	// Filtered directly for both simple and complex selectors
3065	return jQuery.filter( qualifier, elements, not );
3066}
3067
3068jQuery.filter = function( expr, elems, not ) {
3069	var elem = elems[ 0 ];
3070
3071	if ( not ) {
3072		expr = ":not(" + expr + ")";
3073	}
3074
3075	if ( elems.length === 1 && elem.nodeType === 1 ) {
3076		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
3077	}
3078
3079	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
3080		return elem.nodeType === 1;
3081	} ) );
3082};
3083
3084jQuery.fn.extend( {
3085	find: function( selector ) {
3086		var i, ret,
3087			len = this.length,
3088			self = this;
3089
3090		if ( typeof selector !== "string" ) {
3091			return this.pushStack( jQuery( selector ).filter( function() {
3092				for ( i = 0; i < len; i++ ) {
3093					if ( jQuery.contains( self[ i ], this ) ) {
3094						return true;
3095					}
3096				}
3097			} ) );
3098		}
3099
3100		ret = this.pushStack( [] );
3101
3102		for ( i = 0; i < len; i++ ) {
3103			jQuery.find( selector, self[ i ], ret );
3104		}
3105
3106		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
3107	},
3108	filter: function( selector ) {
3109		return this.pushStack( winnow( this, selector || [], false ) );
3110	},
3111	not: function( selector ) {
3112		return this.pushStack( winnow( this, selector || [], true ) );
3113	},
3114	is: function( selector ) {
3115		return !!winnow(
3116			this,
3117
3118			// If this is a positional/relative selector, check membership in the returned set
3119			// so $("p:first").is("p:last") won't return true for a doc with two "p".
3120			typeof selector === "string" && rneedsContext.test( selector ) ?
3121				jQuery( selector ) :
3122				selector || [],
3123			false
3124		).length;
3125	}
3126} );
3127
3128
3129// Initialize a jQuery object
3130
3131
3132// A central reference to the root jQuery(document)
3133var rootjQuery,
3134
3135	// A simple way to check for HTML strings
3136	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
3137	// Strict HTML recognition (#11290: must start with <)
3138	// Shortcut simple #id case for speed
3139	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
3140
3141	init = jQuery.fn.init = function( selector, context, root ) {
3142		var match, elem;
3143
3144		// HANDLE: $(""), $(null), $(undefined), $(false)
3145		if ( !selector ) {
3146			return this;
3147		}
3148
3149		// Method init() accepts an alternate rootjQuery
3150		// so migrate can support jQuery.sub (gh-2101)
3151		root = root || rootjQuery;
3152
3153		// Handle HTML strings
3154		if ( typeof selector === "string" ) {
3155			if ( selector[ 0 ] === "<" &&
3156				selector[ selector.length - 1 ] === ">" &&
3157				selector.length >= 3 ) {
3158
3159				// Assume that strings that start and end with <> are HTML and skip the regex check
3160				match = [ null, selector, null ];
3161
3162			} else {
3163				match = rquickExpr.exec( selector );
3164			}
3165
3166			// Match html or make sure no context is specified for #id
3167			if ( match && ( match[ 1 ] || !context ) ) {
3168
3169				// HANDLE: $(html) -> $(array)
3170				if ( match[ 1 ] ) {
3171					context = context instanceof jQuery ? context[ 0 ] : context;
3172
3173					// Option to run scripts is true for back-compat
3174					// Intentionally let the error be thrown if parseHTML is not present
3175					jQuery.merge( this, jQuery.parseHTML(
3176						match[ 1 ],
3177						context && context.nodeType ? context.ownerDocument || context : document,
3178						true
3179					) );
3180
3181					// HANDLE: $(html, props)
3182					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
3183						for ( match in context ) {
3184
3185							// Properties of context are called as methods if possible
3186							if ( isFunction( this[ match ] ) ) {
3187								this[ match ]( context[ match ] );
3188
3189							// ...and otherwise set as attributes
3190							} else {
3191								this.attr( match, context[ match ] );
3192							}
3193						}
3194					}
3195
3196					return this;
3197
3198				// HANDLE: $(#id)
3199				} else {
3200					elem = document.getElementById( match[ 2 ] );
3201
3202					if ( elem ) {
3203
3204						// Inject the element directly into the jQuery object
3205						this[ 0 ] = elem;
3206						this.length = 1;
3207					}
3208					return this;
3209				}
3210
3211			// HANDLE: $(expr, $(...))
3212			} else if ( !context || context.jquery ) {
3213				return ( context || root ).find( selector );
3214
3215			// HANDLE: $(expr, context)
3216			// (which is just equivalent to: $(context).find(expr)
3217			} else {
3218				return this.constructor( context ).find( selector );
3219			}
3220
3221		// HANDLE: $(DOMElement)
3222		} else if ( selector.nodeType ) {
3223			this[ 0 ] = selector;
3224			this.length = 1;
3225			return this;
3226
3227		// HANDLE: $(function)
3228		// Shortcut for document ready
3229		} else if ( isFunction( selector ) ) {
3230			return root.ready !== undefined ?
3231				root.ready( selector ) :
3232
3233				// Execute immediately if ready is not present
3234				selector( jQuery );
3235		}
3236
3237		return jQuery.makeArray( selector, this );
3238	};
3239
3240// Give the init function the jQuery prototype for later instantiation
3241init.prototype = jQuery.fn;
3242
3243// Initialize central reference
3244rootjQuery = jQuery( document );
3245
3246
3247var rparentsprev = /^(?:parents|prev(?:Until|All))/,
3248
3249	// Methods guaranteed to produce a unique set when starting from a unique set
3250	guaranteedUnique = {
3251		children: true,
3252		contents: true,
3253		next: true,
3254		prev: true
3255	};
3256
3257jQuery.fn.extend( {
3258	has: function( target ) {
3259		var targets = jQuery( target, this ),
3260			l = targets.length;
3261
3262		return this.filter( function() {
3263			var i = 0;
3264			for ( ; i < l; i++ ) {
3265				if ( jQuery.contains( this, targets[ i ] ) ) {
3266					return true;
3267				}
3268			}
3269		} );
3270	},
3271
3272	closest: function( selectors, context ) {
3273		var cur,
3274			i = 0,
3275			l = this.length,
3276			matched = [],
3277			targets = typeof selectors !== "string" && jQuery( selectors );
3278
3279		// Positional selectors never match, since there's no _selection_ context
3280		if ( !rneedsContext.test( selectors ) ) {
3281			for ( ; i < l; i++ ) {
3282				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
3283
3284					// Always skip document fragments
3285					if ( cur.nodeType < 11 && ( targets ?
3286						targets.index( cur ) > -1 :
3287
3288						// Don't pass non-elements to Sizzle
3289						cur.nodeType === 1 &&
3290							jQuery.find.matchesSelector( cur, selectors ) ) ) {
3291
3292						matched.push( cur );
3293						break;
3294					}
3295				}
3296			}
3297		}
3298
3299		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
3300	},
3301
3302	// Determine the position of an element within the set
3303	index: function( elem ) {
3304
3305		// No argument, return index in parent
3306		if ( !elem ) {
3307			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
3308		}
3309
3310		// Index in selector
3311		if ( typeof elem === "string" ) {
3312			return indexOf.call( jQuery( elem ), this[ 0 ] );
3313		}
3314
3315		// Locate the position of the desired element
3316		return indexOf.call( this,
3317
3318			// If it receives a jQuery object, the first element is used
3319			elem.jquery ? elem[ 0 ] : elem
3320		);
3321	},
3322
3323	add: function( selector, context ) {
3324		return this.pushStack(
3325			jQuery.uniqueSort(
3326				jQuery.merge( this.get(), jQuery( selector, context ) )
3327			)
3328		);
3329	},
3330
3331	addBack: function( selector ) {
3332		return this.add( selector == null ?
3333			this.prevObject : this.prevObject.filter( selector )
3334		);
3335	}
3336} );
3337
3338function sibling( cur, dir ) {
3339	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
3340	return cur;
3341}
3342
3343jQuery.each( {
3344	parent: function( elem ) {
3345		var parent = elem.parentNode;
3346		return parent && parent.nodeType !== 11 ? parent : null;
3347	},
3348	parents: function( elem ) {
3349		return dir( elem, "parentNode" );
3350	},
3351	parentsUntil: function( elem, _i, until ) {
3352		return dir( elem, "parentNode", until );
3353	},
3354	next: function( elem ) {
3355		return sibling( elem, "nextSibling" );
3356	},
3357	prev: function( elem ) {
3358		return sibling( elem, "previousSibling" );
3359	},
3360	nextAll: function( elem ) {
3361		return dir( elem, "nextSibling" );
3362	},
3363	prevAll: function( elem ) {
3364		return dir( elem, "previousSibling" );
3365	},
3366	nextUntil: function( elem, _i, until ) {
3367		return dir( elem, "nextSibling", until );
3368	},
3369	prevUntil: function( elem, _i, until ) {
3370		return dir( elem, "previousSibling", until );
3371	},
3372	siblings: function( elem ) {
3373		return siblings( ( elem.parentNode || {} ).firstChild, elem );
3374	},
3375	children: function( elem ) {
3376		return siblings( elem.firstChild );
3377	},
3378	contents: function( elem ) {
3379		if ( elem.contentDocument != null &&
3380
3381			// Support: IE 11+
3382			// <object> elements with no `data` attribute has an object
3383			// `contentDocument` with a `null` prototype.
3384			getProto( elem.contentDocument ) ) {
3385
3386			return elem.contentDocument;
3387		}
3388
3389		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
3390		// Treat the template element as a regular one in browsers that
3391		// don't support it.
3392		if ( nodeName( elem, "template" ) ) {
3393			elem = elem.content || elem;
3394		}
3395
3396		return jQuery.merge( [], elem.childNodes );
3397	}
3398}, function( name, fn ) {
3399	jQuery.fn[ name ] = function( until, selector ) {
3400		var matched = jQuery.map( this, fn, until );
3401
3402		if ( name.slice( -5 ) !== "Until" ) {
3403			selector = until;
3404		}
3405
3406		if ( selector && typeof selector === "string" ) {
3407			matched = jQuery.filter( selector, matched );
3408		}
3409
3410		if ( this.length > 1 ) {
3411
3412			// Remove duplicates
3413			if ( !guaranteedUnique[ name ] ) {
3414				jQuery.uniqueSort( matched );
3415			}
3416
3417			// Reverse order for parents* and prev-derivatives
3418			if ( rparentsprev.test( name ) ) {
3419				matched.reverse();
3420			}
3421		}
3422
3423		return this.pushStack( matched );
3424	};
3425} );
3426var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
3427
3428
3429
3430// Convert String-formatted options into Object-formatted ones
3431function createOptions( options ) {
3432	var object = {};
3433	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
3434		object[ flag ] = true;
3435	} );
3436	return object;
3437}
3438
3439/*
3440 * Create a callback list using the following parameters:
3441 *
3442 *	options: an optional list of space-separated options that will change how
3443 *			the callback list behaves or a more traditional option object
3444 *
3445 * By default a callback list will act like an event callback list and can be
3446 * "fired" multiple times.
3447 *
3448 * Possible options:
3449 *
3450 *	once:			will ensure the callback list can only be fired once (like a Deferred)
3451 *
3452 *	memory:			will keep track of previous values and will call any callback added
3453 *					after the list has been fired right away with the latest "memorized"
3454 *					values (like a Deferred)
3455 *
3456 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
3457 *
3458 *	stopOnFalse:	interrupt callings when a callback returns false
3459 *
3460 */
3461jQuery.Callbacks = function( options ) {
3462
3463	// Convert options from String-formatted to Object-formatted if needed
3464	// (we check in cache first)
3465	options = typeof options === "string" ?
3466		createOptions( options ) :
3467		jQuery.extend( {}, options );
3468
3469	var // Flag to know if list is currently firing
3470		firing,
3471
3472		// Last fire value for non-forgettable lists
3473		memory,
3474
3475		// Flag to know if list was already fired
3476		fired,
3477
3478		// Flag to prevent firing
3479		locked,
3480
3481		// Actual callback list
3482		list = [],
3483
3484		// Queue of execution data for repeatable lists
3485		queue = [],
3486
3487		// Index of currently firing callback (modified by add/remove as needed)
3488		firingIndex = -1,
3489
3490		// Fire callbacks
3491		fire = function() {
3492
3493			// Enforce single-firing
3494			locked = locked || options.once;
3495
3496			// Execute callbacks for all pending executions,
3497			// respecting firingIndex overrides and runtime changes
3498			fired = firing = true;
3499			for ( ; queue.length; firingIndex = -1 ) {
3500				memory = queue.shift();
3501				while ( ++firingIndex < list.length ) {
3502
3503					// Run callback and check for early termination
3504					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
3505						options.stopOnFalse ) {
3506
3507						// Jump to end and forget the data so .add doesn't re-fire
3508						firingIndex = list.length;
3509						memory = false;
3510					}
3511				}
3512			}
3513
3514			// Forget the data if we're done with it
3515			if ( !options.memory ) {
3516				memory = false;
3517			}
3518
3519			firing = false;
3520
3521			// Clean up if we're done firing for good
3522			if ( locked ) {
3523
3524				// Keep an empty list if we have data for future add calls
3525				if ( memory ) {
3526					list = [];
3527
3528				// Otherwise, this object is spent
3529				} else {
3530					list = "";
3531				}
3532			}
3533		},
3534
3535		// Actual Callbacks object
3536		self = {
3537
3538			// Add a callback or a collection of callbacks to the list
3539			add: function() {
3540				if ( list ) {
3541
3542					// If we have memory from a past run, we should fire after adding
3543					if ( memory && !firing ) {
3544						firingIndex = list.length - 1;
3545						queue.push( memory );
3546					}
3547
3548					( function add( args ) {
3549						jQuery.each( args, function( _, arg ) {
3550							if ( isFunction( arg ) ) {
3551								if ( !options.unique || !self.has( arg ) ) {
3552									list.push( arg );
3553								}
3554							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
3555
3556								// Inspect recursively
3557								add( arg );
3558							}
3559						} );
3560					} )( arguments );
3561
3562					if ( memory && !firing ) {
3563						fire();
3564					}
3565				}
3566				return this;
3567			},
3568
3569			// Remove a callback from the list
3570			remove: function() {
3571				jQuery.each( arguments, function( _, arg ) {
3572					var index;
3573					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
3574						list.splice( index, 1 );
3575
3576						// Handle firing indexes
3577						if ( index <= firingIndex ) {
3578							firingIndex--;
3579						}
3580					}
3581				} );
3582				return this;
3583			},
3584
3585			// Check if a given callback is in the list.
3586			// If no argument is given, return whether or not list has callbacks attached.
3587			has: function( fn ) {
3588				return fn ?
3589					jQuery.inArray( fn, list ) > -1 :
3590					list.length > 0;
3591			},
3592
3593			// Remove all callbacks from the list
3594			empty: function() {
3595				if ( list ) {
3596					list = [];
3597				}
3598				return this;
3599			},
3600
3601			// Disable .fire and .add
3602			// Abort any current/pending executions
3603			// Clear all callbacks and values
3604			disable: function() {
3605				locked = queue = [];
3606				list = memory = "";
3607				return this;
3608			},
3609			disabled: function() {
3610				return !list;
3611			},
3612
3613			// Disable .fire
3614			// Also disable .add unless we have memory (since it would have no effect)
3615			// Abort any pending executions
3616			lock: function() {
3617				locked = queue = [];
3618				if ( !memory && !firing ) {
3619					list = memory = "";
3620				}
3621				return this;
3622			},
3623			locked: function() {
3624				return !!locked;
3625			},
3626
3627			// Call all callbacks with the given context and arguments
3628			fireWith: function( context, args ) {
3629				if ( !locked ) {
3630					args = args || [];
3631					args = [ context, args.slice ? args.slice() : args ];
3632					queue.push( args );
3633					if ( !firing ) {
3634						fire();
3635					}
3636				}
3637				return this;
3638			},
3639
3640			// Call all the callbacks with the given arguments
3641			fire: function() {
3642				self.fireWith( this, arguments );
3643				return this;
3644			},
3645
3646			// To know if the callbacks have already been called at least once
3647			fired: function() {
3648				return !!fired;
3649			}
3650		};
3651
3652	return self;
3653};
3654
3655
3656function Identity( v ) {
3657	return v;
3658}
3659function Thrower( ex ) {
3660	throw ex;
3661}
3662
3663function adoptValue( value, resolve, reject, noValue ) {
3664	var method;
3665
3666	try {
3667
3668		// Check for promise aspect first to privilege synchronous behavior
3669		if ( value && isFunction( ( method = value.promise ) ) ) {
3670			method.call( value ).done( resolve ).fail( reject );
3671
3672		// Other thenables
3673		} else if ( value && isFunction( ( method = value.then ) ) ) {
3674			method.call( value, resolve, reject );
3675
3676		// Other non-thenables
3677		} else {
3678
3679			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
3680			// * false: [ value ].slice( 0 ) => resolve( value )
3681			// * true: [ value ].slice( 1 ) => resolve()
3682			resolve.apply( undefined, [ value ].slice( noValue ) );
3683		}
3684
3685	// For Promises/A+, convert exceptions into rejections
3686	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
3687	// Deferred#then to conditionally suppress rejection.
3688	} catch ( value ) {
3689
3690		// Support: Android 4.0 only
3691		// Strict mode functions invoked without .call/.apply get global-object context
3692		reject.apply( undefined, [ value ] );
3693	}
3694}
3695
3696jQuery.extend( {
3697
3698	Deferred: function( func ) {
3699		var tuples = [
3700
3701				// action, add listener, callbacks,
3702				// ... .then handlers, argument index, [final state]
3703				[ "notify", "progress", jQuery.Callbacks( "memory" ),
3704					jQuery.Callbacks( "memory" ), 2 ],
3705				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
3706					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
3707				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
3708					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
3709			],
3710			state = "pending",
3711			promise = {
3712				state: function() {
3713					return state;
3714				},
3715				always: function() {
3716					deferred.done( arguments ).fail( arguments );
3717					return this;
3718				},
3719				"catch": function( fn ) {
3720					return promise.then( null, fn );
3721				},
3722
3723				// Keep pipe for back-compat
3724				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
3725					var fns = arguments;
3726
3727					return jQuery.Deferred( function( newDefer ) {
3728						jQuery.each( tuples, function( _i, tuple ) {
3729
3730							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
3731							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
3732
3733							// deferred.progress(function() { bind to newDefer or newDefer.notify })
3734							// deferred.done(function() { bind to newDefer or newDefer.resolve })
3735							// deferred.fail(function() { bind to newDefer or newDefer.reject })
3736							deferred[ tuple[ 1 ] ]( function() {
3737								var returned = fn && fn.apply( this, arguments );
3738								if ( returned && isFunction( returned.promise ) ) {
3739									returned.promise()
3740										.progress( newDefer.notify )
3741										.done( newDefer.resolve )
3742										.fail( newDefer.reject );
3743								} else {
3744									newDefer[ tuple[ 0 ] + "With" ](
3745										this,
3746										fn ? [ returned ] : arguments
3747									);
3748								}
3749							} );
3750						} );
3751						fns = null;
3752					} ).promise();
3753				},
3754				then: function( onFulfilled, onRejected, onProgress ) {
3755					var maxDepth = 0;
3756					function resolve( depth, deferred, handler, special ) {
3757						return function() {
3758							var that = this,
3759								args = arguments,
3760								mightThrow = function() {
3761									var returned, then;
3762
3763									// Support: Promises/A+ section 2.3.3.3.3
3764									// https://promisesaplus.com/#point-59
3765									// Ignore double-resolution attempts
3766									if ( depth < maxDepth ) {
3767										return;
3768									}
3769
3770									returned = handler.apply( that, args );
3771
3772									// Support: Promises/A+ section 2.3.1
3773									// https://promisesaplus.com/#point-48
3774									if ( returned === deferred.promise() ) {
3775										throw new TypeError( "Thenable self-resolution" );
3776									}
3777
3778									// Support: Promises/A+ sections 2.3.3.1, 3.5
3779									// https://promisesaplus.com/#point-54
3780									// https://promisesaplus.com/#point-75
3781									// Retrieve `then` only once
3782									then = returned &&
3783
3784										// Support: Promises/A+ section 2.3.4
3785										// https://promisesaplus.com/#point-64
3786										// Only check objects and functions for thenability
3787										( typeof returned === "object" ||
3788											typeof returned === "function" ) &&
3789										returned.then;
3790
3791									// Handle a returned thenable
3792									if ( isFunction( then ) ) {
3793
3794										// Special processors (notify) just wait for resolution
3795										if ( special ) {
3796											then.call(
3797												returned,
3798												resolve( maxDepth, deferred, Identity, special ),
3799												resolve( maxDepth, deferred, Thrower, special )
3800											);
3801
3802										// Normal processors (resolve) also hook into progress
3803										} else {
3804
3805											// ...and disregard older resolution values
3806											maxDepth++;
3807
3808											then.call(
3809												returned,
3810												resolve( maxDepth, deferred, Identity, special ),
3811												resolve( maxDepth, deferred, Thrower, special ),
3812												resolve( maxDepth, deferred, Identity,
3813													deferred.notifyWith )
3814											);
3815										}
3816
3817									// Handle all other returned values
3818									} else {
3819
3820										// Only substitute handlers pass on context
3821										// and multiple values (non-spec behavior)
3822										if ( handler !== Identity ) {
3823											that = undefined;
3824											args = [ returned ];
3825										}
3826
3827										// Process the value(s)
3828										// Default process is resolve
3829										( special || deferred.resolveWith )( that, args );
3830									}
3831								},
3832
3833								// Only normal processors (resolve) catch and reject exceptions
3834								process = special ?
3835									mightThrow :
3836									function() {
3837										try {
3838											mightThrow();
3839										} catch ( e ) {
3840
3841											if ( jQuery.Deferred.exceptionHook ) {
3842												jQuery.Deferred.exceptionHook( e,
3843													process.stackTrace );
3844											}
3845
3846											// Support: Promises/A+ section 2.3.3.3.4.1
3847											// https://promisesaplus.com/#point-61
3848											// Ignore post-resolution exceptions
3849											if ( depth + 1 >= maxDepth ) {
3850
3851												// Only substitute handlers pass on context
3852												// and multiple values (non-spec behavior)
3853												if ( handler !== Thrower ) {
3854													that = undefined;
3855													args = [ e ];
3856												}
3857
3858												deferred.rejectWith( that, args );
3859											}
3860										}
3861									};
3862
3863							// Support: Promises/A+ section 2.3.3.3.1
3864							// https://promisesaplus.com/#point-57
3865							// Re-resolve promises immediately to dodge false rejection from
3866							// subsequent errors
3867							if ( depth ) {
3868								process();
3869							} else {
3870
3871								// Call an optional hook to record the stack, in case of exception
3872								// since it's otherwise lost when execution goes async
3873								if ( jQuery.Deferred.getStackHook ) {
3874									process.stackTrace = jQuery.Deferred.getStackHook();
3875								}
3876								window.setTimeout( process );
3877							}
3878						};
3879					}
3880
3881					return jQuery.Deferred( function( newDefer ) {
3882
3883						// progress_handlers.add( ... )
3884						tuples[ 0 ][ 3 ].add(
3885							resolve(
3886								0,
3887								newDefer,
3888								isFunction( onProgress ) ?
3889									onProgress :
3890									Identity,
3891								newDefer.notifyWith
3892							)
3893						);
3894
3895						// fulfilled_handlers.add( ... )
3896						tuples[ 1 ][ 3 ].add(
3897							resolve(
3898								0,
3899								newDefer,
3900								isFunction( onFulfilled ) ?
3901									onFulfilled :
3902									Identity
3903							)
3904						);
3905
3906						// rejected_handlers.add( ... )
3907						tuples[ 2 ][ 3 ].add(
3908							resolve(
3909								0,
3910								newDefer,
3911								isFunction( onRejected ) ?
3912									onRejected :
3913									Thrower
3914							)
3915						);
3916					} ).promise();
3917				},
3918
3919				// Get a promise for this deferred
3920				// If obj is provided, the promise aspect is added to the object
3921				promise: function( obj ) {
3922					return obj != null ? jQuery.extend( obj, promise ) : promise;
3923				}
3924			},
3925			deferred = {};
3926
3927		// Add list-specific methods
3928		jQuery.each( tuples, function( i, tuple ) {
3929			var list = tuple[ 2 ],
3930				stateString = tuple[ 5 ];
3931
3932			// promise.progress = list.add
3933			// promise.done = list.add
3934			// promise.fail = list.add
3935			promise[ tuple[ 1 ] ] = list.add;
3936
3937			// Handle state
3938			if ( stateString ) {
3939				list.add(
3940					function() {
3941
3942						// state = "resolved" (i.e., fulfilled)
3943						// state = "rejected"
3944						state = stateString;
3945					},
3946
3947					// rejected_callbacks.disable
3948					// fulfilled_callbacks.disable
3949					tuples[ 3 - i ][ 2 ].disable,
3950
3951					// rejected_handlers.disable
3952					// fulfilled_handlers.disable
3953					tuples[ 3 - i ][ 3 ].disable,
3954
3955					// progress_callbacks.lock
3956					tuples[ 0 ][ 2 ].lock,
3957
3958					// progress_handlers.lock
3959					tuples[ 0 ][ 3 ].lock
3960				);
3961			}
3962
3963			// progress_handlers.fire
3964			// fulfilled_handlers.fire
3965			// rejected_handlers.fire
3966			list.add( tuple[ 3 ].fire );
3967
3968			// deferred.notify = function() { deferred.notifyWith(...) }
3969			// deferred.resolve = function() { deferred.resolveWith(...) }
3970			// deferred.reject = function() { deferred.rejectWith(...) }
3971			deferred[ tuple[ 0 ] ] = function() {
3972				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
3973				return this;
3974			};
3975
3976			// deferred.notifyWith = list.fireWith
3977			// deferred.resolveWith = list.fireWith
3978			// deferred.rejectWith = list.fireWith
3979			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
3980		} );
3981
3982		// Make the deferred a promise
3983		promise.promise( deferred );
3984
3985		// Call given func if any
3986		if ( func ) {
3987			func.call( deferred, deferred );
3988		}
3989
3990		// All done!
3991		return deferred;
3992	},
3993
3994	// Deferred helper
3995	when: function( singleValue ) {
3996		var
3997
3998			// count of uncompleted subordinates
3999			remaining = arguments.length,
4000
4001			// count of unprocessed arguments
4002			i = remaining,
4003
4004			// subordinate fulfillment data
4005			resolveContexts = Array( i ),
4006			resolveValues = slice.call( arguments ),
4007
4008			// the primary Deferred
4009			primary = jQuery.Deferred(),
4010
4011			// subordinate callback factory
4012			updateFunc = function( i ) {
4013				return function( value ) {
4014					resolveContexts[ i ] = this;
4015					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
4016					if ( !( --remaining ) ) {
4017						primary.resolveWith( resolveContexts, resolveValues );
4018					}
4019				};
4020			};
4021
4022		// Single- and empty arguments are adopted like Promise.resolve
4023		if ( remaining <= 1 ) {
4024			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
4025				!remaining );
4026
4027			// Use .then() to unwrap secondary thenables (cf. gh-3000)
4028			if ( primary.state() === "pending" ||
4029				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
4030
4031				return primary.then();
4032			}
4033		}
4034
4035		// Multiple arguments are aggregated like Promise.all array elements
4036		while ( i-- ) {
4037			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
4038		}
4039
4040		return primary.promise();
4041	}
4042} );
4043
4044
4045// These usually indicate a programmer mistake during development,
4046// warn about them ASAP rather than swallowing them by default.
4047var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
4048
4049jQuery.Deferred.exceptionHook = function( error, stack ) {
4050
4051	// Support: IE 8 - 9 only
4052	// Console exists when dev tools are open, which can happen at any time
4053	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
4054		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
4055	}
4056};
4057
4058
4059
4060
4061jQuery.readyException = function( error ) {
4062	window.setTimeout( function() {
4063		throw error;
4064	} );
4065};
4066
4067
4068
4069
4070// The deferred used on DOM ready
4071var readyList = jQuery.Deferred();
4072
4073jQuery.fn.ready = function( fn ) {
4074
4075	readyList
4076		.then( fn )
4077
4078		// Wrap jQuery.readyException in a function so that the lookup
4079		// happens at the time of error handling instead of callback
4080		// registration.
4081		.catch( function( error ) {
4082			jQuery.readyException( error );
4083		} );
4084
4085	return this;
4086};
4087
4088jQuery.extend( {
4089
4090	// Is the DOM ready to be used? Set to true once it occurs.
4091	isReady: false,
4092
4093	// A counter to track how many items to wait for before
4094	// the ready event fires. See #6781
4095	readyWait: 1,
4096
4097	// Handle when the DOM is ready
4098	ready: function( wait ) {
4099
4100		// Abort if there are pending holds or we're already ready
4101		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
4102			return;
4103		}
4104
4105		// Remember that the DOM is ready
4106		jQuery.isReady = true;
4107
4108		// If a normal DOM Ready event fired, decrement, and wait if need be
4109		if ( wait !== true && --jQuery.readyWait > 0 ) {
4110			return;
4111		}
4112
4113		// If there are functions bound, to execute
4114		readyList.resolveWith( document, [ jQuery ] );
4115	}
4116} );
4117
4118jQuery.ready.then = readyList.then;
4119
4120// The ready event handler and self cleanup method
4121function completed() {
4122	document.removeEventListener( "DOMContentLoaded", completed );
4123	window.removeEventListener( "load", completed );
4124	jQuery.ready();
4125}
4126
4127// Catch cases where $(document).ready() is called
4128// after the browser event has already occurred.
4129// Support: IE <=9 - 10 only
4130// Older IE sometimes signals "interactive" too soon
4131if ( document.readyState === "complete" ||
4132	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
4133
4134	// Handle it asynchronously to allow scripts the opportunity to delay ready
4135	window.setTimeout( jQuery.ready );
4136
4137} else {
4138
4139	// Use the handy event callback
4140	document.addEventListener( "DOMContentLoaded", completed );
4141
4142	// A fallback to window.onload, that will always work
4143	window.addEventListener( "load", completed );
4144}
4145
4146
4147
4148
4149// Multifunctional method to get and set values of a collection
4150// The value/s can optionally be executed if it's a function
4151var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
4152	var i = 0,
4153		len = elems.length,
4154		bulk = key == null;
4155
4156	// Sets many values
4157	if ( toType( key ) === "object" ) {
4158		chainable = true;
4159		for ( i in key ) {
4160			access( elems, fn, i, key[ i ], true, emptyGet, raw );
4161		}
4162
4163	// Sets one value
4164	} else if ( value !== undefined ) {
4165		chainable = true;
4166
4167		if ( !isFunction( value ) ) {
4168			raw = true;
4169		}
4170
4171		if ( bulk ) {
4172
4173			// Bulk operations run against the entire set
4174			if ( raw ) {
4175				fn.call( elems, value );
4176				fn = null;
4177
4178			// ...except when executing function values
4179			} else {
4180				bulk = fn;
4181				fn = function( elem, _key, value ) {
4182					return bulk.call( jQuery( elem ), value );
4183				};
4184			}
4185		}
4186
4187		if ( fn ) {
4188			for ( ; i < len; i++ ) {
4189				fn(
4190					elems[ i ], key, raw ?
4191						value :
4192						value.call( elems[ i ], i, fn( elems[ i ], key ) )
4193				);
4194			}
4195		}
4196	}
4197
4198	if ( chainable ) {
4199		return elems;
4200	}
4201
4202	// Gets
4203	if ( bulk ) {
4204		return fn.call( elems );
4205	}
4206
4207	return len ? fn( elems[ 0 ], key ) : emptyGet;
4208};
4209
4210
4211// Matches dashed string for camelizing
4212var rmsPrefix = /^-ms-/,
4213	rdashAlpha = /-([a-z])/g;
4214
4215// Used by camelCase as callback to replace()
4216function fcamelCase( _all, letter ) {
4217	return letter.toUpperCase();
4218}
4219
4220// Convert dashed to camelCase; used by the css and data modules
4221// Support: IE <=9 - 11, Edge 12 - 15
4222// Microsoft forgot to hump their vendor prefix (#9572)
4223function camelCase( string ) {
4224	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
4225}
4226var acceptData = function( owner ) {
4227
4228	// Accepts only:
4229	//  - Node
4230	//    - Node.ELEMENT_NODE
4231	//    - Node.DOCUMENT_NODE
4232	//  - Object
4233	//    - Any
4234	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
4235};
4236
4237
4238
4239
4240function Data() {
4241	this.expando = jQuery.expando + Data.uid++;
4242}
4243
4244Data.uid = 1;
4245
4246Data.prototype = {
4247
4248	cache: function( owner ) {
4249
4250		// Check if the owner object already has a cache
4251		var value = owner[ this.expando ];
4252
4253		// If not, create one
4254		if ( !value ) {
4255			value = {};
4256
4257			// We can accept data for non-element nodes in modern browsers,
4258			// but we should not, see #8335.
4259			// Always return an empty object.
4260			if ( acceptData( owner ) ) {
4261
4262				// If it is a node unlikely to be stringify-ed or looped over
4263				// use plain assignment
4264				if ( owner.nodeType ) {
4265					owner[ this.expando ] = value;
4266
4267				// Otherwise secure it in a non-enumerable property
4268				// configurable must be true to allow the property to be
4269				// deleted when data is removed
4270				} else {
4271					Object.defineProperty( owner, this.expando, {
4272						value: value,
4273						configurable: true
4274					} );
4275				}
4276			}
4277		}
4278
4279		return value;
4280	},
4281	set: function( owner, data, value ) {
4282		var prop,
4283			cache = this.cache( owner );
4284
4285		// Handle: [ owner, key, value ] args
4286		// Always use camelCase key (gh-2257)
4287		if ( typeof data === "string" ) {
4288			cache[ camelCase( data ) ] = value;
4289
4290		// Handle: [ owner, { properties } ] args
4291		} else {
4292
4293			// Copy the properties one-by-one to the cache object
4294			for ( prop in data ) {
4295				cache[ camelCase( prop ) ] = data[ prop ];
4296			}
4297		}
4298		return cache;
4299	},
4300	get: function( owner, key ) {
4301		return key === undefined ?
4302			this.cache( owner ) :
4303
4304			// Always use camelCase key (gh-2257)
4305			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
4306	},
4307	access: function( owner, key, value ) {
4308
4309		// In cases where either:
4310		//
4311		//   1. No key was specified
4312		//   2. A string key was specified, but no value provided
4313		//
4314		// Take the "read" path and allow the get method to determine
4315		// which value to return, respectively either:
4316		//
4317		//   1. The entire cache object
4318		//   2. The data stored at the key
4319		//
4320		if ( key === undefined ||
4321				( ( key && typeof key === "string" ) && value === undefined ) ) {
4322
4323			return this.get( owner, key );
4324		}
4325
4326		// When the key is not a string, or both a key and value
4327		// are specified, set or extend (existing objects) with either:
4328		//
4329		//   1. An object of properties
4330		//   2. A key and value
4331		//
4332		this.set( owner, key, value );
4333
4334		// Since the "set" path can have two possible entry points
4335		// return the expected data based on which path was taken[*]
4336		return value !== undefined ? value : key;
4337	},
4338	remove: function( owner, key ) {
4339		var i,
4340			cache = owner[ this.expando ];
4341
4342		if ( cache === undefined ) {
4343			return;
4344		}
4345
4346		if ( key !== undefined ) {
4347
4348			// Support array or space separated string of keys
4349			if ( Array.isArray( key ) ) {
4350
4351				// If key is an array of keys...
4352				// We always set camelCase keys, so remove that.
4353				key = key.map( camelCase );
4354			} else {
4355				key = camelCase( key );
4356
4357				// If a key with the spaces exists, use it.
4358				// Otherwise, create an array by matching non-whitespace
4359				key = key in cache ?
4360					[ key ] :
4361					( key.match( rnothtmlwhite ) || [] );
4362			}
4363
4364			i = key.length;
4365
4366			while ( i-- ) {
4367				delete cache[ key[ i ] ];
4368			}
4369		}
4370
4371		// Remove the expando if there's no more data
4372		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
4373
4374			// Support: Chrome <=35 - 45
4375			// Webkit & Blink performance suffers when deleting properties
4376			// from DOM nodes, so set to undefined instead
4377			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
4378			if ( owner.nodeType ) {
4379				owner[ this.expando ] = undefined;
4380			} else {
4381				delete owner[ this.expando ];
4382			}
4383		}
4384	},
4385	hasData: function( owner ) {
4386		var cache = owner[ this.expando ];
4387		return cache !== undefined && !jQuery.isEmptyObject( cache );
4388	}
4389};
4390var dataPriv = new Data();
4391
4392var dataUser = new Data();
4393
4394
4395
4396//	Implementation Summary
4397//
4398//	1. Enforce API surface and semantic compatibility with 1.9.x branch
4399//	2. Improve the module's maintainability by reducing the storage
4400//		paths to a single mechanism.
4401//	3. Use the same single mechanism to support "private" and "user" data.
4402//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
4403//	5. Avoid exposing implementation details on user objects (eg. expando properties)
4404//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
4405
4406var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4407	rmultiDash = /[A-Z]/g;
4408
4409function getData( data ) {
4410	if ( data === "true" ) {
4411		return true;
4412	}
4413
4414	if ( data === "false" ) {
4415		return false;
4416	}
4417
4418	if ( data === "null" ) {
4419		return null;
4420	}
4421
4422	// Only convert to a number if it doesn't change the string
4423	if ( data === +data + "" ) {
4424		return +data;
4425	}
4426
4427	if ( rbrace.test( data ) ) {
4428		return JSON.parse( data );
4429	}
4430
4431	return data;
4432}
4433
4434function dataAttr( elem, key, data ) {
4435	var name;
4436
4437	// If nothing was found internally, try to fetch any
4438	// data from the HTML5 data-* attribute
4439	if ( data === undefined && elem.nodeType === 1 ) {
4440		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
4441		data = elem.getAttribute( name );
4442
4443		if ( typeof data === "string" ) {
4444			try {
4445				data = getData( data );
4446			} catch ( e ) {}
4447
4448			// Make sure we set the data so it isn't changed later
4449			dataUser.set( elem, key, data );
4450		} else {
4451			data = undefined;
4452		}
4453	}
4454	return data;
4455}
4456
4457jQuery.extend( {
4458	hasData: function( elem ) {
4459		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
4460	},
4461
4462	data: function( elem, name, data ) {
4463		return dataUser.access( elem, name, data );
4464	},
4465
4466	removeData: function( elem, name ) {
4467		dataUser.remove( elem, name );
4468	},
4469
4470	// TODO: Now that all calls to _data and _removeData have been replaced
4471	// with direct calls to dataPriv methods, these can be deprecated.
4472	_data: function( elem, name, data ) {
4473		return dataPriv.access( elem, name, data );
4474	},
4475
4476	_removeData: function( elem, name ) {
4477		dataPriv.remove( elem, name );
4478	}
4479} );
4480
4481jQuery.fn.extend( {
4482	data: function( key, value ) {
4483		var i, name, data,
4484			elem = this[ 0 ],
4485			attrs = elem && elem.attributes;
4486
4487		// Gets all values
4488		if ( key === undefined ) {
4489			if ( this.length ) {
4490				data = dataUser.get( elem );
4491
4492				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
4493					i = attrs.length;
4494					while ( i-- ) {
4495
4496						// Support: IE 11 only
4497						// The attrs elements can be null (#14894)
4498						if ( attrs[ i ] ) {
4499							name = attrs[ i ].name;
4500							if ( name.indexOf( "data-" ) === 0 ) {
4501								name = camelCase( name.slice( 5 ) );
4502								dataAttr( elem, name, data[ name ] );
4503							}
4504						}
4505					}
4506					dataPriv.set( elem, "hasDataAttrs", true );
4507				}
4508			}
4509
4510			return data;
4511		}
4512
4513		// Sets multiple values
4514		if ( typeof key === "object" ) {
4515			return this.each( function() {
4516				dataUser.set( this, key );
4517			} );
4518		}
4519
4520		return access( this, function( value ) {
4521			var data;
4522
4523			// The calling jQuery object (element matches) is not empty
4524			// (and therefore has an element appears at this[ 0 ]) and the
4525			// `value` parameter was not undefined. An empty jQuery object
4526			// will result in `undefined` for elem = this[ 0 ] which will
4527			// throw an exception if an attempt to read a data cache is made.
4528			if ( elem && value === undefined ) {
4529
4530				// Attempt to get data from the cache
4531				// The key will always be camelCased in Data
4532				data = dataUser.get( elem, key );
4533				if ( data !== undefined ) {
4534					return data;
4535				}
4536
4537				// Attempt to "discover" the data in
4538				// HTML5 custom data-* attrs
4539				data = dataAttr( elem, key );
4540				if ( data !== undefined ) {
4541					return data;
4542				}
4543
4544				// We tried really hard, but the data doesn't exist.
4545				return;
4546			}
4547
4548			// Set the data...
4549			this.each( function() {
4550
4551				// We always store the camelCased key
4552				dataUser.set( this, key, value );
4553			} );
4554		}, null, value, arguments.length > 1, null, true );
4555	},
4556
4557	removeData: function( key ) {
4558		return this.each( function() {
4559			dataUser.remove( this, key );
4560		} );
4561	}
4562} );
4563
4564
4565jQuery.extend( {
4566	queue: function( elem, type, data ) {
4567		var queue;
4568
4569		if ( elem ) {
4570			type = ( type || "fx" ) + "queue";
4571			queue = dataPriv.get( elem, type );
4572
4573			// Speed up dequeue by getting out quickly if this is just a lookup
4574			if ( data ) {
4575				if ( !queue || Array.isArray( data ) ) {
4576					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
4577				} else {
4578					queue.push( data );
4579				}
4580			}
4581			return queue || [];
4582		}
4583	},
4584
4585	dequeue: function( elem, type ) {
4586		type = type || "fx";
4587
4588		var queue = jQuery.queue( elem, type ),
4589			startLength = queue.length,
4590			fn = queue.shift(),
4591			hooks = jQuery._queueHooks( elem, type ),
4592			next = function() {
4593				jQuery.dequeue( elem, type );
4594			};
4595
4596		// If the fx queue is dequeued, always remove the progress sentinel
4597		if ( fn === "inprogress" ) {
4598			fn = queue.shift();
4599			startLength--;
4600		}
4601
4602		if ( fn ) {
4603
4604			// Add a progress sentinel to prevent the fx queue from being
4605			// automatically dequeued
4606			if ( type === "fx" ) {
4607				queue.unshift( "inprogress" );
4608			}
4609
4610			// Clear up the last queue stop function
4611			delete hooks.stop;
4612			fn.call( elem, next, hooks );
4613		}
4614
4615		if ( !startLength && hooks ) {
4616			hooks.empty.fire();
4617		}
4618	},
4619
4620	// Not public - generate a queueHooks object, or return the current one
4621	_queueHooks: function( elem, type ) {
4622		var key = type + "queueHooks";
4623		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
4624			empty: jQuery.Callbacks( "once memory" ).add( function() {
4625				dataPriv.remove( elem, [ type + "queue", key ] );
4626			} )
4627		} );
4628	}
4629} );
4630
4631jQuery.fn.extend( {
4632	queue: function( type, data ) {
4633		var setter = 2;
4634
4635		if ( typeof type !== "string" ) {
4636			data = type;
4637			type = "fx";
4638			setter--;
4639		}
4640
4641		if ( arguments.length < setter ) {
4642			return jQuery.queue( this[ 0 ], type );
4643		}
4644
4645		return data === undefined ?
4646			this :
4647			this.each( function() {
4648				var queue = jQuery.queue( this, type, data );
4649
4650				// Ensure a hooks for this queue
4651				jQuery._queueHooks( this, type );
4652
4653				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
4654					jQuery.dequeue( this, type );
4655				}
4656			} );
4657	},
4658	dequeue: function( type ) {
4659		return this.each( function() {
4660			jQuery.dequeue( this, type );
4661		} );
4662	},
4663	clearQueue: function( type ) {
4664		return this.queue( type || "fx", [] );
4665	},
4666
4667	// Get a promise resolved when queues of a certain type
4668	// are emptied (fx is the type by default)
4669	promise: function( type, obj ) {
4670		var tmp,
4671			count = 1,
4672			defer = jQuery.Deferred(),
4673			elements = this,
4674			i = this.length,
4675			resolve = function() {
4676				if ( !( --count ) ) {
4677					defer.resolveWith( elements, [ elements ] );
4678				}
4679			};
4680
4681		if ( typeof type !== "string" ) {
4682			obj = type;
4683			type = undefined;
4684		}
4685		type = type || "fx";
4686
4687		while ( i-- ) {
4688			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
4689			if ( tmp && tmp.empty ) {
4690				count++;
4691				tmp.empty.add( resolve );
4692			}
4693		}
4694		resolve();
4695		return defer.promise( obj );
4696	}
4697} );
4698var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
4699
4700var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
4701
4702
4703var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
4704
4705var documentElement = document.documentElement;
4706
4707
4708
4709	var isAttached = function( elem ) {
4710			return jQuery.contains( elem.ownerDocument, elem );
4711		},
4712		composed = { composed: true };
4713
4714	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
4715	// Check attachment across shadow DOM boundaries when possible (gh-3504)
4716	// Support: iOS 10.0-10.2 only
4717	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
4718	// leading to errors. We need to check for `getRootNode`.
4719	if ( documentElement.getRootNode ) {
4720		isAttached = function( elem ) {
4721			return jQuery.contains( elem.ownerDocument, elem ) ||
4722				elem.getRootNode( composed ) === elem.ownerDocument;
4723		};
4724	}
4725var isHiddenWithinTree = function( elem, el ) {
4726
4727		// isHiddenWithinTree might be called from jQuery#filter function;
4728		// in that case, element will be second argument
4729		elem = el || elem;
4730
4731		// Inline style trumps all
4732		return elem.style.display === "none" ||
4733			elem.style.display === "" &&
4734
4735			// Otherwise, check computed style
4736			// Support: Firefox <=43 - 45
4737			// Disconnected elements can have computed display: none, so first confirm that elem is
4738			// in the document.
4739			isAttached( elem ) &&
4740
4741			jQuery.css( elem, "display" ) === "none";
4742	};
4743
4744
4745
4746function adjustCSS( elem, prop, valueParts, tween ) {
4747	var adjusted, scale,
4748		maxIterations = 20,
4749		currentValue = tween ?
4750			function() {
4751				return tween.cur();
4752			} :
4753			function() {
4754				return jQuery.css( elem, prop, "" );
4755			},
4756		initial = currentValue(),
4757		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
4758
4759		// Starting value computation is required for potential unit mismatches
4760		initialInUnit = elem.nodeType &&
4761			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
4762			rcssNum.exec( jQuery.css( elem, prop ) );
4763
4764	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
4765
4766		// Support: Firefox <=54
4767		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
4768		initial = initial / 2;
4769
4770		// Trust units reported by jQuery.css
4771		unit = unit || initialInUnit[ 3 ];
4772
4773		// Iteratively approximate from a nonzero starting point
4774		initialInUnit = +initial || 1;
4775
4776		while ( maxIterations-- ) {
4777
4778			// Evaluate and update our best guess (doubling guesses that zero out).
4779			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
4780			jQuery.style( elem, prop, initialInUnit + unit );
4781			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
4782				maxIterations = 0;
4783			}
4784			initialInUnit = initialInUnit / scale;
4785
4786		}
4787
4788		initialInUnit = initialInUnit * 2;
4789		jQuery.style( elem, prop, initialInUnit + unit );
4790
4791		// Make sure we update the tween properties later on
4792		valueParts = valueParts || [];
4793	}
4794
4795	if ( valueParts ) {
4796		initialInUnit = +initialInUnit || +initial || 0;
4797
4798		// Apply relative offset (+=/-=) if specified
4799		adjusted = valueParts[ 1 ] ?
4800			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
4801			+valueParts[ 2 ];
4802		if ( tween ) {
4803			tween.unit = unit;
4804			tween.start = initialInUnit;
4805			tween.end = adjusted;
4806		}
4807	}
4808	return adjusted;
4809}
4810
4811
4812var defaultDisplayMap = {};
4813
4814function getDefaultDisplay( elem ) {
4815	var temp,
4816		doc = elem.ownerDocument,
4817		nodeName = elem.nodeName,
4818		display = defaultDisplayMap[ nodeName ];
4819
4820	if ( display ) {
4821		return display;
4822	}
4823
4824	temp = doc.body.appendChild( doc.createElement( nodeName ) );
4825	display = jQuery.css( temp, "display" );
4826
4827	temp.parentNode.removeChild( temp );
4828
4829	if ( display === "none" ) {
4830		display = "block";
4831	}
4832	defaultDisplayMap[ nodeName ] = display;
4833
4834	return display;
4835}
4836
4837function showHide( elements, show ) {
4838	var display, elem,
4839		values = [],
4840		index = 0,
4841		length = elements.length;
4842
4843	// Determine new display value for elements that need to change
4844	for ( ; index < length; index++ ) {
4845		elem = elements[ index ];
4846		if ( !elem.style ) {
4847			continue;
4848		}
4849
4850		display = elem.style.display;
4851		if ( show ) {
4852
4853			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
4854			// check is required in this first loop unless we have a nonempty display value (either
4855			// inline or about-to-be-restored)
4856			if ( display === "none" ) {
4857				values[ index ] = dataPriv.get( elem, "display" ) || null;
4858				if ( !values[ index ] ) {
4859					elem.style.display = "";
4860				}
4861			}
4862			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
4863				values[ index ] = getDefaultDisplay( elem );
4864			}
4865		} else {
4866			if ( display !== "none" ) {
4867				values[ index ] = "none";
4868
4869				// Remember what we're overwriting
4870				dataPriv.set( elem, "display", display );
4871			}
4872		}
4873	}
4874
4875	// Set the display of the elements in a second loop to avoid constant reflow
4876	for ( index = 0; index < length; index++ ) {
4877		if ( values[ index ] != null ) {
4878			elements[ index ].style.display = values[ index ];
4879		}
4880	}
4881
4882	return elements;
4883}
4884
4885jQuery.fn.extend( {
4886	show: function() {
4887		return showHide( this, true );
4888	},
4889	hide: function() {
4890		return showHide( this );
4891	},
4892	toggle: function( state ) {
4893		if ( typeof state === "boolean" ) {
4894			return state ? this.show() : this.hide();
4895		}
4896
4897		return this.each( function() {
4898			if ( isHiddenWithinTree( this ) ) {
4899				jQuery( this ).show();
4900			} else {
4901				jQuery( this ).hide();
4902			}
4903		} );
4904	}
4905} );
4906var rcheckableType = ( /^(?:checkbox|radio)$/i );
4907
4908var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
4909
4910var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
4911
4912
4913
4914( function() {
4915	var fragment = document.createDocumentFragment(),
4916		div = fragment.appendChild( document.createElement( "div" ) ),
4917		input = document.createElement( "input" );
4918
4919	// Support: Android 4.0 - 4.3 only
4920	// Check state lost if the name is set (#11217)
4921	// Support: Windows Web Apps (WWA)
4922	// `name` and `type` must use .setAttribute for WWA (#14901)
4923	input.setAttribute( "type", "radio" );
4924	input.setAttribute( "checked", "checked" );
4925	input.setAttribute( "name", "t" );
4926
4927	div.appendChild( input );
4928
4929	// Support: Android <=4.1 only
4930	// Older WebKit doesn't clone checked state correctly in fragments
4931	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
4932
4933	// Support: IE <=11 only
4934	// Make sure textarea (and checkbox) defaultValue is properly cloned
4935	div.innerHTML = "<textarea>x</textarea>";
4936	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
4937
4938	// Support: IE <=9 only
4939	// IE <=9 replaces <option> tags with their contents when inserted outside of
4940	// the select element.
4941	div.innerHTML = "<option></option>";
4942	support.option = !!div.lastChild;
4943} )();
4944
4945
4946// We have to close these tags to support XHTML (#13200)
4947var wrapMap = {
4948
4949	// XHTML parsers do not magically insert elements in the
4950	// same way that tag soup parsers do. So we cannot shorten
4951	// this by omitting <tbody> or other required elements.
4952	thead: [ 1, "<table>", "</table>" ],
4953	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
4954	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
4955	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
4956
4957	_default: [ 0, "", "" ]
4958};
4959
4960wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
4961wrapMap.th = wrapMap.td;
4962
4963// Support: IE <=9 only
4964if ( !support.option ) {
4965	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
4966}
4967
4968
4969function getAll( context, tag ) {
4970
4971	// Support: IE <=9 - 11 only
4972	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
4973	var ret;
4974
4975	if ( typeof context.getElementsByTagName !== "undefined" ) {
4976		ret = context.getElementsByTagName( tag || "*" );
4977
4978	} else if ( typeof context.querySelectorAll !== "undefined" ) {
4979		ret = context.querySelectorAll( tag || "*" );
4980
4981	} else {
4982		ret = [];
4983	}
4984
4985	if ( tag === undefined || tag && nodeName( context, tag ) ) {
4986		return jQuery.merge( [ context ], ret );
4987	}
4988
4989	return ret;
4990}
4991
4992
4993// Mark scripts as having already been evaluated
4994function setGlobalEval( elems, refElements ) {
4995	var i = 0,
4996		l = elems.length;
4997
4998	for ( ; i < l; i++ ) {
4999		dataPriv.set(
5000			elems[ i ],
5001			"globalEval",
5002			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
5003		);
5004	}
5005}
5006
5007
5008var rhtml = /<|&#?\w+;/;
5009
5010function buildFragment( elems, context, scripts, selection, ignored ) {
5011	var elem, tmp, tag, wrap, attached, j,
5012		fragment = context.createDocumentFragment(),
5013		nodes = [],
5014		i = 0,
5015		l = elems.length;
5016
5017	for ( ; i < l; i++ ) {
5018		elem = elems[ i ];
5019
5020		if ( elem || elem === 0 ) {
5021
5022			// Add nodes directly
5023			if ( toType( elem ) === "object" ) {
5024
5025				// Support: Android <=4.0 only, PhantomJS 1 only
5026				// push.apply(_, arraylike) throws on ancient WebKit
5027				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
5028
5029			// Convert non-html into a text node
5030			} else if ( !rhtml.test( elem ) ) {
5031				nodes.push( context.createTextNode( elem ) );
5032
5033			// Convert html into DOM nodes
5034			} else {
5035				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
5036
5037				// Deserialize a standard representation
5038				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
5039				wrap = wrapMap[ tag ] || wrapMap._default;
5040				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
5041
5042				// Descend through wrappers to the right content
5043				j = wrap[ 0 ];
5044				while ( j-- ) {
5045					tmp = tmp.lastChild;
5046				}
5047
5048				// Support: Android <=4.0 only, PhantomJS 1 only
5049				// push.apply(_, arraylike) throws on ancient WebKit
5050				jQuery.merge( nodes, tmp.childNodes );
5051
5052				// Remember the top-level container
5053				tmp = fragment.firstChild;
5054
5055				// Ensure the created nodes are orphaned (#12392)
5056				tmp.textContent = "";
5057			}
5058		}
5059	}
5060
5061	// Remove wrapper from fragment
5062	fragment.textContent = "";
5063
5064	i = 0;
5065	while ( ( elem = nodes[ i++ ] ) ) {
5066
5067		// Skip elements already in the context collection (trac-4087)
5068		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
5069			if ( ignored ) {
5070				ignored.push( elem );
5071			}
5072			continue;
5073		}
5074
5075		attached = isAttached( elem );
5076
5077		// Append to fragment
5078		tmp = getAll( fragment.appendChild( elem ), "script" );
5079
5080		// Preserve script evaluation history
5081		if ( attached ) {
5082			setGlobalEval( tmp );
5083		}
5084
5085		// Capture executables
5086		if ( scripts ) {
5087			j = 0;
5088			while ( ( elem = tmp[ j++ ] ) ) {
5089				if ( rscriptType.test( elem.type || "" ) ) {
5090					scripts.push( elem );
5091				}
5092			}
5093		}
5094	}
5095
5096	return fragment;
5097}
5098
5099
5100var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
5101
5102function returnTrue() {
5103	return true;
5104}
5105
5106function returnFalse() {
5107	return false;
5108}
5109
5110// Support: IE <=9 - 11+
5111// focus() and blur() are asynchronous, except when they are no-op.
5112// So expect focus to be synchronous when the element is already active,
5113// and blur to be synchronous when the element is not already active.
5114// (focus and blur are always synchronous in other supported browsers,
5115// this just defines when we can count on it).
5116function expectSync( elem, type ) {
5117	return ( elem === safeActiveElement() ) === ( type === "focus" );
5118}
5119
5120// Support: IE <=9 only
5121// Accessing document.activeElement can throw unexpectedly
5122// https://bugs.jquery.com/ticket/13393
5123function safeActiveElement() {
5124	try {
5125		return document.activeElement;
5126	} catch ( err ) { }
5127}
5128
5129function on( elem, types, selector, data, fn, one ) {
5130	var origFn, type;
5131
5132	// Types can be a map of types/handlers
5133	if ( typeof types === "object" ) {
5134
5135		// ( types-Object, selector, data )
5136		if ( typeof selector !== "string" ) {
5137
5138			// ( types-Object, data )
5139			data = data || selector;
5140			selector = undefined;
5141		}
5142		for ( type in types ) {
5143			on( elem, type, selector, data, types[ type ], one );
5144		}
5145		return elem;
5146	}
5147
5148	if ( data == null && fn == null ) {
5149
5150		// ( types, fn )
5151		fn = selector;
5152		data = selector = undefined;
5153	} else if ( fn == null ) {
5154		if ( typeof selector === "string" ) {
5155
5156			// ( types, selector, fn )
5157			fn = data;
5158			data = undefined;
5159		} else {
5160
5161			// ( types, data, fn )
5162			fn = data;
5163			data = selector;
5164			selector = undefined;
5165		}
5166	}
5167	if ( fn === false ) {
5168		fn = returnFalse;
5169	} else if ( !fn ) {
5170		return elem;
5171	}
5172
5173	if ( one === 1 ) {
5174		origFn = fn;
5175		fn = function( event ) {
5176
5177			// Can use an empty set, since event contains the info
5178			jQuery().off( event );
5179			return origFn.apply( this, arguments );
5180		};
5181
5182		// Use same guid so caller can remove using origFn
5183		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
5184	}
5185	return elem.each( function() {
5186		jQuery.event.add( this, types, fn, data, selector );
5187	} );
5188}
5189
5190/*
5191 * Helper functions for managing events -- not part of the public interface.
5192 * Props to Dean Edwards' addEvent library for many of the ideas.
5193 */
5194jQuery.event = {
5195
5196	global: {},
5197
5198	add: function( elem, types, handler, data, selector ) {
5199
5200		var handleObjIn, eventHandle, tmp,
5201			events, t, handleObj,
5202			special, handlers, type, namespaces, origType,
5203			elemData = dataPriv.get( elem );
5204
5205		// Only attach events to objects that accept data
5206		if ( !acceptData( elem ) ) {
5207			return;
5208		}
5209
5210		// Caller can pass in an object of custom data in lieu of the handler
5211		if ( handler.handler ) {
5212			handleObjIn = handler;
5213			handler = handleObjIn.handler;
5214			selector = handleObjIn.selector;
5215		}
5216
5217		// Ensure that invalid selectors throw exceptions at attach time
5218		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
5219		if ( selector ) {
5220			jQuery.find.matchesSelector( documentElement, selector );
5221		}
5222
5223		// Make sure that the handler has a unique ID, used to find/remove it later
5224		if ( !handler.guid ) {
5225			handler.guid = jQuery.guid++;
5226		}
5227
5228		// Init the element's event structure and main handler, if this is the first
5229		if ( !( events = elemData.events ) ) {
5230			events = elemData.events = Object.create( null );
5231		}
5232		if ( !( eventHandle = elemData.handle ) ) {
5233			eventHandle = elemData.handle = function( e ) {
5234
5235				// Discard the second event of a jQuery.event.trigger() and
5236				// when an event is called after a page has unloaded
5237				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
5238					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
5239			};
5240		}
5241
5242		// Handle multiple events separated by a space
5243		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5244		t = types.length;
5245		while ( t-- ) {
5246			tmp = rtypenamespace.exec( types[ t ] ) || [];
5247			type = origType = tmp[ 1 ];
5248			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5249
5250			// There *must* be a type, no attaching namespace-only handlers
5251			if ( !type ) {
5252				continue;
5253			}
5254
5255			// If event changes its type, use the special event handlers for the changed type
5256			special = jQuery.event.special[ type ] || {};
5257
5258			// If selector defined, determine special event api type, otherwise given type
5259			type = ( selector ? special.delegateType : special.bindType ) || type;
5260
5261			// Update special based on newly reset type
5262			special = jQuery.event.special[ type ] || {};
5263
5264			// handleObj is passed to all event handlers
5265			handleObj = jQuery.extend( {
5266				type: type,
5267				origType: origType,
5268				data: data,
5269				handler: handler,
5270				guid: handler.guid,
5271				selector: selector,
5272				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
5273				namespace: namespaces.join( "." )
5274			}, handleObjIn );
5275
5276			// Init the event handler queue if we're the first
5277			if ( !( handlers = events[ type ] ) ) {
5278				handlers = events[ type ] = [];
5279				handlers.delegateCount = 0;
5280
5281				// Only use addEventListener if the special events handler returns false
5282				if ( !special.setup ||
5283					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
5284
5285					if ( elem.addEventListener ) {
5286						elem.addEventListener( type, eventHandle );
5287					}
5288				}
5289			}
5290
5291			if ( special.add ) {
5292				special.add.call( elem, handleObj );
5293
5294				if ( !handleObj.handler.guid ) {
5295					handleObj.handler.guid = handler.guid;
5296				}
5297			}
5298
5299			// Add to the element's handler list, delegates in front
5300			if ( selector ) {
5301				handlers.splice( handlers.delegateCount++, 0, handleObj );
5302			} else {
5303				handlers.push( handleObj );
5304			}
5305
5306			// Keep track of which events have ever been used, for event optimization
5307			jQuery.event.global[ type ] = true;
5308		}
5309
5310	},
5311
5312	// Detach an event or set of events from an element
5313	remove: function( elem, types, handler, selector, mappedTypes ) {
5314
5315		var j, origCount, tmp,
5316			events, t, handleObj,
5317			special, handlers, type, namespaces, origType,
5318			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
5319
5320		if ( !elemData || !( events = elemData.events ) ) {
5321			return;
5322		}
5323
5324		// Once for each type.namespace in types; type may be omitted
5325		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5326		t = types.length;
5327		while ( t-- ) {
5328			tmp = rtypenamespace.exec( types[ t ] ) || [];
5329			type = origType = tmp[ 1 ];
5330			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5331
5332			// Unbind all events (on this namespace, if provided) for the element
5333			if ( !type ) {
5334				for ( type in events ) {
5335					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
5336				}
5337				continue;
5338			}
5339
5340			special = jQuery.event.special[ type ] || {};
5341			type = ( selector ? special.delegateType : special.bindType ) || type;
5342			handlers = events[ type ] || [];
5343			tmp = tmp[ 2 ] &&
5344				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
5345
5346			// Remove matching events
5347			origCount = j = handlers.length;
5348			while ( j-- ) {
5349				handleObj = handlers[ j ];
5350
5351				if ( ( mappedTypes || origType === handleObj.origType ) &&
5352					( !handler || handler.guid === handleObj.guid ) &&
5353					( !tmp || tmp.test( handleObj.namespace ) ) &&
5354					( !selector || selector === handleObj.selector ||
5355						selector === "**" && handleObj.selector ) ) {
5356					handlers.splice( j, 1 );
5357
5358					if ( handleObj.selector ) {
5359						handlers.delegateCount--;
5360					}
5361					if ( special.remove ) {
5362						special.remove.call( elem, handleObj );
5363					}
5364				}
5365			}
5366
5367			// Remove generic event handler if we removed something and no more handlers exist
5368			// (avoids potential for endless recursion during removal of special event handlers)
5369			if ( origCount && !handlers.length ) {
5370				if ( !special.teardown ||
5371					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
5372
5373					jQuery.removeEvent( elem, type, elemData.handle );
5374				}
5375
5376				delete events[ type ];
5377			}
5378		}
5379
5380		// Remove data and the expando if it's no longer used
5381		if ( jQuery.isEmptyObject( events ) ) {
5382			dataPriv.remove( elem, "handle events" );
5383		}
5384	},
5385
5386	dispatch: function( nativeEvent ) {
5387
5388		var i, j, ret, matched, handleObj, handlerQueue,
5389			args = new Array( arguments.length ),
5390
5391			// Make a writable jQuery.Event from the native event object
5392			event = jQuery.event.fix( nativeEvent ),
5393
5394			handlers = (
5395				dataPriv.get( this, "events" ) || Object.create( null )
5396			)[ event.type ] || [],
5397			special = jQuery.event.special[ event.type ] || {};
5398
5399		// Use the fix-ed jQuery.Event rather than the (read-only) native event
5400		args[ 0 ] = event;
5401
5402		for ( i = 1; i < arguments.length; i++ ) {
5403			args[ i ] = arguments[ i ];
5404		}
5405
5406		event.delegateTarget = this;
5407
5408		// Call the preDispatch hook for the mapped type, and let it bail if desired
5409		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
5410			return;
5411		}
5412
5413		// Determine handlers
5414		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
5415
5416		// Run delegates first; they may want to stop propagation beneath us
5417		i = 0;
5418		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
5419			event.currentTarget = matched.elem;
5420
5421			j = 0;
5422			while ( ( handleObj = matched.handlers[ j++ ] ) &&
5423				!event.isImmediatePropagationStopped() ) {
5424
5425				// If the event is namespaced, then each handler is only invoked if it is
5426				// specially universal or its namespaces are a superset of the event's.
5427				if ( !event.rnamespace || handleObj.namespace === false ||
5428					event.rnamespace.test( handleObj.namespace ) ) {
5429
5430					event.handleObj = handleObj;
5431					event.data = handleObj.data;
5432
5433					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
5434						handleObj.handler ).apply( matched.elem, args );
5435
5436					if ( ret !== undefined ) {
5437						if ( ( event.result = ret ) === false ) {
5438							event.preventDefault();
5439							event.stopPropagation();
5440						}
5441					}
5442				}
5443			}
5444		}
5445
5446		// Call the postDispatch hook for the mapped type
5447		if ( special.postDispatch ) {
5448			special.postDispatch.call( this, event );
5449		}
5450
5451		return event.result;
5452	},
5453
5454	handlers: function( event, handlers ) {
5455		var i, handleObj, sel, matchedHandlers, matchedSelectors,
5456			handlerQueue = [],
5457			delegateCount = handlers.delegateCount,
5458			cur = event.target;
5459
5460		// Find delegate handlers
5461		if ( delegateCount &&
5462
5463			// Support: IE <=9
5464			// Black-hole SVG <use> instance trees (trac-13180)
5465			cur.nodeType &&
5466
5467			// Support: Firefox <=42
5468			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
5469			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
5470			// Support: IE 11 only
5471			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
5472			!( event.type === "click" && event.button >= 1 ) ) {
5473
5474			for ( ; cur !== this; cur = cur.parentNode || this ) {
5475
5476				// Don't check non-elements (#13208)
5477				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5478				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
5479					matchedHandlers = [];
5480					matchedSelectors = {};
5481					for ( i = 0; i < delegateCount; i++ ) {
5482						handleObj = handlers[ i ];
5483
5484						// Don't conflict with Object.prototype properties (#13203)
5485						sel = handleObj.selector + " ";
5486
5487						if ( matchedSelectors[ sel ] === undefined ) {
5488							matchedSelectors[ sel ] = handleObj.needsContext ?
5489								jQuery( sel, this ).index( cur ) > -1 :
5490								jQuery.find( sel, this, null, [ cur ] ).length;
5491						}
5492						if ( matchedSelectors[ sel ] ) {
5493							matchedHandlers.push( handleObj );
5494						}
5495					}
5496					if ( matchedHandlers.length ) {
5497						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
5498					}
5499				}
5500			}
5501		}
5502
5503		// Add the remaining (directly-bound) handlers
5504		cur = this;
5505		if ( delegateCount < handlers.length ) {
5506			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
5507		}
5508
5509		return handlerQueue;
5510	},
5511
5512	addProp: function( name, hook ) {
5513		Object.defineProperty( jQuery.Event.prototype, name, {
5514			enumerable: true,
5515			configurable: true,
5516
5517			get: isFunction( hook ) ?
5518				function() {
5519					if ( this.originalEvent ) {
5520						return hook( this.originalEvent );
5521					}
5522				} :
5523				function() {
5524					if ( this.originalEvent ) {
5525						return this.originalEvent[ name ];
5526					}
5527				},
5528
5529			set: function( value ) {
5530				Object.defineProperty( this, name, {
5531					enumerable: true,
5532					configurable: true,
5533					writable: true,
5534					value: value
5535				} );
5536			}
5537		} );
5538	},
5539
5540	fix: function( originalEvent ) {
5541		return originalEvent[ jQuery.expando ] ?
5542			originalEvent :
5543			new jQuery.Event( originalEvent );
5544	},
5545
5546	special: {
5547		load: {
5548
5549			// Prevent triggered image.load events from bubbling to window.load
5550			noBubble: true
5551		},
5552		click: {
5553
5554			// Utilize native event to ensure correct state for checkable inputs
5555			setup: function( data ) {
5556
5557				// For mutual compressibility with _default, replace `this` access with a local var.
5558				// `|| data` is dead code meant only to preserve the variable through minification.
5559				var el = this || data;
5560
5561				// Claim the first handler
5562				if ( rcheckableType.test( el.type ) &&
5563					el.click && nodeName( el, "input" ) ) {
5564
5565					// dataPriv.set( el, "click", ... )
5566					leverageNative( el, "click", returnTrue );
5567				}
5568
5569				// Return false to allow normal processing in the caller
5570				return false;
5571			},
5572			trigger: function( data ) {
5573
5574				// For mutual compressibility with _default, replace `this` access with a local var.
5575				// `|| data` is dead code meant only to preserve the variable through minification.
5576				var el = this || data;
5577
5578				// Force setup before triggering a click
5579				if ( rcheckableType.test( el.type ) &&
5580					el.click && nodeName( el, "input" ) ) {
5581
5582					leverageNative( el, "click" );
5583				}
5584
5585				// Return non-false to allow normal event-path propagation
5586				return true;
5587			},
5588
5589			// For cross-browser consistency, suppress native .click() on links
5590			// Also prevent it if we're currently inside a leveraged native-event stack
5591			_default: function( event ) {
5592				var target = event.target;
5593				return rcheckableType.test( target.type ) &&
5594					target.click && nodeName( target, "input" ) &&
5595					dataPriv.get( target, "click" ) ||
5596					nodeName( target, "a" );
5597			}
5598		},
5599
5600		beforeunload: {
5601			postDispatch: function( event ) {
5602
5603				// Support: Firefox 20+
5604				// Firefox doesn't alert if the returnValue field is not set.
5605				if ( event.result !== undefined && event.originalEvent ) {
5606					event.originalEvent.returnValue = event.result;
5607				}
5608			}
5609		}
5610	}
5611};
5612
5613// Ensure the presence of an event listener that handles manually-triggered
5614// synthetic events by interrupting progress until reinvoked in response to
5615// *native* events that it fires directly, ensuring that state changes have
5616// already occurred before other listeners are invoked.
5617function leverageNative( el, type, expectSync ) {
5618
5619	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
5620	if ( !expectSync ) {
5621		if ( dataPriv.get( el, type ) === undefined ) {
5622			jQuery.event.add( el, type, returnTrue );
5623		}
5624		return;
5625	}
5626
5627	// Register the controller as a special universal handler for all event namespaces
5628	dataPriv.set( el, type, false );
5629	jQuery.event.add( el, type, {
5630		namespace: false,
5631		handler: function( event ) {
5632			var notAsync, result,
5633				saved = dataPriv.get( this, type );
5634
5635			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
5636
5637				// Interrupt processing of the outer synthetic .trigger()ed event
5638				// Saved data should be false in such cases, but might be a leftover capture object
5639				// from an async native handler (gh-4350)
5640				if ( !saved.length ) {
5641
5642					// Store arguments for use when handling the inner native event
5643					// There will always be at least one argument (an event object), so this array
5644					// will not be confused with a leftover capture object.
5645					saved = slice.call( arguments );
5646					dataPriv.set( this, type, saved );
5647
5648					// Trigger the native event and capture its result
5649					// Support: IE <=9 - 11+
5650					// focus() and blur() are asynchronous
5651					notAsync = expectSync( this, type );
5652					this[ type ]();
5653					result = dataPriv.get( this, type );
5654					if ( saved !== result || notAsync ) {
5655						dataPriv.set( this, type, false );
5656					} else {
5657						result = {};
5658					}
5659					if ( saved !== result ) {
5660
5661						// Cancel the outer synthetic event
5662						event.stopImmediatePropagation();
5663						event.preventDefault();
5664
5665						// Support: Chrome 86+
5666						// In Chrome, if an element having a focusout handler is blurred by
5667						// clicking outside of it, it invokes the handler synchronously. If
5668						// that handler calls `.remove()` on the element, the data is cleared,
5669						// leaving `result` undefined. We need to guard against this.
5670						return result && result.value;
5671					}
5672
5673				// If this is an inner synthetic event for an event with a bubbling surrogate
5674				// (focus or blur), assume that the surrogate already propagated from triggering the
5675				// native event and prevent that from happening again here.
5676				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
5677				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
5678				// less bad than duplication.
5679				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
5680					event.stopPropagation();
5681				}
5682
5683			// If this is a native event triggered above, everything is now in order
5684			// Fire an inner synthetic event with the original arguments
5685			} else if ( saved.length ) {
5686
5687				// ...and capture the result
5688				dataPriv.set( this, type, {
5689					value: jQuery.event.trigger(
5690
5691						// Support: IE <=9 - 11+
5692						// Extend with the prototype to reset the above stopImmediatePropagation()
5693						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
5694						saved.slice( 1 ),
5695						this
5696					)
5697				} );
5698
5699				// Abort handling of the native event
5700				event.stopImmediatePropagation();
5701			}
5702		}
5703	} );
5704}
5705
5706jQuery.removeEvent = function( elem, type, handle ) {
5707
5708	// This "if" is needed for plain objects
5709	if ( elem.removeEventListener ) {
5710		elem.removeEventListener( type, handle );
5711	}
5712};
5713
5714jQuery.Event = function( src, props ) {
5715
5716	// Allow instantiation without the 'new' keyword
5717	if ( !( this instanceof jQuery.Event ) ) {
5718		return new jQuery.Event( src, props );
5719	}
5720
5721	// Event object
5722	if ( src && src.type ) {
5723		this.originalEvent = src;
5724		this.type = src.type;
5725
5726		// Events bubbling up the document may have been marked as prevented
5727		// by a handler lower down the tree; reflect the correct value.
5728		this.isDefaultPrevented = src.defaultPrevented ||
5729				src.defaultPrevented === undefined &&
5730
5731				// Support: Android <=2.3 only
5732				src.returnValue === false ?
5733			returnTrue :
5734			returnFalse;
5735
5736		// Create target properties
5737		// Support: Safari <=6 - 7 only
5738		// Target should not be a text node (#504, #13143)
5739		this.target = ( src.target && src.target.nodeType === 3 ) ?
5740			src.target.parentNode :
5741			src.target;
5742
5743		this.currentTarget = src.currentTarget;
5744		this.relatedTarget = src.relatedTarget;
5745
5746	// Event type
5747	} else {
5748		this.type = src;
5749	}
5750
5751	// Put explicitly provided properties onto the event object
5752	if ( props ) {
5753		jQuery.extend( this, props );
5754	}
5755
5756	// Create a timestamp if incoming event doesn't have one
5757	this.timeStamp = src && src.timeStamp || Date.now();
5758
5759	// Mark it as fixed
5760	this[ jQuery.expando ] = true;
5761};
5762
5763// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
5764// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
5765jQuery.Event.prototype = {
5766	constructor: jQuery.Event,
5767	isDefaultPrevented: returnFalse,
5768	isPropagationStopped: returnFalse,
5769	isImmediatePropagationStopped: returnFalse,
5770	isSimulated: false,
5771
5772	preventDefault: function() {
5773		var e = this.originalEvent;
5774
5775		this.isDefaultPrevented = returnTrue;
5776
5777		if ( e && !this.isSimulated ) {
5778			e.preventDefault();
5779		}
5780	},
5781	stopPropagation: function() {
5782		var e = this.originalEvent;
5783
5784		this.isPropagationStopped = returnTrue;
5785
5786		if ( e && !this.isSimulated ) {
5787			e.stopPropagation();
5788		}
5789	},
5790	stopImmediatePropagation: function() {
5791		var e = this.originalEvent;
5792
5793		this.isImmediatePropagationStopped = returnTrue;
5794
5795		if ( e && !this.isSimulated ) {
5796			e.stopImmediatePropagation();
5797		}
5798
5799		this.stopPropagation();
5800	}
5801};
5802
5803// Includes all common event props including KeyEvent and MouseEvent specific props
5804jQuery.each( {
5805	altKey: true,
5806	bubbles: true,
5807	cancelable: true,
5808	changedTouches: true,
5809	ctrlKey: true,
5810	detail: true,
5811	eventPhase: true,
5812	metaKey: true,
5813	pageX: true,
5814	pageY: true,
5815	shiftKey: true,
5816	view: true,
5817	"char": true,
5818	code: true,
5819	charCode: true,
5820	key: true,
5821	keyCode: true,
5822	button: true,
5823	buttons: true,
5824	clientX: true,
5825	clientY: true,
5826	offsetX: true,
5827	offsetY: true,
5828	pointerId: true,
5829	pointerType: true,
5830	screenX: true,
5831	screenY: true,
5832	targetTouches: true,
5833	toElement: true,
5834	touches: true,
5835	which: true
5836}, jQuery.event.addProp );
5837
5838jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
5839	jQuery.event.special[ type ] = {
5840
5841		// Utilize native event if possible so blur/focus sequence is correct
5842		setup: function() {
5843
5844			// Claim the first handler
5845			// dataPriv.set( this, "focus", ... )
5846			// dataPriv.set( this, "blur", ... )
5847			leverageNative( this, type, expectSync );
5848
5849			// Return false to allow normal processing in the caller
5850			return false;
5851		},
5852		trigger: function() {
5853
5854			// Force setup before trigger
5855			leverageNative( this, type );
5856
5857			// Return non-false to allow normal event-path propagation
5858			return true;
5859		},
5860
5861		// Suppress native focus or blur as it's already being fired
5862		// in leverageNative.
5863		_default: function() {
5864			return true;
5865		},
5866
5867		delegateType: delegateType
5868	};
5869} );
5870
5871// Create mouseenter/leave events using mouseover/out and event-time checks
5872// so that event delegation works in jQuery.
5873// Do the same for pointerenter/pointerleave and pointerover/pointerout
5874//
5875// Support: Safari 7 only
5876// Safari sends mouseenter too often; see:
5877// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
5878// for the description of the bug (it existed in older Chrome versions as well).
5879jQuery.each( {
5880	mouseenter: "mouseover",
5881	mouseleave: "mouseout",
5882	pointerenter: "pointerover",
5883	pointerleave: "pointerout"
5884}, function( orig, fix ) {
5885	jQuery.event.special[ orig ] = {
5886		delegateType: fix,
5887		bindType: fix,
5888
5889		handle: function( event ) {
5890			var ret,
5891				target = this,
5892				related = event.relatedTarget,
5893				handleObj = event.handleObj;
5894
5895			// For mouseenter/leave call the handler if related is outside the target.
5896			// NB: No relatedTarget if the mouse left/entered the browser window
5897			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
5898				event.type = handleObj.origType;
5899				ret = handleObj.handler.apply( this, arguments );
5900				event.type = fix;
5901			}
5902			return ret;
5903		}
5904	};
5905} );
5906
5907jQuery.fn.extend( {
5908
5909	on: function( types, selector, data, fn ) {
5910		return on( this, types, selector, data, fn );
5911	},
5912	one: function( types, selector, data, fn ) {
5913		return on( this, types, selector, data, fn, 1 );
5914	},
5915	off: function( types, selector, fn ) {
5916		var handleObj, type;
5917		if ( types && types.preventDefault && types.handleObj ) {
5918
5919			// ( event )  dispatched jQuery.Event
5920			handleObj = types.handleObj;
5921			jQuery( types.delegateTarget ).off(
5922				handleObj.namespace ?
5923					handleObj.origType + "." + handleObj.namespace :
5924					handleObj.origType,
5925				handleObj.selector,
5926				handleObj.handler
5927			);
5928			return this;
5929		}
5930		if ( typeof types === "object" ) {
5931
5932			// ( types-object [, selector] )
5933			for ( type in types ) {
5934				this.off( type, selector, types[ type ] );
5935			}
5936			return this;
5937		}
5938		if ( selector === false || typeof selector === "function" ) {
5939
5940			// ( types [, fn] )
5941			fn = selector;
5942			selector = undefined;
5943		}
5944		if ( fn === false ) {
5945			fn = returnFalse;
5946		}
5947		return this.each( function() {
5948			jQuery.event.remove( this, types, fn, selector );
5949		} );
5950	}
5951} );
5952
5953
5954var
5955
5956	// Support: IE <=10 - 11, Edge 12 - 13 only
5957	// In IE/Edge using regex groups here causes severe slowdowns.
5958	// See https://connect.microsoft.com/IE/feedback/details/1736512/
5959	rnoInnerhtml = /<script|<style|<link/i,
5960
5961	// checked="checked" or checked
5962	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5963	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
5964
5965// Prefer a tbody over its parent table for containing new rows
5966function manipulationTarget( elem, content ) {
5967	if ( nodeName( elem, "table" ) &&
5968		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
5969
5970		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
5971	}
5972
5973	return elem;
5974}
5975
5976// Replace/restore the type attribute of script elements for safe DOM manipulation
5977function disableScript( elem ) {
5978	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
5979	return elem;
5980}
5981function restoreScript( elem ) {
5982	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
5983		elem.type = elem.type.slice( 5 );
5984	} else {
5985		elem.removeAttribute( "type" );
5986	}
5987
5988	return elem;
5989}
5990
5991function cloneCopyEvent( src, dest ) {
5992	var i, l, type, pdataOld, udataOld, udataCur, events;
5993
5994	if ( dest.nodeType !== 1 ) {
5995		return;
5996	}
5997
5998	// 1. Copy private data: events, handlers, etc.
5999	if ( dataPriv.hasData( src ) ) {
6000		pdataOld = dataPriv.get( src );
6001		events = pdataOld.events;
6002
6003		if ( events ) {
6004			dataPriv.remove( dest, "handle events" );
6005
6006			for ( type in events ) {
6007				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
6008					jQuery.event.add( dest, type, events[ type ][ i ] );
6009				}
6010			}
6011		}
6012	}
6013
6014	// 2. Copy user data
6015	if ( dataUser.hasData( src ) ) {
6016		udataOld = dataUser.access( src );
6017		udataCur = jQuery.extend( {}, udataOld );
6018
6019		dataUser.set( dest, udataCur );
6020	}
6021}
6022
6023// Fix IE bugs, see support tests
6024function fixInput( src, dest ) {
6025	var nodeName = dest.nodeName.toLowerCase();
6026
6027	// Fails to persist the checked state of a cloned checkbox or radio button.
6028	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
6029		dest.checked = src.checked;
6030
6031	// Fails to return the selected option to the default selected state when cloning options
6032	} else if ( nodeName === "input" || nodeName === "textarea" ) {
6033		dest.defaultValue = src.defaultValue;
6034	}
6035}
6036
6037function domManip( collection, args, callback, ignored ) {
6038
6039	// Flatten any nested arrays
6040	args = flat( args );
6041
6042	var fragment, first, scripts, hasScripts, node, doc,
6043		i = 0,
6044		l = collection.length,
6045		iNoClone = l - 1,
6046		value = args[ 0 ],
6047		valueIsFunction = isFunction( value );
6048
6049	// We can't cloneNode fragments that contain checked, in WebKit
6050	if ( valueIsFunction ||
6051			( l > 1 && typeof value === "string" &&
6052				!support.checkClone && rchecked.test( value ) ) ) {
6053		return collection.each( function( index ) {
6054			var self = collection.eq( index );
6055			if ( valueIsFunction ) {
6056				args[ 0 ] = value.call( this, index, self.html() );
6057			}
6058			domManip( self, args, callback, ignored );
6059		} );
6060	}
6061
6062	if ( l ) {
6063		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
6064		first = fragment.firstChild;
6065
6066		if ( fragment.childNodes.length === 1 ) {
6067			fragment = first;
6068		}
6069
6070		// Require either new content or an interest in ignored elements to invoke the callback
6071		if ( first || ignored ) {
6072			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
6073			hasScripts = scripts.length;
6074
6075			// Use the original fragment for the last item
6076			// instead of the first because it can end up
6077			// being emptied incorrectly in certain situations (#8070).
6078			for ( ; i < l; i++ ) {
6079				node = fragment;
6080
6081				if ( i !== iNoClone ) {
6082					node = jQuery.clone( node, true, true );
6083
6084					// Keep references to cloned scripts for later restoration
6085					if ( hasScripts ) {
6086
6087						// Support: Android <=4.0 only, PhantomJS 1 only
6088						// push.apply(_, arraylike) throws on ancient WebKit
6089						jQuery.merge( scripts, getAll( node, "script" ) );
6090					}
6091				}
6092
6093				callback.call( collection[ i ], node, i );
6094			}
6095
6096			if ( hasScripts ) {
6097				doc = scripts[ scripts.length - 1 ].ownerDocument;
6098
6099				// Reenable scripts
6100				jQuery.map( scripts, restoreScript );
6101
6102				// Evaluate executable scripts on first document insertion
6103				for ( i = 0; i < hasScripts; i++ ) {
6104					node = scripts[ i ];
6105					if ( rscriptType.test( node.type || "" ) &&
6106						!dataPriv.access( node, "globalEval" ) &&
6107						jQuery.contains( doc, node ) ) {
6108
6109						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
6110
6111							// Optional AJAX dependency, but won't run scripts if not present
6112							if ( jQuery._evalUrl && !node.noModule ) {
6113								jQuery._evalUrl( node.src, {
6114									nonce: node.nonce || node.getAttribute( "nonce" )
6115								}, doc );
6116							}
6117						} else {
6118							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
6119						}
6120					}
6121				}
6122			}
6123		}
6124	}
6125
6126	return collection;
6127}
6128
6129function remove( elem, selector, keepData ) {
6130	var node,
6131		nodes = selector ? jQuery.filter( selector, elem ) : elem,
6132		i = 0;
6133
6134	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
6135		if ( !keepData && node.nodeType === 1 ) {
6136			jQuery.cleanData( getAll( node ) );
6137		}
6138
6139		if ( node.parentNode ) {
6140			if ( keepData && isAttached( node ) ) {
6141				setGlobalEval( getAll( node, "script" ) );
6142			}
6143			node.parentNode.removeChild( node );
6144		}
6145	}
6146
6147	return elem;
6148}
6149
6150jQuery.extend( {
6151	htmlPrefilter: function( html ) {
6152		return html;
6153	},
6154
6155	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
6156		var i, l, srcElements, destElements,
6157			clone = elem.cloneNode( true ),
6158			inPage = isAttached( elem );
6159
6160		// Fix IE cloning issues
6161		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
6162				!jQuery.isXMLDoc( elem ) ) {
6163
6164			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
6165			destElements = getAll( clone );
6166			srcElements = getAll( elem );
6167
6168			for ( i = 0, l = srcElements.length; i < l; i++ ) {
6169				fixInput( srcElements[ i ], destElements[ i ] );
6170			}
6171		}
6172
6173		// Copy the events from the original to the clone
6174		if ( dataAndEvents ) {
6175			if ( deepDataAndEvents ) {
6176				srcElements = srcElements || getAll( elem );
6177				destElements = destElements || getAll( clone );
6178
6179				for ( i = 0, l = srcElements.length; i < l; i++ ) {
6180					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
6181				}
6182			} else {
6183				cloneCopyEvent( elem, clone );
6184			}
6185		}
6186
6187		// Preserve script evaluation history
6188		destElements = getAll( clone, "script" );
6189		if ( destElements.length > 0 ) {
6190			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
6191		}
6192
6193		// Return the cloned set
6194		return clone;
6195	},
6196
6197	cleanData: function( elems ) {
6198		var data, elem, type,
6199			special = jQuery.event.special,
6200			i = 0;
6201
6202		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
6203			if ( acceptData( elem ) ) {
6204				if ( ( data = elem[ dataPriv.expando ] ) ) {
6205					if ( data.events ) {
6206						for ( type in data.events ) {
6207							if ( special[ type ] ) {
6208								jQuery.event.remove( elem, type );
6209
6210							// This is a shortcut to avoid jQuery.event.remove's overhead
6211							} else {
6212								jQuery.removeEvent( elem, type, data.handle );
6213							}
6214						}
6215					}
6216
6217					// Support: Chrome <=35 - 45+
6218					// Assign undefined instead of using delete, see Data#remove
6219					elem[ dataPriv.expando ] = undefined;
6220				}
6221				if ( elem[ dataUser.expando ] ) {
6222
6223					// Support: Chrome <=35 - 45+
6224					// Assign undefined instead of using delete, see Data#remove
6225					elem[ dataUser.expando ] = undefined;
6226				}
6227			}
6228		}
6229	}
6230} );
6231
6232jQuery.fn.extend( {
6233	detach: function( selector ) {
6234		return remove( this, selector, true );
6235	},
6236
6237	remove: function( selector ) {
6238		return remove( this, selector );
6239	},
6240
6241	text: function( value ) {
6242		return access( this, function( value ) {
6243			return value === undefined ?
6244				jQuery.text( this ) :
6245				this.empty().each( function() {
6246					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6247						this.textContent = value;
6248					}
6249				} );
6250		}, null, value, arguments.length );
6251	},
6252
6253	append: function() {
6254		return domManip( this, arguments, function( elem ) {
6255			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6256				var target = manipulationTarget( this, elem );
6257				target.appendChild( elem );
6258			}
6259		} );
6260	},
6261
6262	prepend: function() {
6263		return domManip( this, arguments, function( elem ) {
6264			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6265				var target = manipulationTarget( this, elem );
6266				target.insertBefore( elem, target.firstChild );
6267			}
6268		} );
6269	},
6270
6271	before: function() {
6272		return domManip( this, arguments, function( elem ) {
6273			if ( this.parentNode ) {
6274				this.parentNode.insertBefore( elem, this );
6275			}
6276		} );
6277	},
6278
6279	after: function() {
6280		return domManip( this, arguments, function( elem ) {
6281			if ( this.parentNode ) {
6282				this.parentNode.insertBefore( elem, this.nextSibling );
6283			}
6284		} );
6285	},
6286
6287	empty: function() {
6288		var elem,
6289			i = 0;
6290
6291		for ( ; ( elem = this[ i ] ) != null; i++ ) {
6292			if ( elem.nodeType === 1 ) {
6293
6294				// Prevent memory leaks
6295				jQuery.cleanData( getAll( elem, false ) );
6296
6297				// Remove any remaining nodes
6298				elem.textContent = "";
6299			}
6300		}
6301
6302		return this;
6303	},
6304
6305	clone: function( dataAndEvents, deepDataAndEvents ) {
6306		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
6307		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
6308
6309		return this.map( function() {
6310			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
6311		} );
6312	},
6313
6314	html: function( value ) {
6315		return access( this, function( value ) {
6316			var elem = this[ 0 ] || {},
6317				i = 0,
6318				l = this.length;
6319
6320			if ( value === undefined && elem.nodeType === 1 ) {
6321				return elem.innerHTML;
6322			}
6323
6324			// See if we can take a shortcut and just use innerHTML
6325			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
6326				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
6327
6328				value = jQuery.htmlPrefilter( value );
6329
6330				try {
6331					for ( ; i < l; i++ ) {
6332						elem = this[ i ] || {};
6333
6334						// Remove element nodes and prevent memory leaks
6335						if ( elem.nodeType === 1 ) {
6336							jQuery.cleanData( getAll( elem, false ) );
6337							elem.innerHTML = value;
6338						}
6339					}
6340
6341					elem = 0;
6342
6343				// If using innerHTML throws an exception, use the fallback method
6344				} catch ( e ) {}
6345			}
6346
6347			if ( elem ) {
6348				this.empty().append( value );
6349			}
6350		}, null, value, arguments.length );
6351	},
6352
6353	replaceWith: function() {
6354		var ignored = [];
6355
6356		// Make the changes, replacing each non-ignored context element with the new content
6357		return domManip( this, arguments, function( elem ) {
6358			var parent = this.parentNode;
6359
6360			if ( jQuery.inArray( this, ignored ) < 0 ) {
6361				jQuery.cleanData( getAll( this ) );
6362				if ( parent ) {
6363					parent.replaceChild( elem, this );
6364				}
6365			}
6366
6367		// Force callback invocation
6368		}, ignored );
6369	}
6370} );
6371
6372jQuery.each( {
6373	appendTo: "append",
6374	prependTo: "prepend",
6375	insertBefore: "before",
6376	insertAfter: "after",
6377	replaceAll: "replaceWith"
6378}, function( name, original ) {
6379	jQuery.fn[ name ] = function( selector ) {
6380		var elems,
6381			ret = [],
6382			insert = jQuery( selector ),
6383			last = insert.length - 1,
6384			i = 0;
6385
6386		for ( ; i <= last; i++ ) {
6387			elems = i === last ? this : this.clone( true );
6388			jQuery( insert[ i ] )[ original ]( elems );
6389
6390			// Support: Android <=4.0 only, PhantomJS 1 only
6391			// .get() because push.apply(_, arraylike) throws on ancient WebKit
6392			push.apply( ret, elems.get() );
6393		}
6394
6395		return this.pushStack( ret );
6396	};
6397} );
6398var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
6399
6400var getStyles = function( elem ) {
6401
6402		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
6403		// IE throws on elements created in popups
6404		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6405		var view = elem.ownerDocument.defaultView;
6406
6407		if ( !view || !view.opener ) {
6408			view = window;
6409		}
6410
6411		return view.getComputedStyle( elem );
6412	};
6413
6414var swap = function( elem, options, callback ) {
6415	var ret, name,
6416		old = {};
6417
6418	// Remember the old values, and insert the new ones
6419	for ( name in options ) {
6420		old[ name ] = elem.style[ name ];
6421		elem.style[ name ] = options[ name ];
6422	}
6423
6424	ret = callback.call( elem );
6425
6426	// Revert the old values
6427	for ( name in options ) {
6428		elem.style[ name ] = old[ name ];
6429	}
6430
6431	return ret;
6432};
6433
6434
6435var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6436
6437
6438
6439( function() {
6440
6441	// Executing both pixelPosition & boxSizingReliable tests require only one layout
6442	// so they're executed at the same time to save the second computation.
6443	function computeStyleTests() {
6444
6445		// This is a singleton, we need to execute it only once
6446		if ( !div ) {
6447			return;
6448		}
6449
6450		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
6451			"margin-top:1px;padding:0;border:0";
6452		div.style.cssText =
6453			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
6454			"margin:auto;border:1px;padding:1px;" +
6455			"width:60%;top:1%";
6456		documentElement.appendChild( container ).appendChild( div );
6457
6458		var divStyle = window.getComputedStyle( div );
6459		pixelPositionVal = divStyle.top !== "1%";
6460
6461		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
6462		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
6463
6464		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
6465		// Some styles come back with percentage values, even though they shouldn't
6466		div.style.right = "60%";
6467		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
6468
6469		// Support: IE 9 - 11 only
6470		// Detect misreporting of content dimensions for box-sizing:border-box elements
6471		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
6472
6473		// Support: IE 9 only
6474		// Detect overflow:scroll screwiness (gh-3699)
6475		// Support: Chrome <=64
6476		// Don't get tricked when zoom affects offsetWidth (gh-4029)
6477		div.style.position = "absolute";
6478		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
6479
6480		documentElement.removeChild( container );
6481
6482		// Nullify the div so it wouldn't be stored in the memory and
6483		// it will also be a sign that checks already performed
6484		div = null;
6485	}
6486
6487	function roundPixelMeasures( measure ) {
6488		return Math.round( parseFloat( measure ) );
6489	}
6490
6491	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
6492		reliableTrDimensionsVal, reliableMarginLeftVal,
6493		container = document.createElement( "div" ),
6494		div = document.createElement( "div" );
6495
6496	// Finish early in limited (non-browser) environments
6497	if ( !div.style ) {
6498		return;
6499	}
6500
6501	// Support: IE <=9 - 11 only
6502	// Style of cloned element affects source element cloned (#8908)
6503	div.style.backgroundClip = "content-box";
6504	div.cloneNode( true ).style.backgroundClip = "";
6505	support.clearCloneStyle = div.style.backgroundClip === "content-box";
6506
6507	jQuery.extend( support, {
6508		boxSizingReliable: function() {
6509			computeStyleTests();
6510			return boxSizingReliableVal;
6511		},
6512		pixelBoxStyles: function() {
6513			computeStyleTests();
6514			return pixelBoxStylesVal;
6515		},
6516		pixelPosition: function() {
6517			computeStyleTests();
6518			return pixelPositionVal;
6519		},
6520		reliableMarginLeft: function() {
6521			computeStyleTests();
6522			return reliableMarginLeftVal;
6523		},
6524		scrollboxSize: function() {
6525			computeStyleTests();
6526			return scrollboxSizeVal;
6527		},
6528
6529		// Support: IE 9 - 11+, Edge 15 - 18+
6530		// IE/Edge misreport `getComputedStyle` of table rows with width/height
6531		// set in CSS while `offset*` properties report correct values.
6532		// Behavior in IE 9 is more subtle than in newer versions & it passes
6533		// some versions of this test; make sure not to make it pass there!
6534		//
6535		// Support: Firefox 70+
6536		// Only Firefox includes border widths
6537		// in computed dimensions. (gh-4529)
6538		reliableTrDimensions: function() {
6539			var table, tr, trChild, trStyle;
6540			if ( reliableTrDimensionsVal == null ) {
6541				table = document.createElement( "table" );
6542				tr = document.createElement( "tr" );
6543				trChild = document.createElement( "div" );
6544
6545				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
6546				tr.style.cssText = "border:1px solid";
6547
6548				// Support: Chrome 86+
6549				// Height set through cssText does not get applied.
6550				// Computed height then comes back as 0.
6551				tr.style.height = "1px";
6552				trChild.style.height = "9px";
6553
6554				// Support: Android 8 Chrome 86+
6555				// In our bodyBackground.html iframe,
6556				// display for all div elements is set to "inline",
6557				// which causes a problem only in Android 8 Chrome 86.
6558				// Ensuring the div is display: block
6559				// gets around this issue.
6560				trChild.style.display = "block";
6561
6562				documentElement
6563					.appendChild( table )
6564					.appendChild( tr )
6565					.appendChild( trChild );
6566
6567				trStyle = window.getComputedStyle( tr );
6568				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
6569					parseInt( trStyle.borderTopWidth, 10 ) +
6570					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
6571
6572				documentElement.removeChild( table );
6573			}
6574			return reliableTrDimensionsVal;
6575		}
6576	} );
6577} )();
6578
6579
6580function curCSS( elem, name, computed ) {
6581	var width, minWidth, maxWidth, ret,
6582
6583		// Support: Firefox 51+
6584		// Retrieving style before computed somehow
6585		// fixes an issue with getting wrong values
6586		// on detached elements
6587		style = elem.style;
6588
6589	computed = computed || getStyles( elem );
6590
6591	// getPropertyValue is needed for:
6592	//   .css('filter') (IE 9 only, #12537)
6593	//   .css('--customProperty) (#3144)
6594	if ( computed ) {
6595		ret = computed.getPropertyValue( name ) || computed[ name ];
6596
6597		if ( ret === "" && !isAttached( elem ) ) {
6598			ret = jQuery.style( elem, name );
6599		}
6600
6601		// A tribute to the "awesome hack by Dean Edwards"
6602		// Android Browser returns percentage for some values,
6603		// but width seems to be reliably pixels.
6604		// This is against the CSSOM draft spec:
6605		// https://drafts.csswg.org/cssom/#resolved-values
6606		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
6607
6608			// Remember the original values
6609			width = style.width;
6610			minWidth = style.minWidth;
6611			maxWidth = style.maxWidth;
6612
6613			// Put in the new values to get a computed value out
6614			style.minWidth = style.maxWidth = style.width = ret;
6615			ret = computed.width;
6616
6617			// Revert the changed values
6618			style.width = width;
6619			style.minWidth = minWidth;
6620			style.maxWidth = maxWidth;
6621		}
6622	}
6623
6624	return ret !== undefined ?
6625
6626		// Support: IE <=9 - 11 only
6627		// IE returns zIndex value as an integer.
6628		ret + "" :
6629		ret;
6630}
6631
6632
6633function addGetHookIf( conditionFn, hookFn ) {
6634
6635	// Define the hook, we'll check on the first run if it's really needed.
6636	return {
6637		get: function() {
6638			if ( conditionFn() ) {
6639
6640				// Hook not needed (or it's not possible to use it due
6641				// to missing dependency), remove it.
6642				delete this.get;
6643				return;
6644			}
6645
6646			// Hook needed; redefine it so that the support test is not executed again.
6647			return ( this.get = hookFn ).apply( this, arguments );
6648		}
6649	};
6650}
6651
6652
6653var cssPrefixes = [ "Webkit", "Moz", "ms" ],
6654	emptyStyle = document.createElement( "div" ).style,
6655	vendorProps = {};
6656
6657// Return a vendor-prefixed property or undefined
6658function vendorPropName( name ) {
6659
6660	// Check for vendor prefixed names
6661	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
6662		i = cssPrefixes.length;
6663
6664	while ( i-- ) {
6665		name = cssPrefixes[ i ] + capName;
6666		if ( name in emptyStyle ) {
6667			return name;
6668		}
6669	}
6670}
6671
6672// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
6673function finalPropName( name ) {
6674	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
6675
6676	if ( final ) {
6677		return final;
6678	}
6679	if ( name in emptyStyle ) {
6680		return name;
6681	}
6682	return vendorProps[ name ] = vendorPropName( name ) || name;
6683}
6684
6685
6686var
6687
6688	// Swappable if display is none or starts with table
6689	// except "table", "table-cell", or "table-caption"
6690	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6691	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6692	rcustomProp = /^--/,
6693	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6694	cssNormalTransform = {
6695		letterSpacing: "0",
6696		fontWeight: "400"
6697	};
6698
6699function setPositiveNumber( _elem, value, subtract ) {
6700
6701	// Any relative (+/-) values have already been
6702	// normalized at this point
6703	var matches = rcssNum.exec( value );
6704	return matches ?
6705
6706		// Guard against undefined "subtract", e.g., when used as in cssHooks
6707		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
6708		value;
6709}
6710
6711function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
6712	var i = dimension === "width" ? 1 : 0,
6713		extra = 0,
6714		delta = 0;
6715
6716	// Adjustment may not be necessary
6717	if ( box === ( isBorderBox ? "border" : "content" ) ) {
6718		return 0;
6719	}
6720
6721	for ( ; i < 4; i += 2 ) {
6722
6723		// Both box models exclude margin
6724		if ( box === "margin" ) {
6725			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
6726		}
6727
6728		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
6729		if ( !isBorderBox ) {
6730
6731			// Add padding
6732			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6733
6734			// For "border" or "margin", add border
6735			if ( box !== "padding" ) {
6736				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6737
6738			// But still keep track of it otherwise
6739			} else {
6740				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6741			}
6742
6743		// If we get here with a border-box (content + padding + border), we're seeking "content" or
6744		// "padding" or "margin"
6745		} else {
6746
6747			// For "content", subtract padding
6748			if ( box === "content" ) {
6749				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6750			}
6751
6752			// For "content" or "padding", subtract border
6753			if ( box !== "margin" ) {
6754				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6755			}
6756		}
6757	}
6758
6759	// Account for positive content-box scroll gutter when requested by providing computedVal
6760	if ( !isBorderBox && computedVal >= 0 ) {
6761
6762		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
6763		// Assuming integer scroll gutter, subtract the rest and round down
6764		delta += Math.max( 0, Math.ceil(
6765			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
6766			computedVal -
6767			delta -
6768			extra -
6769			0.5
6770
6771		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
6772		// Use an explicit zero to avoid NaN (gh-3964)
6773		) ) || 0;
6774	}
6775
6776	return delta;
6777}
6778
6779function getWidthOrHeight( elem, dimension, extra ) {
6780
6781	// Start with computed style
6782	var styles = getStyles( elem ),
6783
6784		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
6785		// Fake content-box until we know it's needed to know the true value.
6786		boxSizingNeeded = !support.boxSizingReliable() || extra,
6787		isBorderBox = boxSizingNeeded &&
6788			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
6789		valueIsBorderBox = isBorderBox,
6790
6791		val = curCSS( elem, dimension, styles ),
6792		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
6793
6794	// Support: Firefox <=54
6795	// Return a confounding non-pixel value or feign ignorance, as appropriate.
6796	if ( rnumnonpx.test( val ) ) {
6797		if ( !extra ) {
6798			return val;
6799		}
6800		val = "auto";
6801	}
6802
6803
6804	// Support: IE 9 - 11 only
6805	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
6806	// In those cases, the computed value can be trusted to be border-box.
6807	if ( ( !support.boxSizingReliable() && isBorderBox ||
6808
6809		// Support: IE 10 - 11+, Edge 15 - 18+
6810		// IE/Edge misreport `getComputedStyle` of table rows with width/height
6811		// set in CSS while `offset*` properties report correct values.
6812		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
6813		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
6814
6815		// Fall back to offsetWidth/offsetHeight when value is "auto"
6816		// This happens for inline elements with no explicit setting (gh-3571)
6817		val === "auto" ||
6818
6819		// Support: Android <=4.1 - 4.3 only
6820		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
6821		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
6822
6823		// Make sure the element is visible & connected
6824		elem.getClientRects().length ) {
6825
6826		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
6827
6828		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
6829		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
6830		// retrieved value as a content box dimension.
6831		valueIsBorderBox = offsetProp in elem;
6832		if ( valueIsBorderBox ) {
6833			val = elem[ offsetProp ];
6834		}
6835	}
6836
6837	// Normalize "" and auto
6838	val = parseFloat( val ) || 0;
6839
6840	// Adjust for the element's box model
6841	return ( val +
6842		boxModelAdjustment(
6843			elem,
6844			dimension,
6845			extra || ( isBorderBox ? "border" : "content" ),
6846			valueIsBorderBox,
6847			styles,
6848
6849			// Provide the current computed size to request scroll gutter calculation (gh-3589)
6850			val
6851		)
6852	) + "px";
6853}
6854
6855jQuery.extend( {
6856
6857	// Add in style property hooks for overriding the default
6858	// behavior of getting and setting a style property
6859	cssHooks: {
6860		opacity: {
6861			get: function( elem, computed ) {
6862				if ( computed ) {
6863
6864					// We should always get a number back from opacity
6865					var ret = curCSS( elem, "opacity" );
6866					return ret === "" ? "1" : ret;
6867				}
6868			}
6869		}
6870	},
6871
6872	// Don't automatically add "px" to these possibly-unitless properties
6873	cssNumber: {
6874		"animationIterationCount": true,
6875		"columnCount": true,
6876		"fillOpacity": true,
6877		"flexGrow": true,
6878		"flexShrink": true,
6879		"fontWeight": true,
6880		"gridArea": true,
6881		"gridColumn": true,
6882		"gridColumnEnd": true,
6883		"gridColumnStart": true,
6884		"gridRow": true,
6885		"gridRowEnd": true,
6886		"gridRowStart": true,
6887		"lineHeight": true,
6888		"opacity": true,
6889		"order": true,
6890		"orphans": true,
6891		"widows": true,
6892		"zIndex": true,
6893		"zoom": true
6894	},
6895
6896	// Add in properties whose names you wish to fix before
6897	// setting or getting the value
6898	cssProps: {},
6899
6900	// Get and set the style property on a DOM Node
6901	style: function( elem, name, value, extra ) {
6902
6903		// Don't set styles on text and comment nodes
6904		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
6905			return;
6906		}
6907
6908		// Make sure that we're working with the right name
6909		var ret, type, hooks,
6910			origName = camelCase( name ),
6911			isCustomProp = rcustomProp.test( name ),
6912			style = elem.style;
6913
6914		// Make sure that we're working with the right name. We don't
6915		// want to query the value if it is a CSS custom property
6916		// since they are user-defined.
6917		if ( !isCustomProp ) {
6918			name = finalPropName( origName );
6919		}
6920
6921		// Gets hook for the prefixed version, then unprefixed version
6922		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6923
6924		// Check if we're setting a value
6925		if ( value !== undefined ) {
6926			type = typeof value;
6927
6928			// Convert "+=" or "-=" to relative numbers (#7345)
6929			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
6930				value = adjustCSS( elem, name, ret );
6931
6932				// Fixes bug #9237
6933				type = "number";
6934			}
6935
6936			// Make sure that null and NaN values aren't set (#7116)
6937			if ( value == null || value !== value ) {
6938				return;
6939			}
6940
6941			// If a number was passed in, add the unit (except for certain CSS properties)
6942			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
6943			// "px" to a few hardcoded values.
6944			if ( type === "number" && !isCustomProp ) {
6945				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
6946			}
6947
6948			// background-* props affect original clone's values
6949			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
6950				style[ name ] = "inherit";
6951			}
6952
6953			// If a hook was provided, use that value, otherwise just set the specified value
vendor: 25,692 bytes, lines 6954-7950
6954			if ( !hooks || !( "set" in hooks ) ||
6955				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
6956
6957				if ( isCustomProp ) {
6958					style.setProperty( name, value );
6959				} else {
6960					style[ name ] = value;
6961				}
6962			}
6963
6964		} else {
6965
6966			// If a hook was provided get the non-computed value from there
6967			if ( hooks && "get" in hooks &&
6968				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
6969
6970				return ret;
6971			}
6972
6973			// Otherwise just get the value from the style object
6974			return style[ name ];
6975		}
6976	},
6977
6978	css: function( elem, name, extra, styles ) {
6979		var val, num, hooks,
6980			origName = camelCase( name ),
6981			isCustomProp = rcustomProp.test( name );
6982
6983		// Make sure that we're working with the right name. We don't
6984		// want to modify the value if it is a CSS custom property
6985		// since they are user-defined.
6986		if ( !isCustomProp ) {
6987			name = finalPropName( origName );
6988		}
6989
6990		// Try prefixed name followed by the unprefixed name
6991		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6992
6993		// If a hook was provided get the computed value from there
6994		if ( hooks && "get" in hooks ) {
6995			val = hooks.get( elem, true, extra );
6996		}
6997
6998		// Otherwise, if a way to get the computed value exists, use that
6999		if ( val === undefined ) {
7000			val = curCSS( elem, name, styles );
7001		}
7002
7003		// Convert "normal" to computed value
7004		if ( val === "normal" && name in cssNormalTransform ) {
7005			val = cssNormalTransform[ name ];
7006		}
7007
7008		// Make numeric if forced or a qualifier was provided and val looks numeric
7009		if ( extra === "" || extra ) {
7010			num = parseFloat( val );
7011			return extra === true || isFinite( num ) ? num || 0 : val;
7012		}
7013
7014		return val;
7015	}
7016} );
7017
7018jQuery.each( [ "height", "width" ], function( _i, dimension ) {
7019	jQuery.cssHooks[ dimension ] = {
7020		get: function( elem, computed, extra ) {
7021			if ( computed ) {
7022
7023				// Certain elements can have dimension info if we invisibly show them
7024				// but it must have a current display style that would benefit
7025				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
7026
7027					// Support: Safari 8+
7028					// Table columns in Safari have non-zero offsetWidth & zero
7029					// getBoundingClientRect().width unless display is changed.
7030					// Support: IE <=11 only
7031					// Running getBoundingClientRect on a disconnected node
7032					// in IE throws an error.
7033					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
7034					swap( elem, cssShow, function() {
7035						return getWidthOrHeight( elem, dimension, extra );
7036					} ) :
7037					getWidthOrHeight( elem, dimension, extra );
7038			}
7039		},
7040
7041		set: function( elem, value, extra ) {
7042			var matches,
7043				styles = getStyles( elem ),
7044
7045				// Only read styles.position if the test has a chance to fail
7046				// to avoid forcing a reflow.
7047				scrollboxSizeBuggy = !support.scrollboxSize() &&
7048					styles.position === "absolute",
7049
7050				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
7051				boxSizingNeeded = scrollboxSizeBuggy || extra,
7052				isBorderBox = boxSizingNeeded &&
7053					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
7054				subtract = extra ?
7055					boxModelAdjustment(
7056						elem,
7057						dimension,
7058						extra,
7059						isBorderBox,
7060						styles
7061					) :
7062					0;
7063
7064			// Account for unreliable border-box dimensions by comparing offset* to computed and
7065			// faking a content-box to get border and padding (gh-3699)
7066			if ( isBorderBox && scrollboxSizeBuggy ) {
7067				subtract -= Math.ceil(
7068					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
7069					parseFloat( styles[ dimension ] ) -
7070					boxModelAdjustment( elem, dimension, "border", false, styles ) -
7071					0.5
7072				);
7073			}
7074
7075			// Convert to pixels if value adjustment is needed
7076			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
7077				( matches[ 3 ] || "px" ) !== "px" ) {
7078
7079				elem.style[ dimension ] = value;
7080				value = jQuery.css( elem, dimension );
7081			}
7082
7083			return setPositiveNumber( elem, value, subtract );
7084		}
7085	};
7086} );
7087
7088jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
7089	function( elem, computed ) {
7090		if ( computed ) {
7091			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
7092				elem.getBoundingClientRect().left -
7093					swap( elem, { marginLeft: 0 }, function() {
7094						return elem.getBoundingClientRect().left;
7095					} )
7096			) + "px";
7097		}
7098	}
7099);
7100
7101// These hooks are used by animate to expand properties
7102jQuery.each( {
7103	margin: "",
7104	padding: "",
7105	border: "Width"
7106}, function( prefix, suffix ) {
7107	jQuery.cssHooks[ prefix + suffix ] = {
7108		expand: function( value ) {
7109			var i = 0,
7110				expanded = {},
7111
7112				// Assumes a single number if not a string
7113				parts = typeof value === "string" ? value.split( " " ) : [ value ];
7114
7115			for ( ; i < 4; i++ ) {
7116				expanded[ prefix + cssExpand[ i ] + suffix ] =
7117					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
7118			}
7119
7120			return expanded;
7121		}
7122	};
7123
7124	if ( prefix !== "margin" ) {
7125		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
7126	}
7127} );
7128
7129jQuery.fn.extend( {
7130	css: function( name, value ) {
7131		return access( this, function( elem, name, value ) {
7132			var styles, len,
7133				map = {},
7134				i = 0;
7135
7136			if ( Array.isArray( name ) ) {
7137				styles = getStyles( elem );
7138				len = name.length;
7139
7140				for ( ; i < len; i++ ) {
7141					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
7142				}
7143
7144				return map;
7145			}
7146
7147			return value !== undefined ?
7148				jQuery.style( elem, name, value ) :
7149				jQuery.css( elem, name );
7150		}, name, value, arguments.length > 1 );
7151	}
7152} );
7153
7154
7155function Tween( elem, options, prop, end, easing ) {
7156	return new Tween.prototype.init( elem, options, prop, end, easing );
7157}
7158jQuery.Tween = Tween;
7159
7160Tween.prototype = {
7161	constructor: Tween,
7162	init: function( elem, options, prop, end, easing, unit ) {
7163		this.elem = elem;
7164		this.prop = prop;
7165		this.easing = easing || jQuery.easing._default;
7166		this.options = options;
7167		this.start = this.now = this.cur();
7168		this.end = end;
7169		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
7170	},
7171	cur: function() {
7172		var hooks = Tween.propHooks[ this.prop ];
7173
7174		return hooks && hooks.get ?
7175			hooks.get( this ) :
7176			Tween.propHooks._default.get( this );
7177	},
7178	run: function( percent ) {
7179		var eased,
7180			hooks = Tween.propHooks[ this.prop ];
7181
7182		if ( this.options.duration ) {
7183			this.pos = eased = jQuery.easing[ this.easing ](
7184				percent, this.options.duration * percent, 0, 1, this.options.duration
7185			);
7186		} else {
7187			this.pos = eased = percent;
7188		}
7189		this.now = ( this.end - this.start ) * eased + this.start;
7190
7191		if ( this.options.step ) {
7192			this.options.step.call( this.elem, this.now, this );
7193		}
7194
7195		if ( hooks && hooks.set ) {
7196			hooks.set( this );
7197		} else {
7198			Tween.propHooks._default.set( this );
7199		}
7200		return this;
7201	}
7202};
7203
7204Tween.prototype.init.prototype = Tween.prototype;
7205
7206Tween.propHooks = {
7207	_default: {
7208		get: function( tween ) {
7209			var result;
7210
7211			// Use a property on the element directly when it is not a DOM element,
7212			// or when there is no matching style property that exists.
7213			if ( tween.elem.nodeType !== 1 ||
7214				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
7215				return tween.elem[ tween.prop ];
7216			}
7217
7218			// Passing an empty string as a 3rd parameter to .css will automatically
7219			// attempt a parseFloat and fallback to a string if the parse fails.
7220			// Simple values such as "10px" are parsed to Float;
7221			// complex values such as "rotate(1rad)" are returned as-is.
7222			result = jQuery.css( tween.elem, tween.prop, "" );
7223
7224			// Empty strings, null, undefined and "auto" are converted to 0.
7225			return !result || result === "auto" ? 0 : result;
7226		},
7227		set: function( tween ) {
7228
7229			// Use step hook for back compat.
7230			// Use cssHook if its there.
7231			// Use .style if available and use plain properties where available.
7232			if ( jQuery.fx.step[ tween.prop ] ) {
7233				jQuery.fx.step[ tween.prop ]( tween );
7234			} else if ( tween.elem.nodeType === 1 && (
7235				jQuery.cssHooks[ tween.prop ] ||
7236					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
7237				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
7238			} else {
7239				tween.elem[ tween.prop ] = tween.now;
7240			}
7241		}
7242	}
7243};
7244
7245// Support: IE <=9 only
7246// Panic based approach to setting things on disconnected nodes
7247Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
7248	set: function( tween ) {
7249		if ( tween.elem.nodeType && tween.elem.parentNode ) {
7250			tween.elem[ tween.prop ] = tween.now;
7251		}
7252	}
7253};
7254
7255jQuery.easing = {
7256	linear: function( p ) {
7257		return p;
7258	},
7259	swing: function( p ) {
7260		return 0.5 - Math.cos( p * Math.PI ) / 2;
7261	},
7262	_default: "swing"
7263};
7264
7265jQuery.fx = Tween.prototype.init;
7266
7267// Back compat <1.8 extension point
7268jQuery.fx.step = {};
7269
7270
7271
7272
7273var
7274	fxNow, inProgress,
7275	rfxtypes = /^(?:toggle|show|hide)$/,
7276	rrun = /queueHooks$/;
7277
7278function schedule() {
7279	if ( inProgress ) {
7280		if ( document.hidden === false && window.requestAnimationFrame ) {
7281			window.requestAnimationFrame( schedule );
7282		} else {
7283			window.setTimeout( schedule, jQuery.fx.interval );
7284		}
7285
7286		jQuery.fx.tick();
7287	}
7288}
7289
7290// Animations created synchronously will run synchronously
7291function createFxNow() {
7292	window.setTimeout( function() {
7293		fxNow = undefined;
7294	} );
7295	return ( fxNow = Date.now() );
7296}
7297
7298// Generate parameters to create a standard animation
7299function genFx( type, includeWidth ) {
7300	var which,
7301		i = 0,
7302		attrs = { height: type };
7303
7304	// If we include width, step value is 1 to do all cssExpand values,
7305	// otherwise step value is 2 to skip over Left and Right
7306	includeWidth = includeWidth ? 1 : 0;
7307	for ( ; i < 4; i += 2 - includeWidth ) {
7308		which = cssExpand[ i ];
7309		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
7310	}
7311
7312	if ( includeWidth ) {
7313		attrs.opacity = attrs.width = type;
7314	}
7315
7316	return attrs;
7317}
7318
7319function createTween( value, prop, animation ) {
7320	var tween,
7321		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
7322		index = 0,
7323		length = collection.length;
7324	for ( ; index < length; index++ ) {
7325		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
7326
7327			// We're done with this property
7328			return tween;
7329		}
7330	}
7331}
7332
7333function defaultPrefilter( elem, props, opts ) {
7334	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
7335		isBox = "width" in props || "height" in props,
7336		anim = this,
7337		orig = {},
7338		style = elem.style,
7339		hidden = elem.nodeType && isHiddenWithinTree( elem ),
7340		dataShow = dataPriv.get( elem, "fxshow" );
7341
7342	// Queue-skipping animations hijack the fx hooks
7343	if ( !opts.queue ) {
7344		hooks = jQuery._queueHooks( elem, "fx" );
7345		if ( hooks.unqueued == null ) {
7346			hooks.unqueued = 0;
7347			oldfire = hooks.empty.fire;
7348			hooks.empty.fire = function() {
7349				if ( !hooks.unqueued ) {
7350					oldfire();
7351				}
7352			};
7353		}
7354		hooks.unqueued++;
7355
7356		anim.always( function() {
7357
7358			// Ensure the complete handler is called before this completes
7359			anim.always( function() {
7360				hooks.unqueued--;
7361				if ( !jQuery.queue( elem, "fx" ).length ) {
7362					hooks.empty.fire();
7363				}
7364			} );
7365		} );
7366	}
7367
7368	// Detect show/hide animations
7369	for ( prop in props ) {
7370		value = props[ prop ];
7371		if ( rfxtypes.test( value ) ) {
7372			delete props[ prop ];
7373			toggle = toggle || value === "toggle";
7374			if ( value === ( hidden ? "hide" : "show" ) ) {
7375
7376				// Pretend to be hidden if this is a "show" and
7377				// there is still data from a stopped show/hide
7378				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
7379					hidden = true;
7380
7381				// Ignore all other no-op show/hide data
7382				} else {
7383					continue;
7384				}
7385			}
7386			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
7387		}
7388	}
7389
7390	// Bail out if this is a no-op like .hide().hide()
7391	propTween = !jQuery.isEmptyObject( props );
7392	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
7393		return;
7394	}
7395
7396	// Restrict "overflow" and "display" styles during box animations
7397	if ( isBox && elem.nodeType === 1 ) {
7398
7399		// Support: IE <=9 - 11, Edge 12 - 15
7400		// Record all 3 overflow attributes because IE does not infer the shorthand
7401		// from identically-valued overflowX and overflowY and Edge just mirrors
7402		// the overflowX value there.
7403		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
7404
7405		// Identify a display type, preferring old show/hide data over the CSS cascade
7406		restoreDisplay = dataShow && dataShow.display;
7407		if ( restoreDisplay == null ) {
7408			restoreDisplay = dataPriv.get( elem, "display" );
7409		}
7410		display = jQuery.css( elem, "display" );
7411		if ( display === "none" ) {
7412			if ( restoreDisplay ) {
7413				display = restoreDisplay;
7414			} else {
7415
7416				// Get nonempty value(s) by temporarily forcing visibility
7417				showHide( [ elem ], true );
7418				restoreDisplay = elem.style.display || restoreDisplay;
7419				display = jQuery.css( elem, "display" );
7420				showHide( [ elem ] );
7421			}
7422		}
7423
7424		// Animate inline elements as inline-block
7425		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
7426			if ( jQuery.css( elem, "float" ) === "none" ) {
7427
7428				// Restore the original display value at the end of pure show/hide animations
7429				if ( !propTween ) {
7430					anim.done( function() {
7431						style.display = restoreDisplay;
7432					} );
7433					if ( restoreDisplay == null ) {
7434						display = style.display;
7435						restoreDisplay = display === "none" ? "" : display;
7436					}
7437				}
7438				style.display = "inline-block";
7439			}
7440		}
7441	}
7442
7443	if ( opts.overflow ) {
7444		style.overflow = "hidden";
7445		anim.always( function() {
7446			style.overflow = opts.overflow[ 0 ];
7447			style.overflowX = opts.overflow[ 1 ];
7448			style.overflowY = opts.overflow[ 2 ];
7449		} );
7450	}
7451
7452	// Implement show/hide animations
7453	propTween = false;
7454	for ( prop in orig ) {
7455
7456		// General show/hide setup for this element animation
7457		if ( !propTween ) {
7458			if ( dataShow ) {
7459				if ( "hidden" in dataShow ) {
7460					hidden = dataShow.hidden;
7461				}
7462			} else {
7463				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
7464			}
7465
7466			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
7467			if ( toggle ) {
7468				dataShow.hidden = !hidden;
7469			}
7470
7471			// Show elements before animating them
7472			if ( hidden ) {
7473				showHide( [ elem ], true );
7474			}
7475
7476			/* eslint-disable no-loop-func */
7477
7478			anim.done( function() {
7479
7480				/* eslint-enable no-loop-func */
7481
7482				// The final step of a "hide" animation is actually hiding the element
7483				if ( !hidden ) {
7484					showHide( [ elem ] );
7485				}
7486				dataPriv.remove( elem, "fxshow" );
7487				for ( prop in orig ) {
7488					jQuery.style( elem, prop, orig[ prop ] );
7489				}
7490			} );
7491		}
7492
7493		// Per-property setup
7494		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
7495		if ( !( prop in dataShow ) ) {
7496			dataShow[ prop ] = propTween.start;
7497			if ( hidden ) {
7498				propTween.end = propTween.start;
7499				propTween.start = 0;
7500			}
7501		}
7502	}
7503}
7504
7505function propFilter( props, specialEasing ) {
7506	var index, name, easing, value, hooks;
7507
7508	// camelCase, specialEasing and expand cssHook pass
7509	for ( index in props ) {
7510		name = camelCase( index );
7511		easing = specialEasing[ name ];
7512		value = props[ index ];
7513		if ( Array.isArray( value ) ) {
7514			easing = value[ 1 ];
7515			value = props[ index ] = value[ 0 ];
7516		}
7517
7518		if ( index !== name ) {
7519			props[ name ] = value;
7520			delete props[ index ];
7521		}
7522
7523		hooks = jQuery.cssHooks[ name ];
7524		if ( hooks && "expand" in hooks ) {
7525			value = hooks.expand( value );
7526			delete props[ name ];
7527
7528			// Not quite $.extend, this won't overwrite existing keys.
7529			// Reusing 'index' because we have the correct "name"
7530			for ( index in value ) {
7531				if ( !( index in props ) ) {
7532					props[ index ] = value[ index ];
7533					specialEasing[ index ] = easing;
7534				}
7535			}
7536		} else {
7537			specialEasing[ name ] = easing;
7538		}
7539	}
7540}
7541
7542function Animation( elem, properties, options ) {
7543	var result,
7544		stopped,
7545		index = 0,
7546		length = Animation.prefilters.length,
7547		deferred = jQuery.Deferred().always( function() {
7548
7549			// Don't match elem in the :animated selector
7550			delete tick.elem;
7551		} ),
7552		tick = function() {
7553			if ( stopped ) {
7554				return false;
7555			}
7556			var currentTime = fxNow || createFxNow(),
7557				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
7558
7559				// Support: Android 2.3 only
7560				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
7561				temp = remaining / animation.duration || 0,
7562				percent = 1 - temp,
7563				index = 0,
7564				length = animation.tweens.length;
7565
7566			for ( ; index < length; index++ ) {
7567				animation.tweens[ index ].run( percent );
7568			}
7569
7570			deferred.notifyWith( elem, [ animation, percent, remaining ] );
7571
7572			// If there's more to do, yield
7573			if ( percent < 1 && length ) {
7574				return remaining;
7575			}
7576
7577			// If this was an empty animation, synthesize a final progress notification
7578			if ( !length ) {
7579				deferred.notifyWith( elem, [ animation, 1, 0 ] );
7580			}
7581
7582			// Resolve the animation and report its conclusion
7583			deferred.resolveWith( elem, [ animation ] );
7584			return false;
7585		},
7586		animation = deferred.promise( {
7587			elem: elem,
7588			props: jQuery.extend( {}, properties ),
7589			opts: jQuery.extend( true, {
7590				specialEasing: {},
7591				easing: jQuery.easing._default
7592			}, options ),
7593			originalProperties: properties,
7594			originalOptions: options,
7595			startTime: fxNow || createFxNow(),
7596			duration: options.duration,
7597			tweens: [],
7598			createTween: function( prop, end ) {
7599				var tween = jQuery.Tween( elem, animation.opts, prop, end,
7600					animation.opts.specialEasing[ prop ] || animation.opts.easing );
7601				animation.tweens.push( tween );
7602				return tween;
7603			},
7604			stop: function( gotoEnd ) {
7605				var index = 0,
7606
7607					// If we are going to the end, we want to run all the tweens
7608					// otherwise we skip this part
7609					length = gotoEnd ? animation.tweens.length : 0;
7610				if ( stopped ) {
7611					return this;
7612				}
7613				stopped = true;
7614				for ( ; index < length; index++ ) {
7615					animation.tweens[ index ].run( 1 );
7616				}
7617
7618				// Resolve when we played the last frame; otherwise, reject
7619				if ( gotoEnd ) {
7620					deferred.notifyWith( elem, [ animation, 1, 0 ] );
7621					deferred.resolveWith( elem, [ animation, gotoEnd ] );
7622				} else {
7623					deferred.rejectWith( elem, [ animation, gotoEnd ] );
7624				}
7625				return this;
7626			}
7627		} ),
7628		props = animation.props;
7629
7630	propFilter( props, animation.opts.specialEasing );
7631
7632	for ( ; index < length; index++ ) {
7633		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
7634		if ( result ) {
7635			if ( isFunction( result.stop ) ) {
7636				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
7637					result.stop.bind( result );
7638			}
7639			return result;
7640		}
7641	}
7642
7643	jQuery.map( props, createTween, animation );
7644
7645	if ( isFunction( animation.opts.start ) ) {
7646		animation.opts.start.call( elem, animation );
7647	}
7648
7649	// Attach callbacks from options
7650	animation
7651		.progress( animation.opts.progress )
7652		.done( animation.opts.done, animation.opts.complete )
7653		.fail( animation.opts.fail )
7654		.always( animation.opts.always );
7655
7656	jQuery.fx.timer(
7657		jQuery.extend( tick, {
7658			elem: elem,
7659			anim: animation,
7660			queue: animation.opts.queue
7661		} )
7662	);
7663
7664	return animation;
7665}
7666
7667jQuery.Animation = jQuery.extend( Animation, {
7668
7669	tweeners: {
7670		"*": [ function( prop, value ) {
7671			var tween = this.createTween( prop, value );
7672			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
7673			return tween;
7674		} ]
7675	},
7676
7677	tweener: function( props, callback ) {
7678		if ( isFunction( props ) ) {
7679			callback = props;
7680			props = [ "*" ];
7681		} else {
7682			props = props.match( rnothtmlwhite );
7683		}
7684
7685		var prop,
7686			index = 0,
7687			length = props.length;
7688
7689		for ( ; index < length; index++ ) {
7690			prop = props[ index ];
7691			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
7692			Animation.tweeners[ prop ].unshift( callback );
7693		}
7694	},
7695
7696	prefilters: [ defaultPrefilter ],
7697
7698	prefilter: function( callback, prepend ) {
7699		if ( prepend ) {
7700			Animation.prefilters.unshift( callback );
7701		} else {
7702			Animation.prefilters.push( callback );
7703		}
7704	}
7705} );
7706
7707jQuery.speed = function( speed, easing, fn ) {
7708	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
7709		complete: fn || !fn && easing ||
7710			isFunction( speed ) && speed,
7711		duration: speed,
7712		easing: fn && easing || easing && !isFunction( easing ) && easing
7713	};
7714
7715	// Go to the end state if fx are off
7716	if ( jQuery.fx.off ) {
7717		opt.duration = 0;
7718
7719	} else {
7720		if ( typeof opt.duration !== "number" ) {
7721			if ( opt.duration in jQuery.fx.speeds ) {
7722				opt.duration = jQuery.fx.speeds[ opt.duration ];
7723
7724			} else {
7725				opt.duration = jQuery.fx.speeds._default;
7726			}
7727		}
7728	}
7729
7730	// Normalize opt.queue - true/undefined/null -> "fx"
7731	if ( opt.queue == null || opt.queue === true ) {
7732		opt.queue = "fx";
7733	}
7734
7735	// Queueing
7736	opt.old = opt.complete;
7737
7738	opt.complete = function() {
7739		if ( isFunction( opt.old ) ) {
7740			opt.old.call( this );
7741		}
7742
7743		if ( opt.queue ) {
7744			jQuery.dequeue( this, opt.queue );
7745		}
7746	};
7747
7748	return opt;
7749};
7750
7751jQuery.fn.extend( {
7752	fadeTo: function( speed, to, easing, callback ) {
7753
7754		// Show any hidden elements after setting opacity to 0
7755		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
7756
7757			// Animate to the value specified
7758			.end().animate( { opacity: to }, speed, easing, callback );
7759	},
7760	animate: function( prop, speed, easing, callback ) {
7761		var empty = jQuery.isEmptyObject( prop ),
7762			optall = jQuery.speed( speed, easing, callback ),
7763			doAnimation = function() {
7764
7765				// Operate on a copy of prop so per-property easing won't be lost
7766				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
7767
7768				// Empty animations, or finishing resolves immediately
7769				if ( empty || dataPriv.get( this, "finish" ) ) {
7770					anim.stop( true );
7771				}
7772			};
7773
7774		doAnimation.finish = doAnimation;
7775
7776		return empty || optall.queue === false ?
7777			this.each( doAnimation ) :
7778			this.queue( optall.queue, doAnimation );
7779	},
7780	stop: function( type, clearQueue, gotoEnd ) {
7781		var stopQueue = function( hooks ) {
7782			var stop = hooks.stop;
7783			delete hooks.stop;
7784			stop( gotoEnd );
7785		};
7786
7787		if ( typeof type !== "string" ) {
7788			gotoEnd = clearQueue;
7789			clearQueue = type;
7790			type = undefined;
7791		}
7792		if ( clearQueue ) {
7793			this.queue( type || "fx", [] );
7794		}
7795
7796		return this.each( function() {
7797			var dequeue = true,
7798				index = type != null && type + "queueHooks",
7799				timers = jQuery.timers,
7800				data = dataPriv.get( this );
7801
7802			if ( index ) {
7803				if ( data[ index ] && data[ index ].stop ) {
7804					stopQueue( data[ index ] );
7805				}
7806			} else {
7807				for ( index in data ) {
7808					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
7809						stopQueue( data[ index ] );
7810					}
7811				}
7812			}
7813
7814			for ( index = timers.length; index--; ) {
7815				if ( timers[ index ].elem === this &&
7816					( type == null || timers[ index ].queue === type ) ) {
7817
7818					timers[ index ].anim.stop( gotoEnd );
7819					dequeue = false;
7820					timers.splice( index, 1 );
7821				}
7822			}
7823
7824			// Start the next in the queue if the last step wasn't forced.
7825			// Timers currently will call their complete callbacks, which
7826			// will dequeue but only if they were gotoEnd.
7827			if ( dequeue || !gotoEnd ) {
7828				jQuery.dequeue( this, type );
7829			}
7830		} );
7831	},
7832	finish: function( type ) {
7833		if ( type !== false ) {
7834			type = type || "fx";
7835		}
7836		return this.each( function() {
7837			var index,
7838				data = dataPriv.get( this ),
7839				queue = data[ type + "queue" ],
7840				hooks = data[ type + "queueHooks" ],
7841				timers = jQuery.timers,
7842				length = queue ? queue.length : 0;
7843
7844			// Enable finishing flag on private data
7845			data.finish = true;
7846
7847			// Empty the queue first
7848			jQuery.queue( this, type, [] );
7849
7850			if ( hooks && hooks.stop ) {
7851				hooks.stop.call( this, true );
7852			}
7853
7854			// Look for any active animations, and finish them
7855			for ( index = timers.length; index--; ) {
7856				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
7857					timers[ index ].anim.stop( true );
7858					timers.splice( index, 1 );
7859				}
7860			}
7861
7862			// Look for any animations in the old queue and finish them
7863			for ( index = 0; index < length; index++ ) {
7864				if ( queue[ index ] && queue[ index ].finish ) {
7865					queue[ index ].finish.call( this );
7866				}
7867			}
7868
7869			// Turn off finishing flag
7870			delete data.finish;
7871		} );
7872	}
7873} );
7874
7875jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
7876	var cssFn = jQuery.fn[ name ];
7877	jQuery.fn[ name ] = function( speed, easing, callback ) {
7878		return speed == null || typeof speed === "boolean" ?
7879			cssFn.apply( this, arguments ) :
7880			this.animate( genFx( name, true ), speed, easing, callback );
7881	};
7882} );
7883
7884// Generate shortcuts for custom animations
7885jQuery.each( {
7886	slideDown: genFx( "show" ),
7887	slideUp: genFx( "hide" ),
7888	slideToggle: genFx( "toggle" ),
7889	fadeIn: { opacity: "show" },
7890	fadeOut: { opacity: "hide" },
7891	fadeToggle: { opacity: "toggle" }
7892}, function( name, props ) {
7893	jQuery.fn[ name ] = function( speed, easing, callback ) {
7894		return this.animate( props, speed, easing, callback );
7895	};
7896} );
7897
7898jQuery.timers = [];
7899jQuery.fx.tick = function() {
7900	var timer,
7901		i = 0,
7902		timers = jQuery.timers;
7903
7904	fxNow = Date.now();
7905
7906	for ( ; i < timers.length; i++ ) {
7907		timer = timers[ i ];
7908
7909		// Run the timer and safely remove it when done (allowing for external removal)
7910		if ( !timer() && timers[ i ] === timer ) {
7911			timers.splice( i--, 1 );
7912		}
7913	}
7914
7915	if ( !timers.length ) {
7916		jQuery.fx.stop();
7917	}
7918	fxNow = undefined;
7919};
7920
7921jQuery.fx.timer = function( timer ) {
7922	jQuery.timers.push( timer );
7923	jQuery.fx.start();
7924};
7925
7926jQuery.fx.interval = 13;
7927jQuery.fx.start = function() {
7928	if ( inProgress ) {
7929		return;
7930	}
7931
7932	inProgress = true;
7933	schedule();
7934};
7935
7936jQuery.fx.stop = function() {
7937	inProgress = null;
7938};
7939
7940jQuery.fx.speeds = {
7941	slow: 600,
7942	fast: 200,
7943
7944	// Default speed
7945	_default: 400
7946};
7947
7948
7949// Based off of the plugin by Clint Helfers, with permission.
7950// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
vendor: 21,001 bytes, lines 7951-8819
7951jQuery.fn.delay = function( time, type ) {
7952	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
7953	type = type || "fx";
7954
7955	return this.queue( type, function( next, hooks ) {
7956		var timeout = window.setTimeout( next, time );
7957		hooks.stop = function() {
7958			window.clearTimeout( timeout );
7959		};
7960	} );
7961};
7962
7963
7964( function() {
7965	var input = document.createElement( "input" ),
7966		select = document.createElement( "select" ),
7967		opt = select.appendChild( document.createElement( "option" ) );
7968
7969	input.type = "checkbox";
7970
7971	// Support: Android <=4.3 only
7972	// Default value for a checkbox should be "on"
7973	support.checkOn = input.value !== "";
7974
7975	// Support: IE <=11 only
7976	// Must access selectedIndex to make default options select
7977	support.optSelected = opt.selected;
7978
7979	// Support: IE <=11 only
7980	// An input loses its value after becoming a radio
7981	input = document.createElement( "input" );
7982	input.value = "t";
7983	input.type = "radio";
7984	support.radioValue = input.value === "t";
7985} )();
7986
7987
7988var boolHook,
7989	attrHandle = jQuery.expr.attrHandle;
7990
7991jQuery.fn.extend( {
7992	attr: function( name, value ) {
7993		return access( this, jQuery.attr, name, value, arguments.length > 1 );
7994	},
7995
7996	removeAttr: function( name ) {
7997		return this.each( function() {
7998			jQuery.removeAttr( this, name );
7999		} );
8000	}
8001} );
8002
8003jQuery.extend( {
8004	attr: function( elem, name, value ) {
8005		var ret, hooks,
8006			nType = elem.nodeType;
8007
8008		// Don't get/set attributes on text, comment and attribute nodes
8009		if ( nType === 3 || nType === 8 || nType === 2 ) {
8010			return;
8011		}
8012
8013		// Fallback to prop when attributes are not supported
8014		if ( typeof elem.getAttribute === "undefined" ) {
8015			return jQuery.prop( elem, name, value );
8016		}
8017
8018		// Attribute hooks are determined by the lowercase version
8019		// Grab necessary hook if one is defined
8020		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
8021			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
8022				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
8023		}
8024
8025		if ( value !== undefined ) {
8026			if ( value === null ) {
8027				jQuery.removeAttr( elem, name );
8028				return;
8029			}
8030
8031			if ( hooks && "set" in hooks &&
8032				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
8033				return ret;
8034			}
8035
8036			elem.setAttribute( name, value + "" );
8037			return value;
8038		}
8039
8040		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
8041			return ret;
8042		}
8043
8044		ret = jQuery.find.attr( elem, name );
8045
8046		// Non-existent attributes return null, we normalize to undefined
8047		return ret == null ? undefined : ret;
8048	},
8049
8050	attrHooks: {
8051		type: {
8052			set: function( elem, value ) {
8053				if ( !support.radioValue && value === "radio" &&
8054					nodeName( elem, "input" ) ) {
8055					var val = elem.value;
8056					elem.setAttribute( "type", value );
8057					if ( val ) {
8058						elem.value = val;
8059					}
8060					return value;
8061				}
8062			}
8063		}
8064	},
8065
8066	removeAttr: function( elem, value ) {
8067		var name,
8068			i = 0,
8069
8070			// Attribute names can contain non-HTML whitespace characters
8071			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
8072			attrNames = value && value.match( rnothtmlwhite );
8073
8074		if ( attrNames && elem.nodeType === 1 ) {
8075			while ( ( name = attrNames[ i++ ] ) ) {
8076				elem.removeAttribute( name );
8077			}
8078		}
8079	}
8080} );
8081
8082// Hooks for boolean attributes
8083boolHook = {
8084	set: function( elem, value, name ) {
8085		if ( value === false ) {
8086
8087			// Remove boolean attributes when set to false
8088			jQuery.removeAttr( elem, name );
8089		} else {
8090			elem.setAttribute( name, name );
8091		}
8092		return name;
8093	}
8094};
8095
8096jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
8097	var getter = attrHandle[ name ] || jQuery.find.attr;
8098
8099	attrHandle[ name ] = function( elem, name, isXML ) {
8100		var ret, handle,
8101			lowercaseName = name.toLowerCase();
8102
8103		if ( !isXML ) {
8104
8105			// Avoid an infinite loop by temporarily removing this function from the getter
8106			handle = attrHandle[ lowercaseName ];
8107			attrHandle[ lowercaseName ] = ret;
8108			ret = getter( elem, name, isXML ) != null ?
8109				lowercaseName :
8110				null;
8111			attrHandle[ lowercaseName ] = handle;
8112		}
8113		return ret;
8114	};
8115} );
8116
8117
8118
8119
8120var rfocusable = /^(?:input|select|textarea|button)$/i,
8121	rclickable = /^(?:a|area)$/i;
8122
8123jQuery.fn.extend( {
8124	prop: function( name, value ) {
8125		return access( this, jQuery.prop, name, value, arguments.length > 1 );
8126	},
8127
8128	removeProp: function( name ) {
8129		return this.each( function() {
8130			delete this[ jQuery.propFix[ name ] || name ];
8131		} );
8132	}
8133} );
8134
8135jQuery.extend( {
8136	prop: function( elem, name, value ) {
8137		var ret, hooks,
8138			nType = elem.nodeType;
8139
8140		// Don't get/set properties on text, comment and attribute nodes
8141		if ( nType === 3 || nType === 8 || nType === 2 ) {
8142			return;
8143		}
8144
8145		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
8146
8147			// Fix name and attach hooks
8148			name = jQuery.propFix[ name ] || name;
8149			hooks = jQuery.propHooks[ name ];
8150		}
8151
8152		if ( value !== undefined ) {
8153			if ( hooks && "set" in hooks &&
8154				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
8155				return ret;
8156			}
8157
8158			return ( elem[ name ] = value );
8159		}
8160
8161		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
8162			return ret;
8163		}
8164
8165		return elem[ name ];
8166	},
8167
8168	propHooks: {
8169		tabIndex: {
8170			get: function( elem ) {
8171
8172				// Support: IE <=9 - 11 only
8173				// elem.tabIndex doesn't always return the
8174				// correct value when it hasn't been explicitly set
8175				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
8176				// Use proper attribute retrieval(#12072)
8177				var tabindex = jQuery.find.attr( elem, "tabindex" );
8178
8179				if ( tabindex ) {
8180					return parseInt( tabindex, 10 );
8181				}
8182
8183				if (
8184					rfocusable.test( elem.nodeName ) ||
8185					rclickable.test( elem.nodeName ) &&
8186					elem.href
8187				) {
8188					return 0;
8189				}
8190
8191				return -1;
8192			}
8193		}
8194	},
8195
8196	propFix: {
8197		"for": "htmlFor",
8198		"class": "className"
8199	}
8200} );
8201
8202// Support: IE <=11 only
8203// Accessing the selectedIndex property
8204// forces the browser to respect setting selected
8205// on the option
8206// The getter ensures a default option is selected
8207// when in an optgroup
8208// eslint rule "no-unused-expressions" is disabled for this code
8209// since it considers such accessions noop
8210if ( !support.optSelected ) {
8211	jQuery.propHooks.selected = {
8212		get: function( elem ) {
8213
8214			/* eslint no-unused-expressions: "off" */
8215
8216			var parent = elem.parentNode;
8217			if ( parent && parent.parentNode ) {
8218				parent.parentNode.selectedIndex;
8219			}
8220			return null;
8221		},
8222		set: function( elem ) {
8223
8224			/* eslint no-unused-expressions: "off" */
8225
8226			var parent = elem.parentNode;
8227			if ( parent ) {
8228				parent.selectedIndex;
8229
8230				if ( parent.parentNode ) {
8231					parent.parentNode.selectedIndex;
8232				}
8233			}
8234		}
8235	};
8236}
8237
8238jQuery.each( [
8239	"tabIndex",
8240	"readOnly",
8241	"maxLength",
8242	"cellSpacing",
8243	"cellPadding",
8244	"rowSpan",
8245	"colSpan",
8246	"useMap",
8247	"frameBorder",
8248	"contentEditable"
8249], function() {
8250	jQuery.propFix[ this.toLowerCase() ] = this;
8251} );
8252
8253
8254
8255
8256	// Strip and collapse whitespace according to HTML spec
8257	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
8258	function stripAndCollapse( value ) {
8259		var tokens = value.match( rnothtmlwhite ) || [];
8260		return tokens.join( " " );
8261	}
8262
8263
8264function getClass( elem ) {
8265	return elem.getAttribute && elem.getAttribute( "class" ) || "";
8266}
8267
8268function classesToArray( value ) {
8269	if ( Array.isArray( value ) ) {
8270		return value;
8271	}
8272	if ( typeof value === "string" ) {
8273		return value.match( rnothtmlwhite ) || [];
8274	}
8275	return [];
8276}
8277
8278jQuery.fn.extend( {
8279	addClass: function( value ) {
8280		var classes, elem, cur, curValue, clazz, j, finalValue,
8281			i = 0;
8282
8283		if ( isFunction( value ) ) {
8284			return this.each( function( j ) {
8285				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
8286			} );
8287		}
8288
8289		classes = classesToArray( value );
8290
8291		if ( classes.length ) {
8292			while ( ( elem = this[ i++ ] ) ) {
8293				curValue = getClass( elem );
8294				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8295
8296				if ( cur ) {
8297					j = 0;
8298					while ( ( clazz = classes[ j++ ] ) ) {
8299						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
8300							cur += clazz + " ";
8301						}
8302					}
8303
8304					// Only assign if different to avoid unneeded rendering.
8305					finalValue = stripAndCollapse( cur );
8306					if ( curValue !== finalValue ) {
8307						elem.setAttribute( "class", finalValue );
8308					}
8309				}
8310			}
8311		}
8312
8313		return this;
8314	},
8315
8316	removeClass: function( value ) {
8317		var classes, elem, cur, curValue, clazz, j, finalValue,
8318			i = 0;
8319
8320		if ( isFunction( value ) ) {
8321			return this.each( function( j ) {
8322				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
8323			} );
8324		}
8325
8326		if ( !arguments.length ) {
8327			return this.attr( "class", "" );
8328		}
8329
8330		classes = classesToArray( value );
8331
8332		if ( classes.length ) {
8333			while ( ( elem = this[ i++ ] ) ) {
8334				curValue = getClass( elem );
8335
8336				// This expression is here for better compressibility (see addClass)
8337				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8338
8339				if ( cur ) {
8340					j = 0;
8341					while ( ( clazz = classes[ j++ ] ) ) {
8342
8343						// Remove *all* instances
8344						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
8345							cur = cur.replace( " " + clazz + " ", " " );
8346						}
8347					}
8348
8349					// Only assign if different to avoid unneeded rendering.
8350					finalValue = stripAndCollapse( cur );
8351					if ( curValue !== finalValue ) {
8352						elem.setAttribute( "class", finalValue );
8353					}
8354				}
8355			}
8356		}
8357
8358		return this;
8359	},
8360
8361	toggleClass: function( value, stateVal ) {
8362		var type = typeof value,
8363			isValidValue = type === "string" || Array.isArray( value );
8364
8365		if ( typeof stateVal === "boolean" && isValidValue ) {
8366			return stateVal ? this.addClass( value ) : this.removeClass( value );
8367		}
8368
8369		if ( isFunction( value ) ) {
8370			return this.each( function( i ) {
8371				jQuery( this ).toggleClass(
8372					value.call( this, i, getClass( this ), stateVal ),
8373					stateVal
8374				);
8375			} );
8376		}
8377
8378		return this.each( function() {
8379			var className, i, self, classNames;
8380
8381			if ( isValidValue ) {
8382
8383				// Toggle individual class names
8384				i = 0;
8385				self = jQuery( this );
8386				classNames = classesToArray( value );
8387
8388				while ( ( className = classNames[ i++ ] ) ) {
8389
8390					// Check each className given, space separated list
8391					if ( self.hasClass( className ) ) {
8392						self.removeClass( className );
8393					} else {
8394						self.addClass( className );
8395					}
8396				}
8397
8398			// Toggle whole class name
8399			} else if ( value === undefined || type === "boolean" ) {
8400				className = getClass( this );
8401				if ( className ) {
8402
8403					// Store className if set
8404					dataPriv.set( this, "__className__", className );
8405				}
8406
8407				// If the element has a class name or if we're passed `false`,
8408				// then remove the whole classname (if there was one, the above saved it).
8409				// Otherwise bring back whatever was previously saved (if anything),
8410				// falling back to the empty string if nothing was stored.
8411				if ( this.setAttribute ) {
8412					this.setAttribute( "class",
8413						className || value === false ?
8414							"" :
8415							dataPriv.get( this, "__className__" ) || ""
8416					);
8417				}
8418			}
8419		} );
8420	},
8421
8422	hasClass: function( selector ) {
8423		var className, elem,
8424			i = 0;
8425
8426		className = " " + selector + " ";
8427		while ( ( elem = this[ i++ ] ) ) {
8428			if ( elem.nodeType === 1 &&
8429				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
8430				return true;
8431			}
8432		}
8433
8434		return false;
8435	}
8436} );
8437
8438
8439
8440
8441var rreturn = /\r/g;
8442
8443jQuery.fn.extend( {
8444	val: function( value ) {
8445		var hooks, ret, valueIsFunction,
8446			elem = this[ 0 ];
8447
8448		if ( !arguments.length ) {
8449			if ( elem ) {
8450				hooks = jQuery.valHooks[ elem.type ] ||
8451					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
8452
8453				if ( hooks &&
8454					"get" in hooks &&
8455					( ret = hooks.get( elem, "value" ) ) !== undefined
8456				) {
8457					return ret;
8458				}
8459
8460				ret = elem.value;
8461
8462				// Handle most common string cases
8463				if ( typeof ret === "string" ) {
8464					return ret.replace( rreturn, "" );
8465				}
8466
8467				// Handle cases where value is null/undef or number
8468				return ret == null ? "" : ret;
8469			}
8470
8471			return;
8472		}
8473
8474		valueIsFunction = isFunction( value );
8475
8476		return this.each( function( i ) {
8477			var val;
8478
8479			if ( this.nodeType !== 1 ) {
8480				return;
8481			}
8482
8483			if ( valueIsFunction ) {
8484				val = value.call( this, i, jQuery( this ).val() );
8485			} else {
8486				val = value;
8487			}
8488
8489			// Treat null/undefined as ""; convert numbers to string
8490			if ( val == null ) {
8491				val = "";
8492
8493			} else if ( typeof val === "number" ) {
8494				val += "";
8495
8496			} else if ( Array.isArray( val ) ) {
8497				val = jQuery.map( val, function( value ) {
8498					return value == null ? "" : value + "";
8499				} );
8500			}
8501
8502			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
8503
8504			// If set returns undefined, fall back to normal setting
8505			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
8506				this.value = val;
8507			}
8508		} );
8509	}
8510} );
8511
8512jQuery.extend( {
8513	valHooks: {
8514		option: {
8515			get: function( elem ) {
8516
8517				var val = jQuery.find.attr( elem, "value" );
8518				return val != null ?
8519					val :
8520
8521					// Support: IE <=10 - 11 only
8522					// option.text throws exceptions (#14686, #14858)
8523					// Strip and collapse whitespace
8524					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
8525					stripAndCollapse( jQuery.text( elem ) );
8526			}
8527		},
8528		select: {
8529			get: function( elem ) {
8530				var value, option, i,
8531					options = elem.options,
8532					index = elem.selectedIndex,
8533					one = elem.type === "select-one",
8534					values = one ? null : [],
8535					max = one ? index + 1 : options.length;
8536
8537				if ( index < 0 ) {
8538					i = max;
8539
8540				} else {
8541					i = one ? index : 0;
8542				}
8543
8544				// Loop through all the selected options
8545				for ( ; i < max; i++ ) {
8546					option = options[ i ];
8547
8548					// Support: IE <=9 only
8549					// IE8-9 doesn't update selected after form reset (#2551)
8550					if ( ( option.selected || i === index ) &&
8551
8552							// Don't return options that are disabled or in a disabled optgroup
8553							!option.disabled &&
8554							( !option.parentNode.disabled ||
8555								!nodeName( option.parentNode, "optgroup" ) ) ) {
8556
8557						// Get the specific value for the option
8558						value = jQuery( option ).val();
8559
8560						// We don't need an array for one selects
8561						if ( one ) {
8562							return value;
8563						}
8564
8565						// Multi-Selects return an array
8566						values.push( value );
8567					}
8568				}
8569
8570				return values;
8571			},
8572
8573			set: function( elem, value ) {
8574				var optionSet, option,
8575					options = elem.options,
8576					values = jQuery.makeArray( value ),
8577					i = options.length;
8578
8579				while ( i-- ) {
8580					option = options[ i ];
8581
8582					/* eslint-disable no-cond-assign */
8583
8584					if ( option.selected =
8585						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
8586					) {
8587						optionSet = true;
8588					}
8589
8590					/* eslint-enable no-cond-assign */
8591				}
8592
8593				// Force browsers to behave consistently when non-matching value is set
8594				if ( !optionSet ) {
8595					elem.selectedIndex = -1;
8596				}
8597				return values;
8598			}
8599		}
8600	}
8601} );
8602
8603// Radios and checkboxes getter/setter
8604jQuery.each( [ "radio", "checkbox" ], function() {
8605	jQuery.valHooks[ this ] = {
8606		set: function( elem, value ) {
8607			if ( Array.isArray( value ) ) {
8608				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
8609			}
8610		}
8611	};
8612	if ( !support.checkOn ) {
8613		jQuery.valHooks[ this ].get = function( elem ) {
8614			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
8615		};
8616	}
8617} );
8618
8619
8620
8621
8622// Return jQuery for attributes-only inclusion
8623
8624
8625support.focusin = "onfocusin" in window;
8626
8627
8628var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
8629	stopPropagationCallback = function( e ) {
8630		e.stopPropagation();
8631	};
8632
8633jQuery.extend( jQuery.event, {
8634
8635	trigger: function( event, data, elem, onlyHandlers ) {
8636
8637		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
8638			eventPath = [ elem || document ],
8639			type = hasOwn.call( event, "type" ) ? event.type : event,
8640			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
8641
8642		cur = lastElement = tmp = elem = elem || document;
8643
8644		// Don't do events on text and comment nodes
8645		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
8646			return;
8647		}
8648
8649		// focus/blur morphs to focusin/out; ensure we're not firing them right now
8650		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
8651			return;
8652		}
8653
8654		if ( type.indexOf( "." ) > -1 ) {
8655
8656			// Namespaced trigger; create a regexp to match event type in handle()
8657			namespaces = type.split( "." );
8658			type = namespaces.shift();
8659			namespaces.sort();
8660		}
8661		ontype = type.indexOf( ":" ) < 0 && "on" + type;
8662
8663		// Caller can pass in a jQuery.Event object, Object, or just an event type string
8664		event = event[ jQuery.expando ] ?
8665			event :
8666			new jQuery.Event( type, typeof event === "object" && event );
8667
8668		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
8669		event.isTrigger = onlyHandlers ? 2 : 3;
8670		event.namespace = namespaces.join( "." );
8671		event.rnamespace = event.namespace ?
8672			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
8673			null;
8674
8675		// Clean up the event in case it is being reused
8676		event.result = undefined;
8677		if ( !event.target ) {
8678			event.target = elem;
8679		}
8680
8681		// Clone any incoming data and prepend the event, creating the handler arg list
8682		data = data == null ?
8683			[ event ] :
8684			jQuery.makeArray( data, [ event ] );
8685
8686		// Allow special events to draw outside the lines
8687		special = jQuery.event.special[ type ] || {};
8688		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
8689			return;
8690		}
8691
8692		// Determine event propagation path in advance, per W3C events spec (#9951)
8693		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
8694		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
8695
8696			bubbleType = special.delegateType || type;
8697			if ( !rfocusMorph.test( bubbleType + type ) ) {
8698				cur = cur.parentNode;
8699			}
8700			for ( ; cur; cur = cur.parentNode ) {
8701				eventPath.push( cur );
8702				tmp = cur;
8703			}
8704
8705			// Only add window if we got to document (e.g., not plain obj or detached DOM)
8706			if ( tmp === ( elem.ownerDocument || document ) ) {
8707				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
8708			}
8709		}
8710
8711		// Fire handlers on the event path
8712		i = 0;
8713		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
8714			lastElement = cur;
8715			event.type = i > 1 ?
8716				bubbleType :
8717				special.bindType || type;
8718
8719			// jQuery handler
8720			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
8721				dataPriv.get( cur, "handle" );
8722			if ( handle ) {
8723				handle.apply( cur, data );
8724			}
8725
8726			// Native handler
8727			handle = ontype && cur[ ontype ];
8728			if ( handle && handle.apply && acceptData( cur ) ) {
8729				event.result = handle.apply( cur, data );
8730				if ( event.result === false ) {
8731					event.preventDefault();
8732				}
8733			}
8734		}
8735		event.type = type;
8736
8737		// If nobody prevented the default action, do it now
8738		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
8739
8740			if ( ( !special._default ||
8741				special._default.apply( eventPath.pop(), data ) === false ) &&
8742				acceptData( elem ) ) {
8743
8744				// Call a native DOM method on the target with the same name as the event.
8745				// Don't do default actions on window, that's where global variables be (#6170)
8746				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
8747
8748					// Don't re-trigger an onFOO event when we call its FOO() method
8749					tmp = elem[ ontype ];
8750
8751					if ( tmp ) {
8752						elem[ ontype ] = null;
8753					}
8754
8755					// Prevent re-triggering of the same event, since we already bubbled it above
8756					jQuery.event.triggered = type;
8757
8758					if ( event.isPropagationStopped() ) {
8759						lastElement.addEventListener( type, stopPropagationCallback );
8760					}
8761
8762					elem[ type ]();
8763
8764					if ( event.isPropagationStopped() ) {
8765						lastElement.removeEventListener( type, stopPropagationCallback );
8766					}
8767
8768					jQuery.event.triggered = undefined;
8769
8770					if ( tmp ) {
8771						elem[ ontype ] = tmp;
8772					}
8773				}
8774			}
8775		}
8776
8777		return event.result;
8778	},
8779
8780	// Piggyback on a donor event to simulate a different one
8781	// Used only for `focus(in | out)` events
8782	simulate: function( type, elem, event ) {
8783		var e = jQuery.extend(
8784			new jQuery.Event(),
8785			event,
8786			{
8787				type: type,
8788				isSimulated: true
8789			}
8790		);
8791
8792		jQuery.event.trigger( e, null, elem );
8793	}
8794
8795} );
8796
8797jQuery.fn.extend( {
8798
8799	trigger: function( type, data ) {
8800		return this.each( function() {
8801			jQuery.event.trigger( type, data, this );
8802		} );
8803	},
8804	triggerHandler: function( type, data ) {
8805		var elem = this[ 0 ];
8806		if ( elem ) {
8807			return jQuery.event.trigger( type, data, elem, true );
8808		}
8809	}
8810} );
8811
8812
8813// Support: Firefox <=44
8814// Firefox doesn't have focus(in | out) events
8815// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
8816//
8817// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
8818// focus(in | out) events fire after focus & blur events,
8819// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
vendor: 54,284 bytes, lines 8820-10882
8820// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
8821if ( !support.focusin ) {
8822	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
8823
8824		// Attach a single capturing handler on the document while someone wants focusin/focusout
8825		var handler = function( event ) {
8826			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
8827		};
8828
8829		jQuery.event.special[ fix ] = {
8830			setup: function() {
8831
8832				// Handle: regular nodes (via `this.ownerDocument`), window
8833				// (via `this.document`) & document (via `this`).
8834				var doc = this.ownerDocument || this.document || this,
8835					attaches = dataPriv.access( doc, fix );
8836
8837				if ( !attaches ) {
8838					doc.addEventListener( orig, handler, true );
8839				}
8840				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
8841			},
8842			teardown: function() {
8843				var doc = this.ownerDocument || this.document || this,
8844					attaches = dataPriv.access( doc, fix ) - 1;
8845
8846				if ( !attaches ) {
8847					doc.removeEventListener( orig, handler, true );
8848					dataPriv.remove( doc, fix );
8849
8850				} else {
8851					dataPriv.access( doc, fix, attaches );
8852				}
8853			}
8854		};
8855	} );
8856}
8857var location = window.location;
8858
8859var nonce = { guid: Date.now() };
8860
8861var rquery = ( /\?/ );
8862
8863
8864
8865// Cross-browser xml parsing
8866jQuery.parseXML = function( data ) {
8867	var xml, parserErrorElem;
8868	if ( !data || typeof data !== "string" ) {
8869		return null;
8870	}
8871
8872	// Support: IE 9 - 11 only
8873	// IE throws on parseFromString with invalid input.
8874	try {
8875		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
8876	} catch ( e ) {}
8877
8878	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
8879	if ( !xml || parserErrorElem ) {
8880		jQuery.error( "Invalid XML: " + (
8881			parserErrorElem ?
8882				jQuery.map( parserErrorElem.childNodes, function( el ) {
8883					return el.textContent;
8884				} ).join( "\n" ) :
8885				data
8886		) );
8887	}
8888	return xml;
8889};
8890
8891
8892var
8893	rbracket = /\[\]$/,
8894	rCRLF = /\r?\n/g,
8895	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
8896	rsubmittable = /^(?:input|select|textarea|keygen)/i;
8897
8898function buildParams( prefix, obj, traditional, add ) {
8899	var name;
8900
8901	if ( Array.isArray( obj ) ) {
8902
8903		// Serialize array item.
8904		jQuery.each( obj, function( i, v ) {
8905			if ( traditional || rbracket.test( prefix ) ) {
8906
8907				// Treat each array item as a scalar.
8908				add( prefix, v );
8909
8910			} else {
8911
8912				// Item is non-scalar (array or object), encode its numeric index.
8913				buildParams(
8914					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
8915					v,
8916					traditional,
8917					add
8918				);
8919			}
8920		} );
8921
8922	} else if ( !traditional && toType( obj ) === "object" ) {
8923
8924		// Serialize object item.
8925		for ( name in obj ) {
8926			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
8927		}
8928
8929	} else {
8930
8931		// Serialize scalar item.
8932		add( prefix, obj );
8933	}
8934}
8935
8936// Serialize an array of form elements or a set of
8937// key/values into a query string
8938jQuery.param = function( a, traditional ) {
8939	var prefix,
8940		s = [],
8941		add = function( key, valueOrFunction ) {
8942
8943			// If value is a function, invoke it and use its return value
8944			var value = isFunction( valueOrFunction ) ?
8945				valueOrFunction() :
8946				valueOrFunction;
8947
8948			s[ s.length ] = encodeURIComponent( key ) + "=" +
8949				encodeURIComponent( value == null ? "" : value );
8950		};
8951
8952	if ( a == null ) {
8953		return "";
8954	}
8955
8956	// If an array was passed in, assume that it is an array of form elements.
8957	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
8958
8959		// Serialize the form elements
8960		jQuery.each( a, function() {
8961			add( this.name, this.value );
8962		} );
8963
8964	} else {
8965
8966		// If traditional, encode the "old" way (the way 1.3.2 or older
8967		// did it), otherwise encode params recursively.
8968		for ( prefix in a ) {
8969			buildParams( prefix, a[ prefix ], traditional, add );
8970		}
8971	}
8972
8973	// Return the resulting serialization
8974	return s.join( "&" );
8975};
8976
8977jQuery.fn.extend( {
8978	serialize: function() {
8979		return jQuery.param( this.serializeArray() );
8980	},
8981	serializeArray: function() {
8982		return this.map( function() {
8983
8984			// Can add propHook for "elements" to filter or add form elements
8985			var elements = jQuery.prop( this, "elements" );
8986			return elements ? jQuery.makeArray( elements ) : this;
8987		} ).filter( function() {
8988			var type = this.type;
8989
8990			// Use .is( ":disabled" ) so that fieldset[disabled] works
8991			return this.name && !jQuery( this ).is( ":disabled" ) &&
8992				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
8993				( this.checked || !rcheckableType.test( type ) );
8994		} ).map( function( _i, elem ) {
8995			var val = jQuery( this ).val();
8996
8997			if ( val == null ) {
8998				return null;
8999			}
9000
9001			if ( Array.isArray( val ) ) {
9002				return jQuery.map( val, function( val ) {
9003					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
9004				} );
9005			}
9006
9007			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
9008		} ).get();
9009	}
9010} );
9011
9012
9013var
9014	r20 = /%20/g,
9015	rhash = /#.*$/,
9016	rantiCache = /([?&])_=[^&]*/,
9017	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
9018
9019	// #7653, #8125, #8152: local protocol detection
9020	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
9021	rnoContent = /^(?:GET|HEAD)$/,
9022	rprotocol = /^\/\//,
9023
9024	/* Prefilters
9025	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
9026	 * 2) These are called:
9027	 *    - BEFORE asking for a transport
9028	 *    - AFTER param serialization (s.data is a string if s.processData is true)
9029	 * 3) key is the dataType
9030	 * 4) the catchall symbol "*" can be used
9031	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
9032	 */
9033	prefilters = {},
9034
9035	/* Transports bindings
9036	 * 1) key is the dataType
9037	 * 2) the catchall symbol "*" can be used
9038	 * 3) selection will start with transport dataType and THEN go to "*" if needed
9039	 */
9040	transports = {},
9041
9042	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
9043	allTypes = "*/".concat( "*" ),
9044
9045	// Anchor tag for parsing the document origin
9046	originAnchor = document.createElement( "a" );
9047
9048originAnchor.href = location.href;
9049
9050// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
9051function addToPrefiltersOrTransports( structure ) {
9052
9053	// dataTypeExpression is optional and defaults to "*"
9054	return function( dataTypeExpression, func ) {
9055
9056		if ( typeof dataTypeExpression !== "string" ) {
9057			func = dataTypeExpression;
9058			dataTypeExpression = "*";
9059		}
9060
9061		var dataType,
9062			i = 0,
9063			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
9064
9065		if ( isFunction( func ) ) {
9066
9067			// For each dataType in the dataTypeExpression
9068			while ( ( dataType = dataTypes[ i++ ] ) ) {
9069
9070				// Prepend if requested
9071				if ( dataType[ 0 ] === "+" ) {
9072					dataType = dataType.slice( 1 ) || "*";
9073					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
9074
9075				// Otherwise append
9076				} else {
9077					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
9078				}
9079			}
9080		}
9081	};
9082}
9083
9084// Base inspection function for prefilters and transports
9085function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
9086
9087	var inspected = {},
9088		seekingTransport = ( structure === transports );
9089
9090	function inspect( dataType ) {
9091		var selected;
9092		inspected[ dataType ] = true;
9093		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
9094			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
9095			if ( typeof dataTypeOrTransport === "string" &&
9096				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
9097
9098				options.dataTypes.unshift( dataTypeOrTransport );
9099				inspect( dataTypeOrTransport );
9100				return false;
9101			} else if ( seekingTransport ) {
9102				return !( selected = dataTypeOrTransport );
9103			}
9104		} );
9105		return selected;
9106	}
9107
9108	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
9109}
9110
9111// A special extend for ajax options
9112// that takes "flat" options (not to be deep extended)
9113// Fixes #9887
9114function ajaxExtend( target, src ) {
9115	var key, deep,
9116		flatOptions = jQuery.ajaxSettings.flatOptions || {};
9117
9118	for ( key in src ) {
9119		if ( src[ key ] !== undefined ) {
9120			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
9121		}
9122	}
9123	if ( deep ) {
9124		jQuery.extend( true, target, deep );
9125	}
9126
9127	return target;
9128}
9129
9130/* Handles responses to an ajax request:
9131 * - finds the right dataType (mediates between content-type and expected dataType)
9132 * - returns the corresponding response
9133 */
9134function ajaxHandleResponses( s, jqXHR, responses ) {
9135
9136	var ct, type, finalDataType, firstDataType,
9137		contents = s.contents,
9138		dataTypes = s.dataTypes;
9139
9140	// Remove auto dataType and get content-type in the process
9141	while ( dataTypes[ 0 ] === "*" ) {
9142		dataTypes.shift();
9143		if ( ct === undefined ) {
9144			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
9145		}
9146	}
9147
9148	// Check if we're dealing with a known content-type
9149	if ( ct ) {
9150		for ( type in contents ) {
9151			if ( contents[ type ] && contents[ type ].test( ct ) ) {
9152				dataTypes.unshift( type );
9153				break;
9154			}
9155		}
9156	}
9157
9158	// Check to see if we have a response for the expected dataType
9159	if ( dataTypes[ 0 ] in responses ) {
9160		finalDataType = dataTypes[ 0 ];
9161	} else {
9162
9163		// Try convertible dataTypes
9164		for ( type in responses ) {
9165			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
9166				finalDataType = type;
9167				break;
9168			}
9169			if ( !firstDataType ) {
9170				firstDataType = type;
9171			}
9172		}
9173
9174		// Or just use first one
9175		finalDataType = finalDataType || firstDataType;
9176	}
9177
9178	// If we found a dataType
9179	// We add the dataType to the list if needed
9180	// and return the corresponding response
9181	if ( finalDataType ) {
9182		if ( finalDataType !== dataTypes[ 0 ] ) {
9183			dataTypes.unshift( finalDataType );
9184		}
9185		return responses[ finalDataType ];
9186	}
9187}
9188
9189/* Chain conversions given the request and the original response
9190 * Also sets the responseXXX fields on the jqXHR instance
9191 */
9192function ajaxConvert( s, response, jqXHR, isSuccess ) {
9193	var conv2, current, conv, tmp, prev,
9194		converters = {},
9195
9196		// Work with a copy of dataTypes in case we need to modify it for conversion
9197		dataTypes = s.dataTypes.slice();
9198
9199	// Create converters map with lowercased keys
9200	if ( dataTypes[ 1 ] ) {
9201		for ( conv in s.converters ) {
9202			converters[ conv.toLowerCase() ] = s.converters[ conv ];
9203		}
9204	}
9205
9206	current = dataTypes.shift();
9207
9208	// Convert to each sequential dataType
9209	while ( current ) {
9210
9211		if ( s.responseFields[ current ] ) {
9212			jqXHR[ s.responseFields[ current ] ] = response;
9213		}
9214
9215		// Apply the dataFilter if provided
9216		if ( !prev && isSuccess && s.dataFilter ) {
9217			response = s.dataFilter( response, s.dataType );
9218		}
9219
9220		prev = current;
9221		current = dataTypes.shift();
9222
9223		if ( current ) {
9224
9225			// There's only work to do if current dataType is non-auto
9226			if ( current === "*" ) {
9227
9228				current = prev;
9229
9230			// Convert response if prev dataType is non-auto and differs from current
9231			} else if ( prev !== "*" && prev !== current ) {
9232
9233				// Seek a direct converter
9234				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
9235
9236				// If none found, seek a pair
9237				if ( !conv ) {
9238					for ( conv2 in converters ) {
9239
9240						// If conv2 outputs current
9241						tmp = conv2.split( " " );
9242						if ( tmp[ 1 ] === current ) {
9243
9244							// If prev can be converted to accepted input
9245							conv = converters[ prev + " " + tmp[ 0 ] ] ||
9246								converters[ "* " + tmp[ 0 ] ];
9247							if ( conv ) {
9248
9249								// Condense equivalence converters
9250								if ( conv === true ) {
9251									conv = converters[ conv2 ];
9252
9253								// Otherwise, insert the intermediate dataType
9254								} else if ( converters[ conv2 ] !== true ) {
9255									current = tmp[ 0 ];
9256									dataTypes.unshift( tmp[ 1 ] );
9257								}
9258								break;
9259							}
9260						}
9261					}
9262				}
9263
9264				// Apply converter (if not an equivalence)
9265				if ( conv !== true ) {
9266
9267					// Unless errors are allowed to bubble, catch and return them
9268					if ( conv && s.throws ) {
9269						response = conv( response );
9270					} else {
9271						try {
9272							response = conv( response );
9273						} catch ( e ) {
9274							return {
9275								state: "parsererror",
9276								error: conv ? e : "No conversion from " + prev + " to " + current
9277							};
9278						}
9279					}
9280				}
9281			}
9282		}
9283	}
9284
9285	return { state: "success", data: response };
9286}
9287
9288jQuery.extend( {
9289
9290	// Counter for holding the number of active queries
9291	active: 0,
9292
9293	// Last-Modified header cache for next request
9294	lastModified: {},
9295	etag: {},
9296
9297	ajaxSettings: {
9298		url: location.href,
9299		type: "GET",
9300		isLocal: rlocalProtocol.test( location.protocol ),
9301		global: true,
9302		processData: true,
9303		async: true,
9304		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
9305
9306		/*
9307		timeout: 0,
9308		data: null,
9309		dataType: null,
9310		username: null,
9311		password: null,
9312		cache: null,
9313		throws: false,
9314		traditional: false,
9315		headers: {},
9316		*/
9317
9318		accepts: {
9319			"*": allTypes,
9320			text: "text/plain",
9321			html: "text/html",
9322			xml: "application/xml, text/xml",
9323			json: "application/json, text/javascript"
9324		},
9325
9326		contents: {
9327			xml: /\bxml\b/,
9328			html: /\bhtml/,
9329			json: /\bjson\b/
9330		},
9331
9332		responseFields: {
9333			xml: "responseXML",
9334			text: "responseText",
9335			json: "responseJSON"
9336		},
9337
9338		// Data converters
9339		// Keys separate source (or catchall "*") and destination types with a single space
9340		converters: {
9341
9342			// Convert anything to text
9343			"* text": String,
9344
9345			// Text to html (true = no transformation)
9346			"text html": true,
9347
9348			// Evaluate text as a json expression
9349			"text json": JSON.parse,
9350
9351			// Parse text as xml
9352			"text xml": jQuery.parseXML
9353		},
9354
9355		// For options that shouldn't be deep extended:
9356		// you can add your own custom options here if
9357		// and when you create one that shouldn't be
9358		// deep extended (see ajaxExtend)
9359		flatOptions: {
9360			url: true,
9361			context: true
9362		}
9363	},
9364
9365	// Creates a full fledged settings object into target
9366	// with both ajaxSettings and settings fields.
9367	// If target is omitted, writes into ajaxSettings.
9368	ajaxSetup: function( target, settings ) {
9369		return settings ?
9370
9371			// Building a settings object
9372			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
9373
9374			// Extending ajaxSettings
9375			ajaxExtend( jQuery.ajaxSettings, target );
9376	},
9377
9378	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
9379	ajaxTransport: addToPrefiltersOrTransports( transports ),
9380
9381	// Main method
9382	ajax: function( url, options ) {
9383
9384		// If url is an object, simulate pre-1.5 signature
9385		if ( typeof url === "object" ) {
9386			options = url;
9387			url = undefined;
9388		}
9389
9390		// Force options to be an object
9391		options = options || {};
9392
9393		var transport,
9394
9395			// URL without anti-cache param
9396			cacheURL,
9397
9398			// Response headers
9399			responseHeadersString,
9400			responseHeaders,
9401
9402			// timeout handle
9403			timeoutTimer,
9404
9405			// Url cleanup var
9406			urlAnchor,
9407
9408			// Request state (becomes false upon send and true upon completion)
9409			completed,
9410
9411			// To know if global events are to be dispatched
9412			fireGlobals,
9413
9414			// Loop variable
9415			i,
9416
9417			// uncached part of the url
9418			uncached,
9419
9420			// Create the final options object
9421			s = jQuery.ajaxSetup( {}, options ),
9422
9423			// Callbacks context
9424			callbackContext = s.context || s,
9425
9426			// Context for global events is callbackContext if it is a DOM node or jQuery collection
9427			globalEventContext = s.context &&
9428				( callbackContext.nodeType || callbackContext.jquery ) ?
9429				jQuery( callbackContext ) :
9430				jQuery.event,
9431
9432			// Deferreds
9433			deferred = jQuery.Deferred(),
9434			completeDeferred = jQuery.Callbacks( "once memory" ),
9435
9436			// Status-dependent callbacks
9437			statusCode = s.statusCode || {},
9438
9439			// Headers (they are sent all at once)
9440			requestHeaders = {},
9441			requestHeadersNames = {},
9442
9443			// Default abort message
9444			strAbort = "canceled",
9445
9446			// Fake xhr
9447			jqXHR = {
9448				readyState: 0,
9449
9450				// Builds headers hashtable if needed
9451				getResponseHeader: function( key ) {
9452					var match;
9453					if ( completed ) {
9454						if ( !responseHeaders ) {
9455							responseHeaders = {};
9456							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
9457								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
9458									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
9459										.concat( match[ 2 ] );
9460							}
9461						}
9462						match = responseHeaders[ key.toLowerCase() + " " ];
9463					}
9464					return match == null ? null : match.join( ", " );
9465				},
9466
9467				// Raw string
9468				getAllResponseHeaders: function() {
9469					return completed ? responseHeadersString : null;
9470				},
9471
9472				// Caches the header
9473				setRequestHeader: function( name, value ) {
9474					if ( completed == null ) {
9475						name = requestHeadersNames[ name.toLowerCase() ] =
9476							requestHeadersNames[ name.toLowerCase() ] || name;
9477						requestHeaders[ name ] = value;
9478					}
9479					return this;
9480				},
9481
9482				// Overrides response content-type header
9483				overrideMimeType: function( type ) {
9484					if ( completed == null ) {
9485						s.mimeType = type;
9486					}
9487					return this;
9488				},
9489
9490				// Status-dependent callbacks
9491				statusCode: function( map ) {
9492					var code;
9493					if ( map ) {
9494						if ( completed ) {
9495
9496							// Execute the appropriate callbacks
9497							jqXHR.always( map[ jqXHR.status ] );
9498						} else {
9499
9500							// Lazy-add the new callbacks in a way that preserves old ones
9501							for ( code in map ) {
9502								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
9503							}
9504						}
9505					}
9506					return this;
9507				},
9508
9509				// Cancel the request
9510				abort: function( statusText ) {
9511					var finalText = statusText || strAbort;
9512					if ( transport ) {
9513						transport.abort( finalText );
9514					}
9515					done( 0, finalText );
9516					return this;
9517				}
9518			};
9519
9520		// Attach deferreds
9521		deferred.promise( jqXHR );
9522
9523		// Add protocol if not provided (prefilters might expect it)
9524		// Handle falsy url in the settings object (#10093: consistency with old signature)
9525		// We also use the url parameter if available
9526		s.url = ( ( url || s.url || location.href ) + "" )
9527			.replace( rprotocol, location.protocol + "//" );
9528
9529		// Alias method option to type as per ticket #12004
9530		s.type = options.method || options.type || s.method || s.type;
9531
9532		// Extract dataTypes list
9533		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
9534
9535		// A cross-domain request is in order when the origin doesn't match the current origin.
9536		if ( s.crossDomain == null ) {
9537			urlAnchor = document.createElement( "a" );
9538
9539			// Support: IE <=8 - 11, Edge 12 - 15
9540			// IE throws exception on accessing the href property if url is malformed,
9541			// e.g. http://example.com:80x/
9542			try {
9543				urlAnchor.href = s.url;
9544
9545				// Support: IE <=8 - 11 only
9546				// Anchor's host property isn't correctly set when s.url is relative
9547				urlAnchor.href = urlAnchor.href;
9548				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
9549					urlAnchor.protocol + "//" + urlAnchor.host;
9550			} catch ( e ) {
9551
9552				// If there is an error parsing the URL, assume it is crossDomain,
9553				// it can be rejected by the transport if it is invalid
9554				s.crossDomain = true;
9555			}
9556		}
9557
9558		// Convert data if not already a string
9559		if ( s.data && s.processData && typeof s.data !== "string" ) {
9560			s.data = jQuery.param( s.data, s.traditional );
9561		}
9562
9563		// Apply prefilters
9564		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
9565
9566		// If request was aborted inside a prefilter, stop there
9567		if ( completed ) {
9568			return jqXHR;
9569		}
9570
9571		// We can fire global events as of now if asked to
9572		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
9573		fireGlobals = jQuery.event && s.global;
9574
9575		// Watch for a new set of requests
9576		if ( fireGlobals && jQuery.active++ === 0 ) {
9577			jQuery.event.trigger( "ajaxStart" );
9578		}
9579
9580		// Uppercase the type
9581		s.type = s.type.toUpperCase();
9582
9583		// Determine if request has content
9584		s.hasContent = !rnoContent.test( s.type );
9585
9586		// Save the URL in case we're toying with the If-Modified-Since
9587		// and/or If-None-Match header later on
9588		// Remove hash to simplify url manipulation
9589		cacheURL = s.url.replace( rhash, "" );
9590
9591		// More options handling for requests with no content
9592		if ( !s.hasContent ) {
9593
9594			// Remember the hash so we can put it back
9595			uncached = s.url.slice( cacheURL.length );
9596
9597			// If data is available and should be processed, append data to url
9598			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
9599				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
9600
9601				// #9682: remove data so that it's not used in an eventual retry
9602				delete s.data;
9603			}
9604
9605			// Add or update anti-cache param if needed
9606			if ( s.cache === false ) {
9607				cacheURL = cacheURL.replace( rantiCache, "$1" );
9608				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
9609					uncached;
9610			}
9611
9612			// Put hash and anti-cache on the URL that will be requested (gh-1732)
9613			s.url = cacheURL + uncached;
9614
9615		// Change '%20' to '+' if this is encoded form body content (gh-2658)
9616		} else if ( s.data && s.processData &&
9617			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
9618			s.data = s.data.replace( r20, "+" );
9619		}
9620
9621		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9622		if ( s.ifModified ) {
9623			if ( jQuery.lastModified[ cacheURL ] ) {
9624				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
9625			}
9626			if ( jQuery.etag[ cacheURL ] ) {
9627				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
9628			}
9629		}
9630
9631		// Set the correct header, if data is being sent
9632		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
9633			jqXHR.setRequestHeader( "Content-Type", s.contentType );
9634		}
9635
9636		// Set the Accepts header for the server, depending on the dataType
9637		jqXHR.setRequestHeader(
9638			"Accept",
9639			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
9640				s.accepts[ s.dataTypes[ 0 ] ] +
9641					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
9642				s.accepts[ "*" ]
9643		);
9644
9645		// Check for headers option
9646		for ( i in s.headers ) {
9647			jqXHR.setRequestHeader( i, s.headers[ i ] );
9648		}
9649
9650		// Allow custom headers/mimetypes and early abort
9651		if ( s.beforeSend &&
9652			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
9653
9654			// Abort if not done already and return
9655			return jqXHR.abort();
9656		}
9657
9658		// Aborting is no longer a cancellation
9659		strAbort = "abort";
9660
9661		// Install callbacks on deferreds
9662		completeDeferred.add( s.complete );
9663		jqXHR.done( s.success );
9664		jqXHR.fail( s.error );
9665
9666		// Get transport
9667		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
9668
9669		// If no transport, we auto-abort
9670		if ( !transport ) {
9671			done( -1, "No Transport" );
9672		} else {
9673			jqXHR.readyState = 1;
9674
9675			// Send global event
9676			if ( fireGlobals ) {
9677				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
9678			}
9679
9680			// If request was aborted inside ajaxSend, stop there
9681			if ( completed ) {
9682				return jqXHR;
9683			}
9684
9685			// Timeout
9686			if ( s.async && s.timeout > 0 ) {
9687				timeoutTimer = window.setTimeout( function() {
9688					jqXHR.abort( "timeout" );
9689				}, s.timeout );
9690			}
9691
9692			try {
9693				completed = false;
9694				transport.send( requestHeaders, done );
9695			} catch ( e ) {
9696
9697				// Rethrow post-completion exceptions
9698				if ( completed ) {
9699					throw e;
9700				}
9701
9702				// Propagate others as results
9703				done( -1, e );
9704			}
9705		}
9706
9707		// Callback for when everything is done
9708		function done( status, nativeStatusText, responses, headers ) {
9709			var isSuccess, success, error, response, modified,
9710				statusText = nativeStatusText;
9711
9712			// Ignore repeat invocations
9713			if ( completed ) {
9714				return;
9715			}
9716
9717			completed = true;
9718
9719			// Clear timeout if it exists
9720			if ( timeoutTimer ) {
9721				window.clearTimeout( timeoutTimer );
9722			}
9723
9724			// Dereference transport for early garbage collection
9725			// (no matter how long the jqXHR object will be used)
9726			transport = undefined;
9727
9728			// Cache response headers
9729			responseHeadersString = headers || "";
9730
9731			// Set readyState
9732			jqXHR.readyState = status > 0 ? 4 : 0;
9733
9734			// Determine if successful
9735			isSuccess = status >= 200 && status < 300 || status === 304;
9736
9737			// Get response data
9738			if ( responses ) {
9739				response = ajaxHandleResponses( s, jqXHR, responses );
9740			}
9741
9742			// Use a noop converter for missing script but not if jsonp
9743			if ( !isSuccess &&
9744				jQuery.inArray( "script", s.dataTypes ) > -1 &&
9745				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
9746				s.converters[ "text script" ] = function() {};
9747			}
9748
9749			// Convert no matter what (that way responseXXX fields are always set)
9750			response = ajaxConvert( s, response, jqXHR, isSuccess );
9751
9752			// If successful, handle type chaining
9753			if ( isSuccess ) {
9754
9755				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9756				if ( s.ifModified ) {
9757					modified = jqXHR.getResponseHeader( "Last-Modified" );
9758					if ( modified ) {
9759						jQuery.lastModified[ cacheURL ] = modified;
9760					}
9761					modified = jqXHR.getResponseHeader( "etag" );
9762					if ( modified ) {
9763						jQuery.etag[ cacheURL ] = modified;
9764					}
9765				}
9766
9767				// if no content
9768				if ( status === 204 || s.type === "HEAD" ) {
9769					statusText = "nocontent";
9770
9771				// if not modified
9772				} else if ( status === 304 ) {
9773					statusText = "notmodified";
9774
9775				// If we have data, let's convert it
9776				} else {
9777					statusText = response.state;
9778					success = response.data;
9779					error = response.error;
9780					isSuccess = !error;
9781				}
9782			} else {
9783
9784				// Extract error from statusText and normalize for non-aborts
9785				error = statusText;
9786				if ( status || !statusText ) {
9787					statusText = "error";
9788					if ( status < 0 ) {
9789						status = 0;
9790					}
9791				}
9792			}
9793
9794			// Set data for the fake xhr object
9795			jqXHR.status = status;
9796			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
9797
9798			// Success/Error
9799			if ( isSuccess ) {
9800				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
9801			} else {
9802				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
9803			}
9804
9805			// Status-dependent callbacks
9806			jqXHR.statusCode( statusCode );
9807			statusCode = undefined;
9808
9809			if ( fireGlobals ) {
9810				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
9811					[ jqXHR, s, isSuccess ? success : error ] );
9812			}
9813
9814			// Complete
9815			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
9816
9817			if ( fireGlobals ) {
9818				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
9819
9820				// Handle the global AJAX counter
9821				if ( !( --jQuery.active ) ) {
9822					jQuery.event.trigger( "ajaxStop" );
9823				}
9824			}
9825		}
9826
9827		return jqXHR;
9828	},
9829
9830	getJSON: function( url, data, callback ) {
9831		return jQuery.get( url, data, callback, "json" );
9832	},
9833
9834	getScript: function( url, callback ) {
9835		return jQuery.get( url, undefined, callback, "script" );
9836	}
9837} );
9838
9839jQuery.each( [ "get", "post" ], function( _i, method ) {
9840	jQuery[ method ] = function( url, data, callback, type ) {
9841
9842		// Shift arguments if data argument was omitted
9843		if ( isFunction( data ) ) {
9844			type = type || callback;
9845			callback = data;
9846			data = undefined;
9847		}
9848
9849		// The url can be an options object (which then must have .url)
9850		return jQuery.ajax( jQuery.extend( {
9851			url: url,
9852			type: method,
9853			dataType: type,
9854			data: data,
9855			success: callback
9856		}, jQuery.isPlainObject( url ) && url ) );
9857	};
9858} );
9859
9860jQuery.ajaxPrefilter( function( s ) {
9861	var i;
9862	for ( i in s.headers ) {
9863		if ( i.toLowerCase() === "content-type" ) {
9864			s.contentType = s.headers[ i ] || "";
9865		}
9866	}
9867} );
9868
9869
9870jQuery._evalUrl = function( url, options, doc ) {
9871	return jQuery.ajax( {
9872		url: url,
9873
9874		// Make this explicit, since user can override this through ajaxSetup (#11264)
9875		type: "GET",
9876		dataType: "script",
9877		cache: true,
9878		async: false,
9879		global: false,
9880
9881		// Only evaluate the response if it is successful (gh-4126)
9882		// dataFilter is not invoked for failure responses, so using it instead
9883		// of the default converter is kludgy but it works.
9884		converters: {
9885			"text script": function() {}
9886		},
9887		dataFilter: function( response ) {
9888			jQuery.globalEval( response, options, doc );
9889		}
9890	} );
9891};
9892
9893
9894jQuery.fn.extend( {
9895	wrapAll: function( html ) {
9896		var wrap;
9897
9898		if ( this[ 0 ] ) {
9899			if ( isFunction( html ) ) {
9900				html = html.call( this[ 0 ] );
9901			}
9902
9903			// The elements to wrap the target around
9904			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
9905
9906			if ( this[ 0 ].parentNode ) {
9907				wrap.insertBefore( this[ 0 ] );
9908			}
9909
9910			wrap.map( function() {
9911				var elem = this;
9912
9913				while ( elem.firstElementChild ) {
9914					elem = elem.firstElementChild;
9915				}
9916
9917				return elem;
9918			} ).append( this );
9919		}
9920
9921		return this;
9922	},
9923
9924	wrapInner: function( html ) {
9925		if ( isFunction( html ) ) {
9926			return this.each( function( i ) {
9927				jQuery( this ).wrapInner( html.call( this, i ) );
9928			} );
9929		}
9930
9931		return this.each( function() {
9932			var self = jQuery( this ),
9933				contents = self.contents();
9934
9935			if ( contents.length ) {
9936				contents.wrapAll( html );
9937
9938			} else {
9939				self.append( html );
9940			}
9941		} );
9942	},
9943
9944	wrap: function( html ) {
9945		var htmlIsFunction = isFunction( html );
9946
9947		return this.each( function( i ) {
9948			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
9949		} );
9950	},
9951
9952	unwrap: function( selector ) {
9953		this.parent( selector ).not( "body" ).each( function() {
9954			jQuery( this ).replaceWith( this.childNodes );
9955		} );
9956		return this;
9957	}
9958} );
9959
9960
9961jQuery.expr.pseudos.hidden = function( elem ) {
9962	return !jQuery.expr.pseudos.visible( elem );
9963};
9964jQuery.expr.pseudos.visible = function( elem ) {
9965	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
9966};
9967
9968
9969
9970
9971jQuery.ajaxSettings.xhr = function() {
9972	try {
9973		return new window.XMLHttpRequest();
9974	} catch ( e ) {}
9975};
9976
9977var xhrSuccessStatus = {
9978
9979		// File protocol always yields status code 0, assume 200
9980		0: 200,
9981
9982		// Support: IE <=9 only
9983		// #1450: sometimes IE returns 1223 when it should be 204
9984		1223: 204
9985	},
9986	xhrSupported = jQuery.ajaxSettings.xhr();
9987
9988support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
9989support.ajax = xhrSupported = !!xhrSupported;
9990
9991jQuery.ajaxTransport( function( options ) {
9992	var callback, errorCallback;
9993
9994	// Cross domain only allowed if supported through XMLHttpRequest
9995	if ( support.cors || xhrSupported && !options.crossDomain ) {
9996		return {
9997			send: function( headers, complete ) {
9998				var i,
9999					xhr = options.xhr();
10000
10001				xhr.open(
10002					options.type,
10003					options.url,
10004					options.async,
10005					options.username,
10006					options.password
10007				);
10008
10009				// Apply custom fields if provided
10010				if ( options.xhrFields ) {
10011					for ( i in options.xhrFields ) {
10012						xhr[ i ] = options.xhrFields[ i ];
10013					}
10014				}
10015
10016				// Override mime type if needed
10017				if ( options.mimeType && xhr.overrideMimeType ) {
10018					xhr.overrideMimeType( options.mimeType );
10019				}
10020
10021				// X-Requested-With header
10022				// For cross-domain requests, seeing as conditions for a preflight are
10023				// akin to a jigsaw puzzle, we simply never set it to be sure.
10024				// (it can always be set on a per-request basis or even using ajaxSetup)
10025				// For same-domain requests, won't change header if already provided.
10026				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
10027					headers[ "X-Requested-With" ] = "XMLHttpRequest";
10028				}
10029
10030				// Set headers
10031				for ( i in headers ) {
10032					xhr.setRequestHeader( i, headers[ i ] );
10033				}
10034
10035				// Callback
10036				callback = function( type ) {
10037					return function() {
10038						if ( callback ) {
10039							callback = errorCallback = xhr.onload =
10040								xhr.onerror = xhr.onabort = xhr.ontimeout =
10041									xhr.onreadystatechange = null;
10042
10043							if ( type === "abort" ) {
10044								xhr.abort();
10045							} else if ( type === "error" ) {
10046
10047								// Support: IE <=9 only
10048								// On a manual native abort, IE9 throws
10049								// errors on any property access that is not readyState
10050								if ( typeof xhr.status !== "number" ) {
10051									complete( 0, "error" );
10052								} else {
10053									complete(
10054
10055										// File: protocol always yields status 0; see #8605, #14207
10056										xhr.status,
10057										xhr.statusText
10058									);
10059								}
10060							} else {
10061								complete(
10062									xhrSuccessStatus[ xhr.status ] || xhr.status,
10063									xhr.statusText,
10064
10065									// Support: IE <=9 only
10066									// IE9 has no XHR2 but throws on binary (trac-11426)
10067									// For XHR2 non-text, let the caller handle it (gh-2498)
10068									( xhr.responseType || "text" ) !== "text"  ||
10069									typeof xhr.responseText !== "string" ?
10070										{ binary: xhr.response } :
10071										{ text: xhr.responseText },
10072									xhr.getAllResponseHeaders()
10073								);
10074							}
10075						}
10076					};
10077				};
10078
10079				// Listen to events
10080				xhr.onload = callback();
10081				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
10082
10083				// Support: IE 9 only
10084				// Use onreadystatechange to replace onabort
10085				// to handle uncaught aborts
10086				if ( xhr.onabort !== undefined ) {
10087					xhr.onabort = errorCallback;
10088				} else {
10089					xhr.onreadystatechange = function() {
10090
10091						// Check readyState before timeout as it changes
10092						if ( xhr.readyState === 4 ) {
10093
10094							// Allow onerror to be called first,
10095							// but that will not handle a native abort
10096							// Also, save errorCallback to a variable
10097							// as xhr.onerror cannot be accessed
10098							window.setTimeout( function() {
10099								if ( callback ) {
10100									errorCallback();
10101								}
10102							} );
10103						}
10104					};
10105				}
10106
10107				// Create the abort callback
10108				callback = callback( "abort" );
10109
10110				try {
10111
10112					// Do send the request (this may raise an exception)
10113					xhr.send( options.hasContent && options.data || null );
10114				} catch ( e ) {
10115
10116					// #14683: Only rethrow if this hasn't been notified as an error yet
10117					if ( callback ) {
10118						throw e;
10119					}
10120				}
10121			},
10122
10123			abort: function() {
10124				if ( callback ) {
10125					callback();
10126				}
10127			}
10128		};
10129	}
10130} );
10131
10132
10133
10134
10135// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
10136jQuery.ajaxPrefilter( function( s ) {
10137	if ( s.crossDomain ) {
10138		s.contents.script = false;
10139	}
10140} );
10141
10142// Install script dataType
10143jQuery.ajaxSetup( {
10144	accepts: {
10145		script: "text/javascript, application/javascript, " +
10146			"application/ecmascript, application/x-ecmascript"
10147	},
10148	contents: {
10149		script: /\b(?:java|ecma)script\b/
10150	},
10151	converters: {
10152		"text script": function( text ) {
10153			jQuery.globalEval( text );
10154			return text;
10155		}
10156	}
10157} );
10158
10159// Handle cache's special case and crossDomain
10160jQuery.ajaxPrefilter( "script", function( s ) {
10161	if ( s.cache === undefined ) {
10162		s.cache = false;
10163	}
10164	if ( s.crossDomain ) {
10165		s.type = "GET";
10166	}
10167} );
10168
10169// Bind script tag hack transport
10170jQuery.ajaxTransport( "script", function( s ) {
10171
10172	// This transport only deals with cross domain or forced-by-attrs requests
10173	if ( s.crossDomain || s.scriptAttrs ) {
10174		var script, callback;
10175		return {
10176			send: function( _, complete ) {
10177				script = jQuery( "<script>" )
10178					.attr( s.scriptAttrs || {} )
10179					.prop( { charset: s.scriptCharset, src: s.url } )
10180					.on( "load error", callback = function( evt ) {
10181						script.remove();
10182						callback = null;
10183						if ( evt ) {
10184							complete( evt.type === "error" ? 404 : 200, evt.type );
10185						}
10186					} );
10187
10188				// Use native DOM manipulation to avoid our domManip AJAX trickery
10189				document.head.appendChild( script[ 0 ] );
10190			},
10191			abort: function() {
10192				if ( callback ) {
10193					callback();
10194				}
10195			}
10196		};
10197	}
10198} );
10199
10200
10201
10202
10203var oldCallbacks = [],
10204	rjsonp = /(=)\?(?=&|$)|\?\?/;
10205
10206// Default jsonp settings
10207jQuery.ajaxSetup( {
10208	jsonp: "callback",
10209	jsonpCallback: function() {
10210		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
10211		this[ callback ] = true;
10212		return callback;
10213	}
10214} );
10215
10216// Detect, normalize options and install callbacks for jsonp requests
10217jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
10218
10219	var callbackName, overwritten, responseContainer,
10220		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
10221			"url" :
10222			typeof s.data === "string" &&
10223				( s.contentType || "" )
10224					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
10225				rjsonp.test( s.data ) && "data"
10226		);
10227
10228	// Handle iff the expected data type is "jsonp" or we have a parameter to set
10229	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
10230
10231		// Get callback name, remembering preexisting value associated with it
10232		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
10233			s.jsonpCallback() :
10234			s.jsonpCallback;
10235
10236		// Insert callback into url or form data
10237		if ( jsonProp ) {
10238			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
10239		} else if ( s.jsonp !== false ) {
10240			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
10241		}
10242
10243		// Use data converter to retrieve json after script execution
10244		s.converters[ "script json" ] = function() {
10245			if ( !responseContainer ) {
10246				jQuery.error( callbackName + " was not called" );
10247			}
10248			return responseContainer[ 0 ];
10249		};
10250
10251		// Force json dataType
10252		s.dataTypes[ 0 ] = "json";
10253
10254		// Install callback
10255		overwritten = window[ callbackName ];
10256		window[ callbackName ] = function() {
10257			responseContainer = arguments;
10258		};
10259
10260		// Clean-up function (fires after converters)
10261		jqXHR.always( function() {
10262
10263			// If previous value didn't exist - remove it
10264			if ( overwritten === undefined ) {
10265				jQuery( window ).removeProp( callbackName );
10266
10267			// Otherwise restore preexisting value
10268			} else {
10269				window[ callbackName ] = overwritten;
10270			}
10271
10272			// Save back as free
10273			if ( s[ callbackName ] ) {
10274
10275				// Make sure that re-using the options doesn't screw things around
10276				s.jsonpCallback = originalSettings.jsonpCallback;
10277
10278				// Save the callback name for future use
10279				oldCallbacks.push( callbackName );
10280			}
10281
10282			// Call if it was a function and we have a response
10283			if ( responseContainer && isFunction( overwritten ) ) {
10284				overwritten( responseContainer[ 0 ] );
10285			}
10286
10287			responseContainer = overwritten = undefined;
10288		} );
10289
10290		// Delegate to script
10291		return "script";
10292	}
10293} );
10294
10295
10296
10297
10298// Support: Safari 8 only
10299// In Safari 8 documents created via document.implementation.createHTMLDocument
10300// collapse sibling forms: the second one becomes a child of the first one.
10301// Because of that, this security measure has to be disabled in Safari 8.
10302// https://bugs.webkit.org/show_bug.cgi?id=137337
10303support.createHTMLDocument = ( function() {
10304	var body = document.implementation.createHTMLDocument( "" ).body;
10305	body.innerHTML = "<form></form><form></form>";
10306	return body.childNodes.length === 2;
10307} )();
10308
10309
10310// Argument "data" should be string of html
10311// context (optional): If specified, the fragment will be created in this context,
10312// defaults to document
10313// keepScripts (optional): If true, will include scripts passed in the html string
10314jQuery.parseHTML = function( data, context, keepScripts ) {
10315	if ( typeof data !== "string" ) {
10316		return [];
10317	}
10318	if ( typeof context === "boolean" ) {
10319		keepScripts = context;
10320		context = false;
10321	}
10322
10323	var base, parsed, scripts;
10324
10325	if ( !context ) {
10326
10327		// Stop scripts or inline event handlers from being executed immediately
10328		// by using document.implementation
10329		if ( support.createHTMLDocument ) {
10330			context = document.implementation.createHTMLDocument( "" );
10331
10332			// Set the base href for the created document
10333			// so any parsed elements with URLs
10334			// are based on the document's URL (gh-2965)
10335			base = context.createElement( "base" );
10336			base.href = document.location.href;
10337			context.head.appendChild( base );
10338		} else {
10339			context = document;
10340		}
10341	}
10342
10343	parsed = rsingleTag.exec( data );
10344	scripts = !keepScripts && [];
10345
10346	// Single tag
10347	if ( parsed ) {
10348		return [ context.createElement( parsed[ 1 ] ) ];
10349	}
10350
10351	parsed = buildFragment( [ data ], context, scripts );
10352
10353	if ( scripts && scripts.length ) {
10354		jQuery( scripts ).remove();
10355	}
10356
10357	return jQuery.merge( [], parsed.childNodes );
10358};
10359
10360
10361/**
10362 * Load a url into a page
10363 */
10364jQuery.fn.load = function( url, params, callback ) {
10365	var selector, type, response,
10366		self = this,
10367		off = url.indexOf( " " );
10368
10369	if ( off > -1 ) {
10370		selector = stripAndCollapse( url.slice( off ) );
10371		url = url.slice( 0, off );
10372	}
10373
10374	// If it's a function
10375	if ( isFunction( params ) ) {
10376
10377		// We assume that it's the callback
10378		callback = params;
10379		params = undefined;
10380
10381	// Otherwise, build a param string
10382	} else if ( params && typeof params === "object" ) {
10383		type = "POST";
10384	}
10385
10386	// If we have elements to modify, make the request
10387	if ( self.length > 0 ) {
10388		jQuery.ajax( {
10389			url: url,
10390
10391			// If "type" variable is undefined, then "GET" method will be used.
10392			// Make value of this field explicit since
10393			// user can override it through ajaxSetup method
10394			type: type || "GET",
10395			dataType: "html",
10396			data: params
10397		} ).done( function( responseText ) {
10398
10399			// Save response for use in complete callback
10400			response = arguments;
10401
10402			self.html( selector ?
10403
10404				// If a selector was specified, locate the right elements in a dummy div
10405				// Exclude scripts to avoid IE 'Permission Denied' errors
10406				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
10407
10408				// Otherwise use the full result
10409				responseText );
10410
10411		// If the request succeeds, this function gets "data", "status", "jqXHR"
10412		// but they are ignored because response was set above.
10413		// If it fails, this function gets "jqXHR", "status", "error"
10414		} ).always( callback && function( jqXHR, status ) {
10415			self.each( function() {
10416				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
10417			} );
10418		} );
10419	}
10420
10421	return this;
10422};
10423
10424
10425
10426
10427jQuery.expr.pseudos.animated = function( elem ) {
10428	return jQuery.grep( jQuery.timers, function( fn ) {
10429		return elem === fn.elem;
10430	} ).length;
10431};
10432
10433
10434
10435
10436jQuery.offset = {
10437	setOffset: function( elem, options, i ) {
10438		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
10439			position = jQuery.css( elem, "position" ),
10440			curElem = jQuery( elem ),
10441			props = {};
10442
10443		// Set position first, in-case top/left are set even on static elem
10444		if ( position === "static" ) {
10445			elem.style.position = "relative";
10446		}
10447
10448		curOffset = curElem.offset();
10449		curCSSTop = jQuery.css( elem, "top" );
10450		curCSSLeft = jQuery.css( elem, "left" );
10451		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
10452			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
10453
10454		// Need to be able to calculate position if either
10455		// top or left is auto and position is either absolute or fixed
10456		if ( calculatePosition ) {
10457			curPosition = curElem.position();
10458			curTop = curPosition.top;
10459			curLeft = curPosition.left;
10460
10461		} else {
10462			curTop = parseFloat( curCSSTop ) || 0;
10463			curLeft = parseFloat( curCSSLeft ) || 0;
10464		}
10465
10466		if ( isFunction( options ) ) {
10467
10468			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
10469			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
10470		}
10471
10472		if ( options.top != null ) {
10473			props.top = ( options.top - curOffset.top ) + curTop;
10474		}
10475		if ( options.left != null ) {
10476			props.left = ( options.left - curOffset.left ) + curLeft;
10477		}
10478
10479		if ( "using" in options ) {
10480			options.using.call( elem, props );
10481
10482		} else {
10483			curElem.css( props );
10484		}
10485	}
10486};
10487
10488jQuery.fn.extend( {
10489
10490	// offset() relates an element's border box to the document origin
10491	offset: function( options ) {
10492
10493		// Preserve chaining for setter
10494		if ( arguments.length ) {
10495			return options === undefined ?
10496				this :
10497				this.each( function( i ) {
10498					jQuery.offset.setOffset( this, options, i );
10499				} );
10500		}
10501
10502		var rect, win,
10503			elem = this[ 0 ];
10504
10505		if ( !elem ) {
10506			return;
10507		}
10508
10509		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
10510		// Support: IE <=11 only
10511		// Running getBoundingClientRect on a
10512		// disconnected node in IE throws an error
10513		if ( !elem.getClientRects().length ) {
10514			return { top: 0, left: 0 };
10515		}
10516
10517		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
10518		rect = elem.getBoundingClientRect();
10519		win = elem.ownerDocument.defaultView;
10520		return {
10521			top: rect.top + win.pageYOffset,
10522			left: rect.left + win.pageXOffset
10523		};
10524	},
10525
10526	// position() relates an element's margin box to its offset parent's padding box
10527	// This corresponds to the behavior of CSS absolute positioning
10528	position: function() {
10529		if ( !this[ 0 ] ) {
10530			return;
10531		}
10532
10533		var offsetParent, offset, doc,
10534			elem = this[ 0 ],
10535			parentOffset = { top: 0, left: 0 };
10536
10537		// position:fixed elements are offset from the viewport, which itself always has zero offset
10538		if ( jQuery.css( elem, "position" ) === "fixed" ) {
10539
10540			// Assume position:fixed implies availability of getBoundingClientRect
10541			offset = elem.getBoundingClientRect();
10542
10543		} else {
10544			offset = this.offset();
10545
10546			// Account for the *real* offset parent, which can be the document or its root element
10547			// when a statically positioned element is identified
10548			doc = elem.ownerDocument;
10549			offsetParent = elem.offsetParent || doc.documentElement;
10550			while ( offsetParent &&
10551				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
10552				jQuery.css( offsetParent, "position" ) === "static" ) {
10553
10554				offsetParent = offsetParent.parentNode;
10555			}
10556			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
10557
10558				// Incorporate borders into its offset, since they are outside its content origin
10559				parentOffset = jQuery( offsetParent ).offset();
10560				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
10561				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
10562			}
10563		}
10564
10565		// Subtract parent offsets and element margins
10566		return {
10567			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
10568			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
10569		};
10570	},
10571
10572	// This method will return documentElement in the following cases:
10573	// 1) For the element inside the iframe without offsetParent, this method will return
10574	//    documentElement of the parent window
10575	// 2) For the hidden or detached element
10576	// 3) For body or html element, i.e. in case of the html node - it will return itself
10577	//
10578	// but those exceptions were never presented as a real life use-cases
10579	// and might be considered as more preferable results.
10580	//
10581	// This logic, however, is not guaranteed and can change at any point in the future
10582	offsetParent: function() {
10583		return this.map( function() {
10584			var offsetParent = this.offsetParent;
10585
10586			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
10587				offsetParent = offsetParent.offsetParent;
10588			}
10589
10590			return offsetParent || documentElement;
10591		} );
10592	}
10593} );
10594
10595// Create scrollLeft and scrollTop methods
10596jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
10597	var top = "pageYOffset" === prop;
10598
10599	jQuery.fn[ method ] = function( val ) {
10600		return access( this, function( elem, method, val ) {
10601
10602			// Coalesce documents and windows
10603			var win;
10604			if ( isWindow( elem ) ) {
10605				win = elem;
10606			} else if ( elem.nodeType === 9 ) {
10607				win = elem.defaultView;
10608			}
10609
10610			if ( val === undefined ) {
10611				return win ? win[ prop ] : elem[ method ];
10612			}
10613
10614			if ( win ) {
10615				win.scrollTo(
10616					!top ? val : win.pageXOffset,
10617					top ? val : win.pageYOffset
10618				);
10619
10620			} else {
10621				elem[ method ] = val;
10622			}
10623		}, method, val, arguments.length );
10624	};
10625} );
10626
10627// Support: Safari <=7 - 9.1, Chrome <=37 - 49
10628// Add the top/left cssHooks using jQuery.fn.position
10629// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
10630// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
10631// getComputedStyle returns percent when specified for top/left/bottom/right;
10632// rather than make the css module depend on the offset module, just check for it here
10633jQuery.each( [ "top", "left" ], function( _i, prop ) {
10634	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
10635		function( elem, computed ) {
10636			if ( computed ) {
10637				computed = curCSS( elem, prop );
10638
10639				// If curCSS returns percentage, fallback to offset
10640				return rnumnonpx.test( computed ) ?
10641					jQuery( elem ).position()[ prop ] + "px" :
10642					computed;
10643			}
10644		}
10645	);
10646} );
10647
10648
10649// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
10650jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
10651	jQuery.each( {
10652		padding: "inner" + name,
10653		content: type,
10654		"": "outer" + name
10655	}, function( defaultExtra, funcName ) {
10656
10657		// Margin is only for outerHeight, outerWidth
10658		jQuery.fn[ funcName ] = function( margin, value ) {
10659			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
10660				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
10661
10662			return access( this, function( elem, type, value ) {
10663				var doc;
10664
10665				if ( isWindow( elem ) ) {
10666
10667					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
10668					return funcName.indexOf( "outer" ) === 0 ?
10669						elem[ "inner" + name ] :
10670						elem.document.documentElement[ "client" + name ];
10671				}
10672
10673				// Get document width or height
10674				if ( elem.nodeType === 9 ) {
10675					doc = elem.documentElement;
10676
10677					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
10678					// whichever is greatest
10679					return Math.max(
10680						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
10681						elem.body[ "offset" + name ], doc[ "offset" + name ],
10682						doc[ "client" + name ]
10683					);
10684				}
10685
10686				return value === undefined ?
10687
10688					// Get width or height on the element, requesting but not forcing parseFloat
10689					jQuery.css( elem, type, extra ) :
10690
10691					// Set width or height on the element
10692					jQuery.style( elem, type, value, extra );
10693			}, type, chainable ? margin : undefined, chainable );
10694		};
10695	} );
10696} );
10697
10698
10699jQuery.each( [
10700	"ajaxStart",
10701	"ajaxStop",
10702	"ajaxComplete",
10703	"ajaxError",
10704	"ajaxSuccess",
10705	"ajaxSend"
10706], function( _i, type ) {
10707	jQuery.fn[ type ] = function( fn ) {
10708		return this.on( type, fn );
10709	};
10710} );
10711
10712
10713
10714
10715jQuery.fn.extend( {
10716
10717	bind: function( types, data, fn ) {
10718		return this.on( types, null, data, fn );
10719	},
10720	unbind: function( types, fn ) {
10721		return this.off( types, null, fn );
10722	},
10723
10724	delegate: function( selector, types, data, fn ) {
10725		return this.on( types, selector, data, fn );
10726	},
10727	undelegate: function( selector, types, fn ) {
10728
10729		// ( namespace ) or ( selector, types [, fn] )
10730		return arguments.length === 1 ?
10731			this.off( selector, "**" ) :
10732			this.off( types, selector || "**", fn );
10733	},
10734
10735	hover: function( fnOver, fnOut ) {
10736		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
10737	}
10738} );
10739
10740jQuery.each(
10741	( "blur focus focusin focusout resize scroll click dblclick " +
10742	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
10743	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
10744	function( _i, name ) {
10745
10746		// Handle event binding
10747		jQuery.fn[ name ] = function( data, fn ) {
10748			return arguments.length > 0 ?
10749				this.on( name, null, data, fn ) :
10750				this.trigger( name );
10751		};
10752	}
10753);
10754
10755
10756
10757
10758// Support: Android <=4.0 only
10759// Make sure we trim BOM and NBSP
10760var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
10761
10762// Bind a function to a context, optionally partially applying any
10763// arguments.
10764// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
10765// However, it is not slated for removal any time soon
10766jQuery.proxy = function( fn, context ) {
10767	var tmp, args, proxy;
10768
10769	if ( typeof context === "string" ) {
10770		tmp = fn[ context ];
10771		context = fn;
10772		fn = tmp;
10773	}
10774
10775	// Quick check to determine if target is callable, in the spec
10776	// this throws a TypeError, but we will just return undefined.
10777	if ( !isFunction( fn ) ) {
10778		return undefined;
10779	}
10780
10781	// Simulated bind
10782	args = slice.call( arguments, 2 );
10783	proxy = function() {
10784		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
10785	};
10786
10787	// Set the guid of unique handler to the same of original handler, so it can be removed
10788	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
10789
10790	return proxy;
10791};
10792
10793jQuery.holdReady = function( hold ) {
10794	if ( hold ) {
10795		jQuery.readyWait++;
10796	} else {
10797		jQuery.ready( true );
10798	}
10799};
10800jQuery.isArray = Array.isArray;
10801jQuery.parseJSON = JSON.parse;
10802jQuery.nodeName = nodeName;
10803jQuery.isFunction = isFunction;
10804jQuery.isWindow = isWindow;
10805jQuery.camelCase = camelCase;
10806jQuery.type = toType;
10807
10808jQuery.now = Date.now;
10809
10810jQuery.isNumeric = function( obj ) {
10811
10812	// As of jQuery 3.0, isNumeric is limited to
10813	// strings and numbers (primitives or objects)
10814	// that can be coerced to finite numbers (gh-2662)
10815	var type = jQuery.type( obj );
10816	return ( type === "number" || type === "string" ) &&
10817
10818		// parseFloat NaNs numeric-cast false positives ("")
10819		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
10820		// subtraction forces infinities to NaN
10821		!isNaN( obj - parseFloat( obj ) );
10822};
10823
10824jQuery.trim = function( text ) {
10825	return text == null ?
10826		"" :
10827		( text + "" ).replace( rtrim, "" );
10828};
10829
10830
10831
10832// Register as a named AMD module, since jQuery can be concatenated with other
10833// files that may use define, but not via a proper concatenation script that
10834// understands anonymous AMD modules. A named AMD is safest and most robust
10835// way to register. Lowercase jquery is used because AMD module names are
10836// derived from file names, and jQuery is normally delivered in a lowercase
10837// file name. Do this after creating the global so that if an AMD module wants
10838// to call noConflict to hide this version of jQuery, it will work.
10839
10840// Note that for maximum portability, libraries that are not jQuery should
10841// declare themselves as anonymous modules, and avoid setting a global if an
10842// AMD loader is present. jQuery is a special case. For more information, see
10843// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
10844
10845if ( typeof define === "function" && define.amd ) {
10846	define( "jquery", [], function() {
10847		return jQuery;
10848	} );
10849}
10850
10851
10852
10853
10854var
10855
10856	// Map over jQuery in case of overwrite
10857	_jQuery = window.jQuery,
10858
10859	// Map over the $ in case of overwrite
10860	_$ = window.$;
10861
10862jQuery.noConflict = function( deep ) {
10863	if ( window.$ === jQuery ) {
10864		window.$ = _$;
10865	}
10866
10867	if ( deep && window.jQuery === jQuery ) {
10868		window.jQuery = _jQuery;
10869	}
10870
10871	return jQuery;
10872};
10873
10874// Expose jQuery and $ identifiers, even in AMD
10875// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10876// and CommonJS for browser emulators (#13566)
10877if ( typeof noGlobal === "undefined" ) {
10878	window.jQuery = window.$ = jQuery;
10879}
10880
10881
10882
vendor: 8,130 bytes, lines 10883-10888
10883
10884return jQuery;
10885} );
10886
10887/*SIGUIENTE LIBRERIA*/
10888!function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e=window.Slick||{};(e=function(){var e=0;return function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.o
vendor: 3,442 bytes, line 10888
10888ptions.rows>1){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!=0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t;if(e=this.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.
10888slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>1&&((i=e.$slides.children().children()).removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(":focus"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(!1===e.options.infinite?i=e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o=this;return t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0,!0===o.options.swipeToSlide?(o.$slideTrack.find(".slick-slide").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr("data-slick-index")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:"index",index:
10888parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({"aria-describedby":"slick-slide-control"+e.instanceUid+s})}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr("tabindex",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"}
10888,e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?"next":"previous"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||n.$slider.attr("data-sizes"),r=document.createElement("img");r.onload=function(){e.animate({opacity:0}
vendor: 5,619 bytes, line 10888
10888,100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),n.$slider.trigger("lazyLoaded",[n,e,t])})},r.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),n.$slider.trigger("lazyLoadError",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?!0===n.options.infinite?s=(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),s=n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(o>0&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(".slick-slide").slice(o,s),"anticipated"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(".slick-slide"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(".slick-slide")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(".slick-cloned").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(".slick-cloned").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i="boolean"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),!0===t?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};
10888!0===o.options.rtl&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,!1===o.transformsEnabled?o.$slideTrack.css(s):(s={},!1===o.cssTransitions?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}
10888):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?"top":"left","top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),!0===n.options.centerMode){var r=n.options.slidesToShow%2==0?1:0;e=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));s||(s=0),t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===e&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+
10888o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),(o=Math.round(180*t/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0?!1===s.options.rtl?"left":"right":o<=360&&o>=315?!1===s.options.rtl?"left":"right":o>=135&&o<=225?!1===s.options.rtl?"right":"left":!0===s.options.verticalSwiping?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf("mouse")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,!1===l.options.infinite&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return t.touchObject={},!1;void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")}
10888,e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===i.currentSlide?(i.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode?(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode&&(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}});
10889
10890/*SIGUIENTE LIBRERIA*/
10891(function (global, factory) {
10892	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
10893	typeof define === 'function' && define.amd ? define(['exports'], factory) :
10894	(global = global || self, factory(global.window = global.window || {}));
10895}(this, (function (exports) { 'use strict';
10896
10897	/*!
10898	 * CSSRulePlugin 3.7.0
10899	 * https://greensock.com
10900	 *
10901	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
10902	 * Subject to the terms at https://greensock.com/standard-license or for
10903	 * Club GreenSock members, the agreement issued with that membership.
10904	 * @author: Jack Doyle, [email protected]
10905	*/
10906	var gsap,
10907	    _coreInitted,
10908	    _doc,
10909	    CSSPlugin,
10910	    _windowExists = function _windowExists() {
10911	  return typeof window !== "undefined";
10912	},
10913	    _getGSAP = function _getGSAP() {
10914	  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;
10915	},
vendor: 1,307 bytes, lines 10916-10975
10916	    _checkRegister = function _checkRegister() {
10917	  if (!_coreInitted) {
10918	    _initCore();
10919
10920	    if (!CSSPlugin) {
10921	      console.warn("Please gsap.registerPlugin(CSSPlugin, CSSRulePlugin)");
10922	    }
10923	  }
10924
10925	  return _coreInitted;
10926	},
10927	    _initCore = function _initCore(core) {
10928	  gsap = core || _getGSAP();
10929
10930	  if (_windowExists()) {
10931	    _doc = document;
10932	  }
10933
10934	  if (gsap) {
10935	    CSSPlugin = gsap.plugins.css;
10936
10937	    if (CSSPlugin) {
10938	      _coreInitted = 1;
10939	    }
10940	  }
10941	};
10942
10943	var CSSRulePlugin = {
10944	  version: "3.7.0",
10945	  name: "cssRule",
10946	  init: function init(target, value, tween, index, targets) {
10947	    if (!_checkRegister() || typeof target.cssText === "undefined") {
10948	      return false;
10949	    }
10950
10951	    var div = target._gsProxy = target._gsProxy || _doc.createElement("div");
10952
10953	    this.ss = target;
10954	    this.style = div.style;
10955	    div.style.cssText = target.cssText;
10956	    CSSPlugin.prototype.init.call(this, div, value, tween, index, targets);
10957	  },
10958	  render: function render(ratio, data) {
10959	    var pt = data._pt,
10960	        style = data.style,
10961	        ss = data.ss,
10962	        i;
10963
10964	    while (pt) {
10965	      pt.r(ratio, pt.d);
10966	      pt = pt._next;
10967	    }
10968
10969	    i = style.length;
10970
10971	    while (--i > -1) {
10972	      ss[style[i]] = style[style[i]];
10973	    }
10974	  },
10975	  getRule: function getRule(selector) {
10976	    _checkRegister();
10977
10978	    var ruleProp = _doc.all ? "rules" : "cssRules",
10979	        styleSheets = _doc.styleSheets,
10980	        i = styleSheets.length,
10981	        pseudo = selector.charAt(0) === ":",
10982	        j,
10983	        curSS,
10984	        cs,
10985	        a;
10986	    selector = (pseudo ? "" : ",") + selector.split("::").join(":").toLowerCase() + ",";
10987
10988	    if (pseudo) {
10989	      a = [];
10990	    }
10991
10992	    while (i--) {
10993	      try {
10994	        curSS = styleSheets[i][ruleProp];
10995
10996	        if (!curSS) {
10997	          continue;
10998	        }
10999
11000	        j = curSS.length;
11001	      } catch (e) {
11002	        console.warn(e);
11003	        continue;
11004	      }
11005
11006	      while (--j > -1) {
11007	        cs = curSS[j];
11008
11009	        if (cs.selectorText && ("," + cs.selectorText.split("::").join(":").toLowerCase() + ",").indexOf(selector) !== -1) {
11010	          if (pseudo) {
11011	            a.push(cs.style);
11012	          } else {
11013	            return cs.style;
11014	          }
11015	        }
11016	      }
11017	    }
11018
11019	    return a;
11020	  },
11021	  register: _initCore
11022	};
11023	_getGSAP() && gsap.registerPlugin(CSSRulePlugin);
11024
11025	exports.CSSRulePlugin = CSSRulePlugin;
11026	exports.default = CSSRulePlugin;
11027
11028	Object.defineProperty(exports, '__esModule', { value: true });
11029
11030})));
11031
11032/*SIGUIENTE LIBRERIA*/
11033/*!
11034 * CSSRulePlugin 3.7.0
11035 * https://greensock.com
11036 * 
11037 * @license Copyright 2021, GreenSock. All rights reserved.
11038 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
11039 * @author: Jack Doyle, [email protected]
11040 */
11041
11042!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function h(){return"undefined"!=typeof window}function i(){return t||h()&&(t=window.gsap)&&t.registerPlugin&&t}function j(){return n||(s(),o||console.warn("Please gsap.registerPlugin(CSSPlugin, CSSRulePlugin)")),n}var t,n,c,o,s=function _initCore(e){t=e||i(),h()&&(c=document),t&&(o=t.plugins.css)&&(n=1)},r={version:"3.7.0",name:"cssRule",init:function init(e,t,n,i,s){if(!j()||void 0===e.cssText)return!1;var r=e._gsProxy=e._gsProxy||c.createElement("div");this.ss=e,this.style=r.style,r.style.cssText=e.cssText,o.prototype.init.call(this,r,t,n,i,s)},render:function render(e,t){for(var n,i=t._pt,s=t.style,r=t.ss;i;)i.r(e,i.d),i=i._next;for(n=s.length;-1<--n;)r[s[n]]=s[s[n]]},getRule:function getRule(e){j();var t,n,i,s,r=c.all?"rules":"cssRules",o=c.styleSheets,l=o.length,u=":"===e.charAt(0);for(e=(u?"":",")+e.split("::").join(":").toLowerCase()+",",u&&(s=[]);l--;){try{if(!(n=o[l][r]))continue;t=n.length}catch(e){console.warn(e);continue}for(;-1<--t;)if((i=n[t]).selectorText&&-1!==(","+i.selectorText.split("::").join(":").toLowerCase()+",").indexOf(e)){if(!u)return i.style;s.push(i.style)}}return s},register:s};i()&&t.registerPlugin(r),e.CSSRulePlugin=r,e.default=r;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
11043
11044
11045/*SIGUIENTE LIBRERIA*/
11046(function (global, factory) {
11047  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
11048  typeof define === 'function' && define.amd ? define(['exports'], factory) :
11049  (global = global || self, factory(global.window = global.window || {}));
11050}(this, (function (exports) { 'use strict';
11051
11052  function _inheritsLoose(subClass, superClass) {
11053    subClass.prototype = Object.create(superClass.prototype);
11054    subClass.prototype.constructor = subClass;
11055    subClass.__proto__ = superClass;
11056  }
11057
11058  function _assertThisInitialized(self) {
11059    if (self === void 0) {
11060      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
11061    }
11062
11063    return self;
11064  }
11065
11066  var _doc,
11067      _win,
11068      _docElement,
11069      _body,
11070      _divContainer,
11071      _svgContainer,
11072      _identityMatrix,
11073      _transformProp = "transform",
11074      _transformOriginProp = _transformProp + "Origin",
11075      _hasOffsetBug,
11076      _setDoc = function _setDoc(element) {
11077    var doc = element.ownerDocument || element;
11078
11079    if (!(_transformProp in element.style) && "msTransform" in element.style) {
11080      _transformProp = "msTransform";
11081      _transformOriginProp = _transformProp + "Origin";
11082    }
11083
11084    while (doc.parentNode && (doc = doc.parentNode)) {}
11085
11086    _win = window;
11087    _identityMatrix = new Matrix2D();
11088
11089    if (doc) {
11090      _doc = doc;
11091      _docElement = doc.documentElement;
11092      _body = doc.body;
11093      var d1 = doc.createElement("div"),
11094          d2 = doc.createElement("div");
11095
11096      _body.appendChild(d1);
11097
11098      d1.appendChild(d2);
11099      d1.style.position = "static";
vendor: 3,975 bytes, lines 11100-11233
11100      d1.style[_transformProp] = "translate3d(0,0,1px)";
11101      _hasOffsetBug = d2.offsetParent !== d1;
11102
11103      _body.removeChild(d1);
11104    }
11105
11106    return doc;
11107  },
11108      _forceNonZeroScale = function _forceNonZeroScale(e) {
11109    var a, cache;
11110
11111    while (e && e !== _body) {
11112      cache = e._gsap;
11113      cache && cache.uncache && cache.get(e, "x");
11114
11115      if (cache && !cache.scaleX && !cache.scaleY && cache.renderTransform) {
11116        cache.scaleX = cache.scaleY = 1e-4;
11117        cache.renderTransform(1, cache);
11118        a ? a.push(cache) : a = [cache];
11119      }
11120
11121      e = e.parentNode;
11122    }
11123
11124    return a;
11125  },
11126      _svgTemps = [],
11127      _divTemps = [],
11128      _getDocScrollTop = function _getDocScrollTop() {
11129    return _win.pageYOffset || _doc.scrollTop || _docElement.scrollTop || _body.scrollTop || 0;
11130  },
11131      _getDocScrollLeft = function _getDocScrollLeft() {
11132    return _win.pageXOffset || _doc.scrollLeft || _docElement.scrollLeft || _body.scrollLeft || 0;
11133  },
11134      _svgOwner = function _svgOwner(element) {
11135    return element.ownerSVGElement || ((element.tagName + "").toLowerCase() === "svg" ? element : null);
11136  },
11137      _isFixed = function _isFixed(element) {
11138    if (_win.getComputedStyle(element).position === "fixed") {
11139      return true;
11140    }
11141
11142    element = element.parentNode;
11143
11144    if (element && element.nodeType === 1) {
11145      return _isFixed(element);
11146    }
11147  },
11148      _createSibling = function _createSibling(element, i) {
11149    if (element.parentNode && (_doc || _setDoc(element))) {
11150      var svg = _svgOwner(element),
11151          ns = svg ? svg.getAttribute("xmlns") || "http://www.w3.org/2000/svg" : "http://www.w3.org/1999/xhtml",
11152          type = svg ? i ? "rect" : "g" : "div",
11153          x = i !== 2 ? 0 : 100,
11154          y = i === 3 ? 100 : 0,
11155          css = "position:absolute;display:block;pointer-events:none;margin:0;padding:0;",
11156          e = _doc.createElementNS ? _doc.createElementNS(ns.replace(/^https/, "http"), type) : _doc.createElement(type);
11157
11158      if (i) {
11159        if (!svg) {
11160          if (!_divContainer) {
11161            _divContainer = _createSibling(element);
11162            _divContainer.style.cssText = css;
11163          }
11164
11165          e.style.cssText = css + "width:0.1px;height:0.1px;top:" + y + "px;left:" + x + "px";
11166
11167          _divContainer.appendChild(e);
11168        } else {
11169          _svgContainer || (_svgContainer = _createSibling(element));
11170          e.setAttribute("width", 0.01);
11171          e.setAttribute("height", 0.01);
11172          e.setAttribute("transform", "translate(" + x + "," + y + ")");
11173
11174          _svgContainer.appendChild(e);
11175        }
11176      }
11177
11178      return e;
11179    }
11180
11181    throw "Need document and parent.";
11182  },
11183      _consolidate = function _consolidate(m) {
11184    var c = new Matrix2D(),
11185        i = 0;
11186
11187    for (; i < m.numberOfItems; i++) {
11188      c.multiply(m.getItem(i).matrix);
11189    }
11190
11191    return c;
11192  },
11193      _placeSiblings = function _placeSiblings(element, adjustGOffset) {
11194    var svg = _svgOwner(element),
11195        isRootSVG = element === svg,
11196        siblings = svg ? _svgTemps : _divTemps,
11197        parent = element.parentNode,
11198        container,
11199        m,
11200        b,
11201        x,
11202        y,
11203        cs;
11204
11205    if (element === _win) {
11206      return element;
11207    }
11208
11209    siblings.length || siblings.push(_createSibling(element, 1), _createSibling(element, 2), _createSibling(element, 3));
11210    container = svg ? _svgContainer : _divContainer;
11211
11212    if (svg) {
11213      b = isRootSVG ? {
11214        x: 0,
11215        y: 0
11216      } : element.getBBox();
11217      m = element.transform ? element.transform.baseVal : {};
11218
11219      if (m.numberOfItems) {
11220        m = m.numberOfItems > 1 ? _consolidate(m) : m.getItem(0).matrix;
11221        x = m.a * b.x + m.c * b.y;
11222        y = m.b * b.x + m.d * b.y;
11223      } else {
11224        m = _identityMatrix;
11225        x = b.x;
11226        y = b.y;
11227      }
11228
11229      if (adjustGOffset && element.tagName.toLowerCase() === "g") {
11230        x = y = 0;
11231      }
11232
11233      (isRootSVG ? svg : parent).appendChild(container);
vendor: 4,965 bytes, lines 11234-11421
11234      container.setAttribute("transform", "matrix(" + m.a + "," + m.b + "," + m.c + "," + m.d + "," + (m.e + x) + "," + (m.f + y) + ")");
11235    } else {
11236      x = y = 0;
11237
11238      if (_hasOffsetBug) {
11239        m = element.offsetParent;
11240        b = element;
11241
11242        while (b && (b = b.parentNode) && b !== m && b.parentNode) {
11243          if ((_win.getComputedStyle(b)[_transformProp] + "").length > 4) {
11244            x = b.offsetLeft;
11245            y = b.offsetTop;
11246            b = 0;
11247          }
11248        }
11249      }
11250
11251      cs = _win.getComputedStyle(element);
11252
11253      if (cs.position !== "absolute") {
11254        m = element.offsetParent;
11255
11256        while (parent && parent !== m) {
11257          x += parent.scrollLeft || 0;
11258          y += parent.scrollTop || 0;
11259          parent = parent.parentNode;
11260        }
11261      }
11262
11263      b = container.style;
11264      b.top = element.offsetTop - y + "px";
11265      b.left = element.offsetLeft - x + "px";
11266      b[_transformProp] = cs[_transformProp];
11267      b[_transformOriginProp] = cs[_transformOriginProp];
11268      b.position = cs.position === "fixed" ? "fixed" : "absolute";
11269      element.parentNode.appendChild(container);
11270    }
11271
11272    return container;
11273  },
11274      _setMatrix = function _setMatrix(m, a, b, c, d, e, f) {
11275    m.a = a;
11276    m.b = b;
11277    m.c = c;
11278    m.d = d;
11279    m.e = e;
11280    m.f = f;
11281    return m;
11282  };
11283
11284  var Matrix2D = function () {
11285    function Matrix2D(a, b, c, d, e, f) {
11286      if (a === void 0) {
11287        a = 1;
11288      }
11289
11290      if (b === void 0) {
11291        b = 0;
11292      }
11293
11294      if (c === void 0) {
11295        c = 0;
11296      }
11297
11298      if (d === void 0) {
11299        d = 1;
11300      }
11301
11302      if (e === void 0) {
11303        e = 0;
11304      }
11305
11306      if (f === void 0) {
11307        f = 0;
11308      }
11309
11310      _setMatrix(this, a, b, c, d, e, f);
11311    }
11312
11313    var _proto = Matrix2D.prototype;
11314
11315    _proto.inverse = function inverse() {
11316      var a = this.a,
11317          b = this.b,
11318          c = this.c,
11319          d = this.d,
11320          e = this.e,
11321          f = this.f,
11322          determinant = a * d - b * c || 1e-10;
11323      return _setMatrix(this, d / determinant, -b / determinant, -c / determinant, a / determinant, (c * f - d * e) / determinant, -(a * f - b * e) / determinant);
11324    };
11325
11326    _proto.multiply = function multiply(matrix) {
11327      var a = this.a,
11328          b = this.b,
11329          c = this.c,
11330          d = this.d,
11331          e = this.e,
11332          f = this.f,
11333          a2 = matrix.a,
11334          b2 = matrix.c,
11335          c2 = matrix.b,
11336          d2 = matrix.d,
11337          e2 = matrix.e,
11338          f2 = matrix.f;
11339      return _setMatrix(this, a2 * a + c2 * c, a2 * b + c2 * d, b2 * a + d2 * c, b2 * b + d2 * d, e + e2 * a + f2 * c, f + e2 * b + f2 * d);
11340    };
11341
11342    _proto.clone = function clone() {
11343      return new Matrix2D(this.a, this.b, this.c, this.d, this.e, this.f);
11344    };
11345
11346    _proto.equals = function equals(matrix) {
11347      var a = this.a,
11348          b = this.b,
11349          c = this.c,
11350          d = this.d,
11351          e = this.e,
11352          f = this.f;
11353      return a === matrix.a && b === matrix.b && c === matrix.c && d === matrix.d && e === matrix.e && f === matrix.f;
11354    };
11355
11356    _proto.apply = function apply(point, decoratee) {
11357      if (decoratee === void 0) {
11358        decoratee = {};
11359      }
11360
11361      var x = point.x,
11362          y = point.y,
11363          a = this.a,
11364          b = this.b,
11365          c = this.c,
11366          d = this.d,
11367          e = this.e,
11368          f = this.f;
11369      decoratee.x = x * a + y * c + e || 0;
11370      decoratee.y = x * b + y * d + f || 0;
11371      return decoratee;
11372    };
11373
11374    return Matrix2D;
11375  }();
11376  function getGlobalMatrix(element, inverse, adjustGOffset, includeScrollInFixed) {
11377    if (!element || !element.parentNode || (_doc || _setDoc(element)).documentElement === element) {
11378      return new Matrix2D();
11379    }
11380
11381    var zeroScales = _forceNonZeroScale(element),
11382        svg = _svgOwner(element),
11383        temps = svg ? _svgTemps : _divTemps,
11384        container = _placeSiblings(element, adjustGOffset),
11385        b1 = temps[0].getBoundingClientRect(),
11386        b2 = temps[1].getBoundingClientRect(),
11387        b3 = temps[2].getBoundingClientRect(),
11388        parent = container.parentNode,
11389        isFixed = !includeScrollInFixed && _isFixed(element),
11390        m = new Matrix2D((b2.left - b1.left) / 100, (b2.top - b1.top) / 100, (b3.left - b1.left) / 100, (b3.top - b1.top) / 100, b1.left + (isFixed ? 0 : _getDocScrollLeft()), b1.top + (isFixed ? 0 : _getDocScrollTop()));
11391
11392    parent.removeChild(container);
11393
11394    if (zeroScales) {
11395      b1 = zeroScales.length;
11396
11397      while (b1--) {
11398        b2 = zeroScales[b1];
11399        b2.scaleX = b2.scaleY = 0;
11400        b2.renderTransform(1, b2);
11401      }
11402    }
11403
11404    return inverse ? m.inverse() : m;
11405  }
11406
11407  var gsap,
11408      _win$1,
11409      _doc$1,
11410      _docElement$1,
11411      _body$1,
11412      _tempDiv,
11413      _placeholderDiv,
11414      _coreInitted,
11415      _checkPrefix,
11416      _toArray,
11417      _supportsPassive,
11418      _isTouchDevice,
11419      _touchEventLookup,
11420      _dragCount,
11421      _isMultiTouching,
vendor: 4,022 bytes, lines 11422-11551
11422      _isAndroid,
11423      InertiaPlugin,
11424      _defaultCursor,
11425      _supportsPointer,
11426      _windowExists = function _windowExists() {
11427    return typeof window !== "undefined";
11428  },
11429      _getGSAP = function _getGSAP() {
11430    return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;
11431  },
11432      _isFunction = function _isFunction(value) {
11433    return typeof value === "function";
11434  },
11435      _isObject = function _isObject(value) {
11436    return typeof value === "object";
11437  },
11438      _isUndefined = function _isUndefined(value) {
11439    return typeof value === "undefined";
11440  },
11441      _emptyFunc = function _emptyFunc() {
11442    return false;
11443  },
11444      _transformProp$1 = "transform",
11445      _transformOriginProp$1 = "transformOrigin",
11446      _round = function _round(value) {
11447    return Math.round(value * 10000) / 10000;
11448  },
11449      _isArray = Array.isArray,
11450      _createElement = function _createElement(type, ns) {
11451    var e = _doc$1.createElementNS ? _doc$1.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$1.createElement(type);
11452    return e.style ? e : _doc$1.createElement(type);
11453  },
11454      _RAD2DEG = 180 / Math.PI,
11455      _bigNum = 1e20,
11456      _identityMatrix$1 = new Matrix2D(),
11457      _getTime = Date.now || function () {
11458    return new Date().getTime();
11459  },
11460      _renderQueue = [],
11461      _lookup = {},
11462      _lookupCount = 0,
11463      _clickableTagExp = /^(?:a|input|textarea|button|select)$/i,
11464      _lastDragTime = 0,
11465      _temp1 = {},
11466      _windowProxy = {},
11467      _copy = function _copy(obj, factor) {
11468    var copy = {},
11469        p;
11470
11471    for (p in obj) {
11472      copy[p] = factor ? obj[p] * factor : obj[p];
11473    }
11474
11475    return copy;
11476  },
11477      _extend = function _extend(obj, defaults) {
11478    for (var p in defaults) {
11479      if (!(p in obj)) {
11480        obj[p] = defaults[p];
11481      }
11482    }
11483
11484    return obj;
11485  },
11486      _setTouchActionForAllDescendants = function _setTouchActionForAllDescendants(elements, value) {
11487    var i = elements.length,
11488        children;
11489
11490    while (i--) {
11491      value ? elements[i].style.touchAction = value : elements[i].style.removeProperty("touch-action");
11492      children = elements[i].children;
11493      children && children.length && _setTouchActionForAllDescendants(children, value);
11494    }
11495  },
11496      _renderQueueTick = function _renderQueueTick() {
11497    return _renderQueue.forEach(function (func) {
11498      return func();
11499    });
11500  },
11501      _addToRenderQueue = function _addToRenderQueue(func) {
11502    _renderQueue.push(func);
11503
11504    if (_renderQueue.length === 1) {
11505      gsap.ticker.add(_renderQueueTick);
11506    }
11507  },
11508      _renderQueueTimeout = function _renderQueueTimeout() {
11509    return !_renderQueue.length && gsap.ticker.remove(_renderQueueTick);
11510  },
11511      _removeFromRenderQueue = function _removeFromRenderQueue(func) {
11512    var i = _renderQueue.length;
11513
11514    while (i--) {
11515      if (_renderQueue[i] === func) {
11516        _renderQueue.splice(i, 1);
11517      }
11518    }
11519
11520    gsap.to(_renderQueueTimeout, {
11521      overwrite: true,
11522      delay: 15,
11523      duration: 0,
11524      onComplete: _renderQueueTimeout,
11525      data: "_draggable"
11526    });
11527  },
11528      _setDefaults = function _setDefaults(obj, defaults) {
11529    for (var p in defaults) {
11530      if (!(p in obj)) {
11531        obj[p] = defaults[p];
11532      }
11533    }
11534
11535    return obj;
11536  },
11537      _addListener = function _addListener(element, type, func, capture) {
11538    if (element.addEventListener) {
11539      var touchType = _touchEventLookup[type];
11540      capture = capture || (_supportsPassive ? {
11541        passive: false
11542      } : null);
11543      element.addEventListener(touchType || type, func, capture);
11544      touchType && type !== touchType && element.addEventListener(type, func, capture);
11545    }
11546  },
11547      _removeListener = function _removeListener(element, type, func) {
11548    if (element.removeEventListener) {
11549      var touchType = _touchEventLookup[type];
11550      element.removeEventListener(touchType || type, func);
11551      touchType && type !== touchType && element.removeEventListener(type, func
vendor: 6,129 bytes, lines 11551-11742
11551);
11552    }
11553  },
11554      _preventDefault = function _preventDefault(event) {
11555    event.preventDefault && event.preventDefault();
11556    event.preventManipulation && event.preventManipulation();
11557  },
11558      _hasTouchID = function _hasTouchID(list, ID) {
11559    var i = list.length;
11560
11561    while (i--) {
11562      if (list[i].identifier === ID) {
11563        return true;
11564      }
11565    }
11566  },
11567      _onMultiTouchDocumentEnd = function _onMultiTouchDocumentEnd(event) {
11568    _isMultiTouching = event.touches && _dragCount < event.touches.length;
11569
11570    _removeListener(event.target, "touchend", _onMultiTouchDocumentEnd);
11571  },
11572      _onMultiTouchDocument = function _onMultiTouchDocument(event) {
11573    _isMultiTouching = event.touches && _dragCount < event.touches.length;
11574
11575    _addListener(event.target, "touchend", _onMultiTouchDocumentEnd);
11576  },
11577      _getDocScrollTop$1 = function _getDocScrollTop(doc) {
11578    return _win$1.pageYOffset || doc.scrollTop || doc.documentElement.scrollTop || doc.body.scrollTop || 0;
11579  },
11580      _getDocScrollLeft$1 = function _getDocScrollLeft(doc) {
11581    return _win$1.pageXOffset || doc.scrollLeft || doc.documentElement.scrollLeft || doc.body.scrollLeft || 0;
11582  },
11583      _addScrollListener = function _addScrollListener(e, callback) {
11584    _addListener(e, "scroll", callback);
11585
11586    if (!_isRoot(e.parentNode)) {
11587      _addScrollListener(e.parentNode, callback);
11588    }
11589  },
11590      _removeScrollListener = function _removeScrollListener(e, callback) {
11591    _removeListener(e, "scroll", callback);
11592
11593    if (!_isRoot(e.parentNode)) {
11594      _removeScrollListener(e.parentNode, callback);
11595    }
11596  },
11597      _isRoot = function _isRoot(e) {
11598    return !!(!e || e === _docElement$1 || e.nodeType === 9 || e === _doc$1.body || e === _win$1 || !e.nodeType || !e.parentNode);
11599  },
11600      _getMaxScroll = function _getMaxScroll(element, axis) {
11601    var dim = axis === "x" ? "Width" : "Height",
11602        scroll = "scroll" + dim,
11603        client = "client" + dim;
11604    return Math.max(0, _isRoot(element) ? Math.max(_docElement$1[scroll], _body$1[scroll]) - (_win$1["inner" + dim] || _docElement$1[client] || _body$1[client]) : element[scroll] - element[client]);
11605  },
11606      _recordMaxScrolls = function _recordMaxScrolls(e, skipCurrent) {
11607    var x = _getMaxScroll(e, "x"),
11608        y = _getMaxScroll(e, "y");
11609
11610    if (_isRoot(e)) {
11611      e = _windowProxy;
11612    } else {
11613      _recordMaxScrolls(e.parentNode, skipCurrent);
11614    }
11615
11616    e._gsMaxScrollX = x;
11617    e._gsMaxScrollY = y;
11618
11619    if (!skipCurrent) {
11620      e._gsScrollX = e.scrollLeft || 0;
11621      e._gsScrollY = e.scrollTop || 0;
11622    }
11623  },
11624      _setStyle = function _setStyle(element, property, value) {
11625    var style = element.style;
11626
11627    if (!style) {
11628      return;
11629    }
11630
11631    if (_isUndefined(style[property])) {
11632      property = _checkPrefix(property, element) || property;
11633    }
11634
11635    if (value == null) {
11636      style.removeProperty && style.removeProperty(property.replace(/([A-Z])/g, "-$1").toLowerCase());
11637    } else {
11638      style[property] = value;
11639    }
11640  },
11641      _getComputedStyle = function _getComputedStyle(element) {
11642    return _win$1.getComputedStyle(element instanceof Element ? element : element.host || (element.parentNode || {}).host || element);
11643  },
11644      _tempRect = {},
11645      _parseRect = function _parseRect(e) {
11646    if (e === _win$1) {
11647      _tempRect.left = _tempRect.top = 0;
11648      _tempRect.width = _tempRect.right = _docElement$1.clientWidth || e.innerWidth || _body$1.clientWidth || 0;
11649      _tempRect.height = _tempRect.bottom = (e.innerHeight || 0) - 20 < _docElement$1.clientHeight ? _docElement$1.clientHeight : e.innerHeight || _body$1.clientHeight || 0;
11650      return _tempRect;
11651    }
11652
11653    var doc = e.ownerDocument || _doc$1,
11654        r = !_isUndefined(e.pageX) ? {
11655      left: e.pageX - _getDocScrollLeft$1(doc),
11656      top: e.pageY - _getDocScrollTop$1(doc),
11657      right: e.pageX - _getDocScrollLeft$1(doc) + 1,
11658      bottom: e.pageY - _getDocScrollTop$1(doc) + 1
11659    } : !e.nodeType && !_isUndefined(e.left) && !_isUndefined(e.top) ? e : _toArray(e)[0].getBoundingClientRect();
11660
11661    if (_isUndefined(r.right) && !_isUndefined(r.width)) {
11662      r.right = r.left + r.width;
11663      r.bottom = r.top + r.height;
11664    } else if (_isUndefined(r.width)) {
11665      r = {
11666        width: r.right - r.left,
11667        height: r.bottom - r.top,
11668        right: r.right,
11669        left: r.left,
11670        bottom: r.bottom,
11671        top: r.top
11672      };
11673    }
11674
11675    return r;
11676  },
11677      _dispatchEvent = function _dispatchEvent(target, type, callbackName) {
11678    var vars = target.vars,
11679        callback = vars[callbackName],
11680        listeners = target._listeners[type],
11681        result;
11682
11683    if (_isFunction(callback)) {
11684      result = callback.apply(vars.callbackScope || target, vars[callbackName + "Params"] || [target.pointerEvent]);
11685    }
11686
11687    if (listeners && target.dispatchEvent(type) === false) {
11688      result = false;
11689    }
11690
11691    return result;
11692  },
11693      _getBounds = function _getBounds(target, context) {
11694    var e = _toArray(target)[0],
11695        top,
11696        left,
11697        offset;
11698
11699    if (!e.nodeType && e !== _win$1) {
11700      if (!_isUndefined(target.left)) {
11701        offset = {
11702          x: 0,
11703          y: 0
11704        };
11705        return {
11706          left: target.left - offset.x,
11707          top: target.top - offset.y,
11708          width: target.width,
11709          height: target.height
11710        };
11711      }
11712
11713      left = target.min || target.minX || target.minRotation || 0;
11714      top = target.min || target.minY || 0;
11715      return {
11716        left: left,
11717        top: top,
11718        width: (target.max || target.maxX || target.maxRotation || 0) - left,
11719        height: (target.max || target.maxY || 0) - top
11720      };
11721    }
11722
11723    return _getElementBounds(e, context);
11724  },
11725      _point1 = {},
11726      _getElementBounds = function _getElementBounds(element, context) {
11727    context = _toArray(context)[0];
11728    var isSVG = element.getBBox && element.ownerSVGElement,
11729        doc = element.ownerDocument || _doc$1,
11730        left,
11731        right,
11732        top,
11733        bottom,
11734        matrix,
11735        p1,
11736        p2,
11737        p3,
11738        p4,
11739        bbox,
11740        width,
11741        height,
11742        cs
vendor: 10,393 bytes, lines 11742-12141
11742,
11743        contextParent;
11744
11745    if (element === _win$1) {
11746      top = _getDocScrollTop$1(doc);
11747      left = _getDocScrollLeft$1(doc);
11748      right = left + (doc.documentElement.clientWidth || element.innerWidth || doc.body.clientWidth || 0);
11749      bottom = top + ((element.innerHeight || 0) - 20 < doc.documentElement.clientHeight ? doc.documentElement.clientHeight : element.innerHeight || doc.body.clientHeight || 0);
11750    } else if (context === _win$1 || _isUndefined(context)) {
11751      return element.getBoundingClientRect();
11752    } else {
11753      left = top = 0;
11754
11755      if (isSVG) {
11756        bbox = element.getBBox();
11757        width = bbox.width;
11758        height = bbox.height;
11759      } else {
11760        if (element.viewBox && (bbox = element.viewBox.baseVal)) {
11761          left = bbox.x || 0;
11762          top = bbox.y || 0;
11763          width = bbox.width;
11764          height = bbox.height;
11765        }
11766
11767        if (!width) {
11768          cs = _getComputedStyle(element);
11769          bbox = cs.boxSizing === "border-box";
11770          width = (parseFloat(cs.width) || element.clientWidth || 0) + (bbox ? 0 : parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth));
11771          height = (parseFloat(cs.height) || element.clientHeight || 0) + (bbox ? 0 : parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth));
11772        }
11773      }
11774
11775      right = width;
11776      bottom = height;
11777    }
11778
11779    if (element === context) {
11780      return {
11781        left: left,
11782        top: top,
11783        width: right - left,
11784        height: bottom - top
11785      };
11786    }
11787
11788    matrix = getGlobalMatrix(context, true).multiply(getGlobalMatrix(element));
11789    p1 = matrix.apply({
11790      x: left,
11791      y: top
11792    });
11793    p2 = matrix.apply({
11794      x: right,
11795      y: top
11796    });
11797    p3 = matrix.apply({
11798      x: right,
11799      y: bottom
11800    });
11801    p4 = matrix.apply({
11802      x: left,
11803      y: bottom
11804    });
11805    left = Math.min(p1.x, p2.x, p3.x, p4.x);
11806    top = Math.min(p1.y, p2.y, p3.y, p4.y);
11807    contextParent = context.parentNode || {};
11808    return {
11809      left: left + (contextParent.scrollLeft || 0),
11810      top: top + (contextParent.scrollTop || 0),
11811      width: Math.max(p1.x, p2.x, p3.x, p4.x) - left,
11812      height: Math.max(p1.y, p2.y, p3.y, p4.y) - top
11813    };
11814  },
11815      _parseInertia = function _parseInertia(draggable, snap, max, min, factor, forceZeroVelocity) {
11816    var vars = {},
11817        a,
11818        i,
11819        l;
11820
11821    if (snap) {
11822      if (factor !== 1 && snap instanceof Array) {
11823        vars.end = a = [];
11824        l = snap.length;
11825
11826        if (_isObject(snap[0])) {
11827          for (i = 0; i < l; i++) {
11828            a[i] = _copy(snap[i], factor);
11829          }
11830        } else {
11831          for (i = 0; i < l; i++) {
11832            a[i] = snap[i] * factor;
11833          }
11834        }
11835
11836        max += 1.1;
11837        min -= 1.1;
11838      } else if (_isFunction(snap)) {
11839        vars.end = function (value) {
11840          var result = snap.call(draggable, value),
11841              copy,
11842              p;
11843
11844          if (factor !== 1) {
11845            if (_isObject(result)) {
11846              copy = {};
11847
11848              for (p in result) {
11849                copy[p] = result[p] * factor;
11850              }
11851
11852              result = copy;
11853            } else {
11854              result *= factor;
11855            }
11856          }
11857
11858          return result;
11859        };
11860      } else {
11861        vars.end = snap;
11862      }
11863    }
11864
11865    if (max || max === 0) {
11866      vars.max = max;
11867    }
11868
11869    if (min || min === 0) {
11870      vars.min = min;
11871    }
11872
11873    if (forceZeroVelocity) {
11874      vars.velocity = 0;
11875    }
11876
11877    return vars;
11878  },
11879      _isClickable = function _isClickable(element) {
11880    var data;
11881    return !element || !element.getAttribute || element === _body$1 ? false : (data = element.getAttribute("data-clickable")) === "true" || data !== "false" && (element.onclick || _clickableTagExp.test(element.nodeName + "") || element.getAttribute("contentEditable") === "true") ? true : _isClickable(element.parentNode);
11882  },
11883      _setSelectable = function _setSelectable(elements, selectable) {
11884    var i = elements.length,
11885        e;
11886
11887    while (i--) {
11888      e = elements[i];
11889      e.ondragstart = e.onselectstart = selectable ? null : _emptyFunc;
11890      gsap.set(e, {
11891        lazy: true,
11892        userSelect: selectable ? "text" : "none"
11893      });
11894    }
11895  },
11896      _isFixed$1 = function _isFixed(element) {
11897    if (_getComputedStyle(element).position === "fixed") {
11898      return true;
11899    }
11900
11901    element = element.parentNode;
11902
11903    if (element && element.nodeType === 1) {
11904      return _isFixed(element);
11905    }
11906  },
11907      _supports3D,
11908      _addPaddingBR,
11909      ScrollProxy = function ScrollProxy(element, vars) {
11910    element = gsap.utils.toArray(element)[0];
11911    vars = vars || {};
11912    var content = document.createElement("div"),
11913        style = content.style,
11914        node = element.firstChild,
11915        offsetTop = 0,
11916        offsetLeft = 0,
11917        prevTop = element.scrollTop,
11918        prevLeft = element.scrollLeft,
11919        scrollWidth = element.scrollWidth,
11920        scrollHeight = element.scrollHeight,
11921        extraPadRight = 0,
11922        maxLeft = 0,
11923        maxTop = 0,
11924        elementWidth,
11925        elementHeight,
11926        contentHeight,
11927        nextNode,
11928        transformStart,
11929        transformEnd;
11930
11931    if (_supports3D && vars.force3D !== false) {
11932      transformStart = "translate3d(";
11933      transformEnd = "px,0px)";
11934    } else if (_transformProp$1) {
11935      transformStart = "translate(";
11936      transformEnd = "px)";
11937    }
11938
11939    this.scrollTop = function (value, force) {
11940      if (!arguments.length) {
11941        return -this.top();
11942      }
11943
11944      this.top(-value, force);
11945    };
11946
11947    this.scrollLeft = function (value, force) {
11948      if (!arguments.length) {
11949        return -this.left();
11950      }
11951
11952      this.left(-value, force);
11953    };
11954
11955    this.left = function (value, force) {
11956      if (!arguments.length) {
11957        return -(element.scrollLeft + offsetLeft);
11958      }
11959
11960      var dif = element.scrollLeft - prevLeft,
11961          oldOffset = offsetLeft;
11962
11963      if ((dif > 2 || dif < -2) && !force) {
11964        prevLeft = element.scrollLeft;
11965        gsap.killTweensOf(this, {
11966          left: 1,
11967          scrollLeft: 1
11968        });
11969        this.left(-prevLeft);
11970
11971        if (vars.onKill) {
11972          vars.onKill();
11973        }
11974
11975        return;
11976      }
11977
11978      value = -value;
11979
11980      if (value < 0) {
11981        offsetLeft = value - 0.5 | 0;
11982        value = 0;
11983      } else if (value > maxLeft) {
11984        offsetLeft = value - maxLeft | 0;
11985        value = maxLeft;
11986      } else {
11987        offsetLeft = 0;
11988      }
11989
11990      if (offsetLeft || oldOffset) {
11991        if (!this._skip) {
11992          style[_transformProp$1] = transformStart + -offsetLeft + "px," + -offsetTop + transformEnd;
11993        }
11994
11995        if (offsetLeft + extraPadRight >= 0) {
11996          style.paddingRight = offsetLeft + extraPadRight + "px";
11997        }
11998      }
11999
12000      element.scrollLeft = value | 0;
12001      prevLeft = element.scrollLeft;
12002    };
12003
12004    this.top = function (value, force) {
12005      if (!arguments.length) {
12006        return -(element.scrollTop + offsetTop);
12007      }
12008
12009      var dif = element.scrollTop - prevTop,
12010          oldOffset = offsetTop;
12011
12012      if ((dif > 2 || dif < -2) && !force) {
12013        prevTop = element.scrollTop;
12014        gsap.killTweensOf(this, {
12015          top: 1,
12016          scrollTop: 1
12017        });
12018        this.top(-prevTop);
12019
12020        if (vars.onKill) {
12021          vars.onKill();
12022        }
12023
12024        return;
12025      }
12026
12027      value = -value;
12028
12029      if (value < 0) {
12030        offsetTop = value - 0.5 | 0;
12031        value = 0;
12032      } else if (value > maxTop) {
12033        offsetTop = value - maxTop | 0;
12034        value = maxTop;
12035      } else {
12036        offsetTop = 0;
12037      }
12038
12039      if (offsetTop || oldOffset) {
12040        if (!this._skip) {
12041          style[_transformProp$1] = transformStart + -offsetLeft + "px," + -offsetTop + transformEnd;
12042        }
12043      }
12044
12045      element.scrollTop = value | 0;
12046      prevTop = element.scrollTop;
12047    };
12048
12049    this.maxScrollTop = function () {
12050      return maxTop;
12051    };
12052
12053    this.maxScrollLeft = function () {
12054      return maxLeft;
12055    };
12056
12057    this.disable = function () {
12058      node = content.firstChild;
12059
12060      while (node) {
12061        nextNode = node.nextSibling;
12062        element.appendChild(node);
12063        node = nextNode;
12064      }
12065
12066      if (element === content.parentNode) {
12067        element.removeChild(content);
12068      }
12069    };
12070
12071    this.enable = function () {
12072      node = element.firstChild;
12073
12074      if (node === content) {
12075        return;
12076      }
12077
12078      while (node) {
12079        nextNode = node.nextSibling;
12080        content.appendChild(node);
12081        node = nextNode;
12082      }
12083
12084      element.appendChild(content);
12085      this.calibrate();
12086    };
12087
12088    this.calibrate = function (force) {
12089      var widthMatches = element.clientWidth === elementWidth,
12090          cs,
12091          x,
12092          y;
12093      prevTop = element.scrollTop;
12094      prevLeft = element.scrollLeft;
12095
12096      if (widthMatches && element.clientHeight === elementHeight && content.offsetHeight === contentHeight && scrollWidth === element.scrollWidth && scrollHeight === element.scrollHeight && !force) {
12097        return;
12098      }
12099
12100      if (offsetTop || offsetLeft) {
12101        x = this.left();
12102        y = this.top();
12103        this.left(-element.scrollLeft);
12104        this.top(-element.scrollTop);
12105      }
12106
12107      cs = _getComputedStyle(element);
12108
12109      if (!widthMatches || force) {
12110        style.display = "block";
12111        style.width = "auto";
12112        style.paddingRight = "0px";
12113        extraPadRight = Math.max(0, element.scrollWidth - element.clientWidth);
12114
12115        if (extraPadRight) {
12116          extraPadRight += parseFloat(cs.paddingLeft) + (_addPaddingBR ? parseFloat(cs.paddingRight) : 0);
12117        }
12118      }
12119
12120      style.display = "inline-block";
12121      style.position = "relative";
12122      style.overflow = "visible";
12123      style.verticalAlign = "top";
12124      style.boxSizing = "content-box";
12125      style.width = "100%";
12126      style.paddingRight = extraPadRight + "px";
12127
12128      if (_addPaddingBR) {
12129        style.paddingBottom = cs.paddingBottom;
12130      }
12131
12132      elementWidth = element.clientWidth;
12133      elementHeight = element.clientHeight;
12134      scrollWidth = element.scrollWidth;
12135      scrollHeight = element.scrollHeight;
12136      maxLeft = element.scrollWidth - elementWidth;
12137      maxTop = element.scrollHeight - elementHeight;
12138      contentHeight = content.offsetHeight;
12139      style.display = "block";
12140
12141      if (x || y) {
vendor: 7,174 bytes, lines 12142-12353
12142        this.left(x);
12143        this.top(y);
12144      }
12145    };
12146
12147    this.content = content;
12148    this.element = element;
12149    this._skip = false;
12150    this.enable();
12151  },
12152      _initCore = function _initCore(required) {
12153    if (_windowExists() && document.body) {
12154      var nav = window && window.navigator;
12155      _win$1 = window;
12156      _doc$1 = document;
12157      _docElement$1 = _doc$1.documentElement;
12158      _body$1 = _doc$1.body;
12159      _tempDiv = _createElement("div");
12160      _supportsPointer = !!window.PointerEvent;
12161      _placeholderDiv = _createElement("div");
12162      _placeholderDiv.style.cssText = "visibility:hidden;height:1px;top:-1px;pointer-events:none;position:relative;clear:both;cursor:grab";
12163      _defaultCursor = _placeholderDiv.style.cursor === "grab" ? "grab" : "move";
12164      _isAndroid = nav && nav.userAgent.toLowerCase().indexOf("android") !== -1;
12165      _isTouchDevice = "ontouchstart" in _docElement$1 && "orientation" in _win$1 || nav && (nav.MaxTouchPoints > 0 || nav.msMaxTouchPoints > 0);
12166
12167      _addPaddingBR = function () {
12168        var div = _createElement("div"),
12169            child = _createElement("div"),
12170            childStyle = child.style,
12171            parent = _body$1,
12172            val;
12173
12174        childStyle.display = "inline-block";
12175        childStyle.position = "relative";
12176        div.style.cssText = child.innerHTML = "width:90px;height:40px;padding:10px;overflow:auto;visibility:hidden";
12177        div.appendChild(child);
12178        parent.appendChild(div);
12179        val = child.offsetHeight + 18 > div.scrollHeight;
12180        parent.removeChild(div);
12181        return val;
12182      }();
12183
12184      _touchEventLookup = function (types) {
12185        var standard = types.split(","),
12186            converted = ("onpointerdown" in _tempDiv ? "pointerdown,pointermove,pointerup,pointercancel" : "onmspointerdown" in _tempDiv ? "MSPointerDown,MSPointerMove,MSPointerUp,MSPointerCancel" : types).split(","),
12187            obj = {},
12188            i = 4;
12189
12190        while (--i > -1) {
12191          obj[standard[i]] = converted[i];
12192          obj[converted[i]] = standard[i];
12193        }
12194
12195        try {
12196          _docElement$1.addEventListener("test", null, Object.defineProperty({}, "passive", {
12197            get: function get() {
12198              _supportsPassive = 1;
12199            }
12200          }));
12201        } catch (e) {}
12202
12203        return obj;
12204      }("touchstart,touchmove,touchend,touchcancel");
12205
12206      _addListener(_doc$1, "touchcancel", _emptyFunc);
12207
12208      _addListener(_win$1, "touchmove", _emptyFunc);
12209
12210      _body$1 && _body$1.addEventListener("touchstart", _emptyFunc);
12211
12212      _addListener(_doc$1, "contextmenu", function () {
12213        for (var p in _lookup) {
12214          if (_lookup[p].isPressed) {
12215            _lookup[p].endDrag();
12216          }
12217        }
12218      });
12219
12220      gsap = _coreInitted = _getGSAP();
12221    }
12222
12223    if (gsap) {
12224      InertiaPlugin = gsap.plugins.inertia;
12225      _checkPrefix = gsap.utils.checkPrefix;
12226      _transformProp$1 = _checkPrefix(_transformProp$1);
12227      _transformOriginProp$1 = _checkPrefix(_transformOriginProp$1);
12228      _toArray = gsap.utils.toArray;
12229      _supports3D = !!_checkPrefix("perspective");
12230    } else if (required) {
12231      console.warn("Please gsap.registerPlugin(Draggable)");
12232    }
12233  };
12234
12235  var EventDispatcher = function () {
12236    function EventDispatcher(target) {
12237      this._listeners = {};
12238      this.target = target || this;
12239    }
12240
12241    var _proto = EventDispatcher.prototype;
12242
12243    _proto.addEventListener = function addEventListener(type, callback) {
12244      var list = this._listeners[type] || (this._listeners[type] = []);
12245
12246      if (!~list.indexOf(callback)) {
12247        list.push(callback);
12248      }
12249    };
12250
12251    _proto.removeEventListener = function removeEventListener(type, callback) {
12252      var list = this._listeners[type],
12253          i = list && list.indexOf(callback) || -1;
12254      i > -1 && list.splice(i, 1);
12255    };
12256
12257    _proto.dispatchEvent = function dispatchEvent(type) {
12258      var _this = this;
12259
12260      var result;
12261      (this._listeners[type] || []).forEach(function (callback) {
12262        return callback.call(_this, {
12263          type: type,
12264          target: _this.target
12265        }) === false && (result = false);
12266      });
12267      return result;
12268    };
12269
12270    return EventDispatcher;
12271  }();
12272
12273  var Draggable = function (_EventDispatcher) {
12274    _inheritsLoose(Draggable, _EventDispatcher);
12275
12276    function Draggable(target, vars) {
12277      var _this2;
12278
12279      _this2 = _EventDispatcher.call(this) || this;
12280      _coreInitted || _initCore(1);
12281      target = _toArray(target)[0];
12282
12283      if (!InertiaPlugin) {
12284        InertiaPlugin = gsap.plugins.inertia;
12285      }
12286
12287      _this2.vars = vars = _copy(vars || {});
12288      _this2.target = target;
12289      _this2.x = _this2.y = _this2.rotation = 0;
12290      _this2.dragResistance = parseFloat(vars.dragResistance) || 0;
12291      _this2.edgeResistance = isNaN(vars.edgeResistance) ? 1 : parseFloat(vars.edgeResistance) || 0;
12292      _this2.lockAxis = vars.lockAxis;
12293      _this2.autoScroll = vars.autoScroll || 0;
12294      _this2.lockedAxis = null;
12295      _this2.allowEventDefault = !!vars.allowEventDefault;
12296      gsap.getProperty(target, "x");
12297
12298      var type = (vars.type || "x,y").toLowerCase(),
12299          xyMode = ~type.indexOf("x") || ~type.indexOf("y"),
12300          rotationMode = type.indexOf("rotation") !== -1,
12301          xProp = rotationMode ? "rotation" : xyMode ? "x" : "left",
12302          yProp = xyMode ? "y" : "top",
12303          allowX = !!(~type.indexOf("x") || ~type.indexOf("left") || type === "scroll"),
12304          allowY = !!(~type.indexOf("y") || ~type.indexOf("top") || type === "scroll"),
12305          minimumMovement = vars.minimumMovement || 2,
12306          self = _assertThisInitialized(_this2),
12307          triggers = _toArray(vars.trigger || vars.handle || target),
12308          killProps = {},
12309          dragEndTime = 0,
12310          checkAutoScrollBounds = false,
12311          autoScrollMarginTop = vars.autoScrollMarginTop || 40,
12312          autoScrollMarginRight = vars.autoScrollMarginRight || 40,
12313          autoScrollMarginBottom = vars.autoScrollMarginBottom || 40,
12314          autoScrollMarginLeft = vars.autoScrollMarginLeft || 40,
12315          isClickable = vars.clickableTest || _isClickable,
12316          clickTime = 0,
12317          gsCache = target._gsap || gsap.core.getCache(target),
12318          isFixed = _isFixed$1(target),
12319          getPropAsNum = function getPropAsNum(property, unit) {
12320        return parseFloat(gsCache.get(target, property, unit));
12321      },
12322          ownerDoc = target.ownerDocument || _doc$1,
12323          enabled,
12324          scrollProxy,
12325          startPointerX,
12326          startPointerY,
12327          startElementX,
12328          startElementY,
12329          hasBounds,
12330          hasDragCallback,
12331          hasMoveCallback,
12332          maxX,
12333          minX,
12334          maxY,
12335          minY,
12336          touch,
12337          touchID,
12338          rotationOrigin,
12339          dirty,
12340          old,
12341          snapX,
12342          snapY,
12343          snapXY,
12344          isClicking,
12345          touchEventTarget,
12346          matrix,
12347          interrupted,
12348          allowNativeTouchScrolling,
12349          touchDragAxis,
12350          isDispatching,
12351          clickDispatch,
12352          trustedClickDispatch,
12353          isPreventingDefault
vendor: 5,763 bytes, lines 12353-12517
12353,
12354          onContextMenu = function onContextMenu(e) {
12355        _preventDefault(e);
12356
12357        e.stopImmediatePropagation && e.stopImmediatePropagation();
12358        return false;
12359      },
12360          render = function render(suppressEvents) {
12361        if (self.autoScroll && self.isDragging && (checkAutoScrollBounds || dirty)) {
12362          var e = target,
12363              autoScrollFactor = self.autoScroll * 15,
12364              parent,
12365              isRoot,
12366              rect,
12367              pointerX,
12368              pointerY,
12369              changeX,
12370              changeY,
12371              gap;
12372          checkAutoScrollBounds = false;
12373          _windowProxy.scrollTop = _win$1.pageYOffset != null ? _win$1.pageYOffset : ownerDoc.documentElement.scrollTop != null ? ownerDoc.documentElement.scrollTop : ownerDoc.body.scrollTop;
12374          _windowProxy.scrollLeft = _win$1.pageXOffset != null ? _win$1.pageXOffset : ownerDoc.documentElement.scrollLeft != null ? ownerDoc.documentElement.scrollLeft : ownerDoc.body.scrollLeft;
12375          pointerX = self.pointerX - _windowProxy.scrollLeft;
12376          pointerY = self.pointerY - _windowProxy.scrollTop;
12377
12378          while (e && !isRoot) {
12379            isRoot = _isRoot(e.parentNode);
12380            parent = isRoot ? _windowProxy : e.parentNode;
12381            rect = isRoot ? {
12382              bottom: Math.max(_docElement$1.clientHeight, _win$1.innerHeight || 0),
12383              right: Math.max(_docElement$1.clientWidth, _win$1.innerWidth || 0),
12384              left: 0,
12385              top: 0
12386            } : parent.getBoundingClientRect();
12387            changeX = changeY = 0;
12388
12389            if (allowY) {
12390              gap = parent._gsMaxScrollY - parent.scrollTop;
12391
12392              if (gap < 0) {
12393                changeY = gap;
12394              } else if (pointerY > rect.bottom - autoScrollMarginBottom && gap) {
12395                checkAutoScrollBounds = true;
12396                changeY = Math.min(gap, autoScrollFactor * (1 - Math.max(0, rect.bottom - pointerY) / autoScrollMarginBottom) | 0);
12397              } else if (pointerY < rect.top + autoScrollMarginTop && parent.scrollTop) {
12398                checkAutoScrollBounds = true;
12399                changeY = -Math.min(parent.scrollTop, autoScrollFactor * (1 - Math.max(0, pointerY - rect.top) / autoScrollMarginTop) | 0);
12400              }
12401
12402              if (changeY) {
12403                parent.scrollTop += changeY;
12404              }
12405            }
12406
12407            if (allowX) {
12408              gap = parent._gsMaxScrollX - parent.scrollLeft;
12409
12410              if (gap < 0) {
12411                changeX = gap;
12412              } else if (pointerX > rect.right - autoScrollMarginRight && gap) {
12413                checkAutoScrollBounds = true;
12414                changeX = Math.min(gap, autoScrollFactor * (1 - Math.max(0, rect.right - pointerX) / autoScrollMarginRight) | 0);
12415              } else if (pointerX < rect.left + autoScrollMarginLeft && parent.scrollLeft) {
12416                checkAutoScrollBounds = true;
12417                changeX = -Math.min(parent.scrollLeft, autoScrollFactor * (1 - Math.max(0, pointerX - rect.left) / autoScrollMarginLeft) | 0);
12418              }
12419
12420              if (changeX) {
12421                parent.scrollLeft += changeX;
12422              }
12423            }
12424
12425            if (isRoot && (changeX || changeY)) {
12426              _win$1.scrollTo(parent.scrollLeft, parent.scrollTop);
12427
12428              setPointerPosition(self.pointerX + changeX, self.pointerY + changeY);
12429            }
12430
12431            e = parent;
12432          }
12433        }
12434
12435        if (dirty) {
12436          var x = self.x,
12437              y = self.y;
12438
12439          if (rotationMode) {
12440            self.deltaX = x - parseFloat(gsCache.rotation);
12441            self.rotation = x;
12442            gsCache.rotation = x + "deg";
12443            gsCache.renderTransform(1, gsCache);
12444          } else {
12445            if (scrollProxy) {
12446              if (allowY) {
12447                self.deltaY = y - scrollProxy.top();
12448                scrollProxy.top(y);
12449              }
12450
12451              if (allowX) {
12452                self.deltaX = x - scrollProxy.left();
12453                scrollProxy.left(x);
12454              }
12455            } else if (xyMode) {
12456              if (allowY) {
12457                self.deltaY = y - parseFloat(gsCache.y);
12458                gsCache.y = y + "px";
12459              }
12460
12461              if (allowX) {
12462                self.deltaX = x - parseFloat(gsCache.x);
12463                gsCache.x = x + "px";
12464              }
12465
12466              gsCache.renderTransform(1, gsCache);
12467            } else {
12468              if (allowY) {
12469                self.deltaY = y - parseFloat(target.style.top || 0);
12470                target.style.top = y + "px";
12471              }
12472
12473              if (allowX) {
12474                self.deltaX = x - parseFloat(target.style.left || 0);
12475                target.style.left = x + "px";
12476              }
12477            }
12478          }
12479
12480          if (hasDragCallback && !suppressEvents && !isDispatching) {
12481            isDispatching = true;
12482
12483            if (_dispatchEvent(self, "drag", "onDrag") === false) {
12484              if (allowX) {
12485                self.x -= self.deltaX;
12486              }
12487
12488              if (allowY) {
12489                self.y -= self.deltaY;
12490              }
12491
12492              render(true);
12493            }
12494
12495            isDispatching = false;
12496          }
12497        }
12498
12499        dirty = false;
12500      },
12501          syncXY = function syncXY(skipOnUpdate, skipSnap) {
12502        var x = self.x,
12503            y = self.y,
12504            snappedValue,
12505            cs;
12506
12507        if (!target._gsap) {
12508          gsCache = gsap.core.getCache(target);
12509        }
12510
12511        gsCache.uncache && gsap.getProperty(target, "x");
12512
12513        if (xyMode) {
12514          self.x = parseFloat(gsCache.x);
12515          self.y = parseFloat(gsCache.y);
12516        } else if (rotationMode) {
12517          self.x = self.rotation = 
vendor: 4,869 bytes, lines 12517-12696
12517parseFloat(gsCache.rotation);
12518        } else if (scrollProxy) {
12519          self.y = scrollProxy.top();
12520          self.x = scrollProxy.left();
12521        } else {
12522          self.y = parseFloat(target.style.top || (cs = _getComputedStyle(target)) && cs.top) || 0;
12523          self.x = parseFloat(target.style.left || (cs || {}).left) || 0;
12524        }
12525
12526        if ((snapX || snapY || snapXY) && !skipSnap && (self.isDragging || self.isThrowing)) {
12527          if (snapXY) {
12528            _temp1.x = self.x;
12529            _temp1.y = self.y;
12530            snappedValue = snapXY(_temp1);
12531
12532            if (snappedValue.x !== self.x) {
12533              self.x = snappedValue.x;
12534              dirty = true;
12535            }
12536
12537            if (snappedValue.y !== self.y) {
12538              self.y = snappedValue.y;
12539              dirty = true;
12540            }
12541          }
12542
12543          if (snapX) {
12544            snappedValue = snapX(self.x);
12545
12546            if (snappedValue !== self.x) {
12547              self.x = snappedValue;
12548
12549              if (rotationMode) {
12550                self.rotation = snappedValue;
12551              }
12552
12553              dirty = true;
12554            }
12555          }
12556
12557          if (snapY) {
12558            snappedValue = snapY(self.y);
12559
12560            if (snappedValue !== self.y) {
12561              self.y = snappedValue;
12562            }
12563
12564            dirty = true;
12565          }
12566        }
12567
12568        dirty && render(true);
12569
12570        if (!skipOnUpdate) {
12571          self.deltaX = self.x - x;
12572          self.deltaY = self.y - y;
12573
12574          _dispatchEvent(self, "throwupdate", "onThrowUpdate");
12575        }
12576      },
12577          buildSnapFunc = function buildSnapFunc(snap, min, max, factor) {
12578        if (min == null) {
12579          min = -_bigNum;
12580        }
12581
12582        if (max == null) {
12583          max = _bigNum;
12584        }
12585
12586        if (_isFunction(snap)) {
12587          return function (n) {
12588            var edgeTolerance = !self.isPressed ? 1 : 1 - self.edgeResistance;
12589            return snap.call(self, n > max ? max + (n - max) * edgeTolerance : n < min ? min + (n - min) * edgeTolerance : n) * factor;
12590          };
12591        }
12592
12593        if (_isArray(snap)) {
12594          return function (n) {
12595            var i = snap.length,
12596                closest = 0,
12597                absDif = _bigNum,
12598                val,
12599                dif;
12600
12601            while (--i > -1) {
12602              val = snap[i];
12603              dif = val - n;
12604
12605              if (dif < 0) {
12606                dif = -dif;
12607              }
12608
12609              if (dif < absDif && val >= min && val <= max) {
12610                closest = i;
12611                absDif = dif;
12612              }
12613            }
12614
12615            return snap[closest];
12616          };
12617        }
12618
12619        return isNaN(snap) ? function (n) {
12620          return n;
12621        } : function () {
12622          return snap * factor;
12623        };
12624      },
12625          buildPointSnapFunc = function buildPointSnapFunc(snap, minX, maxX, minY, maxY, radius, factor) {
12626        radius = radius && radius < _bigNum ? radius * radius : _bigNum;
12627
12628        if (_isFunction(snap)) {
12629          return function (point) {
12630            var edgeTolerance = !self.isPressed ? 1 : 1 - self.edgeResistance,
12631                x = point.x,
12632                y = point.y,
12633                result,
12634                dx,
12635                dy;
12636            point.x = x = x > maxX ? maxX + (x - maxX) * edgeTolerance : x < minX ? minX + (x - minX) * edgeTolerance : x;
12637            point.y = y = y > maxY ? maxY + (y - maxY) * edgeTolerance : y < minY ? minY + (y - minY) * edgeTolerance : y;
12638            result = snap.call(self, point);
12639
12640            if (result !== point) {
12641              point.x = result.x;
12642              point.y = result.y;
12643            }
12644
12645            if (factor !== 1) {
12646              point.x *= factor;
12647              point.y *= factor;
12648            }
12649
12650            if (radius < _bigNum) {
12651              dx = point.x - x;
12652              dy = point.y - y;
12653
12654              if (dx * dx + dy * dy > radius) {
12655                point.x = x;
12656                point.y = y;
12657              }
12658            }
12659
12660            return point;
12661          };
12662        }
12663
12664        if (_isArray(snap)) {
12665          return function (p) {
12666            var i = snap.length,
12667                closest = 0,
12668                minDist = _bigNum,
12669                x,
12670                y,
12671                point,
12672                dist;
12673
12674            while (--i > -1) {
12675              point = snap[i];
12676              x = point.x - p.x;
12677              y = point.y - p.y;
12678              dist = x * x + y * y;
12679
12680              if (dist < minDist) {
12681                closest = i;
12682                minDist = dist;
12683              }
12684            }
12685
12686            return minDist <= radius ? snap[closest] : p;
12687          };
12688        }
12689
12690        return function (n) {
12691          return n;
12692        };
12693      },
12694          calculateBounds = function calculateBounds() {
12695        var bounds, targetBounds, snap, snapIsRaw;
12696        hasBounds = false;
vendor: 5,734 bytes, lines 12697-12842
12697
12698        if (scrollProxy) {
12699          scrollProxy.calibrate();
12700          self.minX = minX = -scrollProxy.maxScrollLeft();
12701          self.minY = minY = -scrollProxy.maxScrollTop();
12702          self.maxX = maxX = self.maxY = maxY = 0;
12703          hasBounds = true;
12704        } else if (!!vars.bounds) {
12705          bounds = _getBounds(vars.bounds, target.parentNode);
12706
12707          if (rotationMode) {
12708            self.minX = minX = bounds.left;
12709            self.maxX = maxX = bounds.left + bounds.width;
12710            self.minY = minY = self.maxY = maxY = 0;
12711          } else if (!_isUndefined(vars.bounds.maxX) || !_isUndefined(vars.bounds.maxY)) {
12712            bounds = vars.bounds;
12713            self.minX = minX = bounds.minX;
12714            self.minY = minY = bounds.minY;
12715            self.maxX = maxX = bounds.maxX;
12716            self.maxY = maxY = bounds.maxY;
12717          } else {
12718            targetBounds = _getBounds(target, target.parentNode);
12719            self.minX = minX = Math.round(getPropAsNum(xProp, "px") + bounds.left - targetBounds.left - 0.5);
12720            self.minY = minY = Math.round(getPropAsNum(yProp, "px") + bounds.top - targetBounds.top - 0.5);
12721            self.maxX = maxX = Math.round(minX + (bounds.width - targetBounds.width));
12722            self.maxY = maxY = Math.round(minY + (bounds.height - targetBounds.height));
12723          }
12724
12725          if (minX > maxX) {
12726            self.minX = maxX;
12727            self.maxX = maxX = minX;
12728            minX = self.minX;
12729          }
12730
12731          if (minY > maxY) {
12732            self.minY = maxY;
12733            self.maxY = maxY = minY;
12734            minY = self.minY;
12735          }
12736
12737          if (rotationMode) {
12738            self.minRotation = minX;
12739            self.maxRotation = maxX;
12740          }
12741
12742          hasBounds = true;
12743        }
12744
12745        if (vars.liveSnap) {
12746          snap = vars.liveSnap === true ? vars.snap || {} : vars.liveSnap;
12747          snapIsRaw = _isArray(snap) || _isFunction(snap);
12748
12749          if (rotationMode) {
12750            snapX = buildSnapFunc(snapIsRaw ? snap : snap.rotation, minX, maxX, 1);
12751            snapY = null;
12752          } else {
12753            if (snap.points) {
12754              snapXY = buildPointSnapFunc(snapIsRaw ? snap : snap.points, minX, maxX, minY, maxY, snap.radius, scrollProxy ? -1 : 1);
12755            } else {
12756              if (allowX) {
12757                snapX = buildSnapFunc(snapIsRaw ? snap : snap.x || snap.left || snap.scrollLeft, minX, maxX, scrollProxy ? -1 : 1);
12758              }
12759
12760              if (allowY) {
12761                snapY = buildSnapFunc(snapIsRaw ? snap : snap.y || snap.top || snap.scrollTop, minY, maxY, scrollProxy ? -1 : 1);
12762              }
12763            }
12764          }
12765        }
12766      },
12767          onThrowComplete = function onThrowComplete() {
12768        self.isThrowing = false;
12769
12770        _dispatchEvent(self, "throwcomplete", "onThrowComplete");
12771      },
12772          onThrowInterrupt = function onThrowInterrupt() {
12773        self.isThrowing = false;
12774      },
12775          animate = function animate(inertia, forceZeroVelocity) {
12776        var snap, snapIsRaw, tween, overshootTolerance;
12777
12778        if (inertia && InertiaPlugin) {
12779          if (inertia === true) {
12780            snap = vars.snap || vars.liveSnap || {};
12781            snapIsRaw = _isArray(snap) || _isFunction(snap);
12782            inertia = {
12783              resistance: (vars.throwResistance || vars.resistance || 1000) / (rotationMode ? 10 : 1)
12784            };
12785
12786            if (rotationMode) {
12787              inertia.rotation = _parseInertia(self, snapIsRaw ? snap : snap.rotation, maxX, minX, 1, forceZeroVelocity);
12788            } else {
12789              if (allowX) {
12790                inertia[xProp] = _parseInertia(self, snapIsRaw ? snap : snap.points || snap.x || snap.left, maxX, minX, scrollProxy ? -1 : 1, forceZeroVelocity || self.lockedAxis === "x");
12791              }
12792
12793              if (allowY) {
12794                inertia[yProp] = _parseInertia(self, snapIsRaw ? snap : snap.points || snap.y || snap.top, maxY, minY, scrollProxy ? -1 : 1, forceZeroVelocity || self.lockedAxis === "y");
12795              }
12796
12797              if (snap.points || _isArray(snap) && _isObject(snap[0])) {
12798                inertia.linkedProps = xProp + "," + yProp;
12799                inertia.radius = snap.radius;
12800              }
12801            }
12802          }
12803
12804          self.isThrowing = true;
12805          overshootTolerance = !isNaN(vars.overshootTolerance) ? vars.overshootTolerance : vars.edgeResistance === 1 ? 0 : 1 - self.edgeResistance + 0.2;
12806
12807          if (!inertia.duration) {
12808            inertia.duration = {
12809              max: Math.max(vars.minDuration || 0, "maxDuration" in vars ? vars.maxDuration : 2),
12810              min: !isNaN(vars.minDuration) ? vars.minDuration : overshootTolerance === 0 || _isObject(inertia) && inertia.resistance > 1000 ? 0 : 0.5,
12811              overshoot: overshootTolerance
12812            };
12813          }
12814
12815          self.tween = tween = gsap.to(scrollProxy || target, {
12816            inertia: inertia,
12817            data: "_draggable",
12818            onComplete: onThrowComplete,
12819            onInterrupt: onThrowInterrupt,
12820            onUpdate: vars.fastMode ? _dispatchEvent : syncXY,
12821            onUpdateParams: vars.fastMode ? [self, "onthrowupdate", "onThrowUpdate"] : snap && snap.radius ? [false, true] : []
12822          });
12823
12824          if (!vars.fastMode) {
12825            if (scrollProxy) {
12826              scrollProxy._skip = true;
12827            }
12828
12829            tween.render(1e9, true, true);
12830            syncXY(true, true);
12831            self.endX = self.x;
12832            self.endY = self.y;
12833
12834            if (rotationMode) {
12835              self.endRotation = self.x;
12836            }
12837
12838            tween.play(0);
12839            syncXY(true, true);
12840
12841            if (scrollProxy) {
12842              scrollProxy._skip = false;
vendor: 9,915 bytes, lines 12843-13124
12843            }
12844          }
12845        } else if (hasBounds) {
12846          self.applyBounds();
12847        }
12848      },
12849          updateMatrix = function updateMatrix(shiftStart) {
12850        var start = matrix,
12851            p;
12852        matrix = getGlobalMatrix(target.parentNode, true);
12853
12854        if (shiftStart && self.isPressed && !matrix.equals(start || new Matrix2D())) {
12855          p = start.inverse().apply({
12856            x: startPointerX,
12857            y: startPointerY
12858          });
12859          matrix.apply(p, p);
12860          startPointerX = p.x;
12861          startPointerY = p.y;
12862        }
12863
12864        if (matrix.equals(_identityMatrix$1)) {
12865          matrix = null;
12866        }
12867      },
12868          recordStartPositions = function recordStartPositions() {
12869        var edgeTolerance = 1 - self.edgeResistance,
12870            offsetX = isFixed ? _getDocScrollLeft$1(ownerDoc) : 0,
12871            offsetY = isFixed ? _getDocScrollTop$1(ownerDoc) : 0,
12872            parsedOrigin,
12873            x,
12874            y;
12875        updateMatrix(false);
12876        _point1.x = self.pointerX - offsetX;
12877        _point1.y = self.pointerY - offsetY;
12878        matrix && matrix.apply(_point1, _point1);
12879        startPointerX = _point1.x;
12880        startPointerY = _point1.y;
12881
12882        if (dirty) {
12883          setPointerPosition(self.pointerX, self.pointerY);
12884          render(true);
12885        }
12886
12887        if (scrollProxy) {
12888          calculateBounds();
12889          startElementY = scrollProxy.top();
12890          startElementX = scrollProxy.left();
12891        } else {
12892          if (isTweening()) {
12893            syncXY(true, true);
12894            calculateBounds();
12895          } else {
12896            self.applyBounds();
12897          }
12898
12899          if (rotationMode) {
12900            parsedOrigin = target.ownerSVGElement ? [gsCache.xOrigin - target.getBBox().x, gsCache.yOrigin - target.getBBox().y] : (_getComputedStyle(target)[_transformOriginProp$1] || "0 0").split(" ");
12901            rotationOrigin = self.rotationOrigin = getGlobalMatrix(target).apply({
12902              x: parseFloat(parsedOrigin[0]) || 0,
12903              y: parseFloat(parsedOrigin[1]) || 0
12904            });
12905            syncXY(true, true);
12906            x = self.pointerX - rotationOrigin.x - offsetX;
12907            y = rotationOrigin.y - self.pointerY + offsetY;
12908            startElementX = self.x;
12909            startElementY = self.y = Math.atan2(y, x) * _RAD2DEG;
12910          } else {
12911            startElementY = getPropAsNum(yProp, "px");
12912            startElementX = getPropAsNum(xProp, "px");
12913          }
12914        }
12915
12916        if (hasBounds && edgeTolerance) {
12917          if (startElementX > maxX) {
12918            startElementX = maxX + (startElementX - maxX) / edgeTolerance;
12919          } else if (startElementX < minX) {
12920            startElementX = minX - (minX - startElementX) / edgeTolerance;
12921          }
12922
12923          if (!rotationMode) {
12924            if (startElementY > maxY) {
12925              startElementY = maxY + (startElementY - maxY) / edgeTolerance;
12926            } else if (startElementY < minY) {
12927              startElementY = minY - (minY - startElementY) / edgeTolerance;
12928            }
12929          }
12930        }
12931
12932        self.startX = startElementX = _round(startElementX);
12933        self.startY = startElementY = _round(startElementY);
12934      },
12935          isTweening = function isTweening() {
12936        return self.tween && self.tween.isActive();
12937      },
12938          removePlaceholder = function removePlaceholder() {
12939        if (_placeholderDiv.parentNode && !isTweening() && !self.isDragging) {
12940          _placeholderDiv.parentNode.removeChild(_placeholderDiv);
12941        }
12942      },
12943          onPress = function onPress(e, force) {
12944        var i;
12945
12946        if (!enabled || self.isPressed || !e || (e.type === "mousedown" || e.type === "pointerdown") && !force && _getTime() - clickTime < 30 && _touchEventLookup[self.pointerEvent.type]) {
12947          isPreventingDefault && e && enabled && _preventDefault(e);
12948          return;
12949        }
12950
12951        interrupted = isTweening();
12952        self.pointerEvent = e;
12953
12954        if (_touchEventLookup[e.type]) {
12955          touchEventTarget = ~e.type.indexOf("touch") ? e.currentTarget || e.target : ownerDoc;
12956
12957          _addListener(touchEventTarget, "touchend", onRelease);
12958
12959          _addListener(touchEventTarget, "touchmove", onMove);
12960
12961          _addListener(touchEventTarget, "touchcancel", onRelease);
12962
12963          _addListener(ownerDoc, "touchstart", _onMultiTouchDocument);
12964        } else {
12965          touchEventTarget = null;
12966
12967          _addListener(ownerDoc, "mousemove", onMove);
12968        }
12969
12970        touchDragAxis = null;
12971
12972        if (!_supportsPointer || !touchEventTarget) {
12973          _addListener(ownerDoc, "mouseup", onRelease);
12974
12975          e && e.target && _addListener(e.target, "mouseup", onRelease);
12976        }
12977
12978        isClicking = isClickable.call(self, e.target) && vars.dragClickables === false && !force;
12979
12980        if (isClicking) {
12981          _addListener(e.target, "change", onRelease);
12982
12983          _dispatchEvent(self, "pressInit", "onPressInit");
12984
12985          _dispatchEvent(self, "press", "onPress");
12986
12987          _setSelectable(triggers, true);
12988
12989          isPreventingDefault = false;
12990          return;
12991        }
12992
12993        allowNativeTouchScrolling = !touchEventTarget || allowX === allowY || self.vars.allowNativeTouchScrolling === false || self.vars.allowContextMenu && e && (e.ctrlKey || e.which > 2) ? false : allowX ? "y" : "x";
12994        isPreventingDefault = !allowNativeTouchScrolling && !self.allowEventDefault;
12995
12996        if (isPreventingDefault) {
12997          _preventDefault(e);
12998
12999          _addListener(_win$1, "touchforcechange", _preventDefault);
13000        }
13001
13002        if (e.changedTouches) {
13003          e = touch = e.changedTouches[0];
13004          touchID = e.identifier;
13005        } else if (e.pointerId) {
13006          touchID = e.pointerId;
13007        } else {
13008          touch = touchID = null;
13009        }
13010
13011        _dragCount++;
13012
13013        _addToRenderQueue(render);
13014
13015        startPointerY = self.pointerY = e.pageY;
13016        startPointerX = self.pointerX = e.pageX;
13017
13018        _dispatchEvent(self, "pressInit", "onPressInit");
13019
13020        if (allowNativeTouchScrolling || self.autoScroll) {
13021          _recordMaxScrolls(target.parentNode);
13022        }
13023
13024        if (target.parentNode && self.autoScroll && !scrollProxy && !rotationMode && target.parentNode._gsMaxScrollX && !_placeholderDiv.parentNode && !target.getBBox) {
13025          _placeholderDiv.style.width = target.parentNode.scrollWidth + "px";
13026          target.parentNode.appendChild(_placeholderDiv);
13027        }
13028
13029        recordStartPositions();
13030        self.tween && self.tween.kill();
13031        self.isThrowing = false;
13032        gsap.killTweensOf(scrollProxy || target, killProps, true);
13033        scrollProxy && gsap.killTweensOf(target, {
13034          scrollTo: 1
13035        }, true);
13036        self.tween = self.lockedAxis = null;
13037
13038        if (vars.zIndexBoost || !rotationMode && !scrollProxy && vars.zIndexBoost !== false) {
13039          target.style.zIndex = Draggable.zIndex++;
13040        }
13041
13042        self.isPressed = true;
13043        hasDragCallback = !!(vars.onDrag || self._listeners.drag);
13044        hasMoveCallback = !!(vars.onMove || self._listeners.move);
13045
13046        if (vars.cursor !== false || vars.activeCursor) {
13047          i = triggers.length;
13048
13049          while (--i > -1) {
13050            gsap.set(triggers[i], {
13051              cursor: vars.activeCursor || vars.cursor || (_defaultCursor === "grab" ? "grabbing" : _defaultCursor)
13052            });
13053          }
13054        }
13055
13056        _dispatchEvent(self, "press", "onPress");
13057      },
13058          onMove = function onMove(e) {
13059        var originalEvent = e,
13060            touches,
13061            pointerX,
13062            pointerY,
13063            i,
13064            dx,
13065            dy;
13066
13067        if (!enabled || _isMultiTouching || !self.isPressed || !e) {
13068          isPreventingDefault && e && enabled && _preventDefault(e);
13069          return;
13070        }
13071
13072        self.pointerEvent = e;
13073        touches = e.changedTouches;
13074
13075        if (touches) {
13076          e = touches[0];
13077
13078          if (e !== touch && e.identifier !== touchID) {
13079            i = touches.length;
13080
13081            while (--i > -1 && (e = touches[i]).identifier !== touchID && e.target !== target) {}
13082
13083            if (i < 0) {
13084              return;
13085            }
13086          }
13087        } else if (e.pointerId && touchID && e.pointerId !== touchID) {
13088          return;
13089        }
13090
13091        if (touchEventTarget && allowNativeTouchScrolling && !touchDragAxis) {
13092          _point1.x = e.pageX - (isFixed ? _getDocScrollLeft$1(ownerDoc) : 0);
13093          _point1.y = e.pageY - (isFixed ? _getDocScrollTop$1(ownerDoc) : 0);
13094          matrix && matrix.apply(_point1, _point1);
13095          pointerX = _point1.x;
13096          pointerY = _point1.y;
13097          dx = Math.abs(pointerX - startPointerX);
13098          dy = Math.abs(pointerY - startPointerY);
13099
13100          if (dx !== dy && (dx > minimumMovement || dy > minimumMovement) || _isAndroid && allowNativeTouchScrolling === touchDragAxis) {
13101            touchDragAxis = dx > dy && allowX ? "x" : "y";
13102
13103            if (allowNativeTouchScrolling && touchDragAxis !== allowNativeTouchScrolling) {
13104              _addListener(_win$1, "touchforcechange", _preventDefault);
13105            }
13106
13107            if (self.vars.lockAxisOnTouchScroll !== false && allowX && allowY) {
13108              self.lockedAxis = touchDragAxis === "x" ? "y" : "x";
13109              _isFunction(self.vars.onLockAxis) && self.vars.onLockAxis.call(self, originalEvent);
13110            }
13111
13112            if (_isAndroid && allowNativeTouchScrolling === touchDragAxis) {
13113              onRelease(originalEvent);
13114              return;
13115            }
13116          }
13117        }
13118
13119        if (!self.allowEventDefault && (!allowNativeTouchScrolling || touchDragAxis && allowNativeTouchScrolling !== touchDragAxis) && originalEvent.cancelable !== false) {
13120          _preventDefault(originalEvent);
13121
13122          isPreventingDefault = true;
13123        } else if (isPreventingDefault) {
13124          isPreventingDefault = false;
vendor: 7,378 bytes, lines 13125-13366
13125        }
13126
13127        if (self.autoScroll) {
13128          checkAutoScrollBounds = true;
13129        }
13130
13131        setPointerPosition(e.pageX, e.pageY, hasMoveCallback);
13132      },
13133          setPointerPosition = function setPointerPosition(pointerX, pointerY, invokeOnMove) {
13134        var dragTolerance = 1 - self.dragResistance,
13135            edgeTolerance = 1 - self.edgeResistance,
13136            prevPointerX = self.pointerX,
13137            prevPointerY = self.pointerY,
13138            prevStartElementY = startElementY,
13139            prevX = self.x,
13140            prevY = self.y,
13141            prevEndX = self.endX,
13142            prevEndY = self.endY,
13143            prevEndRotation = self.endRotation,
13144            prevDirty = dirty,
13145            xChange,
13146            yChange,
13147            x,
13148            y,
13149            dif,
13150            temp;
13151        self.pointerX = pointerX;
13152        self.pointerY = pointerY;
13153
13154        if (isFixed) {
13155          pointerX -= _getDocScrollLeft$1(ownerDoc);
13156          pointerY -= _getDocScrollTop$1(ownerDoc);
13157        }
13158
13159        if (rotationMode) {
13160          y = Math.atan2(rotationOrigin.y - pointerY, pointerX - rotationOrigin.x) * _RAD2DEG;
13161          dif = self.y - y;
13162
13163          if (dif > 180) {
13164            startElementY -= 360;
13165            self.y = y;
13166          } else if (dif < -180) {
13167            startElementY += 360;
13168            self.y = y;
13169          }
13170
13171          if (self.x !== startElementX || Math.abs(startElementY - y) > minimumMovement) {
13172            self.y = y;
13173            x = startElementX + (startElementY - y) * dragTolerance;
13174          } else {
13175            x = startElementX;
13176          }
13177        } else {
13178          if (matrix) {
13179            temp = pointerX * matrix.a + pointerY * matrix.c + matrix.e;
13180            pointerY = pointerX * matrix.b + pointerY * matrix.d + matrix.f;
13181            pointerX = temp;
13182          }
13183
13184          yChange = pointerY - startPointerY;
13185          xChange = pointerX - startPointerX;
13186
13187          if (yChange < minimumMovement && yChange > -minimumMovement) {
13188            yChange = 0;
13189          }
13190
13191          if (xChange < minimumMovement && xChange > -minimumMovement) {
13192            xChange = 0;
13193          }
13194
13195          if ((self.lockAxis || self.lockedAxis) && (xChange || yChange)) {
13196            temp = self.lockedAxis;
13197
13198            if (!temp) {
13199              self.lockedAxis = temp = allowX && Math.abs(xChange) > Math.abs(yChange) ? "y" : allowY ? "x" : null;
13200
13201              if (temp && _isFunction(self.vars.onLockAxis)) {
13202                self.vars.onLockAxis.call(self, self.pointerEvent);
13203              }
13204            }
13205
13206            if (temp === "y") {
13207              yChange = 0;
13208            } else if (temp === "x") {
13209              xChange = 0;
13210            }
13211          }
13212
13213          x = _round(startElementX + xChange * dragTolerance);
13214          y = _round(startElementY + yChange * dragTolerance);
13215        }
13216
13217        if ((snapX || snapY || snapXY) && (self.x !== x || self.y !== y && !rotationMode)) {
13218          if (snapXY) {
13219            _temp1.x = x;
13220            _temp1.y = y;
13221            temp = snapXY(_temp1);
13222            x = _round(temp.x);
13223            y = _round(temp.y);
13224          }
13225
13226          if (snapX) {
13227            x = _round(snapX(x));
13228          }
13229
13230          if (snapY) {
13231            y = _round(snapY(y));
13232          }
13233        } else if (hasBounds) {
13234          if (x > maxX) {
13235            x = maxX + Math.round((x - maxX) * edgeTolerance);
13236          } else if (x < minX) {
13237            x = minX + Math.round((x - minX) * edgeTolerance);
13238          }
13239
13240          if (!rotationMode) {
13241            if (y > maxY) {
13242              y = Math.round(maxY + (y - maxY) * edgeTolerance);
13243            } else if (y < minY) {
13244              y = Math.round(minY + (y - minY) * edgeTolerance);
13245            }
13246          }
13247        }
13248
13249        if (self.x !== x || self.y !== y && !rotationMode) {
13250          if (rotationMode) {
13251            self.endRotation = self.x = self.endX = x;
13252            dirty = true;
13253          } else {
13254            if (allowY) {
13255              self.y = self.endY = y;
13256              dirty = true;
13257            }
13258
13259            if (allowX) {
13260              self.x = self.endX = x;
13261              dirty = true;
13262            }
13263          }
13264
13265          if (!invokeOnMove || _dispatchEvent(self, "move", "onMove") !== false) {
13266            if (!self.isDragging && self.isPressed) {
13267              self.isDragging = true;
13268
13269              _dispatchEvent(self, "dragstart", "onDragStart");
13270            }
13271          } else {
13272            self.pointerX = prevPointerX;
13273            self.pointerY = prevPointerY;
13274            startElementY = prevStartElementY;
13275            self.x = prevX;
13276            self.y = prevY;
13277            self.endX = prevEndX;
13278            self.endY = prevEndY;
13279            self.endRotation = prevEndRotation;
13280            dirty = prevDirty;
13281          }
13282        }
13283      },
13284          onRelease = function onRelease(e, force) {
13285        if (!enabled || !self.isPressed || e && touchID != null && !force && (e.pointerId && e.pointerId !== touchID && e.target !== target || e.changedTouches && !_hasTouchID(e.changedTouches, touchID))) {
13286          isPreventingDefault && e && enabled && _preventDefault(e);
13287          return;
13288        }
13289
13290        self.isPressed = false;
13291        var originalEvent = e,
13292            wasDragging = self.isDragging,
13293            isContextMenuRelease = self.vars.allowContextMenu && e && (e.ctrlKey || e.which > 2),
13294            placeholderDelayedCall = gsap.delayedCall(0.001, removePlaceholder),
13295            touches,
13296            i,
13297            syntheticEvent,
13298            eventTarget,
13299            syntheticClick;
13300
13301        if (touchEventTarget) {
13302          _removeListener(touchEventTarget, "touchend", onRelease);
13303
13304          _removeListener(touchEventTarget, "touchmove", onMove);
13305
13306          _removeListener(touchEventTarget, "touchcancel", onRelease);
13307
13308          _removeListener(ownerDoc, "touchstart", _onMultiTouchDocument);
13309        } else {
13310          _removeListener(ownerDoc, "mousemove", onMove);
13311        }
13312
13313        _removeListener(_win$1, "touchforcechange", _preventDefault);
13314
13315        if (!_supportsPointer || !touchEventTarget) {
13316          _removeListener(ownerDoc, "mouseup", onRelease);
13317
13318          e && e.target && _removeListener(e.target, "mouseup", onRelease);
13319        }
13320
13321        dirty = false;
13322
13323        if (wasDragging) {
13324          dragEndTime = _lastDragTime = _getTime();
13325          self.isDragging = false;
13326        }
13327
13328        if (isClicking && !isContextMenuRelease) {
13329          if (e) {
13330            _removeListener(e.target, "change", onRelease);
13331
13332            self.pointerEvent = originalEvent;
13333          }
13334
13335          _setSelectable(triggers, false);
13336
13337          _dispatchEvent(self, "release", "onRelease");
13338
13339          _dispatchEvent(self, "click", "onClick");
13340
13341          isClicking = false;
13342          return;
13343        }
13344
13345        _removeFromRenderQueue(render);
13346
13347        i = triggers.length;
13348
13349        while (--i > -1) {
13350          _setStyle(triggers[i], "cursor", vars.cursor || (vars.cursor !== false ? _defaultCursor : null));
13351        }
13352
13353        _dragCount--;
13354
13355        if (e) {
13356          touches = e.changedTouches;
13357
13358          if (touches) {
13359            e = touches[0];
13360
13361            if (e !== touch && e.identifier !== touchID) {
13362              i = touches.length;
13363
13364              while (--i > -1 && (e = touches[i]).identifier !== touchID && e.target !== target) {}
13365
13366              if (i < 0
vendor: 3,558 bytes, lines 13366-13459
13366) {
13367                return;
13368              }
13369            }
13370          }
13371
13372          self.pointerEvent = originalEvent;
13373          self.pointerX = e.pageX;
13374          self.pointerY = e.pageY;
13375        }
13376
13377        if (isContextMenuRelease && originalEvent) {
13378          _preventDefault(originalEvent);
13379
13380          isPreventingDefault = true;
13381
13382          _dispatchEvent(self, "release", "onRelease");
13383        } else if (originalEvent && !wasDragging) {
13384          isPreventingDefault = false;
13385
13386          if (interrupted && (vars.snap || vars.bounds)) {
13387            animate(vars.inertia || vars.throwProps);
13388          }
13389
13390          _dispatchEvent(self, "release", "onRelease");
13391
13392          if ((!_isAndroid || originalEvent.type !== "touchmove") && originalEvent.type.indexOf("cancel") === -1) {
13393            _dispatchEvent(self, "click", "onClick");
13394
13395            if (_getTime() - clickTime < 300) {
13396              _dispatchEvent(self, "doubleclick", "onDoubleClick");
13397            }
13398
13399            eventTarget = originalEvent.target || target;
13400            clickTime = _getTime();
13401
13402            syntheticClick = function syntheticClick() {
13403              if (clickTime !== clickDispatch && self.enabled() && !self.isPressed && !originalEvent.defaultPrevented) {
13404                if (eventTarget.click) {
13405                  eventTarget.click();
13406                } else if (ownerDoc.createEvent) {
13407                  syntheticEvent = ownerDoc.createEvent("MouseEvents");
13408                  syntheticEvent.initMouseEvent("click", true, true, _win$1, 1, self.pointerEvent.screenX, self.pointerEvent.screenY, self.pointerX, self.pointerY, false, false, false, false, 0, null);
13409                  eventTarget.dispatchEvent(syntheticEvent);
13410                }
13411              }
13412            };
13413
13414            if (!_isAndroid && !originalEvent.defaultPrevented) {
13415              gsap.delayedCall(0.05, syntheticClick);
13416            }
13417          }
13418        } else {
13419          animate(vars.inertia || vars.throwProps);
13420
13421          if (!self.allowEventDefault && originalEvent && (vars.dragClickables !== false || !isClickable.call(self, originalEvent.target)) && wasDragging && (!allowNativeTouchScrolling || touchDragAxis && allowNativeTouchScrolling === touchDragAxis) && originalEvent.cancelable !== false) {
13422            isPreventingDefault = true;
13423
13424            _preventDefault(originalEvent);
13425          } else {
13426            isPreventingDefault = false;
13427          }
13428
13429          _dispatchEvent(self, "release", "onRelease");
13430        }
13431
13432        isTweening() && placeholderDelayedCall.duration(self.tween.duration());
13433        wasDragging && _dispatchEvent(self, "dragend", "onDragEnd");
13434        return true;
13435      },
13436          updateScroll = function updateScroll(e) {
13437        if (e && self.isDragging && !scrollProxy) {
13438          var parent = e.target || target.parentNode,
13439              deltaX = parent.scrollLeft - parent._gsScrollX,
13440              deltaY = parent.scrollTop - parent._gsScrollY;
13441
13442          if (deltaX || deltaY) {
13443            if (matrix) {
13444              startPointerX -= deltaX * matrix.a + deltaY * matrix.c;
13445              startPointerY -= deltaY * matrix.d + deltaX * matrix.b;
13446            } else {
13447              startPointerX -= deltaX;
13448              startPointerY -= deltaY;
13449            }
13450
13451            parent._gsScrollX += deltaX;
13452            parent._gsScrollY += deltaY;
13453            setPointerPosition(self.pointerX, self.pointerY);
13454          }
13455        }
13456      },
13457          onClick = function onClick(e) {
13458        var time = _getTime(),
13459            recentlyClicked = time - clickTime < 
vendor: 3,515 bytes, lines 13459-13564
1345940,
13460            recentlyDragged = time - dragEndTime < 40,
13461            alreadyDispatched = recentlyClicked && clickDispatch === clickTime,
13462            defaultPrevented = self.pointerEvent && self.pointerEvent.defaultPrevented,
13463            alreadyDispatchedTrusted = recentlyClicked && trustedClickDispatch === clickTime,
13464            trusted = e.isTrusted || e.isTrusted == null && recentlyClicked && alreadyDispatched;
13465
13466        if ((alreadyDispatched || recentlyDragged && self.vars.suppressClickOnDrag !== false) && e.stopImmediatePropagation) {
13467          e.stopImmediatePropagation();
13468        }
13469
13470        if (recentlyClicked && !(self.pointerEvent && self.pointerEvent.defaultPrevented) && (!alreadyDispatched || trusted && !alreadyDispatchedTrusted)) {
13471          if (trusted && alreadyDispatched) {
13472            trustedClickDispatch = clickTime;
13473          }
13474
13475          clickDispatch = clickTime;
13476          return;
13477        }
13478
13479        if (self.isPressed || recentlyDragged || recentlyClicked) {
13480          if (!trusted || !e.detail || !recentlyClicked || defaultPrevented) {
13481            _preventDefault(e);
13482          }
13483        }
13484
13485        if (!recentlyClicked && !recentlyDragged) {
13486          e && e.target && (self.pointerEvent = e);
13487
13488          _dispatchEvent(self, "click", "onClick");
13489        }
13490      },
13491          localizePoint = function localizePoint(p) {
13492        return matrix ? {
13493          x: p.x * matrix.a + p.y * matrix.c + matrix.e,
13494          y: p.x * matrix.b + p.y * matrix.d + matrix.f
13495        } : {
13496          x: p.x,
13497          y: p.y
13498        };
13499      };
13500
13501      old = Draggable.get(target);
13502      old && old.kill();
13503
13504      _this2.startDrag = function (event, align) {
13505        var r1, r2, p1, p2;
13506        onPress(event || self.pointerEvent, true);
13507
13508        if (align && !self.hitTest(event || self.pointerEvent)) {
13509          r1 = _parseRect(event || self.pointerEvent);
13510          r2 = _parseRect(target);
13511          p1 = localizePoint({
13512            x: r1.left + r1.width / 2,
13513            y: r1.top + r1.height / 2
13514          });
13515          p2 = localizePoint({
13516            x: r2.left + r2.width / 2,
13517            y: r2.top + r2.height / 2
13518          });
13519          startPointerX -= p1.x - p2.x;
13520          startPointerY -= p1.y - p2.y;
13521        }
13522
13523        if (!self.isDragging) {
13524          self.isDragging = true;
13525
13526          _dispatchEvent(self, "dragstart", "onDragStart");
13527        }
13528      };
13529
13530      _this2.drag = onMove;
13531
13532      _this2.endDrag = function (e) {
13533        return onRelease(e || self.pointerEvent, true);
13534      };
13535
13536      _this2.timeSinceDrag = function () {
13537        return self.isDragging ? 0 : (_getTime() - dragEndTime) / 1000;
13538      };
13539
13540      _this2.timeSinceClick = function () {
13541        return (_getTime() - clickTime) / 1000;
13542      };
13543
13544      _this2.hitTest = function (target, threshold) {
13545        return Draggable.hitTest(self.target, target, threshold);
13546      };
13547
13548      _this2.getDirection = function (from, diagonalThreshold) {
13549        var mode = from === "velocity" && InertiaPlugin ? from : _isObject(from) && !rotationMode ? "element" : "start",
13550            xChange,
13551            yChange,
13552            ratio,
13553            direction,
13554            r1,
13555            r2;
13556
13557        if (mode === "element") {
13558          r1 = _parseRect(self.target);
13559          r2 = _parseRect(from);
13560        }
13561
13562        xChange = mode === "start" ? self.x - startElementX : mode === "velocity" ? InertiaPlugin.getVelocity(target, xProp) : r1.left + r1.width / 2 - (r2.left + r2.width / 2);
13563
13564        if (rotationMode) {
vendor: 10,331 bytes, lines 13565-13909
13565          return xChange < 0 ? "counter-clockwise" : "clockwise";
13566        } else {
13567          diagonalThreshold = diagonalThreshold || 2;
13568          yChange = mode === "start" ? self.y - startElementY : mode === "velocity" ? InertiaPlugin.getVelocity(target, yProp) : r1.top + r1.height / 2 - (r2.top + r2.height / 2);
13569          ratio = Math.abs(xChange / yChange);
13570          direction = ratio < 1 / diagonalThreshold ? "" : xChange < 0 ? "left" : "right";
13571
13572          if (ratio < diagonalThreshold) {
13573            if (direction !== "") {
13574              direction += "-";
13575            }
13576
13577            direction += yChange < 0 ? "up" : "down";
13578          }
13579        }
13580
13581        return direction;
13582      };
13583
13584      _this2.applyBounds = function (newBounds, sticky) {
13585        var x, y, forceZeroVelocity, e, parent, isRoot;
13586
13587        if (newBounds && vars.bounds !== newBounds) {
13588          vars.bounds = newBounds;
13589          return self.update(true, sticky);
13590        }
13591
13592        syncXY(true);
13593        calculateBounds();
13594
13595        if (hasBounds && !isTweening()) {
13596          x = self.x;
13597          y = self.y;
13598
13599          if (x > maxX) {
13600            x = maxX;
13601          } else if (x < minX) {
13602            x = minX;
13603          }
13604
13605          if (y > maxY) {
13606            y = maxY;
13607          } else if (y < minY) {
13608            y = minY;
13609          }
13610
13611          if (self.x !== x || self.y !== y) {
13612            forceZeroVelocity = true;
13613            self.x = self.endX = x;
13614
13615            if (rotationMode) {
13616              self.endRotation = x;
13617            } else {
13618              self.y = self.endY = y;
13619            }
13620
13621            dirty = true;
13622            render(true);
13623
13624            if (self.autoScroll && !self.isDragging) {
13625              _recordMaxScrolls(target.parentNode);
13626
13627              e = target;
13628              _windowProxy.scrollTop = _win$1.pageYOffset != null ? _win$1.pageYOffset : ownerDoc.documentElement.scrollTop != null ? ownerDoc.documentElement.scrollTop : ownerDoc.body.scrollTop;
13629              _windowProxy.scrollLeft = _win$1.pageXOffset != null ? _win$1.pageXOffset : ownerDoc.documentElement.scrollLeft != null ? ownerDoc.documentElement.scrollLeft : ownerDoc.body.scrollLeft;
13630
13631              while (e && !isRoot) {
13632                isRoot = _isRoot(e.parentNode);
13633                parent = isRoot ? _windowProxy : e.parentNode;
13634
13635                if (allowY && parent.scrollTop > parent._gsMaxScrollY) {
13636                  parent.scrollTop = parent._gsMaxScrollY;
13637                }
13638
13639                if (allowX && parent.scrollLeft > parent._gsMaxScrollX) {
13640                  parent.scrollLeft = parent._gsMaxScrollX;
13641                }
13642
13643                e = parent;
13644              }
13645            }
13646          }
13647
13648          if (self.isThrowing && (forceZeroVelocity || self.endX > maxX || self.endX < minX || self.endY > maxY || self.endY < minY)) {
13649            animate(vars.inertia || vars.throwProps, forceZeroVelocity);
13650          }
13651        }
13652
13653        return self;
13654      };
13655
13656      _this2.update = function (applyBounds, sticky, ignoreExternalChanges) {
13657        var x = self.x,
13658            y = self.y;
13659        updateMatrix(!sticky);
13660
13661        if (applyBounds) {
13662          self.applyBounds();
13663        } else {
13664          dirty && ignoreExternalChanges && render(true);
13665          syncXY(true);
13666        }
13667
13668        if (sticky) {
13669          setPointerPosition(self.pointerX, self.pointerY);
13670          dirty && render(true);
13671        }
13672
13673        if (self.isPressed && !sticky && (allowX && Math.abs(x - self.x) > 0.01 || allowY && Math.abs(y - self.y) > 0.01 && !rotationMode)) {
13674          recordStartPositions();
13675        }
13676
13677        if (self.autoScroll) {
13678          _recordMaxScrolls(target.parentNode, self.isDragging);
13679
13680          checkAutoScrollBounds = self.isDragging;
13681          render(true);
13682
13683          _removeScrollListener(target, updateScroll);
13684
13685          _addScrollListener(target, updateScroll);
13686        }
13687
13688        return self;
13689      };
13690
13691      _this2.enable = function (type) {
13692        var setVars = {
13693          lazy: true
13694        },
13695            id,
13696            i,
13697            trigger;
13698
13699        if (vars.cursor !== false) {
13700          setVars.cursor = vars.cursor || _defaultCursor;
13701        }
13702
13703        if (gsap.utils.checkPrefix("touchCallout")) {
13704          setVars.touchCallout = "none";
13705        }
13706
13707        if (type !== "soft") {
13708          _setTouchActionForAllDescendants(triggers, allowX === allowY ? "none" : vars.allowNativeTouchScrolling && target.scrollHeight === target.clientHeight === (target.scrollWidth === target.clientHeight) || vars.allowEventDefault ? "manipulation" : allowX ? "pan-y" : "pan-x");
13709
13710          i = triggers.length;
13711
13712          while (--i > -1) {
13713            trigger = triggers[i];
13714            _supportsPointer || _addListener(trigger, "mousedown", onPress);
13715
13716            _addListener(trigger, "touchstart", onPress);
13717
13718            _addListener(trigger, "click", onClick, true);
13719
13720            gsap.set(trigger, setVars);
13721
13722            if (trigger.getBBox && trigger.ownerSVGElement) {
13723              gsap.set(trigger.ownerSVGElement, {
13724                touchAction: allowX === allowY ? "none" : vars.allowNativeTouchScrolling || vars.allowEventDefault ? "manipulation" : allowX ? "pan-y" : "pan-x"
13725              });
13726            }
13727
13728            vars.allowContextMenu || _addListener(trigger, "contextmenu", onContextMenu);
13729          }
13730
13731          _setSelectable(triggers, false);
13732        }
13733
13734        _addScrollListener(target, updateScroll);
13735
13736        enabled = true;
13737
13738        if (InertiaPlugin && type !== "soft") {
13739          InertiaPlugin.track(scrollProxy || target, xyMode ? "x,y" : rotationMode ? "rotation" : "top,left");
13740        }
13741
13742        target._gsDragID = id = "d" + _lookupCount++;
13743        _lookup[id] = self;
13744
13745        if (scrollProxy) {
13746          scrollProxy.enable();
13747          scrollProxy.element._gsDragID = id;
13748        }
13749
13750        (vars.bounds || rotationMode) && recordStartPositions();
13751        vars.bounds && self.applyBounds();
13752        return self;
13753      };
13754
13755      _this2.disable = function (type) {
13756        var dragging = self.isDragging,
13757            i = triggers.length,
13758            trigger;
13759
13760        while (--i > -1) {
13761          _setStyle(triggers[i], "cursor", null);
13762        }
13763
13764        if (type !== "soft") {
13765          _setTouchActionForAllDescendants(triggers, null);
13766
13767          i = triggers.length;
13768
13769          while (--i > -1) {
13770            trigger = triggers[i];
13771
13772            _setStyle(trigger, "touchCallout", null);
13773
13774            _removeListener(trigger, "mousedown", onPress);
13775
13776            _removeListener(trigger, "touchstart", onPress);
13777
13778            _removeListener(trigger, "click", onClick);
13779
13780            _removeListener(trigger, "contextmenu", onContextMenu);
13781          }
13782
13783          _setSelectable(triggers, true);
13784
13785          if (touchEventTarget) {
13786            _removeListener(touchEventTarget, "touchcancel", onRelease);
13787
13788            _removeListener(touchEventTarget, "touchend", onRelease);
13789
13790            _removeListener(touchEventTarget, "touchmove", onMove);
13791          }
13792
13793          _removeListener(ownerDoc, "mouseup", onRelease);
13794
13795          _removeListener(ownerDoc, "mousemove", onMove);
13796        }
13797
13798        _removeScrollListener(target, updateScroll);
13799
13800        enabled = false;
13801        InertiaPlugin && type !== "soft" && InertiaPlugin.untrack(scrollProxy || target, xyMode ? "x,y" : rotationMode ? "rotation" : "top,left");
13802        scrollProxy && scrollProxy.disable();
13803
13804        _removeFromRenderQueue(render);
13805
13806        self.isDragging = self.isPressed = isClicking = false;
13807        dragging && _dispatchEvent(self, "dragend", "onDragEnd");
13808        return self;
13809      };
13810
13811      _this2.enabled = function (value, type) {
13812        return arguments.length ? value ? self.enable(type) : self.disable(type) : enabled;
13813      };
13814
13815      _this2.kill = function () {
13816        self.isThrowing = false;
13817        self.tween && self.tween.kill();
13818        self.disable();
13819        gsap.set(triggers, {
13820          clearProps: "userSelect"
13821        });
13822        delete _lookup[target._gsDragID];
13823        return self;
13824      };
13825
13826      if (~type.indexOf("scroll")) {
13827        scrollProxy = _this2.scrollProxy = new ScrollProxy(target, _extend({
13828          onKill: function onKill() {
13829            self.isPressed && onRelease(null);
13830          }
13831        }, vars));
13832        target.style.overflowY = allowY && !_isTouchDevice ? "auto" : "hidden";
13833        target.style.overflowX = allowX && !_isTouchDevice ? "auto" : "hidden";
13834        target = scrollProxy.content;
13835      }
13836
13837      if (rotationMode) {
13838        killProps.rotation = 1;
13839      } else {
13840        if (allowX) {
13841          killProps[xProp] = 1;
13842        }
13843
13844        if (allowY) {
13845          killProps[yProp] = 1;
13846        }
13847      }
13848
13849      gsCache.force3D = "force3D" in vars ? vars.force3D : true;
13850
13851      _this2.enable();
13852
13853      return _this2;
13854    }
13855
13856    Draggable.register = function register(core) {
13857      gsap = core;
13858
13859      _initCore();
13860    };
13861
13862    Draggable.create = function create(targets, vars) {
13863      _coreInitted || _initCore(true);
13864      return _toArray(targets).map(function (target) {
13865        return new Draggable(target, vars);
13866      });
13867    };
13868
13869    Draggable.get = function get(target) {
13870      return _lookup[(_toArray(target)[0] || {})._gsDragID];
13871    };
13872
13873    Draggable.timeSinceDrag = function timeSinceDrag() {
13874      return (_getTime() - _lastDragTime) / 1000;
13875    };
13876
13877    Draggable.hitTest = function hitTest(obj1, obj2, threshold) {
13878      if (obj1 === obj2) {
13879        return false;
13880      }
13881
13882      var r1 = _parseRect(obj1),
13883          r2 = _parseRect(obj2),
13884          top = r1.top,
13885          left = r1.left,
13886          right = r1.right,
13887          bottom = r1.bottom,
13888          width = r1.width,
13889          height = r1.height,
13890          isOutside = r2.left > right || r2.right < left || r2.top > bottom || r2.bottom < top,
13891          overlap,
13892          area,
13893          isRatio;
13894
13895      if (isOutside || !threshold) {
13896        return !isOutside;
13897      }
13898
13899      isRatio = (threshold + "").indexOf("%") !== -1;
13900      threshold = parseFloat(threshold) || 0;
13901      overlap = {
13902        left: Math.max(left, r2.left),
13903        top: Math.max(top, r2.top)
13904      };
13905      overlap.width = Math.min(right, r2.right) - overlap.left;
13906      overlap.height = Math.min(bottom, r2.bottom) - overlap.top;
13907
13908      if (overlap.width < 0 || overlap.height < 0) {
13909        return false;
vendor: 5,025 bytes, lines 13910-13956
13910      }
13911
13912      if (isRatio) {
13913        threshold *= 0.01;
13914        area = overlap.width * overlap.height;
13915        return area >= width * height * threshold || area >= r2.width * r2.height * threshold;
13916      }
13917
13918      return overlap.width > threshold && overlap.height > threshold;
13919    };
13920
13921    return Draggable;
13922  }(EventDispatcher);
13923
13924  _setDefaults(Draggable.prototype, {
13925    pointerX: 0,
13926    pointerY: 0,
13927    startX: 0,
13928    startY: 0,
13929    deltaX: 0,
13930    deltaY: 0,
13931    isDragging: false,
13932    isPressed: false
13933  });
13934
13935  Draggable.zIndex = 1000;
13936  Draggable.version = "3.7.0";
13937  _getGSAP() && gsap.registerPlugin(Draggable);
13938
13939  exports.Draggable = Draggable;
13940  exports.default = Draggable;
13941
13942  if (typeof(window) === 'undefined' || window !== exports) {Object.defineProperty(exports, '__esModule', { value: true });} else {delete window.default;}
13943
13944})));
13945
13946/*SIGUIENTE LIBRERIA*/
13947/*!
13948 * Draggable 3.7.0
13949 * https://greensock.com
13950 * 
13951 * @license Copyright 2021, GreenSock. All rights reserved.
13952 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
13953 * @author: Jack Doyle, [email protected]
13954 */
13955
13956!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function v(e,t){if(e.parentNode&&(h||M(e))){var n=k(e),o=n?n.getAttribute("xmlns")||"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",r=n?t?"rect":"g":"div",i=2!==t?0:100,a=3===t?100:0,l="position:absolute;display:block;pointer-events:none;margin:0;padding:0;",s=h.createElementNS?h.createElementNS(o.replace(/^https/,"http"),r):h.createElement(r);return t&&(n?(g=g||v(e),s.setAttribute("width",.01),s.setAttribute("height",.01),s.setAttribute("transform","translate("+i+","+a+")"),g.appendChild(s)):(f||((f=v(e)).style.cssText=l),s.style.cssText=l+"width:0.1px;height:0.1px;top:"+a+"px;left:"+i+"px",f.appendChild(s))),s}throw"Need document and parent."}function y(e,t,n,o,r,i,a){return e.a=t,e.b=n,e.c=o,e.d=r,e.e=i,e.f=a,e}var h,u,r,i,f,g,x,m,t,w="transform",b=w+"Origin",M=function _setDoc(e){var t=e.ownerDocument||e;!(w in e.style)&&"msTransform"in e.style&&(b=(w="msTransform")+"Origin");for(;t.parentNode&&(t=t.parentNode););if(u=window,x=new fe,t){r=(h=t).documentElement,i=t.body;var n=t.createElement("div"),o=t.createElement("div");i.appendChild(n),n.appendChild(o),n.style.position="static",n.style[w]="translate3d(0,0,1px)",m=o.offsetParent!==n,i.removeChild(n)}return t},D=function _forceNonZeroScale(e){for(var t,n;e&&e!==i;)(n=e._gsap)&&n.uncache&&n.get(e,"x"),n&&!n.scaleX&&!n.scaleY&&n.renderTransform&&(n.scaleX=n.scaleY=1e-4,n.renderTransform(1,n),t?t.push(n):t=[n]),e=e.parentNode;return t},E=[],S=[],L=function _getDocScrollTop(){return u.pageYOffset||h.scrollTop||r.scrollTop||i.scrollTop||0},C=function _getDocScrollLeft(){return u.pageXOffset||h.scrollLeft||r.scrollLeft||i.scrollLeft||0},k=function _svgOwner(e){return e.ownerSVGElement||("svg"===(e.tagName+"").toLowerCase()?e:null)},N=function _isFixed(e){return"fixed"===u.getComputedStyle(e).position||((e=e.parentNode)&&1===e.nodeType?_isFixed(e):void 0)},P=function _placeSiblings(e,t){var n,o,r,i,a,l,s=k(e),c=e===s,d=s?E:S,p=e.parentNode;if(e===u)return e;if(d.length||d.push(v(e,1),v(e,2),v(e,3)),n=s?g:f,s)r=c?{x:0,y:0}:e.getBBox(),a=(o=e.transform?e.transform.baseVal:{}).numberOfItems?(i=(o=1<o.numberOfItems?function _consolidate(e){for(var t=new fe,n=0;n<e.numberOfItems;n++)t.multiply(e.getItem(n).matrix);return t}(o):o.getItem(0).matrix).a*r.x+o.c*r.y,o.b*r.x+o.d*r.y):(o=x,i=r.x,r.y),t&&"g"===e.tagName.toLowerCase()&&(i=a=0),(c?s:p).appendChild(n),n.setAttribute("transform","matrix("+o.a+","+o.b+","+o.c+","+o.d+","+(o.e+i)+","+(o.f+a)+")");else{if(i=a=0,m)for(o=e.offsetParent,r=e;(r=r&&r.parentNode)&&r!==o&&r.parentNode;)4<(u.getComputedStyle(r)[w]+"").length&&(i=r.offsetLeft,a=r.offsetTop,r=0);if("absolute"!==(l=u.getComputedStyle(e)).position)for(o=e.offsetParent;p&&p!==o;)i+=p.scrollLeft||0,a+=p.scrollTop||0,p=p.parentNode;(r=n.style).top=e.offsetTop-a+"px",r.left=e.offsetLeft-i+"px",r[w]=l[w],r[b]=l[b],r.position="fixed"===l.position?"fixed":"absolute",e.parentNode.appendChild(n)}return n},fe=((t=Matrix2D.prototype).inverse=function inverse(){var e=this.a,t=this.b,n=this.c,o=this.d,r=this.e,i=this.f,a=e*o-t*n||1e-10;return y(this,o/a,-t/a,-n/a,e/a,(n*i-o*r)/a,-(e*i-t*r)/a)},t.multiply=function multiply(e){var t=this.a,n=this.b,o=this.c,r=this.d,i=this.e,a=this.f,l=e.a,s=e.c,c=e.b,d=e.d,p=e.e,u=e.f;return y(this,l*t+c*o,l*n+c*r,s*t+d*o,s*n+d*r,i+p*t+u*o,a+p*n+u*r)},t.clone=function clone(){return new Matrix2D(this.a,this.b,this.c,this.d,this.e,this.f)},t.equals=function equals(e){var t=this.a,n=this.b,o=this.c,r=this.d,i=this.e,a=this.f;return t===e.a&&n===e.b&&o===e.c&&r===e.d&&i===e.e&&a===e.f},t.apply=function apply(e,t){void 0===t&&(t={});var n=e.x,o=e.y,r=this.a,i=this.b,a=this.c,l=this.d,s=this.e,c=this.f;
vendor: 27,026 bytes, line 13956
13956return t.x=n*r+o*a+s||0,t.y=n*i+o*l+c||0,t},Matrix2D);function Matrix2D(e,t,n,o,r,i){void 0===e&&(e=1),void 0===t&&(t=0),void 0===n&&(n=0),void 0===o&&(o=1),void 0===r&&(r=0),void 0===i&&(i=0),y(this,e,t,n,o,r,i)}function getGlobalMatrix(e,t,n,o){if(!e||!e.parentNode||(h||M(e)).documentElement===e)return new fe;var r=D(e),i=k(e)?E:S,a=P(e,n),l=i[0].getBoundingClientRect(),s=i[1].getBoundingClientRect(),c=i[2].getBoundingClientRect(),d=a.parentNode,p=!o&&N(e),u=new fe((s.left-l.left)/100,(s.top-l.top)/100,(c.left-l.left)/100,(c.top-l.top)/100,l.left+(p?0:C()),l.top+(p?0:L()));if(d.removeChild(a),r)for(l=r.length;l--;)(s=r[l]).scaleX=s.scaleY=0,s.renderTransform(1,s);return t?u.inverse():u}function T(){return"undefined"!=typeof window}function U(){return ge||T()&&(ge=window.gsap)&&ge.registerPlugin&&ge}function V(e){return"function"==typeof e}function W(e){return"object"==typeof e}function X(e){return void 0===e}function Y(){return!1}function _(e){return Math.round(1e4*e)/1e4}function ba(e,t){var n=ve.createElementNS?ve.createElementNS((t||"http://www.w3.org/1999/xhtml").replace(/^https/,"http"),e):ve.createElement(e);return n.style?n:ve.createElement(e)}function na(e,t){var n,o={};for(n in e)o[n]=t?e[n]*t:e[n];return o}function pa(e,t){for(var n,o=e.length;o--;)t?e[o].style.touchAction=t:e[o].style.removeProperty("touch-action"),(n=e[o].children)&&n.length&&pa(n,t)}function qa(){return Re.forEach(function(e){return e()})}function sa(){return!Re.length&&ge.ticker.remove(qa)}function ta(e){for(var t=Re.length;t--;)Re[t]===e&&Re.splice(t,1);ge.to(sa,{overwrite:!0,delay:15,duration:0,onComplete:sa,data:"_draggable"})}function va(e,t,n,o){if(e.addEventListener){var r=Te[t];o=o||(d?{passive:!1}:null),e.addEventListener(r||t,n,o),r&&t!==r&&e.addEventListener(t,n,o)}}function wa(e,t,n){if(e.removeEventListener){var o=Te[t];e.removeEventListener(o||t,n),o&&t!==o&&e.removeEventListener(t,n)}}function xa(e){e.preventDefault&&e.preventDefault(),e.preventManipulation&&e.preventManipulation()}function za(e){Ee=e.touches&&De<e.touches.length,wa(e.target,"touchend",za)}function Aa(e){Ee=e.touches&&De<e.touches.length,va(e.target,"touchend",za)}function Ba(e){return xe.pageYOffset||e.scrollTop||e.documentElement.scrollTop||e.body.scrollTop||0}function Ca(e){return xe.pageXOffset||e.scrollLeft||e.documentElement.scrollLeft||e.body.scrollLeft||0}function Da(e,t){va(e,"scroll",t),Fe(e.parentNode)||Da(e.parentNode,t)}function Ea(e,t){wa(e,"scroll",t),Fe(e.parentNode)||Ea(e.parentNode,t)}function Ga(e,t){var n="x"===t?"Width":"Height",o="scroll"+n,r="client"+n;return Math.max(0,Fe(e)?Math.max(me[o],l[o])-(xe["inner"+n]||me[r]||l[r]):e[o]-e[r])}function Ha(e,t){var n=Ga(e,"x"),o=Ga(e,"y");Fe(e)?e=Ie:Ha(e.parentNode,t),e._gsMaxScrollX=n,e._gsMaxScrollY=o,t||(e._gsScrollX=e.scrollLeft||0,e._gsScrollY=e.scrollTop||0)}function Ia(e,t,n){var o=e.style;o&&(X(o[t])&&(t=c(t,e)||t),null==n?o.removeProperty&&o.removeProperty(t.replace(/([A-Z])/g,"-$1").toLowerCase()):o[t]=n)}function Ja(e){return xe.getComputedStyle(e instanceof Element?e:e.host||(e.parentNode||{}).host||e)}function La(e){if(e===xe)return p.left=p.top=0,p.width=p.right=me.clientWidth||e.innerWidth||l.clientWidth||0,p.height=p.bottom=(e.innerHeight||0)-20<me.clientHeight?me.clientHeight:e.innerHeight||l.clientHeight||0,p;var t=e.ownerDocument||ve,n=X(e.pageX)?e.nodeType||X(e.left)||X(e.top)?be(e)[0].getBoundingClientRect():e:{left:e.pageX-Ca(t),top:e.pageY-Ba(t),right:e.pageX-Ca(t)+1,bottom:e.pageY-Ba(t)+1};return X(n.right)&&!X(n.width)?(n.right=n.left+n.width,n.bottom=n.top+n.height):X(n.width)&&(n={width:n.right-n.left,height:n.bottom-n.top,right:n.right,left:n.left,bottom:n.bottom,top:n.top}),n}function Ma(e,t,n){var o,r=e.vars,i=r[n],a=e._listeners[t];return V(i)&&(o=i.apply(r.callbackScope||e,r[n+"Params"]||[e.pointerEvent])),a&&!1===e.dispatchEvent(t)&&(o=!1),o}function Na(e,t){var n,o,r,i=be(e)[0];return i.nodeType||i===xe?A(i,t):X(e.left)?{left:o=e.min||e.minX||e.minRotation||0,top:n=e.min||e.minY||0,width:(e.max||e.maxX||e.maxRotation||0)-o,height:(e.max||e.maxY||0)-n}:(r={x:0,y:0},{left:e.left-r.x,top:e.top-r.y,width:e.width,height:e.height})}function Qa(r,i,e,t,a,n){var o,l,s,c={};if(i)if(1!==a&&i instanceof Array){if(c.end=o=[],s=i.length,W(i[0]))for(l=0;l<s;l++)o[l]=na(i[l],a);else for(l=0;l<s;l++)o[l]=i[l]*a;e+=1.1,t-=1.1}else V(i)?c.end=function(e){var t,n,o=i.call(r,e);if(1!==a)if(W(o)){for(n in t={},o)t[n]=o[n]*a;o=t}else o*=a;return o}:c.end=i;return!e&&0!==e||(c.max=e),!t&&0!==t||(c.min=t),n&&(c.velocity=0),c}function Ra(e){var t;return!(!e||!e.getAttribute||e===l)&&(!("true"!==(t=e.getAttribute("data-clickable"))&&("false"===t||!e.onclick&&!o.test(e.nodeName+"")&&"true"!==e.getAttribute("contentEditable")))||Ra(e.parentNode))}function Sa(e,t){for(var n,o=e.length;o--;)(n=e[o]).ondragstart=n.onselectstart=t?null:Y,ge.set(n,{lazy:!0,userSelect:t?"text":"none"})}function Wa(i,r){i=ge.utils.toArray(i)[0],r=r||{};var a,l,s,e,c,d,p=document.createElement("div"),u=p.style,t=i.firstChild,h=0,f=0,g=i.scrollTop,x=i.scrollLeft,v=i.scrollWidth,m=i.scrollHeight,y=0,w=0,b=0;R&&!1!==r.force3D?(c="translate3d(",d="px,0px)"):O&&(c="translate(",d="px)"),this.scrollTop=function(e,t){if(!arguments.length)return-this.top();this.top(-e,t)},this.scrollLeft=function(e,t){if(!arguments.length)return-this.left();this.left(-e,t)},this.left=function(e,t){if(!arguments.length)return-(i.scrollLeft+f);var n=i.scrollLeft-x,o=f;if((2<n||n<-2)&&!t)return x=i.scrollLeft,ge.killTweensOf(this,{left:1,scrollLeft:1}),this.left(-x),void(r.onKill&&r.onKill());(e=-e)<0?(f=e-.5|0,e=0):w<e?(f=e-w|0,e=w):f=0,(f||o)&&(this._skip||(u[O]=c+-f+"px,"+-h+d),0<=f+y&&(u.paddingRight=f+y+"px")),i.scrollLeft=0|e,x=i.scrollLeft},this.top=function(e,t){if(!arguments.length)return-(i.scrollTop+h);var n=i.scrollTop-g,o=h;if((2<n||n<-2)&&!t)return g=i.scrollTop,ge.killTweensOf(this,{top:1,scrollTop:1}),this.top(-g),void(r.onKill&&r.onKill());(e=-e)<0?(h=e-.5|0,e=0):b<e?(h=e-b|0,e=b):h=0,(h||o)&&(this._skip||(u[O]=c+-f+"px,"+-h+d)),i.scrollTop=0|e,g=i.scrollTop},this.maxScrollTop=function(){return b},this.maxScrollLeft=function(){return w},this.disable=function(){for(t=p.firstChild;t;)e=t.nextSibling,i.appendChild(t),t=e;i===p.parentNode&&i.removeChild(p)},this.enable=function(){if((t=i.firstChild)!==p){for(;t;)e=t.nextSibling,p.appendChild(t),t=e;i.appendChild(p),this.calibrate()}},this.calibrate=function(e){var t,n,o,r=i.clientWidth===a;g=i.scrollTop,x=i.scrollLeft,r&&i.clientHeight===l&&p.offsetHeight===s&&v===i.scrollWidth&&m===i.scrollHeight&&!e||((h||f)&&(n=this.left(),o=this.top(),this.left(-i.scrollLeft),this.top(-i.scrollTop)),t=Ja(i),r&&!e||(u.display="block",u.width="auto",u.paddingRight="0px",(y=Math.max(0,i.scrollWidth-i.clientWidth))&&(y+=parseFloat(t.paddingLeft)+(B?parseFloat(t.paddingRight):0))),u.display="inline-block",u.position="relative",u.overflow="visible",u.verticalAlign="top",u.boxSizing="content-box",u.width="100%",u.paddingRight=y+"px",B&&(u.paddingBottom=t.paddingBottom),a=i.clientWidth,l=i.clientHeight,v=i.scrollWidth,m=i.scrollHeight,w=i.scrollWidth-a,b=i.scrollHeight-l,s=p.offsetHeight,u.display="block",(n||o)&&(this.left(n),this.top(o)))},this.content=p,this.element=i,this._skip=!1,this.enable()}function Xa(e){if(T()&&document.body){var t=window&&window.navigator;xe=window,ve=document,me=ve.documentElement,l=ve.body,s=ba("div"),Ye=!!window.PointerEvent,(ye=ba("div")).style.cssText="visibility:hidden;height:1px;top:-1px;pointer-events:none;position:relative;clear:both;cursor:grab",Le="grab"===ye.style.cursor?"grab":"move",Xe=t&&-1!==t.userAgent.toLowerCase().indexOf("android"),Me="ontouchstart"in me&&"orientation"in xe||t&&(0<t.MaxTouchPoints||0<t.msMaxTouchPoints),o=ba("div"),r=ba("div"),i=r.style,a=l,i.display="inline-block",i.position="relative",o.style.cssText=r.innerHTML="width:90px;height:40px;padding:10px;overflow:auto;visibility:hidden",o.appendChild(r),a.appendChild(o),n=r.offsetHeight+18>o.scrollHeight,a.removeChild(o),B=n,Te=function(e){for(var t=e.split(","),n=(("onpointerdown"in s?"pointerdown,pointermove,pointerup,pointercancel":"onmspointerdown"in s?"MSPointerDown,MSPointerMove,MSPointerUp,MSPointerCancel":e).split(",")),o={},r=4;-1<--r;)o[t[r]]=n[r],o[n[r]]=t[r];try{me.addEventListener("test",null,Object.defineProperty({},"passive",{get:function get(){d=1}}))}catch(e){}return o}("touchstart,touchmove,touchend,touchcancel"),va(ve,"touchcancel",Y),va(xe,"touchmove",Y),l&&l.addEventListener("touchstart",Y),va(ve,"contextmenu",function(){for(var e in Be)Be[e].isPressed&&Be[e].endDrag()}),ge=we=U()}var n,o,r,i,a;ge?(Se=ge.plugins.inertia,c=ge.utils.checkPrefix,O=c(O),_e=c(_e),be=ge.utils.toArray,R=!!c("perspective")):e&&console.warn("Please gsap.registerPlugin(Draggable)")}var ge,xe,ve,me,l,s,ye,we,c,be,d,Me,Te,De,Ee,Xe,Se,Le,Ye,R,B,n,O="transform",_e="transformOrigin",Ce=Array.isArray,ke=180/Math.PI,Ne=1e20,a=new fe,Pe=Date.now||function(){return(new Date).getTime()},Re=[],Be={},Oe=0,o=/^(?:a|input|textarea|button|select)$/i,Ae=0,He={},Ie={},Fe=function _isRoot(e){return!(e&&e!==me&&9!==e.nodeType&&e!==ve.body&&e!==xe&&e.nodeType&&e.parentNode)},p={},We={},A=function _getElementBounds(e,t){t=be(t)[0];var n,o,r,i,a,l,s,c,d,p,u,h,f,g,x=e.getBBox&&e.ownerSVGElement,v=e.ownerDocument||ve;if(e===xe)r=Ba(v),o=(n=Ca(v))+(v.documentElement.clientWidth||e.innerWidth||v.body.clientWidth||0),i=r+((e.innerHeight||0)-20<v.documentElement.clientHeight?v.documentElement.clientHeight:e.innerHeight||v.body.clientHeight||0);else{if(t===xe||X(t))return e.getBoundingClientRect();n=r=0,x?(u=(p=e.getBBox()).width,h=p.height):(e.viewBox&&(p=e.viewBox.baseVal)&&(n=p.x||0,r=p.y||0,u=p.width,h=p.height),u||(p="border-box"===(f=Ja(e)).boxSizing,u=(parseFloat(f.width)||e.clientWidth||0)+(p?0:parseFloat(f.borderLeftWidth)+parseFloat(f.borderRightWidth)),h=(parseFloat(f.height)||e.clientHeight||0)+(p?0:parseFloat(f.borderTopWidth)+parseFloat(f.borderBottomWidth)))),o=u,i=h}return e===t?{left:n,top:r,width:o-n,height:i-r}:(l=(a=getGlobalMatrix(t,!0).multiply(getGlobalMatrix(e))).apply({x:n,y:r}),s=a.apply({x:o,y:r}),c=a.apply({x:o,y:i}),d=a.apply({x:n,y:i}),n=Math.min(l.x,s.x,c.x,d.x),r=Math.min(l.y,s.y,c.y,d.y),{left:n+((g=t.parentNode||{}).scrollLeft||0),top:r+(g.scrollTop||0),width:Math.max(l.x,s.x,c.x,d.x)-n,height:Math.max(l.y,s.y,c.y,d.y)-r})},H=((n=EventDispatcher.prototype).addEventListener=function addEventListener(e,t){var n=this._listeners[e]||(this._listeners[e]=[]);~n.indexOf(t)||n.push(t)},n.removeEventListener=function removeEventListener(e,t){var n=this._listeners[e],o=n&&n.indexOf(t)||-1;-1<o&&n.splice(o,1)},n.dispatchEvent=function dispatchEvent(t){var n,o=this;return(this._listeners[t]||[]).forEach(function(e){return!1===e.call(o,{type:t,target:o.target})&&(n=!1)}),n},EventDispatcher);function EventDispatcher(e){this._listeners={},this.target=e||this}var Ve,I=(function _inheritsLoose(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(Draggable,Ve=H),Draggable.register=function register(e){ge=e,Xa()},Draggable.create=function create(e,t){return we||Xa(!0),be(e).map(function(e){return new Draggable(e,t)})},Draggable.get=function get(e){return Be[(be(e)[0]||{})._gsDragID]},Draggable.timeSinceDrag=function timeSinceDrag(){return(Pe()-Ae)/1e3},Draggable.hitTest=function hitTest(e,t,n){if(e===t)return!1;var o,r,i,a=La(e),l=La(t),s=a.top,c=a.left,d=a.right,p=a.bottom,u=a.width,h=a.height,f=l.left>d||l.right<c||l.top>p||l.bottom<s;return f||!n?!f:(i=-1!==(n+"").indexOf("%"),n=parseFloat(n)||0,(o={left:Math.max(c,l.left),top:Math.max(s,l.top)}).width=Math.min(d,l.right)-o.left,o.height=Math.min(p,l.bottom)-o.top,!(o.width<0||o.height<0)&&(i?u*h*(n*=.01)<=(r=o.width*o.height)||r>=l.width*l.height*n:o.width>n&&o.height>n))},Draggable);function Draggable(h,p){var e;e=Ve.call(this)||this,we||Xa(1),h=be(h)[0],Se=Se||ge.plugins.inertia,e.vars=p=na(p||{}),e.target=h,e.x=e.y=e.rotation=0,e.dragResistance=parseFloat(p.dragResistance)||0,e.edgeResistance=isNaN(p.edgeResistance)?1:parseFloat(p.edgeResistance)||0,e.lockAxis=p.lockAxis,e.autoScroll=p.autoScroll||0,e.lockedAxis=null,e.allowEventDefault=!!p.allowEventDefault,ge.getProperty(h,"x");function Jg(e,t){return parseFloat(le.get(h,e,t))}function oh(e){return xa(e),e.stopImmediatePropagation&&e.stopImmediatePropagation(),!1}function ph(e){if(Q.autoScroll&&Q.isDragging&&(ee||k)){var t,n,o,r,i,a,l,s,c=h,d=15*Q.autoScroll;for(ee=!1,Ie.scrollTop=null!=xe.pageYOffset?xe.pageYOffset:null!=ce.documentElement.scrollTop?ce.documentElement.scrollTop:ce.body.scrollTop,Ie.scrollLeft=null!=xe.pageXOffset?xe.pageXOffset:null!=ce.documentElement.scrollLeft?ce.documentElement.scrollLeft:ce.body.scrollLeft,r=Q.pointerX-Ie.scrollLeft,i=Q.pointerY-Ie.scrollTop;c&&!n;)t=(n=Fe(c.parentNode))?Ie:c.parentNode,o=n?{bottom:Math.max(me.clientHeight,xe.innerHeight||0),right:Math.max(me.clientWidth,xe.innerWidth||0),left:0,top:0}:t.getBoundingClientRect(),a=l=0,U&&((s=t._gsMaxScrollY-t.scrollTop)<0?l=s:i>o.bottom-oe&&s?(ee=!0,l=Math.min(s,d*(1-Math.max(0,o.bottom-i)/oe)|0)):i<o.top+te&&t.scrollTop&&(ee=!0,l=-Math.min(t.scrollTop,d*(1-Math.max(0,i-o.top)/te)|0)),l&&(t.scrollTop+=l)),K&&((s=t._gsMaxScrollX-t.scrollLeft)<0?a=s:r>o.right-ne&&s?(ee=!0,a=Math.min(s,d*(1-Math.max(0,o.right-r)/ne)|0)):r<o.left+re&&t.scrollLeft&&(ee=!0,a=-Math.min(t.scrollLeft,d*(1-Math.max(0,r-o.left)/re)|0)),a&&(t.scrollLeft+=a)),n&&(a||l)&&(xe.scrollTo(t.scrollLeft,t.scrollTop),ue(Q.pointerX+a,Q.pointerY+l)),c=t}if(k){var p=Q.x,u=Q.y;z?(Q.deltaX=p-parseFloat(le.rotation),Q.rotation=p,le.rotation=p+"deg",le.renderTransform(1,le)):f?(U&&(Q.deltaY=u-f.top(),f.top(u)),K&&(Q.deltaX=p-f.left(),f.left(p))):q?(U&&(Q.deltaY=u-parseFloat(le.y),le.y=u+"px"),K&&(Q.deltaX=p-parseFloat(le.x),le.x=p+"px"),le.renderTransform(1,le)):(U&&(Q.deltaY=u-parseFloat(h.style.top||0),h.style.top=u+"px"),K&&(Q.deltaX=p-parseFloat(h.style.left||0),h.style.left=p+"px")),!g||e||I||(!(I=!0)===Ma(Q,"drag","onDrag")&&(K&&(Q.x-=Q.deltaX),U&&(Q.y-=Q.deltaY),ph(!0)),I=!1)}k=!1}function qh(e,t){var n,o,r=Q.x,i=Q.y;h._gsap||(le=ge.core.getCache(h)),le.uncache&&ge.getProperty(h,"x"),q?(Q.x=parseFloat(le.x),Q.y=parseFloat(le.y)):z?Q.x=Q.rotation=parseFloat(le.rotation):f?(Q.y=f.top(),Q.x=f.left()):(Q.y=parseFloat(h.style.top||(o=Ja(h))&&o.top)||0,Q.x=parseFloat(h.style.left||(o||{}).left)||0),(N||P||R)&&!t&&(Q.isDragging||Q.isThrowing)&&(R&&(He.x=Q.x,He.y=Q.y,(n=R(He)).x!==Q.x&&(Q.x=n.x,k=!0),n.y!==Q.y&&(Q.y=n.y,k=!0)),N&&(n=N(Q.x))!==Q.x&&(Q.x=n,z&&(Q.rotation=n),k=!0),P&&((n=P(Q.y))!==Q.y&&(Q.y=n),k=!0)),k&&ph(!0),e||(Q.deltaX=Q.x-r,Q.deltaY=Q.y-i,Ma(Q,"throwupdate","onThrowUpdate"))}function rh(a,l,s,n){return null==l&&(l=-Ne),null==s&&(s=Ne),V(a)?function(e){var t=Q.isPressed?1-Q.edgeResistance:1;return a.call(Q,s<e?s+(e-s)*t:e<l?l+(e-l)*t:e)*n}:Ce(a)?function(e){for(var t,n,o=a.length,r=0,i=Ne;-1<--o;)(n=(t=a[o])-e)<0&&(n=-n),n<i&&l<=t&&t<=s&&(r=o,i=n);return a[r]}:isNaN(a)?function(e){return e}:function(){return a*n}}function th(){var e,t,n,o;D=!1,f?(f.calibrate(),Q.minX=S=-f.maxScrollLeft(),Q.minY=Y=-f.maxScrollTop(),Q.maxX=E=Q.maxY=L=0,D=!0):p.bounds&&(e=Na(p.bounds,h.parentNode),z?(Q.minX=S=e.left,Q.maxX=E=e.left+e.width,Q.minY=Y=Q.maxY=L=0):X(p.bounds.maxX)&&X(p.bounds.maxY)?(t=Na(h,h.parentNode),Q.minX=S=Math.round(Jg(d,"px")+e.left-t.left-.5),Q.minY=Y=Math.round(Jg(J,"px")+e.top-t.top-.5),Q.maxX=E=Math.round(S+(e.width-t.width)),Q.maxY=L=Math.round(Y+(e.height-t.height))):(e=p.bounds,Q.minX=S=e.minX,Q.minY=Y=e.minY,Q.maxX=E=e.maxX,Q.maxY=L=e.maxY),E<S&&(Q.minX=E,Q.maxX=E=S,S=Q.minX),L<Y&&(Q.minY=L,Q.maxY=L=Y,Y=Q.minY),z&&(Q.minRotation=S,Q.maxRotation=E),D=!0),p.liveSnap&&(n=!0===p.liveSnap?p.snap||{}:p.liveSnap,o=Ce(n)||V(n),z?(N=rh(o?n:n.rotation,S,E,1),P=null):n.points?R=function buildPointSnapFunc(s,l,c,d,p,u,h){return u=u&&u<Ne?u*u:Ne,V(s)?function(e){var t,n,o,r=Q.isPressed?1-Q.edgeResistance:1,i=e.x,a=e.y;return e.x=i=c<i?c+(i-c)*r:i<l?l+(i-l)*r:i,e.y=a=p<a?p+(a-p)*r:a<d?d+(a-d)*r:a,(t=s.call(Q,e))!==e&&(e.x=t.x,e.y=t.y),1!==h&&(e.x*=h,e.y*=h),u<Ne&&(n=e.x-i,o=e.y-a,u<n*n+o*o&&(e.x=i,e.y=a)),e}:Ce(s)?function(e){for(var t,n,o,r,i=s.length,a=0,l=Ne;-1<--i;)(r=(t=(o=s[i]).x-e.x)*t+(n=o.y-e.y)*n)<l&&(a=i,l=r);return l<=u?s[a]:e}:function(e){return e}}(o?n:n.points,S,E,Y,L,n.radius,f?-1:1):(K&&(N=rh(o?n:n.x||n.left||n.scrollLeft,S,E,f?-1:1)),U&&(P=rh(o?n:n.y||n.top||n.scrollTop,Y,L,f?-1:1))))}function uh(){Q.isThrowing=!1,Ma(Q,"throwcomplete","onThrowComplete")}function vh(){Q.isThrowing=!1}function wh(e,t){var n,o,r,i;e&&Se?(!0===e&&(n=p.snap||p.liveSnap||{},o=Ce(n)||V(n),e={resistance:(p.throwResistance||p.resistance||1e3)/(z?10:1)},z?e.rotation=Qa(Q,o?n:n.rotation,E,S,1,t):(K&&(e[d]=Qa(Q,o?n:n.points||n.x||n.left,E,S,f?-1:1,t||"x"===Q.lockedAxis)),U&&(e[J]=Qa(Q,o?n:n.points||n.y||n.top,L,Y,f?-1:1,t||"y"===Q.lockedAxis)),(n.points||Ce(n)&&W(n[0]))&&(e.linkedProps=d+","+J,e.radius=n.radius))),Q.isThrowing=!0,i=isNaN(p.overshootTolerance)?1===p.edgeResistance?0:1-Q.edgeResistance+.2:p.overshootTolerance,e.duration||(e.duration={max:Math.max(p.minDuration||0,"maxDuration"in p?p.maxDuration:2),min:isNaN(p.minDuration)?0===i||W(e)&&1e3<e.resistance?0:.5:p.minDuration,overshoot:i}),Q.tween=r=ge.to(f||h,{inertia:e,data:"_draggable",onComplete:uh,onInterrupt:vh,onUpdate:p.fastMode?Ma:qh,onUpdateParams:p.fastMode?[Q,"onthrowupdate","onThrowUpdate"]:n&&n.radius?[!1,!0]:[]}),p.fastMode||(f&&(f._skip=!0),r.render(1e9,!0,!0),qh(!0,!0),Q.endX=Q.x,Q.endY=Q.y,z&&(Q.endRotation=Q.x),r.play(0),qh(!0,!0),f&&(f._skip=!1))):D&&Q.applyBounds()}function xh(e){var t,n=B;B=getGlobalMatrix(h.parentNode,!0),e&&Q.isPressed&&!B.equals(n||new fe)&&(t=n.inverse().apply({x:w,y:b}),B.apply(t,t),w=t.x,b=t.y),B.equals(a)&&(B=null)}function yh(){var e,t,n,o=1-Q.edgeResistance,r=se?Ca(ce):0,i=se?Ba(ce):0;xh(!1),We.x=Q.pointerX-r,We.y=Q.pointerY-i,B&&B.apply(We,We),w=We.x,b=We.y,k&&(ue(Q.pointerX,Q.pointerY),ph(!0)),f?(th(),T=f.top(),M=f.left()):(de()?(qh(!0,!0),th()):Q.applyBounds(),z?(e=h.ownerSVGElement?[le.xOrigin-h.getBBox().x,le.yOrigin-h.getBBox().y]:(Ja(h)[_e]||"0 0").split(" "),C=Q.rotationOrigin=getGlobalMatrix(h).apply({x:parseFloat(e[0])||0,y:parseFloat(e[1])||0}),qh(!0,!0),t=Q.pointerX-C.x-r,n=C.y-Q.pointerY+i,M=Q.x,T=Q.y=Math.atan2(n,t)*ke):(T=Jg(J,"px"),M=Jg(d,"px"))),D&&o&&(E<M?M=E+(M-E)/o:M<S&&(M=S-(S-M)/o),z||(L<T?T=L+(T-L)/o:T<Y&&(T=Y-(Y-T)/o))),Q.startX=M=_(M),Q.startY=T=_(T)}function Ah(){!ye.parentNode||de()||Q.isDragging||ye.parentNode.removeChild(ye)}function Bh(e,t){var n;if(!u||Q.isPressed||!e||!("mousedown"!==e.type&&"pointerdown"!==e.type||t)&&Pe()-ae<30&&Te[Q.pointerEvent.type])G&&e&&u&&xa(e);else{if(O=de(),Q.pointerEvent=e,Te[e.type]?(y=~e.type.indexOf("touch")?e.currentTarget||e.target:ce,va(y,"touchend",he),va(y,"touchmove",pe),va(y,"touchcancel",he),va(ce,"touchstart",Aa)):(y=null,va(ce,"mousemove",pe)),H=null,Ye&&y||(va(ce,"mouseup",he),e&&e.target&&va(e.target,"mouseup",he)),m=ie.call(Q,e.target)&&!1===p.dragClickables&&!t)return va(e.target,"change",he),Ma(Q,"pressInit","onPressInit"),Ma(Q,"press","onPress"),Sa(Z,!0),void(G=!1);if(A=!(!y||K==U||!1===Q.vars.allowNativeTouchScrolling||Q.vars.allowContextMenu&&e&&(e.ctrlKey||2<e.which))&&(K?"y":"x"),(G=!A&&!Q.allowEventDefault)&&(xa(e),va(xe,"touchforcechange",xa)),e.changedTouches?(e=x=e.changedTouches[0],v=e.identifier):e.pointerId?v=e.pointerId:x=v=null,De++,function _addToRenderQueue(e){Re.push(e),1===Re.length&&ge.ticker.add(qa)}(ph),b=Q.pointerY=e.pageY,w=Q.pointerX=e.pageX,Ma(Q,"pressInit","onPressInit"),(A||Q.autoScroll)&&Ha(h.parentNode),!h.parentNode||!Q.autoScroll||f||z||!h.parentNode._gsMaxScrollX||ye.parentNode||h.getBBox||(ye.style.width=h.parentNode.scrollWidth+"px",h.parentNode.appendChild(ye)),yh(),Q.tween&&Q.tween.kill(),Q.isThrowing=!1,ge.killTweensOf(f||h,o,!0),f&&ge.killTweensOf(h,{scrollTo:1},!0),Q.tween=Q.lockedAxis=null,!p.zIndexBoost&&(z||f||!1===p.zIndexBoost)||(h.style.zIndex=Draggable.zIndex++),Q.isPressed=!0,g=!(!p.onDrag&&!Q._listeners.drag),s=!(!p.onMove&&!Q._listeners.move),!1!==p.cursor||p.activeCursor)for(n=Z.length;-1<--n;)ge.set(Z[n],{cursor:p.activeCursor||p.cursor||("grab"===Le?"grabbing":Le)});Ma(Q,"press","onPress")}}function Fh(e){if(e&&Q.isDragging&&!f){var t=e.target||h.parentNode,n=t.scrollLeft-t._gsScrollX,o=t.scrollTop-t._gsScrollY;(n||o)&&(B?(w-=n*B.a+o*B.c,b-=o*B.d+n*B.b):(w-=n,b-=o),t._gsScrollX+=n,t._gsScrollY+=o,ue(Q.pointerX,Q.pointerY))}}function Gh(e){var t=Pe(),n=t-ae<40,o=t-$<40,r=n&&F===ae,i=Q.pointerEvent&&Q.pointerEvent.defaultPrevented,a=n&&c===ae,l=e.isTrusted||null==e.isTrusted&&n&&r;if((r||o&&!1!==Q.vars.suppressClickOnDrag)&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),n&&(!Q.pointerEvent||!Q.pointerEvent.defaultPrevented)&&(!r||l&&!a))return l&&r&&(c=ae),void(F=ae);(Q.isPressed||o||n)&&(l&&e.detail&&n&&!i||xa(e)),n||o||(e&&e.target&&(Q.pointerEvent=e),Ma(Q,"click","onClick"))}function Hh(e){return B?{x:e.x*B.a+e.y*B.c+B.e,y:e.x*B.b+e.y*B.d+B.f}:{x:e.x,y:e.y}}var u,f,w,b,M,T,D,g,s,E,S,L,Y,x,v,C,k,t,N,P,R,m,y,B,O,A,H,I,F,c,G,n=(p.type||"x,y").toLowerCase(),q=~n.indexOf("x")||~n.indexOf("y"),z=-1!==n.indexOf("rotation"),d=z?"rotation":q?"x":"left",J=q?"y":"top",K=!(!~n.indexOf("x")&&!~n.indexOf("left")&&"scroll"!==n),U=!(!~n.indexOf("y")&&!~n.indexOf("top")&&"scroll"!==n),j=p.minimumMovement||2,Q=function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e),Z=be(p.trigger||p.handle||h),o={},$=0,ee=!1,te=p.autoScrollMarginTop||40,ne=p.autoScrollMarginRight||40,oe=p.autoScrollMarginBottom||40,re=p.autoScrollMarginLeft||40,ie=p.clickableTest||Ra,ae=0,le=h._gsap||ge.core.getCache(h),se=function _isFixed(e){return"fixed"===Ja(e).position||((e=e.parentNode)&&1===e.nodeType?_isFixed(e):void 0)}(h),ce=h.ownerDocument||ve,de=function isTweening(){return Q.tween&&Q.tween.isActive()},pe=function onMove(e){var t,n,o,r,i,a,l=e;if(u&&!Ee&&Q.isPressed&&e){if(t=(Q.pointerEvent=e).changedTouches){if((e=t[0])!==x&&e.identifier!==v){for(r=t.length;-1<--r&&(e=t[r]).identifier!==v&&e.target!==h;);if(r<0)return}}else if(e.pointerId&&v&&e.pointerId!==v)return;y&&A&&!H&&(We.x=e.pageX-(se?Ca(ce):0),We.y=e.pageY-(se?Ba(ce):0),B&&B.apply(We,We),n=We.x,o=We.y,((i=Math.abs(n-w))!==(a=Math.abs(o-b))&&(j<i||j<a)||Xe&&A===H)&&(H=a<i&&K?"x":"y",A&&H!==A&&va(xe,"touchforcechange",xa),!1!==Q.vars.lockAxisOnTouchScroll&&K&&U&&(Q.lockedAxis="x"===H?"y":"x",V(Q.vars.onLockAxis)&&Q.vars.onLockAxis.call(Q,l)),Xe&&A===H))?he(l):(G=Q.allowEventDefault||A&&(!H||A===H)||!1===l.cancelable?G&&!1:(xa(l),!0),Q.autoScroll&&(ee=!0),ue(e.pageX,e.pageY,s))}else G&&e&&u&&xa(e)},ue=function setPointerPosition(e,t,n){var o,r,i,a,l,s,c=1-Q.dragResistance,d=1-Q.edgeResistance,p=Q.pointerX,u=Q.pointerY,h=T,f=Q.x,g=Q.y,x=Q.endX,v=Q.endY,m=Q.endRotation,y=k;Q.pointerX=e,Q.pointerY=t,se&&(e-=Ca(ce),t-=Ba(ce)),z?(a=Math.atan2(C.y-t,e-C.x)*ke,180<(l=Q.y-a)?(T-=360,Q.y=a):l<-180&&(T+=360,Q.y=a),i=Q.x!==M||Math.abs(T-a)>j?(Q.y=a,M+(T-a)*c):M):(B&&(s=e*B.a+t*B.c+B.e,t=e*B.b+t*B.d+B.f,e=s),(r=t-b)<j&&-j<r&&(r=0),(o=e-w)<j&&-j<o&&(o=0),(Q.lockAxis||Q.lockedAxis)&&(o||r)&&((s=Q.lockedAxis)||(Q.lockedAxis=s=K&&Math.abs(o)>Math.abs(r)?"y":U?"x":null,s&&V(Q.vars.onLockAxis)&&Q.vars.onLockAxis.call(Q,Q.pointerEvent)),"y"===s?r=0:"x"===s&&(o=0)),i=_(M+o*c),a=_(T+r*c)),(N||P||R)&&(Q.x!==i||Q.y!==a&&!z)?(R&&(He.x=i,He.y=a,s=R(He),i=_(s.x),a=_(s.y)),N&&(i=_(N(i))),P&&(a=_(P(a)))):D&&(E<i?i=E+Math.round((i-E)*d):i<S&&(i=S+Math.round((i-S)*d)),z||(L<a?a=Math.round(L+(a-L)*d):a<Y&&(a=Math.round(Y+(a-Y)*d)))),Q.x===i&&(Q.y===a||z)||(z?(Q.endRotation=Q.x=Q.endX=i,k=!0):(U&&(Q.y=Q.endY=a,k=!0),K&&(Q.x=Q.endX=i,k=!0)),n&&!1===Ma(Q,"move","onMove")?(Q.pointerX=p,Q.pointerY=u,T=h,Q.x=f,Q.y=g,Q.endX=x,Q.endY=v,Q.endRotation=m,k=y):!Q.isDragging&&Q.isPressed&&(Q.isDragging=!0,Ma(Q,"dragstart","onDragStart")))},he=function onRelease(e,t){if(u&&Q.isPressed&&(!e||null==v||t||!(e.pointerId&&e.pointerId!==v&&e.target!==h||e.changedTouches&&!function _hasTouchID(e,t){for(var n=e.length;n--;)if(e[n].identifier===t)return!0}(e.changedTouches,v)))){Q.isPressed=!1;var n,o,r,i,a,l=e,s=Q.isDragging,c=Q.vars.allowContextMenu&&e&&(e.ctrlKey||2<e.which),d=ge.delayedCall(.001,Ah);if(y?(wa(y,"touchend",onRelease),wa(y,"touchmove",pe),wa(y,"touchcancel",onRelease),wa(ce,"touchstart",Aa)):wa(ce,"mousemove",pe),wa(xe,"touchforcechange",xa),Ye&&y||(wa(ce,"mouseup",onRelease),e&&e.target&&wa(e.target,"mouseup",onRelease)),k=!1,s&&($=Ae=Pe(),Q.isDragging=!1),m&&!c)return e&&(wa(e.target,"change",onRelease),Q.pointerEvent=l),Sa(Z,!1),Ma(Q,"release","onRelease"),Ma(Q,"click","onClick"),void(m=!1);for(ta(ph),o=Z.length;-1<--o;)Ia(Z[o],"cursor",p.cursor||(!1!==p.cursor?Le:null));if(De--,e){if((n=e.changedTouches)&&(e=n[0])!==x&&e.identifier!==v){for(o=n.length;-1<--o&&(e=n[o]).identifier!==v&&e.target!==h;);if(o<0)return}Q.pointerEvent=l,Q.pointerX=e.pageX,Q.pointerY=e.pageY}return c&&l?(xa(l),G=!0,Ma(Q,"release","onRelease")):l&&!s?(G=!1,O&&(p.snap||p.bounds)&&wh(p.inertia||p.throwProps),Ma(Q,"release","onRelease"),Xe&&"touchmove"===l.type||-1!==l.type.indexOf("cancel")||(Ma(Q,"click","onClick"),Pe()-ae<300&&Ma(Q,"doubleclick","onDoubleClick"),i=l.target||h,ae=Pe(),a=function syntheticClick(){ae===F||!Q.enabled()||Q.isPressed||l.defaultPrevented||(i.click?i.click():ce.createEvent&&((r=ce.createEvent("MouseEvents")).initMouseEvent("click",!0,!0,xe,1,Q.pointerEvent.screenX,Q.pointerEvent.screenY,Q.pointerX,Q.pointerY,!1,!1,!1,!1,0,null),i.dispatchEvent(r)))},Xe||l.defaultPrevented||ge.delayedCall(.05,a))):(wh(p.inertia||p.throwProps),Q.allowEventDefault||!l||!1===p.dragClickables&&ie.call(Q,l.target)||!s||A&&(!H||A!==H)||!1===l.cancelable?G=!1:(G=!0,xa(l)),Ma(Q,"release","onRelease")),de()&&d.duration(Q.tween.duration()),s&&Ma(Q,"dragend","onDragEnd"),!0}G&&e&&u&&xa(e)};return(t=Draggable.get(h))&&t.kill(),e.startDrag=function(e,t){var n,o,r,i;Bh(e||Q.pointerEvent,!0),t&&!Q.hitTest(e||Q.pointerEvent)&&(n=La(e||Q.pointerEvent),o=La(h),r=Hh({x:n.left+n.width/2,y:n.top+n.height/2}),i=Hh({x:o.left+o.width/2,y:o.top+o.height/2}),w-=r.x-i.x,b-=r.y-i.y),Q.isDragging||(Q.isDragging=!0,Ma(Q,"dragstart","onDragStart"))},e.drag=pe,e.endDrag=function(e){return he(e||Q.pointerEvent,!0)},e.timeSinceDrag=function(){return Q.isDragging?0:(Pe()-$)/1e3},e.timeSinceClick=function(){return(Pe()-ae)/1e3},e.hitTest=function(e,t){return Draggable.hitTest(Q.target,e,t)},e.getDirection=function(e,t){var n,o,r,i,a,l,s="velocity"===e&&Se?e:W(e)&&!z?"element":"start";return"element"===s&&(a=La(Q.target),l=La(e)),n="start"===s?Q.x-M:"velocity"===s?Se.getVelocity(h,d):a.left+a.width/2-(l.left+l.width/2),z?n<0?"counter-clockwise":"clockwise":(t=t||2,o="start"===s?Q.y-T:"velocity"===s?Se.getVelocity(h,J):a.top+a.height/2-(l.top+l.height/2),i=(r=Math.abs(n/o))<1/t?"":n<0?"left":"right",r<t&&(""!==i&&(i+="-"),i+=o<0?"up":"down"),i)},e.applyBounds=function(e,t){var n,o,r,i,a,l;if(e&&p.bounds!==e)return p.bounds=e,Q.update(!0,t);
13956if(qh(!0),th(),D&&!de()){if(n=Q.x,o=Q.y,E<n?n=E:n<S&&(n=S),L<o?o=L:o<Y&&(o=Y),(Q.x!==n||Q.y!==o)&&(r=!0,Q.x=Q.endX=n,z?Q.endRotation=n:Q.y=Q.endY=o,ph(k=!0),Q.autoScroll&&!Q.isDragging))for(Ha(h.parentNode),i=h,Ie.scrollTop=null!=xe.pageYOffset?xe.pageYOffset:null!=ce.documentElement.scrollTop?ce.documentElement.scrollTop:ce.body.scrollTop,Ie.scrollLeft=null!=xe.pageXOffset?xe.pageXOffset:null!=ce.documentElement.scrollLeft?ce.documentElement.scrollLeft:ce.body.scrollLeft;i&&!l;)a=(l=Fe(i.parentNode))?Ie:i.parentNode,U&&a.scrollTop>a._gsMaxScrollY&&(a.scrollTop=a._gsMaxScrollY),K&&a.scrollLeft>a._gsMaxScrollX&&(a.scrollLeft=a._gsMaxScrollX),i=a;Q.isThrowing&&(r||Q.endX>E||Q.endX<S||Q.endY>L||Q.endY<Y)&&wh(p.inertia||p.throwProps,r)}return Q},e.update=function(e,t,n){var o=Q.x,r=Q.y;return xh(!t),e?Q.applyBounds():(k&&n&&ph(!0),qh(!0)),t&&(ue(Q.pointerX,Q.pointerY),k&&ph(!0)),Q.isPressed&&!t&&(K&&.01<Math.abs(o-Q.x)||U&&.01<Math.abs(r-Q.y)&&!z)&&yh(),Q.autoScroll&&(Ha(h.parentNode,Q.isDragging),ee=Q.isDragging,ph(!0),Ea(h,Fh),Da(h,Fh)),Q},e.enable=function(e){var t,n,o,r={lazy:!0};if(!1!==p.cursor&&(r.cursor=p.cursor||Le),ge.utils.checkPrefix("touchCallout")&&(r.touchCallout="none"),"soft"!==e){for(pa(Z,K==U?"none":p.allowNativeTouchScrolling&&h.scrollHeight===h.clientHeight==(h.scrollWidth===h.clientHeight)||p.allowEventDefault?"manipulation":K?"pan-y":"pan-x"),n=Z.length;-1<--n;)o=Z[n],Ye||va(o,"mousedown",Bh),va(o,"touchstart",Bh),va(o,"click",Gh,!0),ge.set(o,r),o.getBBox&&o.ownerSVGElement&&ge.set(o.ownerSVGElement,{touchAction:K==U?"none":p.allowNativeTouchScrolling||p.allowEventDefault?"manipulation":K?"pan-y":"pan-x"}),p.allowContextMenu||va(o,"contextmenu",oh);Sa(Z,!1)}return Da(h,Fh),u=!0,Se&&"soft"!==e&&Se.track(f||h,q?"x,y":z?"rotation":"top,left"),h._gsDragID=t="d"+Oe++,Be[t]=Q,f&&(f.enable(),f.element._gsDragID=t),(p.bounds||z)&&yh(),p.bounds&&Q.applyBounds(),Q},e.disable=function(e){for(var t,n=Q.isDragging,o=Z.length;-1<--o;)Ia(Z[o],"cursor",null);if("soft"!==e){for(pa(Z,null),o=Z.length;-1<--o;)t=Z[o],Ia(t,"touchCallout",null),wa(t,"mousedown",Bh),wa(t,"touchstart",Bh),wa(t,"click",Gh),wa(t,"contextmenu",oh);Sa(Z,!0),y&&(wa(y,"touchcancel",he),wa(y,"touchend",he),wa(y,"touchmove",pe)),wa(ce,"mouseup",he),wa(ce,"mousemove",pe)}return Ea(h,Fh),u=!1,Se&&"soft"!==e&&Se.untrack(f||h,q?"x,y":z?"rotation":"top,left"),f&&f.disable(),ta(ph),Q.isDragging=Q.isPressed=m=!1,n&&Ma(Q,"dragend","onDragEnd"),Q},e.enabled=function(e,t){return arguments.length?e?Q.enable(t):Q.disable(t):u},e.kill=function(){return Q.isThrowing=!1,Q.tween&&Q.tween.kill(),Q.disable(),ge.set(Z,{clearProps:"userSelect"}),delete Be[h._gsDragID],Q},~n.indexOf("scroll")&&(f=e.scrollProxy=new Wa(h,function _extend(e,t){for(var n in t)n in e||(e[n]=t[n]);return e}({onKill:function onKill(){Q.isPressed&&he(null)}},p)),h.style.overflowY=U&&!Me?"auto":"hidden",h.style.overflowX=K&&!Me?"auto":"hidden",h=f.content),z?o.rotation=1:(K&&(o[d]=1),U&&(o[J]=1)),le.force3D=!("force3D"in p)||p.force3D,e.enable(),e}!function _setDefaults(e,t){for(var n in t)n in e||(e[n]=t[n])}(I.prototype,{pointerX:0,pointerY:0,startX:0,startY:0,deltaX:0,deltaY:0,isDragging:!1,isPressed:!1}),I.zIndex=1e3,I.version="3.7.0",U()&&ge.registerPlugin(I),e.Draggable=I,e.default=I;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
13957
13958
13959/*SIGUIENTE LIBRERIA*/
13960(function (global, factory) {
13961	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
13962	typeof define === 'function' && define.amd ? define(['exports'], factory) :
13963	(global = global || self, factory(global.window = global.window || {}));
13964}(this, (function (exports) { 'use strict';
13965
13966	/*!
13967	 * EaselPlugin 3.7.0
13968	 * https://greensock.com
13969	 *
13970	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
13971	 * Subject to the terms at https://greensock.com/standard-license or for
13972	 * Club GreenSock members, the agreement issued with that membership.
13973	 * @author: Jack Doyle, [email protected]
13974	*/
13975	var gsap,
13976	    _coreInitted,
13977	    _win,
13978	    _createJS,
13979	    _ColorFilter,
13980	    _ColorMatrixFilter,
13981	    _colorProps = "redMultiplier,greenMultiplier,blueMultiplier,alphaMultiplier,redOffset,greenOffset,blueOffset,alphaOffset".split(","),
13982	    _windowExists = function _windowExists() {
13983	  return typeof window !== "undefined";
13984	},
13985	    _getGSAP = function _getGSAP() {
13986	  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;
13987	},
13988	    _getCreateJS = function _getCreateJS() {
13989	  return _createJS || _win && _win.createjs || _win || {};
13990	},
13991	    _warn = function _warn(message) {
13992	  return console.warn(message);
13993	},
13994	    _cache = function _cache(target) {
13995	  var b = target.getBounds && target.getBounds();
13996
13997	  if (!b) {
13998	    b = target.nominalBounds || {
13999	      x: 0,
14000	      y: 0,
14001	      width: 100,
14002	      height: 100
14003	    };
14004	    target.setBounds && target.setBounds(b.x, b.y, b.width, b.height);
14005	  }
14006
14007	  target.cache && target.cache(b.x, b.y, b.width, b.height);
14008
14009	  _warn("EaselPlugin: for filters to display in EaselJS, you must call the object's cache() method first. GSAP attempted to use the target's getBounds() for the cache but that may not be completely accurate. " + target);
14010	},
14011	    _parseColorFilter = function _parseColorFilter(target, v, plugin) {
14012	  if (!_ColorFilter) {
14013	    _ColorFilter = _getCreateJS().ColorFilter;
14014
14015	    if (!_ColorFilter) {
14016	      _warn("EaselPlugin error: The EaselJS ColorFilter JavaScript file wasn't loaded.");
14017	    }
14018	  }
14019
14020	  var filters = target.filters || [],
14021	      i = filters.length,
14022	      c,
14023	      s,
14024	      e,
14025	      a,
14026	      p,
14027	      pt;
14028
14029	  while (i--) {
14030	    if (filters[i] instanceof _ColorFilter) {
14031	      s = filters[i];
14032	      break;
14033	    }
14034	  }
14035
14036	  if (!s) {
14037	    s = new _ColorFilter();
14038	    filters.push(s);
14039	    target.filters = filters;
14040	  }
14041
14042	  e = s.clone();
14043
14044	  if (v.tint != null) {
14045	    c = gsap.utils.splitColor(v.tint);
14046	    a = v.tintAmount != null ? +v.tintAmount : 1;
14047	    e.redOffset = +c[0] * a;
14048	    e.greenOffset = +c[1] * a;
14049	    e.blueOffset = +c[2] * a;
14050	    e.redMultiplier = e.greenMultiplier = e.blueMultiplier = 1 - a;
14051	  } else {
14052	    for (p in v) {
14053	      if (p !== "exposure") if (p !== "brightness") {
14054	        e[p] = +v[p];
14055	      }
14056	    }
14057	  }
14058
14059	  if (v.exposure != null) {
14060	    e.redOffset = e.greenOffset = e.blueOffset = 255 * (+v.exposure - 1);
14061	    e.redMultiplier = e.greenMultiplier = e.blueMultiplier = 1;
14062	  } else if (v.brightness != null) {
14063	    a = +v.brightness - 1;
14064	    e.redOffset = e.greenOffset = e.blueOffset = a > 0 ? a * 255 : 0;
14065	    e.redMultiplier = e.greenMultiplier = e.blueMultiplier = 1 - Math.abs(a);
14066	  }
14067
14068	  i = 8;
14069
14070	  while (i--) {
14071	    p = _colorProps[i];
14072
14073	    if (s[p] !== e[p]) {
14074	      pt = plugin.add(s, p, s[p], e[p]);
14075
14076	      if (pt) {
vendor: 5,211 bytes, lines 14077-14273
14077	        pt.op = "easel_colorFilter";
14078	      }
14079	    }
14080	  }
14081
14082	  plugin._props.push("easel_colorFilter");
14083
14084	  if (!target.cacheID) {
14085	    _cache(target);
14086	  }
14087	},
14088	    _idMatrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
14089	    _lumR = 0.212671,
14090	    _lumG = 0.715160,
14091	    _lumB = 0.072169,
14092	    _applyMatrix = function _applyMatrix(m, m2) {
14093	  if (!(m instanceof Array) || !(m2 instanceof Array)) {
14094	    return m2;
14095	  }
14096
14097	  var temp = [],
14098	      i = 0,
14099	      z = 0,
14100	      y,
14101	      x;
14102
14103	  for (y = 0; y < 4; y++) {
14104	    for (x = 0; x < 5; x++) {
14105	      z = x === 4 ? m[i + 4] : 0;
14106	      temp[i + x] = m[i] * m2[x] + m[i + 1] * m2[x + 5] + m[i + 2] * m2[x + 10] + m[i + 3] * m2[x + 15] + z;
14107	    }
14108
14109	    i += 5;
14110	  }
14111
14112	  return temp;
14113	},
14114	    _setSaturation = function _setSaturation(m, n) {
14115	  if (isNaN(n)) {
14116	    return m;
14117	  }
14118
14119	  var inv = 1 - n,
14120	      r = inv * _lumR,
14121	      g = inv * _lumG,
14122	      b = inv * _lumB;
14123	  return _applyMatrix([r + n, g, b, 0, 0, r, g + n, b, 0, 0, r, g, b + n, 0, 0, 0, 0, 0, 1, 0], m);
14124	},
14125	    _colorize = function _colorize(m, color, amount) {
14126	  if (isNaN(amount)) {
14127	    amount = 1;
14128	  }
14129
14130	  var c = gsap.utils.splitColor(color),
14131	      r = c[0] / 255,
14132	      g = c[1] / 255,
14133	      b = c[2] / 255,
14134	      inv = 1 - amount;
14135	  return _applyMatrix([inv + amount * r * _lumR, amount * r * _lumG, amount * r * _lumB, 0, 0, amount * g * _lumR, inv + amount * g * _lumG, amount * g * _lumB, 0, 0, amount * b * _lumR, amount * b * _lumG, inv + amount * b * _lumB, 0, 0, 0, 0, 0, 1, 0], m);
14136	},
14137	    _setHue = function _setHue(m, n) {
14138	  if (isNaN(n)) {
14139	    return m;
14140	  }
14141
14142	  n *= Math.PI / 180;
14143	  var c = Math.cos(n),
14144	      s = Math.sin(n);
14145	  return _applyMatrix([_lumR + c * (1 - _lumR) + s * -_lumR, _lumG + c * -_lumG + s * -_lumG, _lumB + c * -_lumB + s * (1 - _lumB), 0, 0, _lumR + c * -_lumR + s * 0.143, _lumG + c * (1 - _lumG) + s * 0.14, _lumB + c * -_lumB + s * -0.283, 0, 0, _lumR + c * -_lumR + s * -(1 - _lumR), _lumG + c * -_lumG + s * _lumG, _lumB + c * (1 - _lumB) + s * _lumB, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], m);
14146	},
14147	    _setContrast = function _setContrast(m, n) {
14148	  if (isNaN(n)) {
14149	    return m;
14150	  }
14151
14152	  n += 0.01;
14153	  return _applyMatrix([n, 0, 0, 0, 128 * (1 - n), 0, n, 0, 0, 128 * (1 - n), 0, 0, n, 0, 128 * (1 - n), 0, 0, 0, 1, 0], m);
14154	},
14155	    _parseColorMatrixFilter = function _parseColorMatrixFilter(target, v, plugin) {
14156	  if (!_ColorMatrixFilter) {
14157	    _ColorMatrixFilter = _getCreateJS().ColorMatrixFilter;
14158
14159	    if (!_ColorMatrixFilter) {
14160	      _warn("EaselPlugin: The EaselJS ColorMatrixFilter JavaScript file wasn't loaded.");
14161	    }
14162	  }
14163
14164	  var filters = target.filters || [],
14165	      i = filters.length,
14166	      matrix,
14167	      startMatrix,
14168	      s,
14169	      pg;
14170
14171	  while (--i > -1) {
14172	    if (filters[i] instanceof _ColorMatrixFilter) {
14173	      s = filters[i];
14174	      break;
14175	    }
14176	  }
14177
14178	  if (!s) {
14179	    s = new _ColorMatrixFilter(_idMatrix.slice());
14180	    filters.push(s);
14181	    target.filters = filters;
14182	  }
14183
14184	  startMatrix = s.matrix;
14185	  matrix = _idMatrix.slice();
14186
14187	  if (v.colorize != null) {
14188	    matrix = _colorize(matrix, v.colorize, Number(v.colorizeAmount));
14189	  }
14190
14191	  if (v.contrast != null) {
14192	    matrix = _setContrast(matrix, Number(v.contrast));
14193	  }
14194
14195	  if (v.hue != null) {
14196	    matrix = _setHue(matrix, Number(v.hue));
14197	  }
14198
14199	  if (v.saturation != null) {
14200	    matrix = _setSaturation(matrix, Number(v.saturation));
14201	  }
14202
14203	  i = matrix.length;
14204
14205	  while (--i > -1) {
14206	    if (matrix[i] !== startMatrix[i]) {
14207	      pg = plugin.add(startMatrix, i, startMatrix[i], matrix[i]);
14208
14209	      if (pg) {
14210	        pg.op = "easel_colorMatrixFilter";
14211	      }
14212	    }
14213	  }
14214
14215	  plugin._props.push("easel_colorMatrixFilter");
14216
14217	  if (!target.cacheID) {
14218	    _cache();
14219	  }
14220
14221	  plugin._matrix = startMatrix;
14222	},
14223	    _initCore = function _initCore(core) {
14224	  gsap = core || _getGSAP();
14225
14226	  if (_windowExists()) {
14227	    _win = window;
14228	  }
14229
14230	  if (gsap) {
14231	    _coreInitted = 1;
14232	  }
14233	};
14234
14235	var EaselPlugin = {
14236	  version: "3.7.0",
14237	  name: "easel",
14238	  init: function init(target, value, tween, index, targets) {
14239	    if (!_coreInitted) {
14240	      _initCore();
14241
14242	      if (!gsap) {
14243	        _warn("Please gsap.registerPlugin(EaselPlugin)");
14244	      }
14245	    }
14246
14247	    this.target = target;
14248	    var p, pt, tint, colorMatrix, end, labels, i;
14249
14250	    for (p in value) {
14251	      end = value[p];
14252
14253	      if (p === "colorFilter" || p === "tint" || p === "tintAmount" || p === "exposure" || p === "brightness") {
14254	        if (!tint) {
14255	          _parseColorFilter(target, value.colorFilter || value, this);
14256
14257	          tint = true;
14258	        }
14259	      } else if (p === "saturation" || p === "contrast" || p === "hue" || p === "colorize" || p === "colorizeAmount") {
14260	        if (!colorMatrix) {
14261	          _parseColorMatrixFilter(target, value.colorMatrixFilter || value, this);
14262
14263	          colorMatrix = true;
14264	        }
14265	      } else if (p === "frame") {
14266	        if (typeof end === "string" && end.charAt(1) !== "=" && (labels = target.labels)) {
14267	          for (i = 0; i < labels.length; i++) {
14268	            if (labels[i].label === end) {
14269	              end = labels[i].position;
14270	            }
14271	          }
14272	        }
14273
vendor: 5,635 bytes, lines 14274-14322
14274	        pt = this.add(target, "gotoAndStop", target.currentFrame, end, index, targets, Math.round);
14275
14276	        if (pt) {
14277	          pt.op = p;
14278	        }
14279	      } else if (target[p] != null) {
14280	        this.add(target, p, "get", end);
14281	      }
14282	    }
14283	  },
14284	  render: function render(ratio, data) {
14285	    var pt = data._pt;
14286
14287	    while (pt) {
14288	      pt.r(ratio, pt.d);
14289	      pt = pt._next;
14290	    }
14291
14292	    if (data.target.cacheID) {
14293	      data.target.updateCache();
14294	    }
14295	  },
14296	  register: _initCore
14297	};
14298
14299	EaselPlugin.registerCreateJS = function (createjs) {
14300	  _createJS = createjs;
14301	};
14302
14303	_getGSAP() && gsap.registerPlugin(EaselPlugin);
14304
14305	exports.EaselPlugin = EaselPlugin;
14306	exports.default = EaselPlugin;
14307
14308	Object.defineProperty(exports, '__esModule', { value: true });
14309
14310})));
14311
14312/*SIGUIENTE LIBRERIA*/
14313/*!
14314 * EaselPlugin 3.7.0
14315 * https://greensock.com
14316 * 
14317 * @license Copyright 2021, GreenSock. All rights reserved.
14318 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
14319 * @author: Jack Doyle, [email protected]
14320 */
14321
14322!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function k(){return"undefined"!=typeof window}function l(){return h||k()&&(h=window.gsap)&&h.registerPlugin&&h}function m(){return r||t&&t.createjs||t||{}}function n(e){return console.warn(e)}function o(e){var t=e.getBounds&&e.getBounds();t||(t=e.nominalBounds||{x:0,y:0,width:100,height:100},e.setBounds&&e.setBounds(t.x,t.y,t.width,t.height)),e.cache&&e.cache(t.x,t.y,t.width,t.height),n("EaselPlugin: for filters to display in EaselJS, you must call the object's cache() method first. GSAP attempted to use the target's getBounds() for the cache but that may not be completely accurate. "+e)}function p(e,t,r){(b=b||m().ColorFilter)||n("EaselPlugin error: The EaselJS ColorFilter JavaScript file wasn't loaded.");for(var i,l,s,u,a,f,c=e.filters||[],d=c.length;d--;)if(c[d]instanceof b){l=c[d];break}if(l||(l=new b,c.push(l),e.filters=c),s=l.clone(),null!=t.tint)i=h.utils.splitColor(t.tint),u=null!=t.tintAmount?+t.tintAmount:1,s.redOffset=i[0]*u,s.greenOffset=i[1]*u,s.blueOffset=i[2]*u,s.redMultiplier=s.greenMultiplier=s.blueMultiplier=1-u;else for(a in t)"exposure"!==a&&"brightness"!==a&&(s[a]=+t[a]);for(null!=t.exposure?(s.redOffset=s.greenOffset=s.blueOffset=255*(t.exposure-1),s.redMultiplier=s.greenMultiplier=s.blueMultiplier=1):null!=t.brightness&&(u=t.brightness-1,s.redOffset=s.greenOffset=s.blueOffset=0<u?255*u:0,s.redMultiplier=s.greenMultiplier=s.blueMultiplier=1-Math.abs(u)),d=8;d--;)l[a=M[d]]!==s[a]&&(f=r.add(l,a,l[a],s[a]))&&(f.op="easel_colorFilter");r._props.push("easel_colorFilter"),e.cacheID||o(e)}function u(e,t){if(!(e instanceof Array&&t instanceof Array))return t;var r,i,n=[],l=0,o=0;for(r=0;r<4;r++){for(i=0;i<5;i++)o=4===i?e[l+4]:0,n[l+i]=e[l]*t[i]+e[l+1]*t[i+5]+e[l+2]*t[i+10]+e[l+3]*t[i+15]+o;l+=5}return n}function z(e,t,r){(d=d||m().ColorMatrixFilter)||n("EaselPlugin: The EaselJS ColorMatrixFilter JavaScript file wasn't loaded.");for(var i,l,s,a,f=e.filters||[],c=f.length;-1<--c;)if(f[c]instanceof d){s=f[c];break}for(s||(s=new d(w.slice()),f.push(s),e.filters=f),l=s.matrix,i=w.slice(),null!=t.colorize&&(i=function _colorize(e,t,r){isNaN(r)&&(r=1);var i=h.utils.splitColor(t),n=i[0]/255,l=i[1]/255,o=i[2]/255,s=1-r;return u([s+r*n*x,r*n*y,r*n*_,0,0,r*l*x,s+r*l*y,r*l*_,0,0,r*o*x,r*o*y,s+r*o*_,0,0,0,0,0,1,0],e)}(i,t.colorize,Number(t.colorizeAmount))),null!=t.contrast&&(i=function _setContrast(e,t){return isNaN(t)?e:u([t+=.01,0,0,0,128*(1-t),0,t,0,0,128*(1-t),0,0,t,0,128*(1-t),0,0,0,1,0],e)}(i,Number(t.contrast))),null!=t.hue&&(i=function _setHue(e,t){if(isNaN(t))return e;t*=Math.PI/180;var r=Math.cos(t),i=Math.sin(t);return u([x+r*(1-x)+i*-x,y+r*-y+i*-y,_+r*-_+i*(1-_),0,0,x+r*-x+.143*i,y+r*(1-y)+.14*i,_+r*-_+-.283*i,0,0,x+r*-x+i*-(1-x),y+r*-y+i*y,_+r*(1-_)+i*_,0,0,0,0,0,1,0,0,0,0,0,1],e)}(i,Number(t.hue))),null!=t.saturation&&(i=function _setSaturation(e,t){if(isNaN(t))return e;var r=1-t,i=r*x,n=r*y,l=r*_;return u([i+t,n,l,0,0,i,n+t,l,0,0,i,n,l+t,0,0,0,0,0,1,0],e)}(i,Number(t.saturation))),c=i.length;-1<--c;)i[c]!==l[c]&&(a=r.add(l,c,l[c],i[c]))&&(a.op="easel_colorMatrixFilter");r._props.push("easel_colorMatrixFilter"),e.cacheID||o(),r._matrix=l}function A(e){h=e||l(),k()&&(t=window),h&&(g=1)}var h,g,t,r,b,d,M="redMultiplier,greenMultiplier,blueMultiplier,alphaMultiplier,redOffset,greenOffset,blueOffset,alphaOffset".split(","),w=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],x=.212671,y=.71516,_=.072169,i={version:"3.7.0",name:"easel",init:function init(e,t,r,i,l){var o,s,u,a,f,c,d;for(o in g||(A(),h||n("Please gsap.registerPlugin(EaselPlugin)")),this.target=e,t)if(f=t[o],"colorFilter"===o||"tint"===o||"tintAmount"===o||"exposure"===o||"brightness"===o)u||(p(e,t.colorFilter||t,this),u=!0);else if("saturation"===o||"contrast"===o||"hue"===o||"colorize"===o||"colorizeAmount"===o)a||(z(e,t.colorMatrixFilter||t,this),a=!0);else if("frame"===o){if("string"==typeof f&&"="!==f.charAt(1)&&(c=e.labels))for(d=0;d<c.length;d++)c[d].label===f&&(f=c[d].position);(s=this.add(e,"gotoAndStop",e.currentFrame,f,i,l,Math.round))&&(s.op=o)}else null!=e[o]&&this.add(e,o,"get",f)},render:function render(e,t){for(var r=t._pt;r;)r.r(e,r.d),r=r._next;t.target.cacheID&&t.target.updateCache()},register:A,registerCreateJS:function(e){r=e}};l()&&h.registerPlugin(i),e.EaselPlugin=i,e.default=i;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esMo
vendor: 4,895 bytes, lines 14322-14512
14322dule",{value:!0})} else {delete e.default}});
14323
14324
14325/*SIGUIENTE LIBRERIA*/
14326(function (global, factory) {
14327	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
14328	typeof define === 'function' && define.amd ? define(['exports'], factory) :
14329	(global = global || self, factory(global.window = global.window || {}));
14330}(this, (function (exports) { 'use strict';
14331
14332	/*!
14333	 * EasePack 3.7.0
14334	 * https://greensock.com
14335	 *
14336	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
14337	 * Subject to the terms at https://greensock.com/standard-license or for
14338	 * Club GreenSock members, the agreement issued with that membership.
14339	 * @author: Jack Doyle, [email protected]
14340	*/
14341	var gsap,
14342	    _registerEase,
14343	    _getGSAP = function _getGSAP() {
14344	  return gsap || typeof window !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap;
14345	},
14346	    _boolean = function _boolean(value, defaultValue) {
14347	  return !!(typeof value === "undefined" ? defaultValue : value && !~(value + "").indexOf("false"));
14348	},
14349	    _initCore = function _initCore(core) {
14350	  gsap = core || _getGSAP();
14351
14352	  if (gsap) {
14353	    _registerEase = gsap.registerEase;
14354
14355	    var eases = gsap.parseEase(),
14356	        createConfig = function createConfig(ease) {
14357	      return function (ratio) {
14358	        var y = 0.5 + ratio / 2;
14359
14360	        ease.config = function (p) {
14361	          return ease(2 * (1 - p) * p * y + p * p);
14362	        };
14363	      };
14364	    },
14365	        p;
14366
14367	    for (p in eases) {
14368	      if (!eases[p].config) {
14369	        createConfig(eases[p]);
14370	      }
14371	    }
14372
14373	    _registerEase("slow", SlowMo);
14374
14375	    _registerEase("expoScale", ExpoScaleEase);
14376
14377	    _registerEase("rough", RoughEase);
14378
14379	    for (p in EasePack) {
14380	      p !== "version" && gsap.core.globals(p, EasePack[p]);
14381	    }
14382	  }
14383	},
14384	    _createSlowMo = function _createSlowMo(linearRatio, power, yoyoMode) {
14385	  linearRatio = Math.min(1, linearRatio || 0.7);
14386
14387	  var pow = linearRatio < 1 ? power || power === 0 ? power : 0.7 : 0,
14388	      p1 = (1 - linearRatio) / 2,
14389	      p3 = p1 + linearRatio,
14390	      calcEnd = _boolean(yoyoMode);
14391
14392	  return function (p) {
14393	    var r = p + (0.5 - p) * pow;
14394	    return p < p1 ? calcEnd ? 1 - (p = 1 - p / p1) * p : r - (p = 1 - p / p1) * p * p * p * r : p > p3 ? calcEnd ? p === 1 ? 0 : 1 - (p = (p - p3) / p1) * p : r + (p - r) * (p = (p - p3) / p1) * p * p * p : calcEnd ? 1 : r;
14395	  };
14396	},
14397	    _createExpoScale = function _createExpoScale(start, end, ease) {
14398	  var p1 = Math.log(end / start),
14399	      p2 = end - start;
14400	  ease && (ease = gsap.parseEase(ease));
14401	  return function (p) {
14402	    return (start * Math.exp(p1 * (ease ? ease(p) : p)) - start) / p2;
14403	  };
14404	},
14405	    EasePoint = function EasePoint(time, value, next) {
14406	  this.t = time;
14407	  this.v = value;
14408
14409	  if (next) {
14410	    this.next = next;
14411	    next.prev = this;
14412	    this.c = next.v - value;
14413	    this.gap = next.t - time;
14414	  }
14415	},
14416	    _createRoughEase = function _createRoughEase(vars) {
14417	  if (typeof vars !== "object") {
14418	    vars = {
14419	      points: +vars || 20
14420	    };
14421	  }
14422
14423	  var taper = vars.taper || "none",
14424	      a = [],
14425	      cnt = 0,
14426	      points = (+vars.points || 20) | 0,
14427	      i = points,
14428	      randomize = _boolean(vars.randomize, true),
14429	      clamp = _boolean(vars.clamp),
14430	      template = gsap ? gsap.parseEase(vars.template) : 0,
14431	      strength = (+vars.strength || 1) * 0.4,
14432	      x,
14433	      y,
14434	      bump,
14435	      invX,
14436	      obj,
14437	      pnt,
14438	      recent;
14439
14440	  while (--i > -1) {
14441	    x = randomize ? Math.random() : 1 / points * i;
14442	    y = template ? template(x) : x;
14443
14444	    if (taper === "none") {
14445	      bump = strength;
14446	    } else if (taper === "out") {
14447	      invX = 1 - x;
14448	      bump = invX * invX * strength;
14449	    } else if (taper === "in") {
14450	      bump = x * x * strength;
14451	    } else if (x < 0.5) {
14452	      invX = x * 2;
14453	      bump = invX * invX * 0.5 * strength;
14454	    } else {
14455	      invX = (1 - x) * 2;
14456	      bump = invX * invX * 0.5 * strength;
14457	    }
14458
14459	    if (randomize) {
14460	      y += Math.random() * bump - bump * 0.5;
14461	    } else if (i % 2) {
14462	      y += bump * 0.5;
14463	    } else {
14464	      y -= bump * 0.5;
14465	    }
14466
14467	    if (clamp) {
14468	      if (y > 1) {
14469	        y = 1;
14470	      } else if (y < 0) {
14471	        y = 0;
14472	      }
14473	    }
14474
14475	    a[cnt++] = {
14476	      x: x,
14477	      y: y
14478	    };
14479	  }
14480
14481	  a.sort(function (a, b) {
14482	    return a.x - b.x;
14483	  });
14484	  pnt = new EasePoint(1, 1, null);
14485	  i = points;
14486
14487	  while (i--) {
14488	    obj = a[i];
14489	    pnt = new EasePoint(obj.x, obj.y, pnt);
14490	  }
14491
14492	  recent = new EasePoint(0, 0, pnt.t ? pnt : pnt.next);
14493	  return function (p) {
14494	    var pnt = recent;
14495
14496	    if (p > pnt.t) {
14497	      while (pnt.next && p >= pnt.t) {
14498	        pnt = pnt.next;
14499	      }
14500
14501	      pnt = pnt.prev;
14502	    } else {
14503	      while (pnt.prev && p <= pnt.t) {
14504	        pnt = pnt.prev;
14505	      }
14506	    }
14507
14508	    recent = pnt;
14509	    return pnt.v + (p - pnt.t) / pnt.gap * pnt.c;
14510	  };
14511	};
14512
vendor: 6,155 bytes, lines 14513-14649
14513	var SlowMo = _createSlowMo(0.7);
14514	SlowMo.ease = SlowMo;
14515	SlowMo.config = _createSlowMo;
14516	var ExpoScaleEase = _createExpoScale(1, 2);
14517	ExpoScaleEase.config = _createExpoScale;
14518	var RoughEase = _createRoughEase();
14519	RoughEase.ease = RoughEase;
14520	RoughEase.config = _createRoughEase;
14521	var EasePack = {
14522	  SlowMo: SlowMo,
14523	  RoughEase: RoughEase,
14524	  ExpoScaleEase: ExpoScaleEase
14525	};
14526
14527	for (var p in EasePack) {
14528	  EasePack[p].register = _initCore;
14529	  EasePack[p].version = "3.7.0";
14530	}
14531
14532	_getGSAP() && gsap.registerPlugin(SlowMo);
14533
14534	exports.EasePack = EasePack;
14535	exports.ExpoScaleEase = ExpoScaleEase;
14536	exports.RoughEase = RoughEase;
14537	exports.SlowMo = SlowMo;
14538	exports.default = EasePack;
14539
14540	Object.defineProperty(exports, '__esModule', { value: true });
14541
14542})));
14543
14544/*SIGUIENTE LIBRERIA*/
14545/*!
14546 * EasePack 3.7.0
14547 * https://greensock.com
14548 * 
14549 * @license Copyright 2021, GreenSock. All rights reserved.
14550 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
14551 * @author: Jack Doyle, [email protected]
14552 */
14553
14554!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).window=e.window||{})}(this,function(e){"use strict";function f(){return w||"undefined"!=typeof window&&(w=window.gsap)&&w.registerPlugin&&w}function g(e,n){return!!(void 0===e?n:e&&!~(e+"").indexOf("false"))}function h(e){if(w=e||f()){r=w.registerEase;var n,t=w.parseEase(),o=function createConfig(t){return function(e){var n=.5+e/2;t.config=function(e){return t(2*(1-e)*e*n+e*e)}}};for(n in t)t[n].config||o(t[n]);for(n in r("slow",a),r("expoScale",s),r("rough",u),c)"version"!==n&&w.core.globals(n,c[n])}}function i(e,n,t){var o=(e=Math.min(1,e||.7))<1?n||0===n?n:.7:0,r=(1-e)/2,i=r+e,a=g(t);return function(e){var n=e+(.5-e)*o;return e<r?a?1-(e=1-e/r)*e:n-(e=1-e/r)*e*e*e*n:i<e?a?1===e?0:1-(e=(e-i)/r)*e:n+(e-n)*(e=(e-i)/r)*e*e*e:a?1:n}}function j(n,e,t){var o=Math.log(e/n),r=e-n;return t=t&&w.parseEase(t),function(e){return(n*Math.exp(o*(t?t(e):e))-n)/r}}function k(e,n,t){this.t=e,this.v=n,t&&(((this.next=t).prev=this).c=t.v-n,this.gap=t.t-e)}function l(e){"object"!=typeof e&&(e={points:+e||20});for(var n,t,o,r,i,a,f,s=e.taper||"none",u=[],c=0,p=0|(+e.points||20),l=p,v=g(e.randomize,!0),d=g(e.clamp),h=w?w.parseEase(e.template):0,x=.4*(+e.strength||1);-1<--l;)n=v?Math.random():1/p*l,t=h?h(n):n,o="none"===s?x:"out"===s?(r=1-n)*r*x:"in"===s?n*n*x:n<.5?(r=2*n)*r*.5*x:(r=2*(1-n))*r*.5*x,v?t+=Math.random()*o-.5*o:l%2?t+=.5*o:t-=.5*o,d&&(1<t?t=1:t<0&&(t=0)),u[c++]={x:n,y:t};for(u.sort(function(e,n){return e.x-n.x}),a=new k(1,1,null),l=p;l--;)i=u[l],a=new k(i.x,i.y,a);return f=new k(0,0,a.t?a:a.next),function(e){var n=f;if(e>n.t){for(;n.next&&e>=n.t;)n=n.next;n=n.prev}else for(;n.prev&&e<=n.t;)n=n.prev;return(f=n).v+(e-n.t)/n.gap*n.c}}var w,r,a=i(.7);(a.ease=a).config=i;var s=j(1,2);s.config=j;var u=l();(u.ease=u).config=l;var c={SlowMo:a,RoughEase:u,ExpoScaleEase:s};for(var n in c)c[n].register=h,c[n].version="3.7.0";f()&&w.registerPlugin(a),e.EasePack=c,e.ExpoScaleEase=s,e.RoughEase=u,e.SlowMo=a,e.default=c;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
14555
14556
14557/*SIGUIENTE LIBRERIA*/
14558(function (global, factory) {
14559  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
14560  typeof define === 'function' && define.amd ? define(['exports'], factory) :
14561  (global = global || self, factory(global.window = global.window || {}));
14562}(this, (function (exports) { 'use strict';
14563
14564  function _inheritsLoose(subClass, superClass) {
14565    subClass.prototype = Object.create(superClass.prototype);
14566    subClass.prototype.constructor = subClass;
14567    subClass.__proto__ = superClass;
14568  }
14569
14570  function _assertThisInitialized(self) {
14571    if (self === void 0) {
14572      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
14573    }
14574
14575    return self;
14576  }
14577
14578  /*!
14579   * GSAP 3.7.0
14580   * https://greensock.com
14581   *
14582   * @license Copyright 2008-2021, GreenSock. All rights reserved.
14583   * Subject to the terms at https://greensock.com/standard-license or for
14584   * Club GreenSock members, the agreement issued with that membership.
14585   * @author: Jack Doyle, [email protected]
14586  */
14587  var _config = {
14588    autoSleep: 120,
14589    force3D: "auto",
14590    nullTargetWarn: 1,
14591    units: {
14592      lineHeight: ""
14593    }
14594  },
14595      _defaults = {
14596    duration: .5,
14597    overwrite: false,
14598    delay: 0
14599  },
14600      _suppressOverwrites,
14601      _bigNum = 1e8,
14602      _tinyNum = 1 / _bigNum,
14603      _2PI = Math.PI * 2,
14604      _HALF_PI = _2PI / 4,
14605      _gsID = 0,
14606      _sqrt = Math.sqrt,
14607      _cos = Math.cos,
14608      _sin = Math.sin,
14609      _isString = function _isString(value) {
14610    return typeof value === "string";
14611  },
14612      _isFunction = function _isFunction(value) {
14613    return typeof value === "function";
14614  },
14615      _isNumber = function _isNumber(value) {
14616    return typeof value === "number";
14617  },
14618      _isUndefined = function _isUndefined(value) {
14619    return typeof value === "undefined";
14620  },
14621      _isObject = function _isObject(value) {
14622    return typeof value === "object";
14623  },
14624      _isNotFalse = function _isNotFalse(value) {
14625    return value !== false;
14626  },
14627      _windowExists = function _windowExists() {
14628    return typeof window !== "undefined";
14629  },
14630      _isFuncOrString = function _isFuncOrString(value) {
14631    return _isFunction(value) || _isString(value);
14632  },
14633      _isTypedArray = typeof ArrayBuffer === "function" && ArrayBuffer.isView || function () {},
14634      _isArray = Array.isArray,
14635      _strictNumExp = /(?:-?\.?\d|\.)+/gi,
14636      _numExp = /[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,
14637      _numWithUnitExp = /[-+=.]*\d+[.e-]*\d*[a-z%]*/g,
14638      _complexStringNumExp = /[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,
14639      _relExp = /[+-]=-?[.\d]+/,
14640      _delimitedValueExp = /[^,'"\[\]\s]+/gi,
14641      _unitExp = /[\d.+\-=]+(?:e[-+]\d*)*/i,
14642      _globalTimeline,
14643      _win,
14644      _coreInitted,
14645      _doc,
14646      _globals = {},
14647      _installScope = {},
14648      _coreReady,
14649      _install = function _install(scope) {
vendor: 22,701 bytes, lines 14650-15327
14650    return (_installScope = _merge(scope, _globals)) && gsap;
14651  },
14652      _missingPlugin = function _missingPlugin(property, value) {
14653    return console.warn("Invalid property", property, "set to", value, "Missing plugin? gsap.registerPlugin()");
14654  },
14655      _warn = function _warn(message, suppress) {
14656    return !suppress && console.warn(message);
14657  },
14658      _addGlobal = function _addGlobal(name, obj) {
14659    return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;
14660  },
14661      _emptyFunc = function _emptyFunc() {
14662    return 0;
14663  },
14664      _reservedProps = {},
14665      _lazyTweens = [],
14666      _lazyLookup = {},
14667      _lastRenderedFrame,
14668      _plugins = {},
14669      _effects = {},
14670      _nextGCFrame = 30,
14671      _harnessPlugins = [],
14672      _callbackNames = "",
14673      _harness = function _harness(targets) {
14674    var target = targets[0],
14675        harnessPlugin,
14676        i;
14677    _isObject(target) || _isFunction(target) || (targets = [targets]);
14678
14679    if (!(harnessPlugin = (target._gsap || {}).harness)) {
14680      i = _harnessPlugins.length;
14681
14682      while (i-- && !_harnessPlugins[i].targetTest(target)) {}
14683
14684      harnessPlugin = _harnessPlugins[i];
14685    }
14686
14687    i = targets.length;
14688
14689    while (i--) {
14690      targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);
14691    }
14692
14693    return targets;
14694  },
14695      _getCache = function _getCache(target) {
14696    return target._gsap || _harness(toArray(target))[0]._gsap;
14697  },
14698      _getProperty = function _getProperty(target, property, v) {
14699    return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;
14700  },
14701      _forEachName = function _forEachName(names, func) {
14702    return (names = names.split(",")).forEach(func) || names;
14703  },
14704      _round = function _round(value) {
14705    return Math.round(value * 100000) / 100000 || 0;
14706  },
14707      _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {
14708    var l = toFind.length,
14709        i = 0;
14710
14711    for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}
14712
14713    return i < l;
14714  },
14715      _lazyRender = function _lazyRender() {
14716    var l = _lazyTweens.length,
14717        a = _lazyTweens.slice(0),
14718        i,
14719        tween;
14720
14721    _lazyLookup = {};
14722    _lazyTweens.length = 0;
14723
14724    for (i = 0; i < l; i++) {
14725      tween = a[i];
14726      tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);
14727    }
14728  },
14729      _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {
14730    _lazyTweens.length && _lazyRender();
14731    animation.render(time, suppressEvents, force);
14732    _lazyTweens.length && _lazyRender();
14733  },
14734      _numericIfPossible = function _numericIfPossible(value) {
14735    var n = parseFloat(value);
14736    return (n || n === 0) && (value + "").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;
14737  },
14738      _passThrough = function _passThrough(p) {
14739    return p;
14740  },
14741      _setDefaults = function _setDefaults(obj, defaults) {
14742    for (var p in defaults) {
14743      p in obj || (obj[p] = defaults[p]);
14744    }
14745
14746    return obj;
14747  },
14748      _setKeyframeDefaults = function _setKeyframeDefaults(obj, defaults) {
14749    for (var p in defaults) {
14750      p in obj || p === "duration" || p === "ease" || (obj[p] = defaults[p]);
14751    }
14752  },
14753      _merge = function _merge(base, toMerge) {
14754    for (var p in toMerge) {
14755      base[p] = toMerge[p];
14756    }
14757
14758    return base;
14759  },
14760      _mergeDeep = function _mergeDeep(base, toMerge) {
14761    for (var p in toMerge) {
14762      p !== "__proto__" && p !== "constructor" && p !== "prototype" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);
14763    }
14764
14765    return base;
14766  },
14767      _copyExcluding = function _copyExcluding(obj, excluding) {
14768    var copy = {},
14769        p;
14770
14771    for (p in obj) {
14772      p in excluding || (copy[p] = obj[p]);
14773    }
14774
14775    return copy;
14776  },
14777      _inheritDefaults = function _inheritDefaults(vars) {
14778    var parent = vars.parent || _globalTimeline,
14779        func = vars.keyframes ? _setKeyframeDefaults : _setDefaults;
14780
14781    if (_isNotFalse(vars.inherit)) {
14782      while (parent) {
14783        func(vars, parent.vars.defaults);
14784        parent = parent.parent || parent._dp;
14785      }
14786    }
14787
14788    return vars;
14789  },
14790      _arraysMatch = function _arraysMatch(a1, a2) {
14791    var i = a1.length,
14792        match = i === a2.length;
14793
14794    while (match && i-- && a1[i] === a2[i]) {}
14795
14796    return i < 0;
14797  },
14798      _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {
14799    if (firstProp === void 0) {
14800      firstProp = "_first";
14801    }
14802
14803    if (lastProp === void 0) {
14804      lastProp = "_last";
14805    }
14806
14807    var prev = parent[lastProp],
14808        t;
14809
14810    if (sortBy) {
14811      t = child[sortBy];
14812
14813      while (prev && prev[sortBy] > t) {
14814        prev = prev._prev;
14815      }
14816    }
14817
14818    if (prev) {
14819      child._next = prev._next;
14820      prev._next = child;
14821    } else {
14822      child._next = parent[firstProp];
14823      parent[firstProp] = child;
14824    }
14825
14826    if (child._next) {
14827      child._next._prev = child;
14828    } else {
14829      parent[lastProp] = child;
14830    }
14831
14832    child._prev = prev;
14833    child.parent = child._dp = parent;
14834    return child;
14835  },
14836      _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {
14837    if (firstProp === void 0) {
14838      firstProp = "_first";
14839    }
14840
14841    if (lastProp === void 0) {
14842      lastProp = "_last";
14843    }
14844
14845    var prev = child._prev,
14846        next = child._next;
14847
14848    if (prev) {
14849      prev._next = next;
14850    } else if (parent[firstProp] === child) {
14851      parent[firstProp] = next;
14852    }
14853
14854    if (next) {
14855      next._prev = prev;
14856    } else if (parent[lastProp] === child) {
14857      parent[lastProp] = prev;
14858    }
14859
14860    child._next = child._prev = child.parent = null;
14861  },
14862      _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {
14863    child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove(child);
14864    child._act = 0;
14865  },
14866      _uncache = function _uncache(animation, child) {
14867    if (animation && (!child || child._end > animation._dur || child._start < 0)) {
14868      var a = animation;
14869
14870      while (a) {
14871        a._dirty = 1;
14872        a = a.parent;
14873      }
14874    }
14875
14876    return animation;
14877  },
14878      _recacheAncestors = function _recacheAncestors(animation) {
14879    var parent = animation.parent;
14880
14881    while (parent && parent.parent) {
14882      parent._dirty = 1;
14883      parent.totalDuration();
14884      parent = parent.parent;
14885    }
14886
14887    return animation;
14888  },
14889      _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {
14890    return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);
14891  },
14892      _elapsedCycleDuration = function _elapsedCycleDuration(animation) {
14893    return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;
14894  },
14895      _animationCycle = function _animationCycle(tTime, cycleDuration) {
14896    var whole = Math.floor(tTime /= cycleDuration);
14897    return tTime && whole === tTime ? whole - 1 : whole;
14898  },
14899      _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {
14900    return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);
14901  },
14902      _setEnd = function _setEnd(animation) {
14903    return animation._end = _round(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));
14904  },
14905      _alignPlayhead = function _alignPlayhead(animation, totalTime) {
14906    var parent = animation._dp;
14907
14908    if (parent && parent.smoothChildTiming && animation._ts) {
14909      animation._start = _round(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));
14910
14911      _setEnd(animation);
14912
14913      parent._dirty || _uncache(parent, animation);
14914    }
14915
14916    return animation;
14917  },
14918      _postAddChecks = function _postAddChecks(timeline, child) {
14919    var t;
14920
14921    if (child._time || child._initted && !child._dur) {
14922      t = _parentToChildTotalTime(timeline.rawTime(), child);
14923
14924      if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {
14925        child.render(t, true);
14926      }
14927    }
14928
14929    if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {
14930      if (timeline._dur < timeline.duration()) {
14931        t = timeline;
14932
14933        while (t._dp) {
14934          t.rawTime() >= 0 && t.totalTime(t._tTime);
14935          t = t._dp;
14936        }
14937      }
14938
14939      timeline._zTime = -_tinyNum;
14940    }
14941  },
14942      _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {
14943    child.parent && _removeFromParent(child);
14944    child._start = _round((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);
14945    child._end = _round(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));
14946
14947    _addLinkedListItem(timeline, child, "_first", "_last", timeline._sort ? "_start" : 0);
14948
14949    _isFromOrFromStart(child) || (timeline._recent = child);
14950    skipChecks || _postAddChecks(timeline, child);
14951    return timeline;
14952  },
14953      _scrollTrigger = function _scrollTrigger(animation, trigger) {
14954    return (_globals.ScrollTrigger || _missingPlugin("scrollTrigger", trigger)) && _globals.ScrollTrigger.create(trigger, animation);
14955  },
14956      _attemptInitTween = function _attemptInitTween(tween, totalTime, force, suppressEvents) {
14957    _initTween(tween, totalTime);
14958
14959    if (!tween._initted) {
14960      return 1;
14961    }
14962
14963    if (!force && tween._pt && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {
14964      _lazyTweens.push(tween);
14965
14966      tween._lazy = [totalTime, suppressEvents];
14967      return 1;
14968    }
14969  },
14970      _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {
14971    var parent = _ref.parent;
14972    return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));
14973  },
14974      _isFromOrFromStart = function _isFromOrFromStart(_ref2) {
14975    var data = _ref2.data;
14976    return data === "isFromStart" || data === "isStart";
14977  },
14978      _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {
14979    var prevRatio = tween.ratio,
14980        ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,
14981        repeatDelay = tween._rDelay,
14982        tTime = 0,
14983        pt,
14984        iteration,
14985        prevIteration;
14986
14987    if (repeatDelay && tween._repeat) {
14988      tTime = _clamp(0, tween._tDur, totalTime);
14989      iteration = _animationCycle(tTime, repeatDelay);
14990      prevIteration = _animationCycle(tween._tTime, repeatDelay);
14991      tween._yoyo && iteration & 1 && (ratio = 1 - ratio);
14992
14993      if (iteration !== prevIteration) {
14994        prevRatio = 1 - ratio;
14995        tween.vars.repeatRefresh && tween._initted && tween.invalidate();
14996      }
14997    }
14998
14999    if (ratio !== prevRatio || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {
15000      if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents)) {
15001        return;
15002      }
15003
15004      prevIteration = tween._zTime;
15005      tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0);
15006      suppressEvents || (suppressEvents = totalTime && !prevIteration);
15007      tween.ratio = ratio;
15008      tween._from && (ratio = 1 - ratio);
15009      tween._time = 0;
15010      tween._tTime = tTime;
15011      pt = tween._pt;
15012
15013      while (pt) {
15014        pt.r(ratio, pt.d);
15015        pt = pt._next;
15016      }
15017
15018      tween._startAt && totalTime < 0 && tween._startAt.render(totalTime, true, true);
15019      tween._onUpdate && !suppressEvents && _callback(tween, "onUpdate");
15020      tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, "onRepeat");
15021
15022      if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {
15023        ratio && _removeFromParent(tween, 1);
15024
15025        if (!suppressEvents) {
15026          _callback(tween, ratio ? "onComplete" : "onReverseComplete", true);
15027
15028          tween._prom && tween._prom();
15029        }
15030      }
15031    } else if (!tween._zTime) {
15032      tween._zTime = totalTime;
15033    }
15034  },
15035      _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {
15036    var child;
15037
15038    if (time > prevTime) {
15039      child = animation._first;
15040
15041      while (child && child._start <= time) {
15042        if (!child._dur && child.data === "isPause" && child._start > prevTime) {
15043          return child;
15044        }
15045
15046        child = child._next;
15047      }
15048    } else {
15049      child = animation._last;
15050
15051      while (child && child._start >= time) {
15052        if (!child._dur && child.data === "isPause" && child._start < prevTime) {
15053          return child;
15054        }
15055
15056        child = child._prev;
15057      }
15058    }
15059  },
15060      _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {
15061    var repeat = animation._repeat,
15062        dur = _round(duration) || 0,
15063        totalProgress = animation._tTime / animation._tDur;
15064    totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);
15065    animation._dur = dur;
15066    animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _round(dur * (repeat + 1) + animation._rDelay * repeat);
15067    totalProgress && !leavePlayhead ? _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress) : animation.parent && _setEnd(animation);
15068    skipUncache || _uncache(animation.parent, animation);
15069    return animation;
15070  },
15071      _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {
15072    return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);
15073  },
15074      _zeroPosition = {
15075    _start: 0,
15076    endTime: _emptyFunc,
15077    totalDuration: _emptyFunc
15078  },
15079      _parsePosition = function _parsePosition(animation, position, percentAnimation) {
15080    var labels = animation.labels,
15081        recent = animation._recent || _zeroPosition,
15082        clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,
15083        i,
15084        offset,
15085        isPercent;
15086
15087    if (_isString(position) && (isNaN(position) || position in labels)) {
15088      offset = position.charAt(0);
15089      isPercent = position.substr(-1) === "%";
15090      i = position.indexOf("=");
15091
15092      if (offset === "<" || offset === ">") {
15093        i >= 0 && (position = position.replace(/=/, ""));
15094        return (offset === "<" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);
15095      }
15096
15097      if (i < 0) {
15098        position in labels || (labels[position] = clippedDuration);
15099        return labels[position];
15100      }
15101
15102      offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));
15103
15104      if (isPercent && percentAnimation) {
15105        offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();
15106      }
15107
15108      return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;
15109    }
15110
15111    return position == null ? clippedDuration : +position;
15112  },
15113      _createTweenType = function _createTweenType(type, params, timeline) {
15114    var isLegacy = _isNumber(params[1]),
15115        varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),
15116        vars = params[varsIndex],
15117        irVars,
15118        parent;
15119
15120    isLegacy && (vars.duration = params[1]);
15121    vars.parent = timeline;
15122
15123    if (type) {
15124      irVars = vars;
15125      parent = timeline;
15126
15127      while (parent && !("immediateRender" in irVars)) {
15128        irVars = parent.vars.defaults || {};
15129        parent = _isNotFalse(parent.vars.inherit) && parent.parent;
15130      }
15131
15132      vars.immediateRender = _isNotFalse(irVars.immediateRender);
15133      type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1];
15134    }
15135
15136    return new Tween(params[0], vars, params[varsIndex + 1]);
15137  },
15138      _conditionalReturn = function _conditionalReturn(value, func) {
15139    return value || value === 0 ? func(value) : func;
15140  },
15141      _clamp = function _clamp(min, max, value) {
15142    return value < min ? min : value > max ? max : value;
15143  },
15144      getUnit = function getUnit(value) {
15145    if (typeof value !== "string") {
15146      return "";
15147    }
15148
15149    var v = _unitExp.exec(value);
15150
15151    return v ? value.substr(v.index + v[0].length) : "";
15152  },
15153      clamp = function clamp(min, max, value) {
15154    return _conditionalReturn(value, function (v) {
15155      return _clamp(min, max, v);
15156    });
15157  },
15158      _slice = [].slice,
15159      _isArrayLike = function _isArrayLike(value, nonEmpty) {
15160    return value && _isObject(value) && "length" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;
15161  },
15162      _flatten = function _flatten(ar, leaveStrings, accumulator) {
15163    if (accumulator === void 0) {
15164      accumulator = [];
15165    }
15166
15167    return ar.forEach(function (value) {
15168      var _accumulator;
15169
15170      return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);
15171    }) || accumulator;
15172  },
15173      toArray = function toArray(value, scope, leaveStrings) {
15174    return _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];
15175  },
15176      selector = function selector(value) {
15177    value = toArray(value)[0] || _warn("Invalid scope") || {};
15178    return function (v) {
15179      var el = value.current || value.nativeElement || value;
15180      return toArray(v, el.querySelectorAll ? el : el === value ? _warn("Invalid scope") || _doc.createElement("div") : value);
15181    };
15182  },
15183      shuffle = function shuffle(a) {
15184    return a.sort(function () {
15185      return .5 - Math.random();
15186    });
15187  },
15188      distribute = function distribute(v) {
15189    if (_isFunction(v)) {
15190      return v;
15191    }
15192
15193    var vars = _isObject(v) ? v : {
15194      each: v
15195    },
15196        ease = _parseEase(vars.ease),
15197        from = vars.from || 0,
15198        base = parseFloat(vars.base) || 0,
15199        cache = {},
15200        isDecimal = from > 0 && from < 1,
15201        ratios = isNaN(from) || isDecimal,
15202        axis = vars.axis,
15203        ratioX = from,
15204        ratioY = from;
15205
15206    if (_isString(from)) {
15207      ratioX = ratioY = {
15208        center: .5,
15209        edges: .5,
15210        end: 1
15211      }[from] || 0;
15212    } else if (!isDecimal && ratios) {
15213      ratioX = from[0];
15214      ratioY = from[1];
15215    }
15216
15217    return function (i, target, a) {
15218      var l = (a || vars).length,
15219          distances = cache[l],
15220          originX,
15221          originY,
15222          x,
15223          y,
15224          d,
15225          j,
15226          max,
15227          min,
15228          wrapAt;
15229
15230      if (!distances) {
15231        wrapAt = vars.grid === "auto" ? 0 : (vars.grid || [1, _bigNum])[1];
15232
15233        if (!wrapAt) {
15234          max = -_bigNum;
15235
15236          while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}
15237
15238          wrapAt--;
15239        }
15240
15241        distances = cache[l] = [];
15242        originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;
15243        originY = ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;
15244        max = 0;
15245        min = _bigNum;
15246
15247        for (j = 0; j < l; j++) {
15248          x = j % wrapAt - originX;
15249          y = originY - (j / wrapAt | 0);
15250          distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === "y" ? y : x);
15251          d > max && (max = d);
15252          d < min && (min = d);
15253        }
15254
15255        from === "random" && shuffle(distances);
15256        distances.max = max - min;
15257        distances.min = min;
15258        distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === "y" ? l / wrapAt : wrapAt) || 0) * (from === "edges" ? -1 : 1);
15259        distances.b = l < 0 ? base - l : base;
15260        distances.u = getUnit(vars.amount || vars.each) || 0;
15261        ease = ease && l < 0 ? _invertEase(ease) : ease;
15262      }
15263
15264      l = (distances[i] - distances.min) / distances.max || 0;
15265      return _round(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u;
15266    };
15267  },
15268      _roundModifier = function _roundModifier(v) {
15269    var p = v < 1 ? Math.pow(10, (v + "").length - 2) : 1;
15270    return function (raw) {
15271      var n = Math.round(parseFloat(raw) / v) * v * p;
15272      return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw));
15273    };
15274  },
15275      snap = function snap(snapTo, value) {
15276    var isArray = _isArray(snapTo),
15277        radius,
15278        is2D;
15279
15280    if (!isArray && _isObject(snapTo)) {
15281      radius = isArray = snapTo.radius || _bigNum;
15282
15283      if (snapTo.values) {
15284        snapTo = toArray(snapTo.values);
15285
15286        if (is2D = !_isNumber(snapTo[0])) {
15287          radius *= radius;
15288        }
15289      } else {
15290        snapTo = _roundModifier(snapTo.increment);
15291      }
15292    }
15293
15294    return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {
15295      is2D = snapTo(raw);
15296      return Math.abs(is2D - raw) <= radius ? is2D : raw;
15297    } : function (raw) {
15298      var x = parseFloat(is2D ? raw.x : raw),
15299          y = parseFloat(is2D ? raw.y : 0),
15300          min = _bigNum,
15301          closest = 0,
15302          i = snapTo.length,
15303          dx,
15304          dy;
15305
15306      while (i--) {
15307        if (is2D) {
15308          dx = snapTo[i].x - x;
15309          dy = snapTo[i].y - y;
15310          dx = dx * dx + dy * dy;
15311        } else {
15312          dx = Math.abs(snapTo[i] - x);
15313        }
15314
15315        if (dx < min) {
15316          min = dx;
15317          closest = i;
15318        }
15319      }
15320
15321      closest = !radius || min <= radius ? snapTo[closest] : raw;
15322      return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);
15323    });
15324  },
15325      random = function random(min, max, roundingIncrement, returnFunction) {
15326    return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {
15327      return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e
vendor: 4,723 bytes, lines 15327-15483
15327-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + "").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;
15328    });
15329  },
15330      pipe = function pipe() {
15331    for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {
15332      functions[_key] = arguments[_key];
15333    }
15334
15335    return function (value) {
15336      return functions.reduce(function (v, f) {
15337        return f(v);
15338      }, value);
15339    };
15340  },
15341      unitize = function unitize(func, unit) {
15342    return function (value) {
15343      return func(parseFloat(value)) + (unit || getUnit(value));
15344    };
15345  },
15346      normalize = function normalize(min, max, value) {
15347    return mapRange(min, max, 0, 1, value);
15348  },
15349      _wrapArray = function _wrapArray(a, wrapper, value) {
15350    return _conditionalReturn(value, function (index) {
15351      return a[~~wrapper(index)];
15352    });
15353  },
15354      wrap = function wrap(min, max, value) {
15355    var range = max - min;
15356    return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {
15357      return (range + (value - min) % range) % range + min;
15358    });
15359  },
15360      wrapYoyo = function wrapYoyo(min, max, value) {
15361    var range = max - min,
15362        total = range * 2;
15363    return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {
15364      value = (total + (value - min) % total) % total || 0;
15365      return min + (value > range ? total - value : value);
15366    });
15367  },
15368      _replaceRandom = function _replaceRandom(value) {
15369    var prev = 0,
15370        s = "",
15371        i,
15372        nums,
15373        end,
15374        isArray;
15375
15376    while (~(i = value.indexOf("random(", prev))) {
15377      end = value.indexOf(")", i);
15378      isArray = value.charAt(i + 7) === "[";
15379      nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);
15380      s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);
15381      prev = end + 1;
15382    }
15383
15384    return s + value.substr(prev, value.length - prev);
15385  },
15386      mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {
15387    var inRange = inMax - inMin,
15388        outRange = outMax - outMin;
15389    return _conditionalReturn(value, function (value) {
15390      return outMin + ((value - inMin) / inRange * outRange || 0);
15391    });
15392  },
15393      interpolate = function interpolate(start, end, progress, mutate) {
15394    var func = isNaN(start + end) ? 0 : function (p) {
15395      return (1 - p) * start + p * end;
15396    };
15397
15398    if (!func) {
15399      var isString = _isString(start),
15400          master = {},
15401          p,
15402          i,
15403          interpolators,
15404          l,
15405          il;
15406
15407      progress === true && (mutate = 1) && (progress = null);
15408
15409      if (isString) {
15410        start = {
15411          p: start
15412        };
15413        end = {
15414          p: end
15415        };
15416      } else if (_isArray(start) && !_isArray(end)) {
15417        interpolators = [];
15418        l = start.length;
15419        il = l - 2;
15420
15421        for (i = 1; i < l; i++) {
15422          interpolators.push(interpolate(start[i - 1], start[i]));
15423        }
15424
15425        l--;
15426
15427        func = function func(p) {
15428          p *= l;
15429          var i = Math.min(il, ~~p);
15430          return interpolators[i](p - i);
15431        };
15432
15433        progress = end;
15434      } else if (!mutate) {
15435        start = _merge(_isArray(start) ? [] : {}, start);
15436      }
15437
15438      if (!interpolators) {
15439        for (p in end) {
15440          _addPropTween.call(master, start, p, "get", end[p]);
15441        }
15442
15443        func = function func(p) {
15444          return _renderPropTweens(p, master) || (isString ? start.p : start);
15445        };
15446      }
15447    }
15448
15449    return _conditionalReturn(progress, func);
15450  },
15451      _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {
15452    var labels = timeline.labels,
15453        min = _bigNum,
15454        p,
15455        distance,
15456        label;
15457
15458    for (p in labels) {
15459      distance = labels[p] - fromTime;
15460
15461      if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {
15462        label = p;
15463        min = distance;
15464      }
15465    }
15466
15467    return label;
15468  },
15469      _callback = function _callback(animation, type, executeLazyFirst) {
15470    var v = animation.vars,
15471        callback = v[type],
15472        params,
15473        scope;
15474
15475    if (!callback) {
15476      return;
15477    }
15478
15479    params = v[type + "Params"];
15480    scope = v.callbackScope || animation;
15481    executeLazyFirst && _lazyTweens.length && _lazyRender();
15482    return params ? callback.apply(scope, params) : callback.call(scope);
15483  },
vendor: 7,655 bytes, lines 15484-15769
15484      _interrupt = function _interrupt(animation) {
15485    _removeFromParent(animation);
15486
15487    animation.scrollTrigger && animation.scrollTrigger.kill(false);
15488    animation.progress() < 1 && _callback(animation, "onInterrupt");
15489    return animation;
15490  },
15491      _quickTween,
15492      _createPlugin = function _createPlugin(config) {
15493    config = !config.name && config["default"] || config;
15494
15495    var name = config.name,
15496        isFunc = _isFunction(config),
15497        Plugin = name && !isFunc && config.init ? function () {
15498      this._props = [];
15499    } : config,
15500        instanceDefaults = {
15501      init: _emptyFunc,
15502      render: _renderPropTweens,
15503      add: _addPropTween,
15504      kill: _killPropTweensOf,
15505      modifier: _addPluginModifier,
15506      rawVars: 0
15507    },
15508        statics = {
15509      targetTest: 0,
15510      get: 0,
15511      getSetter: _getSetter,
15512      aliases: {},
15513      register: 0
15514    };
15515
15516    _wake();
15517
15518    if (config !== Plugin) {
15519      if (_plugins[name]) {
15520        return;
15521      }
15522
15523      _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics));
15524
15525      _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics)));
15526
15527      _plugins[Plugin.prop = name] = Plugin;
15528
15529      if (config.targetTest) {
15530        _harnessPlugins.push(Plugin);
15531
15532        _reservedProps[name] = 1;
15533      }
15534
15535      name = (name === "css" ? "CSS" : name.charAt(0).toUpperCase() + name.substr(1)) + "Plugin";
15536    }
15537
15538    _addGlobal(name, Plugin);
15539
15540    config.register && config.register(gsap, Plugin, PropTween);
15541  },
15542      _255 = 255,
15543      _colorLookup = {
15544    aqua: [0, _255, _255],
15545    lime: [0, _255, 0],
15546    silver: [192, 192, 192],
15547    black: [0, 0, 0],
15548    maroon: [128, 0, 0],
15549    teal: [0, 128, 128],
15550    blue: [0, 0, _255],
15551    navy: [0, 0, 128],
15552    white: [_255, _255, _255],
15553    olive: [128, 128, 0],
15554    yellow: [_255, _255, 0],
15555    orange: [_255, 165, 0],
15556    gray: [128, 128, 128],
15557    purple: [128, 0, 128],
15558    green: [0, 128, 0],
15559    red: [_255, 0, 0],
15560    pink: [_255, 192, 203],
15561    cyan: [0, _255, _255],
15562    transparent: [_255, _255, _255, 0]
15563  },
15564      _hue = function _hue(h, m1, m2) {
15565    h = h < 0 ? h + 1 : h > 1 ? h - 1 : h;
15566    return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;
15567  },
15568      splitColor = function splitColor(v, toHSL, forceAlpha) {
15569    var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,
15570        r,
15571        g,
15572        b,
15573        h,
15574        s,
15575        l,
15576        max,
15577        min,
15578        d,
15579        wasHSL;
15580
15581    if (!a) {
15582      if (v.substr(-1) === ",") {
15583        v = v.substr(0, v.length - 1);
15584      }
15585
15586      if (_colorLookup[v]) {
15587        a = _colorLookup[v];
15588      } else if (v.charAt(0) === "#") {
15589        if (v.length < 6) {
15590          r = v.charAt(1);
15591          g = v.charAt(2);
15592          b = v.charAt(3);
15593          v = "#" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : "");
15594        }
15595
15596        if (v.length === 9) {
15597          a = parseInt(v.substr(1, 6), 16);
15598          return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];
15599        }
15600
15601        v = parseInt(v.substr(1), 16);
15602        a = [v >> 16, v >> 8 & _255, v & _255];
15603      } else if (v.substr(0, 3) === "hsl") {
15604        a = wasHSL = v.match(_strictNumExp);
15605
15606        if (!toHSL) {
15607          h = +a[0] % 360 / 360;
15608          s = +a[1] / 100;
15609          l = +a[2] / 100;
15610          g = l <= .5 ? l * (s + 1) : l + s - l * s;
15611          r = l * 2 - g;
15612          a.length > 3 && (a[3] *= 1);
15613          a[0] = _hue(h + 1 / 3, r, g);
15614          a[1] = _hue(h, r, g);
15615          a[2] = _hue(h - 1 / 3, r, g);
15616        } else if (~v.indexOf("=")) {
15617          a = v.match(_numExp);
15618          forceAlpha && a.length < 4 && (a[3] = 1);
15619          return a;
15620        }
15621      } else {
15622        a = v.match(_strictNumExp) || _colorLookup.transparent;
15623      }
15624
15625      a = a.map(Number);
15626    }
15627
15628    if (toHSL && !wasHSL) {
15629      r = a[0] / _255;
15630      g = a[1] / _255;
15631      b = a[2] / _255;
15632      max = Math.max(r, g, b);
15633      min = Math.min(r, g, b);
15634      l = (max + min) / 2;
15635
15636      if (max === min) {
15637        h = s = 0;
15638      } else {
15639        d = max - min;
15640        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
15641        h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
15642        h *= 60;
15643      }
15644
15645      a[0] = ~~(h + .5);
15646      a[1] = ~~(s * 100 + .5);
15647      a[2] = ~~(l * 100 + .5);
15648    }
15649
15650    forceAlpha && a.length < 4 && (a[3] = 1);
15651    return a;
15652  },
15653      _colorOrderData = function _colorOrderData(v) {
15654    var values = [],
15655        c = [],
15656        i = -1;
15657    v.split(_colorExp).forEach(function (v) {
15658      var a = v.match(_numWithUnitExp) || [];
15659      values.push.apply(values, a);
15660      c.push(i += a.length + 1);
15661    });
15662    values.c = c;
15663    return values;
15664  },
15665      _formatColors = function _formatColors(s, toHSL, orderMatchData) {
15666    var result = "",
15667        colors = (s + result).match(_colorExp),
15668        type = toHSL ? "hsla(" : "rgba(",
15669        i = 0,
15670        c,
15671        shell,
15672        d,
15673        l;
15674
15675    if (!colors) {
15676      return s;
15677    }
15678
15679    colors = colors.map(function (color) {
15680      return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + "," + color[1] + "%," + color[2] + "%," + color[3] : color.join(",")) + ")";
15681    });
15682
15683    if (orderMatchData) {
15684      d = _colorOrderData(s);
15685      c = orderMatchData.c;
15686
15687      if (c.join(result) !== d.c.join(result)) {
15688        shell = s.replace(_colorExp, "1").split(_numWithUnitExp);
15689        l = shell.length - 1;
15690
15691        for (; i < l; i++) {
15692          result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + "0,0,0,0)" : (d.length ? d : colors.length ? colors : orderMatchData).shift());
15693        }
15694      }
15695    }
15696
15697    if (!shell) {
15698      shell = s.split(_colorExp);
15699      l = shell.length - 1;
15700
15701      for (; i < l; i++) {
15702        result += shell[i] + colors[i];
15703      }
15704    }
15705
15706    return result + shell[l];
15707  },
15708      _colorExp = function () {
15709    var s = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b",
15710        p;
15711
15712    for (p in _colorLookup) {
15713      s += "|" + p + "\\b";
15714    }
15715
15716    return new RegExp(s + ")", "gi");
15717  }(),
15718      _hslExp = /hsl[a]?\(/,
15719      _colorStringFilter = function _colorStringFilter(a) {
15720    var combined = a.join(" "),
15721        toHSL;
15722    _colorExp.lastIndex = 0;
15723
15724    if (_colorExp.test(combined)) {
15725      toHSL = _hslExp.test(combined);
15726      a[1] = _formatColors(a[1], toHSL);
15727      a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1]));
15728      return true;
15729    }
15730  },
15731      _tickerActive,
15732      _ticker = function () {
15733    var _getTime = Date.now,
15734        _lagThreshold = 500,
15735        _adjustedLag = 33,
15736        _startTime = _getTime(),
15737        _lastUpdate = _startTime,
15738        _gap = 1000 / 240,
15739        _nextTime = _gap,
15740        _listeners = [],
15741        _id,
15742        _req,
15743        _raf,
15744        _self,
15745        _delta,
15746        _i,
15747        _tick = function _tick(v) {
15748      var elapsed = _getTime() - _lastUpdate,
15749          manual = v === true,
15750          overlap,
15751          dispatch,
15752          time,
15753          frame;
15754
15755      elapsed > _lagThreshold && (_startTime += elapsed - _adjustedLag);
15756      _lastUpdate += elapsed;
15757      time = _lastUpdate - _startTime;
15758      overlap = time - _nextTime;
15759
15760      if (overlap > 0 || manual) {
15761        frame = ++_self.frame;
15762        _delta = time - _self.time * 1000;
15763        _self.time = time = time / 1000;
15764        _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);
15765        dispatch = 1;
15766      }
15767
15768      manual || (_id = _req(_tick));
15769
vendor: 4,054 bytes, lines 15770-15897
15770      if (dispatch) {
15771        for (_i = 0; _i < _listeners.length; _i++) {
15772          _listeners[_i](time, _delta, frame, v);
15773        }
15774      }
15775    };
15776
15777    _self = {
15778      time: 0,
15779      frame: 0,
15780      tick: function tick() {
15781        _tick(true);
15782      },
15783      deltaRatio: function deltaRatio(fps) {
15784        return _delta / (1000 / (fps || 60));
15785      },
15786      wake: function wake() {
15787        if (_coreReady) {
15788          if (!_coreInitted && _windowExists()) {
15789            _win = _coreInitted = window;
15790            _doc = _win.document || {};
15791            _globals.gsap = gsap;
15792            (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);
15793
15794            _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});
15795
15796            _raf = _win.requestAnimationFrame;
15797          }
15798
15799          _id && _self.sleep();
15800
15801          _req = _raf || function (f) {
15802            return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);
15803          };
15804
15805          _tickerActive = 1;
15806
15807          _tick(2);
15808        }
15809      },
15810      sleep: function sleep() {
15811        (_raf ? _win.cancelAnimationFrame : clearTimeout)(_id);
15812        _tickerActive = 0;
15813        _req = _emptyFunc;
15814      },
15815      lagSmoothing: function lagSmoothing(threshold, adjustedLag) {
15816        _lagThreshold = threshold || 1 / _tinyNum;
15817        _adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);
15818      },
15819      fps: function fps(_fps) {
15820        _gap = 1000 / (_fps || 240);
15821        _nextTime = _self.time * 1000 + _gap;
15822      },
15823      add: function add(callback) {
15824        _listeners.indexOf(callback) < 0 && _listeners.push(callback);
15825
15826        _wake();
15827      },
15828      remove: function remove(callback) {
15829        var i;
15830        ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;
15831      },
15832      _listeners: _listeners
15833    };
15834    return _self;
15835  }(),
15836      _wake = function _wake() {
15837    return !_tickerActive && _ticker.wake();
15838  },
15839      _easeMap = {},
15840      _customEaseExp = /^[\d.\-M][\d.\-,\s]/,
15841      _quotesExp = /["']/g,
15842      _parseObjectInString = function _parseObjectInString(value) {
15843    var obj = {},
15844        split = value.substr(1, value.length - 3).split(":"),
15845        key = split[0],
15846        i = 1,
15847        l = split.length,
15848        index,
15849        val,
15850        parsedVal;
15851
15852    for (; i < l; i++) {
15853      val = split[i];
15854      index = i !== l - 1 ? val.lastIndexOf(",") : val.length;
15855      parsedVal = val.substr(0, index);
15856      obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, "").trim() : +parsedVal;
15857      key = val.substr(index + 1).trim();
15858    }
15859
15860    return obj;
15861  },
15862      _valueInParentheses = function _valueInParentheses(value) {
15863    var open = value.indexOf("(") + 1,
15864        close = value.indexOf(")"),
15865        nested = value.indexOf("(", open);
15866    return value.substring(open, ~nested && nested < close ? value.indexOf(")", close + 1) : close);
15867  },
15868      _configEaseFromString = function _configEaseFromString(name) {
15869    var split = (name + "").split("("),
15870        ease = _easeMap[split[0]];
15871    return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf("{") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(",").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE("", name) : ease;
15872  },
15873      _invertEase = function _invertEase(ease) {
15874    return function (p) {
15875      return 1 - ease(1 - p);
15876    };
15877  },
15878      _propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {
15879    var child = timeline._first,
15880        ease;
15881
15882    while (child) {
15883      if (child instanceof Timeline) {
15884        _propagateYoyoEase(child, isYoyo);
15885      } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {
15886        if (child.timeline) {
15887          _propagateYoyoEase(child.timeline, isYoyo);
15888        } else {
15889          ease = child._ease;
15890          child._ease = child._yEase;
15891          child._yEase = ease;
15892          child._yoyo = isYoyo;
15893        }
15894      }
15895
15896      child = child._next;
15897    }
vendor: 3,445 bytes, lines 15897-16008
15897
15898  },
15899      _parseEase = function _parseEase(ease, defaultEase) {
15900    return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;
15901  },
15902      _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {
15903    if (easeOut === void 0) {
15904      easeOut = function easeOut(p) {
15905        return 1 - easeIn(1 - p);
15906      };
15907    }
15908
15909    if (easeInOut === void 0) {
15910      easeInOut = function easeInOut(p) {
15911        return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;
15912      };
15913    }
15914
15915    var ease = {
15916      easeIn: easeIn,
15917      easeOut: easeOut,
15918      easeInOut: easeInOut
15919    },
15920        lowercaseName;
15921
15922    _forEachName(names, function (name) {
15923      _easeMap[name] = _globals[name] = ease;
15924      _easeMap[lowercaseName = name.toLowerCase()] = easeOut;
15925
15926      for (var p in ease) {
15927        _easeMap[lowercaseName + (p === "easeIn" ? ".in" : p === "easeOut" ? ".out" : ".inOut")] = _easeMap[name + "." + p] = ease[p];
15928      }
15929    });
15930
15931    return ease;
15932  },
15933      _easeInOutFromOut = function _easeInOutFromOut(easeOut) {
15934    return function (p) {
15935      return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;
15936    };
15937  },
15938      _configElastic = function _configElastic(type, amplitude, period) {
15939    var p1 = amplitude >= 1 ? amplitude : 1,
15940        p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),
15941        p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),
15942        easeOut = function easeOut(p) {
15943      return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;
15944    },
15945        ease = type === "out" ? easeOut : type === "in" ? function (p) {
15946      return 1 - easeOut(1 - p);
15947    } : _easeInOutFromOut(easeOut);
15948
15949    p2 = _2PI / p2;
15950
15951    ease.config = function (amplitude, period) {
15952      return _configElastic(type, amplitude, period);
15953    };
15954
15955    return ease;
15956  },
15957      _configBack = function _configBack(type, overshoot) {
15958    if (overshoot === void 0) {
15959      overshoot = 1.70158;
15960    }
15961
15962    var easeOut = function easeOut(p) {
15963      return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;
15964    },
15965        ease = type === "out" ? easeOut : type === "in" ? function (p) {
15966      return 1 - easeOut(1 - p);
15967    } : _easeInOutFromOut(easeOut);
15968
15969    ease.config = function (overshoot) {
15970      return _configBack(type, overshoot);
15971    };
15972
15973    return ease;
15974  };
15975
15976  _forEachName("Linear,Quad,Cubic,Quart,Quint,Strong", function (name, i) {
15977    var power = i < 5 ? i + 1 : i;
15978
15979    _insertEase(name + ",Power" + (power - 1), i ? function (p) {
15980      return Math.pow(p, power);
15981    } : function (p) {
15982      return p;
15983    }, function (p) {
15984      return 1 - Math.pow(1 - p, power);
15985    }, function (p) {
15986      return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;
15987    });
15988  });
15989
15990  _easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;
15991
15992  _insertEase("Elastic", _configElastic("in"), _configElastic("out"), _configElastic());
15993
15994  (function (n, c) {
15995    var n1 = 1 / c,
15996        n2 = 2 * n1,
15997        n3 = 2.5 * n1,
15998        easeOut = function easeOut(p) {
15999      return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;
16000    };
16001
16002    _insertEase("Bounce", function (p) {
16003      return 1 - easeOut(1 - p);
16004    }, easeOut);
16005  })(7.5625, 2.75);
16006
16007  _insertEase("Expo", function (p) {
16008    return 
vendor: 6,155 bytes, lines 16008-16187
16008p ? Math.pow(2, 10 * (p - 1)) : 0;
16009  });
16010
16011  _insertEase("Circ", function (p) {
16012    return -(_sqrt(1 - p * p) - 1);
16013  });
16014
16015  _insertEase("Sine", function (p) {
16016    return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;
16017  });
16018
16019  _insertEase("Back", _configBack("in"), _configBack("out"), _configBack());
16020
16021  _easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {
16022    config: function config(steps, immediateStart) {
16023      if (steps === void 0) {
16024        steps = 1;
16025      }
16026
16027      var p1 = 1 / steps,
16028          p2 = steps + (immediateStart ? 0 : 1),
16029          p3 = immediateStart ? 1 : 0,
16030          max = 1 - _tinyNum;
16031      return function (p) {
16032        return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;
16033      };
16034    }
16035  };
16036  _defaults.ease = _easeMap["quad.out"];
16037
16038  _forEachName("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt", function (name) {
16039    return _callbackNames += name + "," + name + "Params,";
16040  });
16041
16042  var GSCache = function GSCache(target, harness) {
16043    this.id = _gsID++;
16044    target._gsap = this;
16045    this.target = target;
16046    this.harness = harness;
16047    this.get = harness ? harness.get : _getProperty;
16048    this.set = harness ? harness.getSetter : _getSetter;
16049  };
16050  var Animation = function () {
16051    function Animation(vars) {
16052      this.vars = vars;
16053      this._delay = +vars.delay || 0;
16054
16055      if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {
16056        this._rDelay = vars.repeatDelay || 0;
16057        this._yoyo = !!vars.yoyo || !!vars.yoyoEase;
16058      }
16059
16060      this._ts = 1;
16061
16062      _setDuration(this, +vars.duration, 1, 1);
16063
16064      this.data = vars.data;
16065      _tickerActive || _ticker.wake();
16066    }
16067
16068    var _proto = Animation.prototype;
16069
16070    _proto.delay = function delay(value) {
16071      if (value || value === 0) {
16072        this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);
16073        this._delay = value;
16074        return this;
16075      }
16076
16077      return this._delay;
16078    };
16079
16080    _proto.duration = function duration(value) {
16081      return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;
16082    };
16083
16084    _proto.totalDuration = function totalDuration(value) {
16085      if (!arguments.length) {
16086        return this._tDur;
16087      }
16088
16089      this._dirty = 0;
16090      return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));
16091    };
16092
16093    _proto.totalTime = function totalTime(_totalTime, suppressEvents) {
16094      _wake();
16095
16096      if (!arguments.length) {
16097        return this._tTime;
16098      }
16099
16100      var parent = this._dp;
16101
16102      if (parent && parent.smoothChildTiming && this._ts) {
16103        _alignPlayhead(this, _totalTime);
16104
16105        !parent._dp || parent.parent || _postAddChecks(parent, this);
16106
16107        while (parent.parent) {
16108          if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {
16109            parent.totalTime(parent._tTime, true);
16110          }
16111
16112          parent = parent.parent;
16113        }
16114
16115        if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {
16116          _addToTimeline(this._dp, this, this._start - this._delay);
16117        }
16118      }
16119
16120      if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {
16121        this._ts || (this._pTime = _totalTime);
16122
16123        _lazySafeRender(this, _totalTime, suppressEvents);
16124      }
16125
16126      return this;
16127    };
16128
16129    _proto.time = function time(value, suppressEvents) {
16130      return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % this._dur || (value ? this._dur : 0), suppressEvents) : this._time;
16131    };
16132
16133    _proto.totalProgress = function totalProgress(value, suppressEvents) {
16134      return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.ratio;
16135    };
16136
16137    _proto.progress = function progress(value, suppressEvents) {
16138      return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.ratio;
16139    };
16140
16141    _proto.iteration = function iteration(value, suppressEvents) {
16142      var cycleDuration = this.duration() + this._rDelay;
16143
16144      return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;
16145    };
16146
16147    _proto.timeScale = function timeScale(value) {
16148      if (!arguments.length) {
16149        return this._rts === -_tinyNum ? 0 : this._rts;
16150      }
16151
16152      if (this._rts === value) {
16153        return this;
16154      }
16155
16156      var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime;
16157      this._rts = +value || 0;
16158      this._ts = this._ps || value === -_tinyNum ? 0 : this._rts;
16159      return _recacheAncestors(this.totalTime(_clamp(-this._delay, this._tDur, tTime), true));
16160    };
16161
16162    _proto.paused = function paused(value) {
16163      if (!arguments.length) {
16164        return this._ps;
16165      }
16166
16167      if (this._ps !== value) {
16168        this._ps = value;
16169
16170        if (value) {
16171          this._pTime = this._tTime || Math.max(-this._delay, this.rawTime());
16172          this._ts = this._act = 0;
16173        } else {
16174          _wake();
16175
16176          this._ts = this._rts;
16177          this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && (this._tTime -= _tinyNum) && Math.abs(this._zTime) !== _tinyNum);
16178        }
16179      }
16180
16181      return this;
16182    };
16183
16184    _proto.startTime = function startTime(value) {
16185      if (arguments.length) {
16186        this._start = value;
16187        var parent = this.parent || this._dp;
vendor: 2,817 bytes, lines 16188-16278
16188        parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);
16189        return this;
16190      }
16191
16192      return this._start;
16193    };
16194
16195    _proto.endTime = function endTime(includeRepeats) {
16196      return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts);
16197    };
16198
16199    _proto.rawTime = function rawTime(wrapRepeats) {
16200      var parent = this.parent || this._dp;
16201      return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);
16202    };
16203
16204    _proto.globalTime = function globalTime(rawTime) {
16205      var animation = this,
16206          time = arguments.length ? rawTime : animation.rawTime();
16207
16208      while (animation) {
16209        time = animation._start + time / (animation._ts || 1);
16210        animation = animation._dp;
16211      }
16212
16213      return time;
16214    };
16215
16216    _proto.repeat = function repeat(value) {
16217      if (arguments.length) {
16218        this._repeat = value === Infinity ? -2 : value;
16219        return _onUpdateTotalDuration(this);
16220      }
16221
16222      return this._repeat === -2 ? Infinity : this._repeat;
16223    };
16224
16225    _proto.repeatDelay = function repeatDelay(value) {
16226      if (arguments.length) {
16227        this._rDelay = value;
16228        return _onUpdateTotalDuration(this);
16229      }
16230
16231      return this._rDelay;
16232    };
16233
16234    _proto.yoyo = function yoyo(value) {
16235      if (arguments.length) {
16236        this._yoyo = value;
16237        return this;
16238      }
16239
16240      return this._yoyo;
16241    };
16242
16243    _proto.seek = function seek(position, suppressEvents) {
16244      return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));
16245    };
16246
16247    _proto.restart = function restart(includeDelay, suppressEvents) {
16248      return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));
16249    };
16250
16251    _proto.play = function play(from, suppressEvents) {
16252      from != null && this.seek(from, suppressEvents);
16253      return this.reversed(false).paused(false);
16254    };
16255
16256    _proto.reverse = function reverse(from, suppressEvents) {
16257      from != null && this.seek(from || this.totalDuration(), suppressEvents);
16258      return this.reversed(true).paused(false);
16259    };
16260
16261    _proto.pause = function pause(atTime, suppressEvents) {
16262      atTime != null && this.seek(atTime, suppressEvents);
16263      return this.paused(true);
16264    };
16265
16266    _proto.resume = function resume() {
16267      return this.paused(false);
16268    };
16269
16270    _proto.reversed = function reversed(value) {
16271      if (arguments.length) {
16272        !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0));
16273        return this;
16274      }
16275
16276      return this._rts < 0;
16277    };
16278
vendor: 8,548 bytes, lines 16279-16549
16279    _proto.invalidate = function invalidate() {
16280      this._initted = this._act = 0;
16281      this._zTime = -_tinyNum;
16282      return this;
16283    };
16284
16285    _proto.isActive = function isActive() {
16286      var parent = this.parent || this._dp,
16287          start = this._start,
16288          rawTime;
16289      return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);
16290    };
16291
16292    _proto.eventCallback = function eventCallback(type, callback, params) {
16293      var vars = this.vars;
16294
16295      if (arguments.length > 1) {
16296        if (!callback) {
16297          delete vars[type];
16298        } else {
16299          vars[type] = callback;
16300          params && (vars[type + "Params"] = params);
16301          type === "onUpdate" && (this._onUpdate = callback);
16302        }
16303
16304        return this;
16305      }
16306
16307      return vars[type];
16308    };
16309
16310    _proto.then = function then(onFulfilled) {
16311      var self = this;
16312      return new Promise(function (resolve) {
16313        var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,
16314            _resolve = function _resolve() {
16315          var _then = self.then;
16316          self.then = null;
16317          _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);
16318          resolve(f);
16319          self.then = _then;
16320        };
16321
16322        if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {
16323          _resolve();
16324        } else {
16325          self._prom = _resolve;
16326        }
16327      });
16328    };
16329
16330    _proto.kill = function kill() {
16331      _interrupt(this);
16332    };
16333
16334    return Animation;
16335  }();
16336
16337  _setDefaults(Animation.prototype, {
16338    _time: 0,
16339    _start: 0,
16340    _end: 0,
16341    _tTime: 0,
16342    _tDur: 0,
16343    _dirty: 0,
16344    _repeat: 0,
16345    _yoyo: false,
16346    parent: null,
16347    _initted: false,
16348    _rDelay: 0,
16349    _ts: 1,
16350    _dp: 0,
16351    ratio: 0,
16352    _zTime: -_tinyNum,
16353    _prom: 0,
16354    _ps: false,
16355    _rts: 1
16356  });
16357
16358  var Timeline = function (_Animation) {
16359    _inheritsLoose(Timeline, _Animation);
16360
16361    function Timeline(vars, position) {
16362      var _this;
16363
16364      if (vars === void 0) {
16365        vars = {};
16366      }
16367
16368      _this = _Animation.call(this, vars) || this;
16369      _this.labels = {};
16370      _this.smoothChildTiming = !!vars.smoothChildTiming;
16371      _this.autoRemoveChildren = !!vars.autoRemoveChildren;
16372      _this._sort = _isNotFalse(vars.sortChildren);
16373      _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);
16374      vars.reversed && _this.reverse();
16375      vars.paused && _this.paused(true);
16376      vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);
16377      return _this;
16378    }
16379
16380    var _proto2 = Timeline.prototype;
16381
16382    _proto2.to = function to(targets, vars, position) {
16383      _createTweenType(0, arguments, this);
16384
16385      return this;
16386    };
16387
16388    _proto2.from = function from(targets, vars, position) {
16389      _createTweenType(1, arguments, this);
16390
16391      return this;
16392    };
16393
16394    _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {
16395      _createTweenType(2, arguments, this);
16396
16397      return this;
16398    };
16399
16400    _proto2.set = function set(targets, vars, position) {
16401      vars.duration = 0;
16402      vars.parent = this;
16403      _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);
16404      vars.immediateRender = !!vars.immediateRender;
16405      new Tween(targets, vars, _parsePosition(this, position), 1);
16406      return this;
16407    };
16408
16409    _proto2.call = function call(callback, params, position) {
16410      return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);
16411    };
16412
16413    _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
16414      vars.duration = duration;
16415      vars.stagger = vars.stagger || stagger;
16416      vars.onComplete = onCompleteAll;
16417      vars.onCompleteParams = onCompleteAllParams;
16418      vars.parent = this;
16419      new Tween(targets, vars, _parsePosition(this, position));
16420      return this;
16421    };
16422
16423    _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
16424      vars.runBackwards = 1;
16425      _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);
16426      return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);
16427    };
16428
16429    _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {
16430      toVars.startAt = fromVars;
16431      _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);
16432      return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);
16433    };
16434
16435    _proto2.render = function render(totalTime, suppressEvents, force) {
16436      var prevTime = this._time,
16437          tDur = this._dirty ? this.totalDuration() : this._tDur,
16438          dur = this._dur,
16439          tTime = this !== _globalTimeline && totalTime > tDur - _tinyNum && totalTime >= 0 ? tDur : totalTime < _tinyNum ? 0 : totalTime,
16440          crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),
16441          time,
16442          child,
16443          next,
16444          iteration,
16445          cycleDuration,
16446          prevPaused,
16447          pauseTween,
16448          timeScale,
16449          prevStart,
16450          prevIteration,
16451          yoyo,
16452          isYoyo;
16453
16454      if (tTime !== this._tTime || force || crossingStart) {
16455        if (prevTime !== this._time && dur) {
16456          tTime += this._time - prevTime;
16457          totalTime += this._time - prevTime;
16458        }
16459
16460        time = tTime;
16461        prevStart = this._start;
16462        timeScale = this._ts;
16463        prevPaused = !timeScale;
16464
16465        if (crossingStart) {
16466          dur || (prevTime = this._zTime);
16467          (totalTime || !suppressEvents) && (this._zTime = totalTime);
16468        }
16469
16470        if (this._repeat) {
16471          yoyo = this._yoyo;
16472          cycleDuration = dur + this._rDelay;
16473
16474          if (this._repeat < -1 && totalTime < 0) {
16475            return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
16476          }
16477
16478          time = _round(tTime % cycleDuration);
16479
16480          if (tTime === tDur) {
16481            iteration = this._repeat;
16482            time = dur;
16483          } else {
16484            iteration = ~~(tTime / cycleDuration);
16485
16486            if (iteration && iteration === tTime / cycleDuration) {
16487              time = dur;
16488              iteration--;
16489            }
16490
16491            time > dur && (time = dur);
16492          }
16493
16494          prevIteration = _animationCycle(this._tTime, cycleDuration);
16495          !prevTime && this._tTime && prevIteration !== iteration && (prevIteration = iteration);
16496
16497          if (yoyo && iteration & 1) {
16498            time = dur - time;
16499            isYoyo = 1;
16500          }
16501
16502          if (iteration !== prevIteration && !this._lock) {
16503            var rewinding = yoyo && prevIteration & 1,
16504                doesWrap = rewinding === (yoyo && iteration & 1);
16505            iteration < prevIteration && (rewinding = !rewinding);
16506            prevTime = rewinding ? 0 : dur;
16507            this._lock = 1;
16508            this.render(prevTime || (isYoyo ? 0 : _round(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;
16509            this._tTime = tTime;
16510            !suppressEvents && this.parent && _callback(this, "onRepeat");
16511            this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);
16512
16513            if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {
16514              return this;
16515            }
16516
16517            dur = this._dur;
16518            tDur = this._tDur;
16519
16520            if (doesWrap) {
16521              this._lock = 2;
16522              prevTime = rewinding ? dur : -0.0001;
16523              this.render(prevTime, true);
16524              this.vars.repeatRefresh && !isYoyo && this.invalidate();
16525            }
16526
16527            this._lock = 0;
16528
16529            if (!this._ts && !prevPaused) {
16530              return this;
16531            }
16532
16533            _propagateYoyoEase(this, isYoyo);
16534          }
16535        }
16536
16537        if (this._hasPause && !this._forcing && this._lock < 2) {
16538          pauseTween = _findNextPauseTween(this, _round(prevTime), _round(time));
16539
16540          if (pauseTween) {
16541            tTime -= time - (time = pauseTween._start);
16542          }
16543        }
16544
16545        this._tTime = tTime;
16546        this._time = time;
16547        this._act = !timeScale;
16548
16549        if (!this._initted) {
vendor: 15,121 bytes, lines 16550-17082
16550          this._onUpdate = this.vars.onUpdate;
16551          this._initted = 1;
16552          this._zTime = totalTime;
16553          prevTime = 0;
16554        }
16555
16556        if (!prevTime && time && !suppressEvents) {
16557          _callback(this, "onStart");
16558
16559          if (this._tTime !== tTime) {
16560            return this;
16561          }
16562        }
16563
16564        if (time >= prevTime && totalTime >= 0) {
16565          child = this._first;
16566
16567          while (child) {
16568            next = child._next;
16569
16570            if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {
16571              if (child.parent !== this) {
16572                return this.render(totalTime, suppressEvents, force);
16573              }
16574
16575              child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);
16576
16577              if (time !== this._time || !this._ts && !prevPaused) {
16578                pauseTween = 0;
16579                next && (tTime += this._zTime = -_tinyNum);
16580                break;
16581              }
16582            }
16583
16584            child = next;
16585          }
16586        } else {
16587          child = this._last;
16588          var adjustedTime = totalTime < 0 ? totalTime : time;
16589
16590          while (child) {
16591            next = child._prev;
16592
16593            if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {
16594              if (child.parent !== this) {
16595                return this.render(totalTime, suppressEvents, force);
16596              }
16597
16598              child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force);
16599
16600              if (time !== this._time || !this._ts && !prevPaused) {
16601                pauseTween = 0;
16602                next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum);
16603                break;
16604              }
16605            }
16606
16607            child = next;
16608          }
16609        }
16610
16611        if (pauseTween && !suppressEvents) {
16612          this.pause();
16613          pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;
16614
16615          if (this._ts) {
16616            this._start = prevStart;
16617
16618            _setEnd(this);
16619
16620            return this.render(totalTime, suppressEvents, force);
16621          }
16622        }
16623
16624        this._onUpdate && !suppressEvents && _callback(this, "onUpdate", true);
16625        if (tTime === tDur && tDur >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {
16626          (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
16627
16628          if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {
16629            _callback(this, tTime === tDur && totalTime >= 0 ? "onComplete" : "onReverseComplete", true);
16630
16631            this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
16632          }
16633        }
16634      }
16635
16636      return this;
16637    };
16638
16639    _proto2.add = function add(child, position) {
16640      var _this2 = this;
16641
16642      _isNumber(position) || (position = _parsePosition(this, position, child));
16643
16644      if (!(child instanceof Animation)) {
16645        if (_isArray(child)) {
16646          child.forEach(function (obj) {
16647            return _this2.add(obj, position);
16648          });
16649          return this;
16650        }
16651
16652        if (_isString(child)) {
16653          return this.addLabel(child, position);
16654        }
16655
16656        if (_isFunction(child)) {
16657          child = Tween.delayedCall(0, child);
16658        } else {
16659          return this;
16660        }
16661      }
16662
16663      return this !== child ? _addToTimeline(this, child, position) : this;
16664    };
16665
16666    _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {
16667      if (nested === void 0) {
16668        nested = true;
16669      }
16670
16671      if (tweens === void 0) {
16672        tweens = true;
16673      }
16674
16675      if (timelines === void 0) {
16676        timelines = true;
16677      }
16678
16679      if (ignoreBeforeTime === void 0) {
16680        ignoreBeforeTime = -_bigNum;
16681      }
16682
16683      var a = [],
16684          child = this._first;
16685
16686      while (child) {
16687        if (child._start >= ignoreBeforeTime) {
16688          if (child instanceof Tween) {
16689            tweens && a.push(child);
16690          } else {
16691            timelines && a.push(child);
16692            nested && a.push.apply(a, child.getChildren(true, tweens, timelines));
16693          }
16694        }
16695
16696        child = child._next;
16697      }
16698
16699      return a;
16700    };
16701
16702    _proto2.getById = function getById(id) {
16703      var animations = this.getChildren(1, 1, 1),
16704          i = animations.length;
16705
16706      while (i--) {
16707        if (animations[i].vars.id === id) {
16708          return animations[i];
16709        }
16710      }
16711    };
16712
16713    _proto2.remove = function remove(child) {
16714      if (_isString(child)) {
16715        return this.removeLabel(child);
16716      }
16717
16718      if (_isFunction(child)) {
16719        return this.killTweensOf(child);
16720      }
16721
16722      _removeLinkedListItem(this, child);
16723
16724      if (child === this._recent) {
16725        this._recent = this._last;
16726      }
16727
16728      return _uncache(this);
16729    };
16730
16731    _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {
16732      if (!arguments.length) {
16733        return this._tTime;
16734      }
16735
16736      this._forcing = 1;
16737
16738      if (!this._dp && this._ts) {
16739        this._start = _round(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));
16740      }
16741
16742      _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);
16743
16744      this._forcing = 0;
16745      return this;
16746    };
16747
16748    _proto2.addLabel = function addLabel(label, position) {
16749      this.labels[label] = _parsePosition(this, position);
16750      return this;
16751    };
16752
16753    _proto2.removeLabel = function removeLabel(label) {
16754      delete this.labels[label];
16755      return this;
16756    };
16757
16758    _proto2.addPause = function addPause(position, callback, params) {
16759      var t = Tween.delayedCall(0, callback || _emptyFunc, params);
16760      t.data = "isPause";
16761      this._hasPause = 1;
16762      return _addToTimeline(this, t, _parsePosition(this, position));
16763    };
16764
16765    _proto2.removePause = function removePause(position) {
16766      var child = this._first;
16767      position = _parsePosition(this, position);
16768
16769      while (child) {
16770        if (child._start === position && child.data === "isPause") {
16771          _removeFromParent(child);
16772        }
16773
16774        child = child._next;
16775      }
16776    };
16777
16778    _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {
16779      var tweens = this.getTweensOf(targets, onlyActive),
16780          i = tweens.length;
16781
16782      while (i--) {
16783        _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);
16784      }
16785
16786      return this;
16787    };
16788
16789    _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {
16790      var a = [],
16791          parsedTargets = toArray(targets),
16792          child = this._first,
16793          isGlobalTime = _isNumber(onlyActive),
16794          children;
16795
16796      while (child) {
16797        if (child instanceof Tween) {
16798          if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {
16799            a.push(child);
16800          }
16801        } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {
16802          a.push.apply(a, children);
16803        }
16804
16805        child = child._next;
16806      }
16807
16808      return a;
16809    };
16810
16811    _proto2.tweenTo = function tweenTo(position, vars) {
16812      vars = vars || {};
16813
16814      var tl = this,
16815          endTime = _parsePosition(tl, position),
16816          _vars = vars,
16817          startAt = _vars.startAt,
16818          _onStart = _vars.onStart,
16819          onStartParams = _vars.onStartParams,
16820          immediateRender = _vars.immediateRender,
16821          initted,
16822          tween = Tween.to(tl, _setDefaults({
16823        ease: vars.ease || "none",
16824        lazy: false,
16825        immediateRender: false,
16826        time: endTime,
16827        overwrite: "auto",
16828        duration: vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,
16829        onStart: function onStart() {
16830          tl.pause();
16831
16832          if (!initted) {
16833            var duration = vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale());
16834            tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);
16835            initted = 1;
16836          }
16837
16838          _onStart && _onStart.apply(tween, onStartParams || []);
16839        }
16840      }, vars));
16841
16842      return immediateRender ? tween.render(0) : tween;
16843    };
16844
16845    _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {
16846      return this.tweenTo(toPosition, _setDefaults({
16847        startAt: {
16848          time: _parsePosition(this, fromPosition)
16849        }
16850      }, vars));
16851    };
16852
16853    _proto2.recent = function recent() {
16854      return this._recent;
16855    };
16856
16857    _proto2.nextLabel = function nextLabel(afterTime) {
16858      if (afterTime === void 0) {
16859        afterTime = this._time;
16860      }
16861
16862      return _getLabelInDirection(this, _parsePosition(this, afterTime));
16863    };
16864
16865    _proto2.previousLabel = function previousLabel(beforeTime) {
16866      if (beforeTime === void 0) {
16867        beforeTime = this._time;
16868      }
16869
16870      return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);
16871    };
16872
16873    _proto2.currentLabel = function currentLabel(value) {
16874      return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);
16875    };
16876
16877    _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {
16878      if (ignoreBeforeTime === void 0) {
16879        ignoreBeforeTime = 0;
16880      }
16881
16882      var child = this._first,
16883          labels = this.labels,
16884          p;
16885
16886      while (child) {
16887        if (child._start >= ignoreBeforeTime) {
16888          child._start += amount;
16889          child._end += amount;
16890        }
16891
16892        child = child._next;
16893      }
16894
16895      if (adjustLabels) {
16896        for (p in labels) {
16897          if (labels[p] >= ignoreBeforeTime) {
16898            labels[p] += amount;
16899          }
16900        }
16901      }
16902
16903      return _uncache(this);
16904    };
16905
16906    _proto2.invalidate = function invalidate() {
16907      var child = this._first;
16908      this._lock = 0;
16909
16910      while (child) {
16911        child.invalidate();
16912        child = child._next;
16913      }
16914
16915      return _Animation.prototype.invalidate.call(this);
16916    };
16917
16918    _proto2.clear = function clear(includeLabels) {
16919      if (includeLabels === void 0) {
16920        includeLabels = true;
16921      }
16922
16923      var child = this._first,
16924          next;
16925
16926      while (child) {
16927        next = child._next;
16928        this.remove(child);
16929        child = next;
16930      }
16931
16932      this._dp && (this._time = this._tTime = this._pTime = 0);
16933      includeLabels && (this.labels = {});
16934      return _uncache(this);
16935    };
16936
16937    _proto2.totalDuration = function totalDuration(value) {
16938      var max = 0,
16939          self = this,
16940          child = self._last,
16941          prevStart = _bigNum,
16942          prev,
16943          start,
16944          parent;
16945
16946      if (arguments.length) {
16947        return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));
16948      }
16949
16950      if (self._dirty) {
16951        parent = self.parent;
16952
16953        while (child) {
16954          prev = child._prev;
16955          child._dirty && child.totalDuration();
16956          start = child._start;
16957
16958          if (start > prevStart && self._sort && child._ts && !self._lock) {
16959            self._lock = 1;
16960            _addToTimeline(self, child, start - child._delay, 1)._lock = 0;
16961          } else {
16962            prevStart = start;
16963          }
16964
16965          if (start < 0 && child._ts) {
16966            max -= start;
16967
16968            if (!parent && !self._dp || parent && parent.smoothChildTiming) {
16969              self._start += start / self._ts;
16970              self._time -= start;
16971              self._tTime -= start;
16972            }
16973
16974            self.shiftChildren(-start, false, -1e999);
16975            prevStart = 0;
16976          }
16977
16978          child._end > max && child._ts && (max = child._end);
16979          child = prev;
16980        }
16981
16982        _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);
16983
16984        self._dirty = 0;
16985      }
16986
16987      return self._tDur;
16988    };
16989
16990    Timeline.updateRoot = function updateRoot(time) {
16991      if (_globalTimeline._ts) {
16992        _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));
16993
16994        _lastRenderedFrame = _ticker.frame;
16995      }
16996
16997      if (_ticker.frame >= _nextGCFrame) {
16998        _nextGCFrame += _config.autoSleep || 120;
16999        var child = _globalTimeline._first;
17000        if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {
17001          while (child && !child._ts) {
17002            child = child._next;
17003          }
17004
17005          child || _ticker.sleep();
17006        }
17007      }
17008    };
17009
17010    return Timeline;
17011  }(Animation);
17012
17013  _setDefaults(Timeline.prototype, {
17014    _lock: 0,
17015    _hasPause: 0,
17016    _forcing: 0
17017  });
17018
17019  var _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {
17020    var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),
17021        index = 0,
17022        matchIndex = 0,
17023        result,
17024        startNums,
17025        color,
17026        endNum,
17027        chunk,
17028        startNum,
17029        hasRandom,
17030        a;
17031    pt.b = start;
17032    pt.e = end;
17033    start += "";
17034    end += "";
17035
17036    if (hasRandom = ~end.indexOf("random(")) {
17037      end = _replaceRandom(end);
17038    }
17039
17040    if (stringFilter) {
17041      a = [start, end];
17042      stringFilter(a, target, prop);
17043      start = a[0];
17044      end = a[1];
17045    }
17046
17047    startNums = start.match(_complexStringNumExp) || [];
17048
17049    while (result = _complexStringNumExp.exec(end)) {
17050      endNum = result[0];
17051      chunk = end.substring(index, result.index);
17052
17053      if (color) {
17054        color = (color + 1) % 5;
17055      } else if (chunk.substr(-5) === "rgba(") {
17056        color = 1;
17057      }
17058
17059      if (endNum !== startNums[matchIndex++]) {
17060        startNum = parseFloat(startNums[matchIndex - 1]) || 0;
17061        pt._pt = {
17062          _next: pt._pt,
17063          p: chunk || matchIndex === 1 ? chunk : ",",
17064          s: startNum,
17065          c: endNum.charAt(1) === "=" ? parseFloat(endNum.substr(2)) * (endNum.charAt(0) === "-" ? -1 : 1) : parseFloat(endNum) - startNum,
17066          m: color && color < 4 ? Math.round : 0
17067        };
17068        index = _complexStringNumExp.lastIndex;
17069      }
17070    }
17071
17072    pt.c = index < end.length ? end.substring(index, end.length) : "";
17073    pt.fp = funcParam;
17074
17075    if (_relExp.test(end) || hasRandom) {
17076      pt.e = 0;
17077    }
17078
17079    this._pt = pt;
17080    return pt;
17081  },
17082      _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam) {
17083    _isFunction(end) && (end = end(index || 0, target, targets));
17084    var currentValue = target[prop],
17085        parsedStart = start !== "get" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf("set") || !_isFunction(target["get" + prop.substr(3)]) ? prop : "get" + prop.substr(3)](funcParam) : target[prop](),
17086        setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,
17087        pt;
17088
17089    if (_isString(end)) {
17090      if (~end.indexOf("random(")) {
17091        end = _replaceRandom(end);
17092      }
17093
17094      if (end.charAt(1) === "=") {
17095        pt = parseFloat(parsedStart) + parseFloat(end.substr(2)) * (end.charAt(0) === "-" ? -1 : 1) + (getUnit(parsedStart) || 0);
17096
17097        if (pt || pt === 0) {
17098          end = pt;
17099        }
17100      }
17101    }
17102
17103    if (parsedStart !== end) {
17104      if (!isNaN(parsedStart * end) && end !== "") {
17105        pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === "boolean" ? _renderBoolean : _renderPlain, 0, setter);
17106        funcParam && (pt.fp = funcParam);
17107        modifier && pt.modifier(modifier, this, target);
17108        return this._pt = pt;
17109      }
17110
17111      !currentValue && !(prop in target) && _missingPlugin(prop, end);
17112      return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);
17113    }
17114  },
17115      _processVars = function _processVars(vars, index, target, targets, tween) {
17116    _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));
17117
17118    if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {
17119      return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;
17120    }
17121
17122    var copy = {},
17123        p;
17124
17125    for (p in vars) {
17126      copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);
17127    }
17128
17129    return copy;
17130  },
17131      _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {
17132    var plugin, pt, ptLookup, i;
17133
17134    if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {
17135      tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);
17136
17137      if (tween !== _quickTween) {
17138        ptLookup = tween._ptLookup[tween._targets.indexOf(target)];
17139        i = plugin._props.length;
17140
17141        while (i--) {
17142          ptLookup[plugin._props[i]] = pt;
17143        }
17144      }
17145    }
17146
17147    return plugin;
17148  },
17149      _overwritingTween,
17150      _initTween = function _initTween(tween, time) {
17151    var vars = tween.vars,
17152        ease = vars.ease,
17153        startAt = vars.startAt,
17154        immediateRender = vars.immediateRender,
17155        lazy = vars.lazy,
17156        onUpdate = vars.onUpdate,
17157        onUpdateParams = vars.onUpdateParams,
17158        callbackScope = vars.callbackScope,
17159        runBackwards = vars.runBackwards,
17160        yoyoEase = vars.yoyoEase,
17161        keyframes = vars.keyframes,
17162        autoRevert = vars.autoRevert,
17163        dur = tween._dur,
17164        prevStartAt = tween._startAt,
17165        targets = tween._targets,
17166        parent = tween.parent,
17167        fullTargets = parent && parent.data === "nested" ? parent.parent._targets : targets,
17168        autoOverwrite = tween._overwrite === "auto" && !_suppressOverwrites,
17169        tl = tween.timeline,
17170        cleanVars,
17171        i,
17172        p,
17173        pt,
17174        target,
17175        hasPriority,
17176        gsData,
17177        harness,
17178        plugin,
17179        ptLookup,
17180        index,
17181        harnessVars,
17182        overwritten;
17183    tl && (!keyframes || !ease) && (ease = "none");
17184    tween._ease = _parseEase(ease, _defaults.ease);
17185    tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;
17186
17187    if (yoyoEase && tween._yoyo && !tween._repeat) {
17188      yoyoEase = tween._yEase;
17189      tween._yEase = tween._ease;
17190      tween._ease = yoyoEase;
17191    }
17192
17193    tween._from = !tl && !!vars.runBackwards;
17194
17195    if (!tl) {
17196      harness = targets[0] ? _getCache(targets[0]).harness : 0;
17197      harnessVars = harness && vars[harness.prop];
17198      cleanVars = _copyExcluding(vars, _reservedProps);
17199      prevStartAt && prevStartAt.render(-1, true).kill();
17200
17201      if (startAt) {
17202        _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({
17203          data: "isStart",
17204          overwrite: false,
17205          parent: parent,
17206          immediateRender: true,
17207          lazy: _isNotFalse(lazy),
17208          startAt: null,
17209          delay: 0,
17210          onUpdate: onUpdate,
17211          onUpdateParams: onUpdateParams,
17212          callbackScope: callbackScope,
17213          stagger: 0
17214        }, startAt)));
17215
17216        time < 0 && !immediateRender && !autoRevert && tween._startAt.render(-1, true);
17217
17218        if (immediateRender) {
17219          time > 0 && !autoRevert && (tween._startAt = 0);
17220
17221          if (dur && time <= 0) {
17222            time && (tween._zTime = time);
17223            return;
17224          }
17225        } else if (autoRevert === false) {
17226          tween._startAt = 0;
17227        }
17228      } else if (runBackwards && dur) {
17229        if (prevStartAt) {
17230          !autoRevert && (tween._startAt = 0);
17231        } else {
17232          time && (immediateRender = false);
17233          p = _setDefaults({
17234            overwrite: false,
17235            data: "isFromStart",
17236            lazy: immediateRender && _isNotFalse(lazy),
17237            immediateRender: immediateRender,
17238            stagger: 0,
17239            parent: parent
17240          }, cleanVars);
17241          harnessVars && (p[harness.prop] = harnessVars);
17242
17243          _removeFromParent(tween._startAt = Tween.set(targets, p));
17244
17245          time < 0 && tween._startAt.render(-1, true);
17246
17247          if (!immediateRender) {
17248            _initTween(tween._startAt, _tinyNum);
17249          } else if (!time) {
17250            return;
17251          }
17252        }
17253      }
17254
17255      tween._pt = 0;
17256      lazy = dur && _isNotFalse(lazy) || lazy && !dur;
17257
17258      for (i = 0; i < targets.length; i++) {
17259        target = targets[i];
17260        gsData = target._gsap || _harness(targets)[i]._gsap;
17261        tween._ptLookup[i] = ptLookup = {};
17262        _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender();
17263        index = fullTargets === targets ? i : fullTargets.indexOf(target);
17264
17265        if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {
17266          tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);
17267
17268          plugin._props.forEach(function (name) {
17269            ptLookup[name] = pt;
17270          });
17271
17272          plugin.priority && (hasPriority = 1);
17273        }
17274
17275        if (!harness || harnessVars) {
17276          for (p in cleanVars) {
17277            if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {
17278              plugin.priority && (hasPriority = 1);
17279            } else {
17280              ptLookup[p] = pt = _addPropTween.call(tween, target, p, "get", cleanVars[p], index, fullTargets, 0, vars.stringFilter);
17281            }
17282          }
17283        }
17284
17285        tween._op && tween._op[i] && tween.kill(target, tween._op[i]);
17286
17287        if (autoOverwrite && tween._pt) {
17288          _overwritingTween = tween;
17289
17290          _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(0));
17291
17292          overwritten = !tween.parent;
17293          _overwritingTween = 0;
17294        }
17295
17296        tween._pt && lazy && (_lazyLookup[gsData.id] = 1);
17297      }
17298
17299      hasPriority && _sortPropTweensByPriority(tween);
17300      tween._onInit && tween._onInit(tween);
17301    }
17302
17303    tween._onUpdate = onUpdate;
17304    tween._initted = (!tween._op || tween._pt) && !overwritten;
17305  },
17306      _addAliasesToVars = function _addAliasesToVars(targets, vars) {
17307    var harness = targets[0] ? _getCache(targets[0]).harness : 0,
17308        propertyAliases = harness && harness.aliases,
17309        copy,
17310        p,
17311        i,
17312        aliases;
17313
17314    if (!propertyAliases) {
17315      return vars;
17316    }
17317
17318    copy = _merge({}, vars);
17319
17320    for (p in propertyAliases) {
17321      if (p in copy) {
17322        aliases = propertyAliases[p].split(",");
17323        i = aliases.length;
17324
17325        while (i--) {
17326          copy[aliases[i]] = copy[p];
17327        }
17328      }
17329    }
17330
17331    return copy;
17332  },
17333      _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {
17334    return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf("random(") ? _replaceRandom(value) : value;
17335  },
17336      _staggerTweenProps = _callbackNames + "repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase",
17337      _staggerPropsToSkip = (_staggerTweenProps + ",id,stagger,delay,duration,paused,scrollTrigger").split(",");
17338
17339  var Tween = function (_Animation2) {
17340    _inheritsLoose(Tween, _Animation2);
17341
17342    function Tween(targets, vars, position, skipInherit) {
17343      var _this3;
17344
17345      if (typeof vars === "number") {
17346        position.duration = vars;
17347        vars = position;
17348        position = null;
17349      }
17350
17351      _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;
17352      var _this3$vars = _this3.vars,
17353          duration = _this3$vars.duration,
17354          delay = _this3$vars.delay,
17355          immediateRender = _this3$vars.immediateRender,
17356          stagger = _this3$vars.stagger,
17357          overwrite = _this3$vars.overwrite,
17358          keyframes = _this3$vars.keyframes,
17359          defaults = _this3$vars.defaults,
17360          scrollTrigger = _this3$vars.scrollTrigger,
17361          yoyoEase = _this3$vars.yoyoEase,
17362          parent = vars.parent || _globalTimeline,
17363          parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : "length" in vars) ? [targets] : toArray(targets),
17364          tl,
17365          i,
17366          copy,
17367          l,
17368          p,
17369          curTarget,
17370          staggerFunc,
17371          staggerVarsToMerge;
17372      _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn("GSAP target " + targets + " not found. https://greensock.com", !_config.nullTargetWarn) || [];
17373      _this3._ptLookup = [];
17374      _this3._overwrite = overwrite;
17375
17376      if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
17377        vars = _this3.vars;
17378        tl = _this3.timeline = new Timeline({
17379          data: "nested",
17380          defaults: defaults || {}
17381        });
17382        tl.kill();
17383        tl.parent = tl._dp = _assertThisInitialized(_this3);
17384        tl._start = 0;
17385
17386        if (keyframes) {
17387          _setDefaults(tl.vars.defaults, {
17388            ease: "none"
17389          });
17390
17391          stagger ? parsedTargets.forEach(function (t, i) {
17392            return keyframes.forEach(function (frame, j) {
17393              return tl.to(t, frame, j ? ">" : i * stagger);
17394            });
17395          }) : keyframes.forEach(function (frame) {
17396            return tl.to(parsedTargets, frame, ">");
17397          });
17398        } else {
17399          l = parsedTargets.length;
17400          staggerFunc = stagger ? distribute(stagger) : _emptyFunc;
17401
17402          if (_isObject(stagger)) {
17403            for (p in stagger) {
17404              if (~_staggerTweenProps.indexOf(p)) {
17405                staggerVarsToMerge || (staggerVarsToMerge = {});
17406                staggerVarsToMerge[p] = stagger[p];
17407              }
17408            }
17409          }
17410
17411          for (i = 0; i < l; i++) {
17412            copy = {};
17413
17414            for (p in vars) {
17415              if (_staggerPropsToSkip.indexOf(p) < 0) {
17416                copy[p] = vars[p];
17417              }
17418            }
17419
17420            copy.stagger = 0;
17421            yoyoEase && (copy.yoyoEase = yoyoEase);
17422            staggerVarsToMerge && _merge(copy, staggerVarsToMerge);
17423            curTarget = parsedTargets[i];
17424            copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);
17425            copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;
17426
17427            if (!stagger && l === 1 && copy.delay) {
17428              _this3._delay = delay = copy.delay;
17429              _this3._start += delay;
17430              copy.delay = 0;
17431            }
17432
17433            tl.to(curTarget, copy, staggerFunc(i, curTarget, parsedTargets));
17434          }
17435
17436          tl.duration() ? duration = delay = 0 : _this3.timeline = 0;
17437        }
17438
17439        duration || _this3.duration(duration = tl.duration());
17440      } else {
17441        _this3.timeline = 0;
17442      }
17443
17444      if (overwrite === true && !_suppressOverwrites) {
17445        _overwritingTween = _assertThisInitialized(_this3);
17446
17447        _globalTimeline.killTweensOf(parsedTargets);
17448
17449        _overwritingTween = 0;
17450      }
17451
17452      _addToTimeline(parent, _assertThisInitialized(_this3), position);
17453
17454      vars.reversed && _this3.reverse();
17455      vars.paused && _this3.paused(true);
17456
17457      if (immediateRender || !duration && !keyframes && _this3._start === _round(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== "nested") {
17458        _this3._tTime = -_tinyNum;
17459
17460        _this3.render(Math.max(0, -delay));
17461      }
17462
17463      scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);
17464      return _this3;
17465    }
17466
17467    var _proto3 = Tween.prototype;
17468
17469    _proto3.render = function render(totalTime, suppressEvents, force) {
17470      var prevTime = this._time,
17471          tDur = this._tDur,
17472          dur = this._dur,
17473          tTime = totalTime > tDur - _tinyNum && totalTime >= 0 ? tDur : totalTime < _tinyNum ? 0 : totalTime,
17474          time,
17475          pt,
17476          iteration,
17477          cycleDuration,
17478          prevIteration,
17479          isYoyo,
17480          ratio,
17481          timeline,
17482          yoyoEase;
17483
17484      if (!dur) {
17485        _renderZeroDurationTween(this, totalTime, suppressEvents, force);
17486      } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== totalTime < 0) {
17487        time = tTime;
17488        timeline = this.timeline;
17489
17490        if (this._repeat) {
17491          cycleDuration = dur + this._rDelay;
17492
17493          if (this._repeat < -1 && totalTime < 0) {
17494            return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
17495          }
17496
17497          time = _round(tTime % cycleDuration);
17498
17499          if (tTime === tDur) {
17500            iteration = this._repeat;
17501            time = dur;
17502          } else {
17503            iteration = ~~(tTime / cycleDuration);
17504
17505            if (iteration && iteration === tTime / cycleDuration) {
17506              time = dur;
17507              iteration--;
17508            }
17509
17510            time > dur && (time = dur);
17511          }
17512
17513          isYoyo = this._yoyo && iteration & 1;
17514
17515          if (isYoyo) {
17516            yoyoEase = this._yEase;
17517            time = dur - time;
17518          }
17519
17520          prevIteration = _animationCycle(this._tTime, cycleDuration);
17521
17522          if (time === prevTime && !force && this._initted) {
17523            return this;
17524          }
17525
17526          if (iteration !== prevIteration) {
17527            timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo);
17528
17529            if (this.vars.repeatRefresh && !isYoyo && !this._lock) {
17530              this._lock = force = 1;
17531              this.render(_round(cycleDuration * iteration), true).invalidate()._lock = 0;
17532            }
17533          }
17534        }
17535
17536        if (!this._initted) {
17537          if (_attemptInitTween(this, totalTime < 0 ? totalTime : time, force, suppressEvents)) {
17538            this._tTime = 0;
17539            return this;
17540          }
17541
17542          if (dur !== this._dur) {
17543            return this.render(totalTime, suppressEvents, force);
17544          }
17545        }
17546
17547        this._tTime = tTime;
17548        this._time = time;
17549
17550        if (!this._act && this._ts) {
17551          this._act = 1;
17552          this._lazy = 0;
17553        }
17554
17555        this.ratio = ratio = (yoyoEase || this._ease)(time / dur);
17556
17557        if (this._from) {
17558          this.ratio = ratio = 1 - ratio;
17559        }
17560
17561        time && !prevTime && !suppressEvents && _callback(this, "onStart");
17562
17563        if (time && !prevTime && !suppressEvents) {
17564          _callback(this, "onStart");
17565
17566          if (this._tTime !== tTime) {
17567            return this;
17568          }
17569        }
17570
17571        pt = this._pt;
17572
17573        while (pt) {
17574          pt.r(ratio, pt.d);
17575          pt = pt._next;
17576        }
17577
17578        timeline && timeline.render(totalTime < 0 ? totalTime : !time && isYoyo ? -_tinyNum : timeline._dur * ratio, suppressEvents, force) || this._startAt && (this._zTime = totalTime);
17579
17580        if (this._onUpdate && !suppressEvents) {
17581          totalTime < 0 && this._startAt && this._startAt.render(totalTime, true, force);
17582
17583          _callback(this, "onUpdate");
17584        }
17585
17586        this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, "onRepeat");
17587
17588        if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {
17589          totalTime < 0 && this._startAt && !this._onUpdate && this._startAt.render(totalTime, true, true);
17590          (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
17591
17592          if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime)) {
17593            _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true);
17594
17595            this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
17596          }
17597        }
17598      }
17599
17600      return this;
17601    };
17602
17603    _proto3.targets = function targets() {
17604      return this._targets;
17605    };
17606
vendor: 12,922 bytes, lines 17607-18034
17607    _proto3.invalidate = function invalidate() {
17608      this._pt = this._op = this._startAt = this._onUpdate = this._lazy = this.ratio = 0;
17609      this._ptLookup = [];
17610      this.timeline && this.timeline.invalidate();
17611      return _Animation2.prototype.invalidate.call(this);
17612    };
17613
17614    _proto3.kill = function kill(targets, vars) {
17615      if (vars === void 0) {
17616        vars = "all";
17617      }
17618
17619      if (!targets && (!vars || vars === "all")) {
17620        this._lazy = this._pt = 0;
17621        return this.parent ? _interrupt(this) : this;
17622      }
17623
17624      if (this.timeline) {
17625        var tDur = this.timeline.totalDuration();
17626        this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this);
17627        this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1);
17628        return this;
17629      }
17630
17631      var parsedTargets = this._targets,
17632          killingTargets = targets ? toArray(targets) : parsedTargets,
17633          propTweenLookup = this._ptLookup,
17634          firstPT = this._pt,
17635          overwrittenProps,
17636          curLookup,
17637          curOverwriteProps,
17638          props,
17639          p,
17640          pt,
17641          i;
17642
17643      if ((!vars || vars === "all") && _arraysMatch(parsedTargets, killingTargets)) {
17644        vars === "all" && (this._pt = 0);
17645        return _interrupt(this);
17646      }
17647
17648      overwrittenProps = this._op = this._op || [];
17649
17650      if (vars !== "all") {
17651        if (_isString(vars)) {
17652          p = {};
17653
17654          _forEachName(vars, function (name) {
17655            return p[name] = 1;
17656          });
17657
17658          vars = p;
17659        }
17660
17661        vars = _addAliasesToVars(parsedTargets, vars);
17662      }
17663
17664      i = parsedTargets.length;
17665
17666      while (i--) {
17667        if (~killingTargets.indexOf(parsedTargets[i])) {
17668          curLookup = propTweenLookup[i];
17669
17670          if (vars === "all") {
17671            overwrittenProps[i] = vars;
17672            props = curLookup;
17673            curOverwriteProps = {};
17674          } else {
17675            curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};
17676            props = vars;
17677          }
17678
17679          for (p in props) {
17680            pt = curLookup && curLookup[p];
17681
17682            if (pt) {
17683              if (!("kill" in pt.d) || pt.d.kill(p) === true) {
17684                _removeLinkedListItem(this, pt, "_pt");
17685              }
17686
17687              delete curLookup[p];
17688            }
17689
17690            if (curOverwriteProps !== "all") {
17691              curOverwriteProps[p] = 1;
17692            }
17693          }
17694        }
17695      }
17696
17697      this._initted && !this._pt && firstPT && _interrupt(this);
17698      return this;
17699    };
17700
17701    Tween.to = function to(targets, vars) {
17702      return new Tween(targets, vars, arguments[2]);
17703    };
17704
17705    Tween.from = function from(targets, vars) {
17706      return _createTweenType(1, arguments);
17707    };
17708
17709    Tween.delayedCall = function delayedCall(delay, callback, params, scope) {
17710      return new Tween(callback, 0, {
17711        immediateRender: false,
17712        lazy: false,
17713        overwrite: false,
17714        delay: delay,
17715        onComplete: callback,
17716        onReverseComplete: callback,
17717        onCompleteParams: params,
17718        onReverseCompleteParams: params,
17719        callbackScope: scope
17720      });
17721    };
17722
17723    Tween.fromTo = function fromTo(targets, fromVars, toVars) {
17724      return _createTweenType(2, arguments);
17725    };
17726
17727    Tween.set = function set(targets, vars) {
17728      vars.duration = 0;
17729      vars.repeatDelay || (vars.repeat = 0);
17730      return new Tween(targets, vars);
17731    };
17732
17733    Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {
17734      return _globalTimeline.killTweensOf(targets, props, onlyActive);
17735    };
17736
17737    return Tween;
17738  }(Animation);
17739
17740  _setDefaults(Tween.prototype, {
17741    _targets: [],
17742    _lazy: 0,
17743    _startAt: 0,
17744    _op: 0,
17745    _onInit: 0
17746  });
17747
17748  _forEachName("staggerTo,staggerFrom,staggerFromTo", function (name) {
17749    Tween[name] = function () {
17750      var tl = new Timeline(),
17751          params = _slice.call(arguments, 0);
17752
17753      params.splice(name === "staggerFromTo" ? 5 : 4, 0, 0);
17754      return tl[name].apply(tl, params);
17755    };
17756  });
17757
17758  var _setterPlain = function _setterPlain(target, property, value) {
17759    return target[property] = value;
17760  },
17761      _setterFunc = function _setterFunc(target, property, value) {
17762    return target[property](value);
17763  },
17764      _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {
17765    return target[property](data.fp, value);
17766  },
17767      _setterAttribute = function _setterAttribute(target, property, value) {
17768    return target.setAttribute(property, value);
17769  },
17770      _getSetter = function _getSetter(target, property) {
17771    return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;
17772  },
17773      _renderPlain = function _renderPlain(ratio, data) {
17774    return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);
17775  },
17776      _renderBoolean = function _renderBoolean(ratio, data) {
17777    return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);
17778  },
17779      _renderComplexString = function _renderComplexString(ratio, data) {
17780    var pt = data._pt,
17781        s = "";
17782
17783    if (!ratio && data.b) {
17784      s = data.b;
17785    } else if (ratio === 1 && data.e) {
17786      s = data.e;
17787    } else {
17788      while (pt) {
17789        s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s;
17790        pt = pt._next;
17791      }
17792
17793      s += data.c;
17794    }
17795
17796    data.set(data.t, data.p, s, data);
17797  },
17798      _renderPropTweens = function _renderPropTweens(ratio, data) {
17799    var pt = data._pt;
17800
17801    while (pt) {
17802      pt.r(ratio, pt.d);
17803      pt = pt._next;
17804    }
17805  },
17806      _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {
17807    var pt = this._pt,
17808        next;
17809
17810    while (pt) {
17811      next = pt._next;
17812      pt.p === property && pt.modifier(modifier, tween, target);
17813      pt = next;
17814    }
17815  },
17816      _killPropTweensOf = function _killPropTweensOf(property) {
17817    var pt = this._pt,
17818        hasNonDependentRemaining,
17819        next;
17820
17821    while (pt) {
17822      next = pt._next;
17823
17824      if (pt.p === property && !pt.op || pt.op === property) {
17825        _removeLinkedListItem(this, pt, "_pt");
17826      } else if (!pt.dep) {
17827        hasNonDependentRemaining = 1;
17828      }
17829
17830      pt = next;
17831    }
17832
17833    return !hasNonDependentRemaining;
17834  },
17835      _setterWithModifier = function _setterWithModifier(target, property, value, data) {
17836    data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);
17837  },
17838      _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {
17839    var pt = parent._pt,
17840        next,
17841        pt2,
17842        first,
17843        last;
17844
17845    while (pt) {
17846      next = pt._next;
17847      pt2 = first;
17848
17849      while (pt2 && pt2.pr > pt.pr) {
17850        pt2 = pt2._next;
17851      }
17852
17853      if (pt._prev = pt2 ? pt2._prev : last) {
17854        pt._prev._next = pt;
17855      } else {
17856        first = pt;
17857      }
17858
17859      if (pt._next = pt2) {
17860        pt2._prev = pt;
17861      } else {
17862        last = pt;
17863      }
17864
17865      pt = next;
17866    }
17867
17868    parent._pt = first;
17869  };
17870
17871  var PropTween = function () {
17872    function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {
17873      this.t = target;
17874      this.s = start;
17875      this.c = change;
17876      this.p = prop;
17877      this.r = renderer || _renderPlain;
17878      this.d = data || this;
17879      this.set = setter || _setterPlain;
17880      this.pr = priority || 0;
17881      this._next = next;
17882
17883      if (next) {
17884        next._prev = this;
17885      }
17886    }
17887
17888    var _proto4 = PropTween.prototype;
17889
17890    _proto4.modifier = function modifier(func, tween, target) {
17891      this.mSet = this.mSet || this.set;
17892      this.set = _setterWithModifier;
17893      this.m = func;
17894      this.mt = target;
17895      this.tween = tween;
17896    };
17897
17898    return PropTween;
17899  }();
17900
17901  _forEachName(_callbackNames + "parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger", function (name) {
17902    return _reservedProps[name] = 1;
17903  });
17904
17905  _globals.TweenMax = _globals.TweenLite = Tween;
17906  _globals.TimelineLite = _globals.TimelineMax = Timeline;
17907  _globalTimeline = new Timeline({
17908    sortChildren: false,
17909    defaults: _defaults,
17910    autoRemoveChildren: true,
17911    id: "root",
17912    smoothChildTiming: true
17913  });
17914  _config.stringFilter = _colorStringFilter;
17915  var _gsap = {
17916    registerPlugin: function registerPlugin() {
17917      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
17918        args[_key2] = arguments[_key2];
17919      }
17920
17921      args.forEach(function (config) {
17922        return _createPlugin(config);
17923      });
17924    },
17925    timeline: function timeline(vars) {
17926      return new Timeline(vars);
17927    },
17928    getTweensOf: function getTweensOf(targets, onlyActive) {
17929      return _globalTimeline.getTweensOf(targets, onlyActive);
17930    },
17931    getProperty: function getProperty(target, property, unit, uncache) {
17932      _isString(target) && (target = toArray(target)[0]);
17933
17934      var getter = _getCache(target || {}).get,
17935          format = unit ? _passThrough : _numericIfPossible;
17936
17937      unit === "native" && (unit = "");
17938      return !target ? target : !property ? function (property, unit, uncache) {
17939        return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
17940      } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
17941    },
17942    quickSetter: function quickSetter(target, property, unit) {
17943      target = toArray(target);
17944
17945      if (target.length > 1) {
17946        var setters = target.map(function (t) {
17947          return gsap.quickSetter(t, property, unit);
17948        }),
17949            l = setters.length;
17950        return function (value) {
17951          var i = l;
17952
17953          while (i--) {
17954            setters[i](value);
17955          }
17956        };
17957      }
17958
17959      target = target[0] || {};
17960
17961      var Plugin = _plugins[property],
17962          cache = _getCache(target),
17963          p = cache.harness && (cache.harness.aliases || {})[property] || property,
17964          setter = Plugin ? function (value) {
17965        var p = new Plugin();
17966        _quickTween._pt = 0;
17967        p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);
17968        p.render(1, p);
17969        _quickTween._pt && _renderPropTweens(1, _quickTween);
17970      } : cache.set(target, p);
17971
17972      return Plugin ? setter : function (value) {
17973        return setter(target, p, unit ? value + unit : value, cache, 1);
17974      };
17975    },
17976    isTweening: function isTweening(targets) {
17977      return _globalTimeline.getTweensOf(targets, true).length > 0;
17978    },
17979    defaults: function defaults(value) {
17980      value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));
17981      return _mergeDeep(_defaults, value || {});
17982    },
17983    config: function config(value) {
17984      return _mergeDeep(_config, value || {});
17985    },
17986    registerEffect: function registerEffect(_ref3) {
17987      var name = _ref3.name,
17988          effect = _ref3.effect,
17989          plugins = _ref3.plugins,
17990          defaults = _ref3.defaults,
17991          extendTimeline = _ref3.extendTimeline;
17992      (plugins || "").split(",").forEach(function (pluginName) {
17993        return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + " effect requires " + pluginName + " plugin.");
17994      });
17995
17996      _effects[name] = function (targets, vars, tl) {
17997        return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);
17998      };
17999
18000      if (extendTimeline) {
18001        Timeline.prototype[name] = function (targets, vars, position) {
18002          return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);
18003        };
18004      }
18005    },
18006    registerEase: function registerEase(name, ease) {
18007      _easeMap[name] = _parseEase(ease);
18008    },
18009    parseEase: function parseEase(ease, defaultEase) {
18010      return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;
18011    },
18012    getById: function getById(id) {
18013      return _globalTimeline.getById(id);
18014    },
18015    exportRoot: function exportRoot(vars, includeDelayedCalls) {
18016      if (vars === void 0) {
18017        vars = {};
18018      }
18019
18020      var tl = new Timeline(vars),
18021          child,
18022          next;
18023      tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);
18024
18025      _globalTimeline.remove(tl);
18026
18027      tl._dp = 0;
18028      tl._time = tl._tTime = _globalTimeline._time;
18029      child = _globalTimeline._first;
18030
18031      while (child) {
18032        next = child._next;
18033
18034        if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {
18035          _addToTimeline(tl, child, child._start - child._delay);
18036        }
18037
18038        child = next;
18039      }
18040
18041      _addToTimeline(_globalTimeline, tl, 0);
18042
18043      return tl;
18044    },
18045    utils: {
18046      wrap: wrap,
18047      wrapYoyo: wrapYoyo,
18048      distribute: distribute,
18049      random: random,
18050      snap: snap,
18051      normalize: normalize,
18052      getUnit: getUnit,
18053      clamp: clamp,
18054      splitColor: splitColor,
18055      toArray: toArray,
18056      selector: selector,
18057      mapRange: mapRange,
18058      pipe: pipe,
18059      unitize: unitize,
18060      interpolate: interpolate,
18061      shuffle: shuffle
18062    },
18063    install: _install,
18064    effects: _effects,
18065    ticker: _ticker,
18066    updateRoot: Timeline.updateRoot,
18067    plugins: _plugins,
18068    globalTimeline: _globalTimeline,
18069    core: {
18070      PropTween: PropTween,
18071      globals: _addGlobal,
18072      Tween: Tween,
18073      Timeline: Timeline,
18074      Animation: Animation,
18075      getCache: _getCache,
18076      _removeLinkedListItem: _removeLinkedListItem,
18077      suppressOverwrites: function suppressOverwrites(value) {
18078        return _suppressOverwrites = value;
18079      }
18080    }
18081  };
18082
18083  _forEachName("to,from,fromTo,delayedCall,set,killTweensOf", function (name) {
18084    return _gsap[name] = Tween[name];
18085  });
18086
18087  _ticker.add(Timeline.updateRoot);
18088
18089  _quickTween = _gsap.to({}, {
18090    duration: 0
18091  });
18092
18093  var _getPluginPropTween = function _getPluginPropTween(plugin, prop
vendor: 18,127 bytes, lines 18093-18661
18093) {
18094    var pt = plugin._pt;
18095
18096    while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {
18097      pt = pt._next;
18098    }
18099
18100    return pt;
18101  },
18102      _addModifiers = function _addModifiers(tween, modifiers) {
18103    var targets = tween._targets,
18104        p,
18105        i,
18106        pt;
18107
18108    for (p in modifiers) {
18109      i = targets.length;
18110
18111      while (i--) {
18112        pt = tween._ptLookup[i][p];
18113
18114        if (pt && (pt = pt.d)) {
18115          if (pt._pt) {
18116            pt = _getPluginPropTween(pt, p);
18117          }
18118
18119          pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);
18120        }
18121      }
18122    }
18123  },
18124      _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {
18125    return {
18126      name: name,
18127      rawVars: 1,
18128      init: function init(target, vars, tween) {
18129        tween._onInit = function (tween) {
18130          var temp, p;
18131
18132          if (_isString(vars)) {
18133            temp = {};
18134
18135            _forEachName(vars, function (name) {
18136              return temp[name] = 1;
18137            });
18138
18139            vars = temp;
18140          }
18141
18142          if (modifier) {
18143            temp = {};
18144
18145            for (p in vars) {
18146              temp[p] = modifier(vars[p]);
18147            }
18148
18149            vars = temp;
18150          }
18151
18152          _addModifiers(tween, vars);
18153        };
18154      }
18155    };
18156  };
18157
18158  var gsap = _gsap.registerPlugin({
18159    name: "attr",
18160    init: function init(target, vars, tween, index, targets) {
18161      var p, pt;
18162
18163      for (p in vars) {
18164        pt = this.add(target, "setAttribute", (target.getAttribute(p) || 0) + "", vars[p], index, targets, 0, 0, p);
18165        pt && (pt.op = p);
18166
18167        this._props.push(p);
18168      }
18169    }
18170  }, {
18171    name: "endArray",
18172    init: function init(target, value) {
18173      var i = value.length;
18174
18175      while (i--) {
18176        this.add(target, i, target[i] || 0, value[i]);
18177      }
18178    }
18179  }, _buildModifierPlugin("roundProps", _roundModifier), _buildModifierPlugin("modifiers"), _buildModifierPlugin("snap", snap)) || _gsap;
18180  Tween.version = Timeline.version = gsap.version = "3.7.0";
18181  _coreReady = 1;
18182  _windowExists() && _wake();
18183  var Power0 = _easeMap.Power0,
18184      Power1 = _easeMap.Power1,
18185      Power2 = _easeMap.Power2,
18186      Power3 = _easeMap.Power3,
18187      Power4 = _easeMap.Power4,
18188      Linear = _easeMap.Linear,
18189      Quad = _easeMap.Quad,
18190      Cubic = _easeMap.Cubic,
18191      Quart = _easeMap.Quart,
18192      Quint = _easeMap.Quint,
18193      Strong = _easeMap.Strong,
18194      Elastic = _easeMap.Elastic,
18195      Back = _easeMap.Back,
18196      SteppedEase = _easeMap.SteppedEase,
18197      Bounce = _easeMap.Bounce,
18198      Sine = _easeMap.Sine,
18199      Expo = _easeMap.Expo,
18200      Circ = _easeMap.Circ;
18201
18202  var _win$1,
18203      _doc$1,
18204      _docElement,
18205      _pluginInitted,
18206      _tempDiv,
18207      _tempDivStyler,
18208      _recentSetterPlugin,
18209      _windowExists$1 = function _windowExists() {
18210    return typeof window !== "undefined";
18211  },
18212      _transformProps = {},
18213      _RAD2DEG = 180 / Math.PI,
18214      _DEG2RAD = Math.PI / 180,
18215      _atan2 = Math.atan2,
18216      _bigNum$1 = 1e8,
18217      _capsExp = /([A-Z])/g,
18218      _horizontalExp = /(?:left|right|width|margin|padding|x)/i,
18219      _complexExp = /[\s,\(]\S/,
18220      _propertyAliases = {
18221    autoAlpha: "opacity,visibility",
18222    scale: "scaleX,scaleY",
18223    alpha: "opacity"
18224  },
18225      _renderCSSProp = function _renderCSSProp(ratio, data) {
18226    return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);
18227  },
18228      _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {
18229    return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);
18230  },
18231      _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {
18232    return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);
18233  },
18234      _renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {
18235    var value = data.s + data.c * ratio;
18236    data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);
18237  },
18238      _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {
18239    return data.set(data.t, data.p, ratio ? data.e : data.b, data);
18240  },
18241      _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {
18242    return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);
18243  },
18244      _setterCSSStyle = function _setterCSSStyle(target, property, value) {
18245    return target.style[property] = value;
18246  },
18247      _setterCSSProp = function _setterCSSProp(target, property, value) {
18248    return target.style.setProperty(property, value);
18249  },
18250      _setterTransform = function _setterTransform(target, property, value) {
18251    return target._gsap[property] = value;
18252  },
18253      _setterScale = function _setterScale(target, property, value) {
18254    return target._gsap.scaleX = target._gsap.scaleY = value;
18255  },
18256      _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {
18257    var cache = target._gsap;
18258    cache.scaleX = cache.scaleY = value;
18259    cache.renderTransform(ratio, cache);
18260  },
18261      _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {
18262    var cache = target._gsap;
18263    cache[property] = value;
18264    cache.renderTransform(ratio, cache);
18265  },
18266      _transformProp = "transform",
18267      _transformOriginProp = _transformProp + "Origin",
18268      _supports3D,
18269      _createElement = function _createElement(type, ns) {
18270    var e = _doc$1.createElementNS ? _doc$1.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$1.createElement(type);
18271    return e.style ? e : _doc$1.createElement(type);
18272  },
18273      _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {
18274    var cs = getComputedStyle(target);
18275    return cs[property] || cs.getPropertyValue(property.replace(_capsExp, "-$1").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || "";
18276  },
18277      _prefixes = "O,Moz,ms,Ms,Webkit".split(","),
18278      _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {
18279    var e = element || _tempDiv,
18280        s = e.style,
18281        i = 5;
18282
18283    if (property in s && !preferPrefix) {
18284      return property;
18285    }
18286
18287    property = property.charAt(0).toUpperCase() + property.substr(1);
18288
18289    while (i-- && !(_prefixes[i] + property in s)) {}
18290
18291    return i < 0 ? null : (i === 3 ? "ms" : i >= 0 ? _prefixes[i] : "") + property;
18292  },
18293      _initCore = function _initCore() {
18294    if (_windowExists$1() && window.document) {
18295      _win$1 = window;
18296      _doc$1 = _win$1.document;
18297      _docElement = _doc$1.documentElement;
18298      _tempDiv = _createElement("div") || {
18299        style: {}
18300      };
18301      _tempDivStyler = _createElement("div");
18302      _transformProp = _checkPropPrefix(_transformProp);
18303      _transformOriginProp = _transformProp + "Origin";
18304      _tempDiv.style.cssText = "border-width:0;line-height:0;position:absolute;padding:0";
18305      _supports3D = !!_checkPropPrefix("perspective");
18306      _pluginInitted = 1;
18307    }
18308  },
18309      _getBBoxHack = function _getBBoxHack(swapIfPossible) {
18310    var svg = _createElement("svg", this.ownerSVGElement && this.ownerSVGElement.getAttribute("xmlns") || "http://www.w3.org/2000/svg"),
18311        oldParent = this.parentNode,
18312        oldSibling = this.nextSibling,
18313        oldCSS = this.style.cssText,
18314        bbox;
18315
18316    _docElement.appendChild(svg);
18317
18318    svg.appendChild(this);
18319    this.style.display = "block";
18320
18321    if (swapIfPossible) {
18322      try {
18323        bbox = this.getBBox();
18324        this._gsapBBox = this.getBBox;
18325        this.getBBox = _getBBoxHack;
18326      } catch (e) {}
18327    } else if (this._gsapBBox) {
18328      bbox = this._gsapBBox();
18329    }
18330
18331    if (oldParent) {
18332      if (oldSibling) {
18333        oldParent.insertBefore(this, oldSibling);
18334      } else {
18335        oldParent.appendChild(this);
18336      }
18337    }
18338
18339    _docElement.removeChild(svg);
18340
18341    this.style.cssText = oldCSS;
18342    return bbox;
18343  },
18344      _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {
18345    var i = attributesArray.length;
18346
18347    while (i--) {
18348      if (target.hasAttribute(attributesArray[i])) {
18349        return target.getAttribute(attributesArray[i]);
18350      }
18351    }
18352  },
18353      _getBBox = function _getBBox(target) {
18354    var bounds;
18355
18356    try {
18357      bounds = target.getBBox();
18358    } catch (error) {
18359      bounds = _getBBoxHack.call(target, true);
18360    }
18361
18362    bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true));
18363    return bounds && !bounds.width && !bounds.x && !bounds.y ? {
18364      x: +_getAttributeFallbacks(target, ["x", "cx", "x1"]) || 0,
18365      y: +_getAttributeFallbacks(target, ["y", "cy", "y1"]) || 0,
18366      width: 0,
18367      height: 0
18368    } : bounds;
18369  },
18370      _isSVG = function _isSVG(e) {
18371    return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));
18372  },
18373      _removeProperty = function _removeProperty(target, property) {
18374    if (property) {
18375      var style = target.style;
18376
18377      if (property in _transformProps && property !== _transformOriginProp) {
18378        property = _transformProp;
18379      }
18380
18381      if (style.removeProperty) {
18382        if (property.substr(0, 2) === "ms" || property.substr(0, 6) === "webkit") {
18383          property = "-" + property;
18384        }
18385
18386        style.removeProperty(property.replace(_capsExp, "-$1").toLowerCase());
18387      } else {
18388        style.removeAttribute(property);
18389      }
18390    }
18391  },
18392      _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {
18393    var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);
18394    plugin._pt = pt;
18395    pt.b = beginning;
18396    pt.e = end;
18397
18398    plugin._props.push(property);
18399
18400    return pt;
18401  },
18402      _nonConvertibleUnits = {
18403    deg: 1,
18404    rad: 1,
18405    turn: 1
18406  },
18407      _convertToUnit = function _convertToUnit(target, property, value, unit) {
18408    var curValue = parseFloat(value) || 0,
18409        curUnit = (value + "").trim().substr((curValue + "").length) || "px",
18410        style = _tempDiv.style,
18411        horizontal = _horizontalExp.test(property),
18412        isRootSVG = target.tagName.toLowerCase() === "svg",
18413        measureProperty = (isRootSVG ? "client" : "offset") + (horizontal ? "Width" : "Height"),
18414        amount = 100,
18415        toPixels = unit === "px",
18416        toPercent = unit === "%",
18417        px,
18418        parent,
18419        cache,
18420        isSVG;
18421
18422    if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {
18423      return curValue;
18424    }
18425
18426    curUnit !== "px" && !toPixels && (curValue = _convertToUnit(target, property, value, "px"));
18427    isSVG = target.getCTM && _isSVG(target);
18428
18429    if ((toPercent || curUnit === "%") && (_transformProps[property] || ~property.indexOf("adius"))) {
18430      px = isSVG ? target.getBBox()[horizontal ? "width" : "height"] : target[measureProperty];
18431      return _round(toPercent ? curValue / px * amount : curValue / 100 * px);
18432    }
18433
18434    style[horizontal ? "width" : "height"] = amount + (toPixels ? curUnit : unit);
18435    parent = ~property.indexOf("adius") || unit === "em" && target.appendChild && !isRootSVG ? target : target.parentNode;
18436
18437    if (isSVG) {
18438      parent = (target.ownerSVGElement || {}).parentNode;
18439    }
18440
18441    if (!parent || parent === _doc$1 || !parent.appendChild) {
18442      parent = _doc$1.body;
18443    }
18444
18445    cache = parent._gsap;
18446
18447    if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time) {
18448      return _round(curValue / cache.width * amount);
18449    } else {
18450      (toPercent || curUnit === "%") && (style.position = _getComputedProperty(target, "position"));
18451      parent === target && (style.position = "static");
18452      parent.appendChild(_tempDiv);
18453      px = _tempDiv[measureProperty];
18454      parent.removeChild(_tempDiv);
18455      style.position = "absolute";
18456
18457      if (horizontal && toPercent) {
18458        cache = _getCache(parent);
18459        cache.time = _ticker.time;
18460        cache.width = parent[measureProperty];
18461      }
18462    }
18463
18464    return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);
18465  },
18466      _get = function _get(target, property, unit, uncache) {
18467    var value;
18468    _pluginInitted || _initCore();
18469
18470    if (property in _propertyAliases && property !== "transform") {
18471      property = _propertyAliases[property];
18472
18473      if (~property.indexOf(",")) {
18474        property = property.split(",")[0];
18475      }
18476    }
18477
18478    if (_transformProps[property] && property !== "transform") {
18479      value = _parseTransform(target, uncache);
18480      value = property !== "transformOrigin" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + " " + value.zOrigin + "px";
18481    } else {
18482      value = target.style[property];
18483
18484      if (!value || value === "auto" || uncache || ~(value + "").indexOf("calc(")) {
18485        value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === "opacity" ? 1 : 0);
18486      }
18487    }
18488
18489    return unit && !~(value + "").trim().indexOf(" ") ? _convertToUnit(target, property, value, unit) + unit : value;
18490  },
18491      _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {
18492    if (!start || start === "none") {
18493      var p = _checkPropPrefix(prop, target, 1),
18494          s = p && _getComputedProperty(target, p, 1);
18495
18496      if (s && s !== start) {
18497        prop = p;
18498        start = s;
18499      } else if (prop === "borderColor") {
18500        start = _getComputedProperty(target, "borderTopColor");
18501      }
18502    }
18503
18504    var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),
18505        index = 0,
18506        matchIndex = 0,
18507        a,
18508        result,
18509        startValues,
18510        startNum,
18511        color,
18512        startValue,
18513        endValue,
18514        endNum,
18515        chunk,
18516        endUnit,
18517        startUnit,
18518        relative,
18519        endValues;
18520    pt.b = start;
18521    pt.e = end;
18522    start += "";
18523    end += "";
18524
18525    if (end === "auto") {
18526      target.style[prop] = end;
18527      end = _getComputedProperty(target, prop) || end;
18528      target.style[prop] = start;
18529    }
18530
18531    a = [start, end];
18532
18533    _colorStringFilter(a);
18534
18535    start = a[0];
18536    end = a[1];
18537    startValues = start.match(_numWithUnitExp) || [];
18538    endValues = end.match(_numWithUnitExp) || [];
18539
18540    if (endValues.length) {
18541      while (result = _numWithUnitExp.exec(end)) {
18542        endValue = result[0];
18543        chunk = end.substring(index, result.index);
18544
18545        if (color) {
18546          color = (color + 1) % 5;
18547        } else if (chunk.substr(-5) === "rgba(" || chunk.substr(-5) === "hsla(") {
18548          color = 1;
18549        }
18550
18551        if (endValue !== (startValue = startValues[matchIndex++] || "")) {
18552          startNum = parseFloat(startValue) || 0;
18553          startUnit = startValue.substr((startNum + "").length);
18554          relative = endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0;
18555
18556          if (relative) {
18557            endValue = endValue.substr(2);
18558          }
18559
18560          endNum = parseFloat(endValue);
18561          endUnit = endValue.substr((endNum + "").length);
18562          index = _numWithUnitExp.lastIndex - endUnit.length;
18563
18564          if (!endUnit) {
18565            endUnit = endUnit || _config.units[prop] || startUnit;
18566
18567            if (index === end.length) {
18568              end += endUnit;
18569              pt.e += endUnit;
18570            }
18571          }
18572
18573          if (startUnit !== endUnit) {
18574            startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;
18575          }
18576
18577          pt._pt = {
18578            _next: pt._pt,
18579            p: chunk || matchIndex === 1 ? chunk : ",",
18580            s: startNum,
18581            c: relative ? relative * endNum : endNum - startNum,
18582            m: color && color < 4 || prop === "zIndex" ? Math.round : 0
18583          };
18584        }
18585      }
18586
18587      pt.c = index < end.length ? end.substring(index, end.length) : "";
18588    } else {
18589      pt.r = prop === "display" && end === "none" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;
18590    }
18591
18592    _relExp.test(end) && (pt.e = 0);
18593    this._pt = pt;
18594    return pt;
18595  },
18596      _keywordToPercent = {
18597    top: "0%",
18598    bottom: "100%",
18599    left: "0%",
18600    right: "100%",
18601    center: "50%"
18602  },
18603      _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {
18604    var split = value.split(" "),
18605        x = split[0],
18606        y = split[1] || "50%";
18607
18608    if (x === "top" || x === "bottom" || y === "left" || y === "right") {
18609      value = x;
18610      x = y;
18611      y = value;
18612    }
18613
18614    split[0] = _keywordToPercent[x] || x;
18615    split[1] = _keywordToPercent[y] || y;
18616    return split.join(" ");
18617  },
18618      _renderClearProps = function _renderClearProps(ratio, data) {
18619    if (data.tween && data.tween._time === data.tween._dur) {
18620      var target = data.t,
18621          style = target.style,
18622          props = data.u,
18623          cache = target._gsap,
18624          prop,
18625          clearTransforms,
18626          i;
18627
18628      if (props === "all" || props === true) {
18629        style.cssText = "";
18630        clearTransforms = 1;
18631      } else {
18632        props = props.split(",");
18633        i = props.length;
18634
18635        while (--i > -1) {
18636          prop = props[i];
18637
18638          if (_transformProps[prop]) {
18639            clearTransforms = 1;
18640            prop = prop === "transformOrigin" ? _transformOriginProp : _transformProp;
18641          }
18642
18643          _removeProperty(target, prop);
18644        }
18645      }
18646
18647      if (clearTransforms) {
18648        _removeProperty(target, _transformProp);
18649
18650        if (cache) {
18651          cache.svg && target.removeAttribute("transform");
18652
18653          _parseTransform(target, 1);
18654
18655          cache.uncache = 1;
18656        }
18657      }
18658    }
18659  },
18660      _specialProps = {
18661    clearProps: function clearProps(plugin, target, property, endValue, tween) {
vendor: 3,001 bytes, lines 18662-18742
18662      if (tween.data !== "isFromStart") {
18663        var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);
18664        pt.u = endValue;
18665        pt.pr = -10;
18666        pt.tween = tween;
18667
18668        plugin._props.push(property);
18669
18670        return 1;
18671      }
18672    }
18673  },
18674      _identity2DMatrix = [1, 0, 0, 1, 0, 0],
18675      _rotationalProperties = {},
18676      _isNullTransform = function _isNullTransform(value) {
18677    return value === "matrix(1, 0, 0, 1, 0, 0)" || value === "none" || !value;
18678  },
18679      _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {
18680    var matrixString = _getComputedProperty(target, _transformProp);
18681
18682    return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);
18683  },
18684      _getMatrix = function _getMatrix(target, force2D) {
18685    var cache = target._gsap || _getCache(target),
18686        style = target.style,
18687        matrix = _getComputedTransformMatrixAsArray(target),
18688        parent,
18689        nextSibling,
18690        temp,
18691        addedToDOM;
18692
18693    if (cache.svg && target.getAttribute("transform")) {
18694      temp = target.transform.baseVal.consolidate().matrix;
18695      matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];
18696      return matrix.join(",") === "1,0,0,1,0,0" ? _identity2DMatrix : matrix;
18697    } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {
18698      temp = style.display;
18699      style.display = "block";
18700      parent = target.parentNode;
18701
18702      if (!parent || !target.offsetParent) {
18703        addedToDOM = 1;
18704        nextSibling = target.nextSibling;
18705
18706        _docElement.appendChild(target);
18707      }
18708
18709      matrix = _getComputedTransformMatrixAsArray(target);
18710      temp ? style.display = temp : _removeProperty(target, "display");
18711
18712      if (addedToDOM) {
18713        nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);
18714      }
18715    }
18716
18717    return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;
18718  },
18719      _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {
18720    var cache = target._gsap,
18721        matrix = matrixArray || _getMatrix(target, true),
18722        xOriginOld = cache.xOrigin || 0,
18723        yOriginOld = cache.yOrigin || 0,
18724        xOffsetOld = cache.xOffset || 0,
18725        yOffsetOld = cache.yOffset || 0,
18726        a = matrix[0],
18727        b = matrix[1],
18728        c = matrix[2],
18729        d = matrix[3],
18730        tx = matrix[4],
18731        ty = matrix[5],
18732        originSplit = origin.split(" "),
18733        xOrigin = parseFloat(originSplit[0]) || 0,
18734        yOrigin = parseFloat(originSplit[1]) || 0,
18735        bounds,
18736        determinant,
18737        x,
18738        y;
18739
18740    if (!originIsAbsolute) {
18741      bounds = _getBBox(target);
18742      xOrigin = bounds.x + (~originSplit[0].indexOf("%") ? xOrigin / 100 * boun
vendor: 6,544 bytes, lines 18742-18950
18742ds.width : xOrigin);
18743      yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf("%") ? yOrigin / 100 * bounds.height : yOrigin);
18744    } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {
18745      x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;
18746      y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;
18747      xOrigin = x;
18748      yOrigin = y;
18749    }
18750
18751    if (smooth || smooth !== false && cache.smooth) {
18752      tx = xOrigin - xOriginOld;
18753      ty = yOrigin - yOriginOld;
18754      cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;
18755      cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;
18756    } else {
18757      cache.xOffset = cache.yOffset = 0;
18758    }
18759
18760    cache.xOrigin = xOrigin;
18761    cache.yOrigin = yOrigin;
18762    cache.smooth = !!smooth;
18763    cache.origin = origin;
18764    cache.originIsAbsolute = !!originIsAbsolute;
18765    target.style[_transformOriginProp] = "0px 0px";
18766
18767    if (pluginToAddPropTweensTo) {
18768      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOrigin", xOriginOld, xOrigin);
18769
18770      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOrigin", yOriginOld, yOrigin);
18771
18772      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOffset", xOffsetOld, cache.xOffset);
18773
18774      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOffset", yOffsetOld, cache.yOffset);
18775    }
18776
18777    target.setAttribute("data-svg-origin", xOrigin + " " + yOrigin);
18778  },
18779      _parseTransform = function _parseTransform(target, uncache) {
18780    var cache = target._gsap || new GSCache(target);
18781
18782    if ("x" in cache && !uncache && !cache.uncache) {
18783      return cache;
18784    }
18785
18786    var style = target.style,
18787        invertedScaleX = cache.scaleX < 0,
18788        px = "px",
18789        deg = "deg",
18790        origin = _getComputedProperty(target, _transformOriginProp) || "0",
18791        x,
18792        y,
18793        z,
18794        scaleX,
18795        scaleY,
18796        rotation,
18797        rotationX,
18798        rotationY,
18799        skewX,
18800        skewY,
18801        perspective,
18802        xOrigin,
18803        yOrigin,
18804        matrix,
18805        angle,
18806        cos,
18807        sin,
18808        a,
18809        b,
18810        c,
18811        d,
18812        a12,
18813        a22,
18814        t1,
18815        t2,
18816        t3,
18817        a13,
18818        a23,
18819        a33,
18820        a42,
18821        a43,
18822        a32;
18823    x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;
18824    scaleX = scaleY = 1;
18825    cache.svg = !!(target.getCTM && _isSVG(target));
18826    matrix = _getMatrix(target, cache.svg);
18827
18828    if (cache.svg) {
18829      t1 = (!cache.uncache || origin === "0px 0px") && !uncache && target.getAttribute("data-svg-origin");
18830
18831      _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);
18832    }
18833
18834    xOrigin = cache.xOrigin || 0;
18835    yOrigin = cache.yOrigin || 0;
18836
18837    if (matrix !== _identity2DMatrix) {
18838      a = matrix[0];
18839      b = matrix[1];
18840      c = matrix[2];
18841      d = matrix[3];
18842      x = a12 = matrix[4];
18843      y = a22 = matrix[5];
18844
18845      if (matrix.length === 6) {
18846        scaleX = Math.sqrt(a * a + b * b);
18847        scaleY = Math.sqrt(d * d + c * c);
18848        rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0;
18849        skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;
18850        skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));
18851
18852        if (cache.svg) {
18853          x -= xOrigin - (xOrigin * a + yOrigin * c);
18854          y -= yOrigin - (xOrigin * b + yOrigin * d);
18855        }
18856      } else {
18857        a32 = matrix[6];
18858        a42 = matrix[7];
18859        a13 = matrix[8];
18860        a23 = matrix[9];
18861        a33 = matrix[10];
18862        a43 = matrix[11];
18863        x = matrix[12];
18864        y = matrix[13];
18865        z = matrix[14];
18866        angle = _atan2(a32, a33);
18867        rotationX = angle * _RAD2DEG;
18868
18869        if (angle) {
18870          cos = Math.cos(-angle);
18871          sin = Math.sin(-angle);
18872          t1 = a12 * cos + a13 * sin;
18873          t2 = a22 * cos + a23 * sin;
18874          t3 = a32 * cos + a33 * sin;
18875          a13 = a12 * -sin + a13 * cos;
18876          a23 = a22 * -sin + a23 * cos;
18877          a33 = a32 * -sin + a33 * cos;
18878          a43 = a42 * -sin + a43 * cos;
18879          a12 = t1;
18880          a22 = t2;
18881          a32 = t3;
18882        }
18883
18884        angle = _atan2(-c, a33);
18885        rotationY = angle * _RAD2DEG;
18886
18887        if (angle) {
18888          cos = Math.cos(-angle);
18889          sin = Math.sin(-angle);
18890          t1 = a * cos - a13 * sin;
18891          t2 = b * cos - a23 * sin;
18892          t3 = c * cos - a33 * sin;
18893          a43 = d * sin + a43 * cos;
18894          a = t1;
18895          b = t2;
18896          c = t3;
18897        }
18898
18899        angle = _atan2(b, a);
18900        rotation = angle * _RAD2DEG;
18901
18902        if (angle) {
18903          cos = Math.cos(angle);
18904          sin = Math.sin(angle);
18905          t1 = a * cos + b * sin;
18906          t2 = a12 * cos + a22 * sin;
18907          b = b * cos - a * sin;
18908          a22 = a22 * cos - a12 * sin;
18909          a = t1;
18910          a12 = t2;
18911        }
18912
18913        if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {
18914          rotationX = rotation = 0;
18915          rotationY = 180 - rotationY;
18916        }
18917
18918        scaleX = _round(Math.sqrt(a * a + b * b + c * c));
18919        scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));
18920        angle = _atan2(a12, a22);
18921        skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;
18922        perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;
18923      }
18924
18925      if (cache.svg) {
18926        t1 = target.getAttribute("transform");
18927        cache.forceCSS = target.setAttribute("transform", "") || !_isNullTransform(_getComputedProperty(target, _transformProp));
18928        t1 && target.setAttribute("transform", t1);
18929      }
18930    }
18931
18932    if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {
18933      if (invertedScaleX) {
18934        scaleX *= -1;
18935        skewX += rotation <= 0 ? 180 : -180;
18936        rotation += rotation <= 0 ? 180 : -180;
18937      } else {
18938        scaleY *= -1;
18939        skewX += skewX <= 0 ? 180 : -180;
18940      }
18941    }
18942
18943    cache.x = x - ((cache.xPercent = x && (cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;
18944    cache.y = y - ((cache.yPercent = y && (cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;
18945    cache.z = z + px;
18946    cache.scaleX = _round(scaleX);
18947    cache.scaleY = _round(scaleY);
18948    cache.rotation = _round(rotation) + deg;
18949    cache.rotationX = _round(rotationX) + deg;
18950    cache.rotationY = _round(rotationY) + deg;
vendor: 4,199 bytes, lines 18951-19078
18951    cache.skewX = skewX + deg;
18952    cache.skewY = skewY + deg;
18953    cache.transformPerspective = perspective + px;
18954
18955    if (cache.zOrigin = parseFloat(origin.split(" ")[2]) || 0) {
18956      style[_transformOriginProp] = _firstTwoOnly(origin);
18957    }
18958
18959    cache.xOffset = cache.yOffset = 0;
18960    cache.force3D = _config.force3D;
18961    cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;
18962    cache.uncache = 0;
18963    return cache;
18964  },
18965      _firstTwoOnly = function _firstTwoOnly(value) {
18966    return (value = value.split(" "))[0] + " " + value[1];
18967  },
18968      _addPxTranslate = function _addPxTranslate(target, start, value) {
18969    var unit = getUnit(start);
18970    return _round(parseFloat(start) + parseFloat(_convertToUnit(target, "x", value + "px", unit))) + unit;
18971  },
18972      _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {
18973    cache.z = "0px";
18974    cache.rotationY = cache.rotationX = "0deg";
18975    cache.force3D = 0;
18976
18977    _renderCSSTransforms(ratio, cache);
18978  },
18979      _zeroDeg = "0deg",
18980      _zeroPx = "0px",
18981      _endParenthesis = ") ",
18982      _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {
18983    var _ref = cache || this,
18984        xPercent = _ref.xPercent,
18985        yPercent = _ref.yPercent,
18986        x = _ref.x,
18987        y = _ref.y,
18988        z = _ref.z,
18989        rotation = _ref.rotation,
18990        rotationY = _ref.rotationY,
18991        rotationX = _ref.rotationX,
18992        skewX = _ref.skewX,
18993        skewY = _ref.skewY,
18994        scaleX = _ref.scaleX,
18995        scaleY = _ref.scaleY,
18996        transformPerspective = _ref.transformPerspective,
18997        force3D = _ref.force3D,
18998        target = _ref.target,
18999        zOrigin = _ref.zOrigin,
19000        transforms = "",
19001        use3D = force3D === "auto" && ratio && ratio !== 1 || force3D === true;
19002
19003    if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {
19004      var angle = parseFloat(rotationY) * _DEG2RAD,
19005          a13 = Math.sin(angle),
19006          a33 = Math.cos(angle),
19007          cos;
19008
19009      angle = parseFloat(rotationX) * _DEG2RAD;
19010      cos = Math.cos(angle);
19011      x = _addPxTranslate(target, x, a13 * cos * -zOrigin);
19012      y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);
19013      z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);
19014    }
19015
19016    if (transformPerspective !== _zeroPx) {
19017      transforms += "perspective(" + transformPerspective + _endParenthesis;
19018    }
19019
19020    if (xPercent || yPercent) {
19021      transforms += "translate(" + xPercent + "%, " + yPercent + "%) ";
19022    }
19023
19024    if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {
19025      transforms += z !== _zeroPx || use3D ? "translate3d(" + x + ", " + y + ", " + z + ") " : "translate(" + x + ", " + y + _endParenthesis;
19026    }
19027
19028    if (rotation !== _zeroDeg) {
19029      transforms += "rotate(" + rotation + _endParenthesis;
19030    }
19031
19032    if (rotationY !== _zeroDeg) {
19033      transforms += "rotateY(" + rotationY + _endParenthesis;
19034    }
19035
19036    if (rotationX !== _zeroDeg) {
19037      transforms += "rotateX(" + rotationX + _endParenthesis;
19038    }
19039
19040    if (skewX !== _zeroDeg || skewY !== _zeroDeg) {
19041      transforms += "skew(" + skewX + ", " + skewY + _endParenthesis;
19042    }
19043
19044    if (scaleX !== 1 || scaleY !== 1) {
19045      transforms += "scale(" + scaleX + ", " + scaleY + _endParenthesis;
19046    }
19047
19048    target.style[_transformProp] = transforms || "translate(0, 0)";
19049  },
19050      _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {
19051    var _ref2 = cache || this,
19052        xPercent = _ref2.xPercent,
19053        yPercent = _ref2.yPercent,
19054        x = _ref2.x,
19055        y = _ref2.y,
19056        rotation = _ref2.rotation,
19057        skewX = _ref2.skewX,
19058        skewY = _ref2.skewY,
19059        scaleX = _ref2.scaleX,
19060        scaleY = _ref2.scaleY,
19061        target = _ref2.target,
19062        xOrigin = _ref2.xOrigin,
19063        yOrigin = _ref2.yOrigin,
19064        xOffset = _ref2.xOffset,
19065        yOffset = _ref2.yOffset,
19066        forceCSS = _ref2.forceCSS,
19067        tx = parseFloat(x),
19068        ty = parseFloat(y),
19069        a11,
19070        a21,
19071        a12,
19072        a22,
19073        temp;
19074
19075    rotation = parseFloat(rotation);
19076    skewX = parseFloat(skewX);
19077    skewY = parseFloat(skewY);
19078
vendor: 4,432 bytes, lines 19079-19227
19079    if (skewY) {
19080      skewY = parseFloat(skewY);
19081      skewX += skewY;
19082      rotation += skewY;
19083    }
19084
19085    if (rotation || skewX) {
19086      rotation *= _DEG2RAD;
19087      skewX *= _DEG2RAD;
19088      a11 = Math.cos(rotation) * scaleX;
19089      a21 = Math.sin(rotation) * scaleX;
19090      a12 = Math.sin(rotation - skewX) * -scaleY;
19091      a22 = Math.cos(rotation - skewX) * scaleY;
19092
19093      if (skewX) {
19094        skewY *= _DEG2RAD;
19095        temp = Math.tan(skewX - skewY);
19096        temp = Math.sqrt(1 + temp * temp);
19097        a12 *= temp;
19098        a22 *= temp;
19099
19100        if (skewY) {
19101          temp = Math.tan(skewY);
19102          temp = Math.sqrt(1 + temp * temp);
19103          a11 *= temp;
19104          a21 *= temp;
19105        }
19106      }
19107
19108      a11 = _round(a11);
19109      a21 = _round(a21);
19110      a12 = _round(a12);
19111      a22 = _round(a22);
19112    } else {
19113      a11 = scaleX;
19114      a22 = scaleY;
19115      a21 = a12 = 0;
19116    }
19117
19118    if (tx && !~(x + "").indexOf("px") || ty && !~(y + "").indexOf("px")) {
19119      tx = _convertToUnit(target, "x", x, "px");
19120      ty = _convertToUnit(target, "y", y, "px");
19121    }
19122
19123    if (xOrigin || yOrigin || xOffset || yOffset) {
19124      tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);
19125      ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);
19126    }
19127
19128    if (xPercent || yPercent) {
19129      temp = target.getBBox();
19130      tx = _round(tx + xPercent / 100 * temp.width);
19131      ty = _round(ty + yPercent / 100 * temp.height);
19132    }
19133
19134    temp = "matrix(" + a11 + "," + a21 + "," + a12 + "," + a22 + "," + tx + "," + ty + ")";
19135    target.setAttribute("transform", temp);
19136    forceCSS && (target.style[_transformProp] = temp);
19137  },
19138      _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue, relative) {
19139    var cap = 360,
19140        isString = _isString(endValue),
19141        endNum = parseFloat(endValue) * (isString && ~endValue.indexOf("rad") ? _RAD2DEG : 1),
19142        change = relative ? endNum * relative : endNum - startNum,
19143        finalValue = startNum + change + "deg",
19144        direction,
19145        pt;
19146
19147    if (isString) {
19148      direction = endValue.split("_")[1];
19149
19150      if (direction === "short") {
19151        change %= cap;
19152
19153        if (change !== change % (cap / 2)) {
19154          change += change < 0 ? cap : -cap;
19155        }
19156      }
19157
19158      if (direction === "cw" && change < 0) {
19159        change = (change + cap * _bigNum$1) % cap - ~~(change / cap) * cap;
19160      } else if (direction === "ccw" && change > 0) {
19161        change = (change - cap * _bigNum$1) % cap - ~~(change / cap) * cap;
19162      }
19163    }
19164
19165    plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);
19166    pt.e = finalValue;
19167    pt.u = "deg";
19168
19169    plugin._props.push(property);
19170
19171    return pt;
19172  },
19173      _assign = function _assign(target, source) {
19174    for (var p in source) {
19175      target[p] = source[p];
19176    }
19177
19178    return target;
19179  },
19180      _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {
19181    var startCache = _assign({}, target._gsap),
19182        exclude = "perspective,force3D,transformOrigin,svgOrigin",
19183        style = target.style,
19184        endCache,
19185        p,
19186        startValue,
19187        endValue,
19188        startNum,
19189        endNum,
19190        startUnit,
19191        endUnit;
19192
19193    if (startCache.svg) {
19194      startValue = target.getAttribute("transform");
19195      target.setAttribute("transform", "");
19196      style[_transformProp] = transforms;
19197      endCache = _parseTransform(target, 1);
19198
19199      _removeProperty(target, _transformProp);
19200
19201      target.setAttribute("transform", startValue);
19202    } else {
19203      startValue = getComputedStyle(target)[_transformProp];
19204      style[_transformProp] = transforms;
19205      endCache = _parseTransform(target, 1);
19206      style[_transformProp] = startValue;
19207    }
19208
19209    for (p in _transformProps) {
19210      startValue = startCache[p];
19211      endValue = endCache[p];
19212
19213      if (startValue !== endValue && exclude.indexOf(p) < 0) {
19214        startUnit = getUnit(startValue);
19215        endUnit = getUnit(endValue);
19216        startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);
19217        endNum = parseFloat(endValue);
19218        plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);
19219        plugin._pt.u = endUnit || 0;
19220
19221        plugin._props.push(p);
19222      }
19223    }
19224
19225    _assign(endCache, startCache);
19226  };
19227
vendor: 4,101 bytes, lines 19228-19350
19228  _forEachName("padding,margin,Width,Radius", function (name, index) {
19229    var t = "Top",
19230        r = "Right",
19231        b = "Bottom",
19232        l = "Left",
19233        props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {
19234      return index < 2 ? name + side : "border" + side + name;
19235    });
19236
19237    _specialProps[index > 1 ? "border" + name : name] = function (plugin, target, property, endValue, tween) {
19238      var a, vars;
19239
19240      if (arguments.length < 4) {
19241        a = props.map(function (prop) {
19242          return _get(plugin, prop, property);
19243        });
19244        vars = a.join(" ");
19245        return vars.split(a[0]).length === 5 ? a[0] : vars;
19246      }
19247
19248      a = (endValue + "").split(" ");
19249      vars = {};
19250      props.forEach(function (prop, i) {
19251        return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];
19252      });
19253      plugin.init(target, vars, tween);
19254    };
19255  });
19256
19257  var CSSPlugin = {
19258    name: "css",
19259    register: _initCore,
19260    targetTest: function targetTest(target) {
19261      return target.style && target.nodeType;
19262    },
19263    init: function init(target, vars, tween, index, targets) {
19264      var props = this._props,
19265          style = target.style,
19266          startAt = tween.vars.startAt,
19267          startValue,
19268          endValue,
19269          endNum,
19270          startNum,
19271          type,
19272          specialProp,
19273          p,
19274          startUnit,
19275          endUnit,
19276          relative,
19277          isTransformRelated,
19278          transformPropTween,
19279          cache,
19280          smooth,
19281          hasPriority;
19282      _pluginInitted || _initCore();
19283
19284      for (p in vars) {
19285        if (p === "autoRound") {
19286          continue;
19287        }
19288
19289        endValue = vars[p];
19290
19291        if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {
19292          continue;
19293        }
19294
19295        type = typeof endValue;
19296        specialProp = _specialProps[p];
19297
19298        if (type === "function") {
19299          endValue = endValue.call(tween, index, target, targets);
19300          type = typeof endValue;
19301        }
19302
19303        if (type === "string" && ~endValue.indexOf("random(")) {
19304          endValue = _replaceRandom(endValue);
19305        }
19306
19307        if (specialProp) {
19308          specialProp(this, target, p, endValue, tween) && (hasPriority = 1);
19309        } else if (p.substr(0, 2) === "--") {
19310          startValue = (getComputedStyle(target).getPropertyValue(p) + "").trim();
19311          endValue += "";
19312          _colorExp.lastIndex = 0;
19313
19314          if (!_colorExp.test(startValue)) {
19315            startUnit = getUnit(startValue);
19316            endUnit = getUnit(endValue);
19317          }
19318
19319          endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);
19320          this.add(style, "setProperty", startValue, endValue, index, targets, 0, 0, p);
19321          props.push(p);
19322        } else if (type !== "undefined") {
19323          if (startAt && p in startAt) {
19324            startValue = typeof startAt[p] === "function" ? startAt[p].call(tween, index, target, targets) : startAt[p];
19325            p in _config.units && !getUnit(startValue) && (startValue += _config.units[p]);
19326            (startValue + "").charAt(1) === "=" && (startValue = _get(target, p));
19327          } else {
19328            startValue = _get(target, p);
19329          }
19330
19331          startNum = parseFloat(startValue);
19332          relative = type === "string" && endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0;
19333          relative && (endValue = endValue.substr(2));
19334          endNum = parseFloat(endValue);
19335
19336          if (p in _propertyAliases) {
19337            if (p === "autoAlpha") {
19338              if (startNum === 1 && _get(target, "visibility") === "hidden" && endNum) {
19339                startNum = 0;
19340              }
19341
19342              _addNonTweeningPT(this, style, "visibility", startNum ? "inherit" : "hidden", endNum ? "inherit" : "hidden", !endNum);
19343            }
19344
19345            if (p !== "scale" && p !== "transform") {
19346              p = _propertyAliases[p];
19347              ~p.indexOf(",") && (p = p.split(",")[0]);
19348            }
19349          }
19350
vendor: 4,300 bytes, lines 19351-19444
19351          isTransformRelated = p in _transformProps;
19352
19353          if (isTransformRelated) {
19354            if (!transformPropTween) {
19355              cache = target._gsap;
19356              cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform);
19357              smooth = vars.smoothOrigin !== false && cache.smooth;
19358              transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1);
19359              transformPropTween.dep = 1;
19360            }
19361
19362            if (p === "scale") {
19363              this._pt = new PropTween(this._pt, cache, "scaleY", cache.scaleY, (relative ? relative * endNum : endNum - cache.scaleY) || 0);
19364              props.push("scaleY", p);
19365              p += "X";
19366            } else if (p === "transformOrigin") {
19367              endValue = _convertKeywordsToPercentages(endValue);
19368
19369              if (cache.svg) {
19370                _applySVGOrigin(target, endValue, 0, smooth, 0, this);
19371              } else {
19372                endUnit = parseFloat(endValue.split(" ")[2]) || 0;
19373                endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, "zOrigin", cache.zOrigin, endUnit);
19374
19375                _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));
19376              }
19377
19378              continue;
19379            } else if (p === "svgOrigin") {
19380              _applySVGOrigin(target, endValue, 1, smooth, 0, this);
19381
19382              continue;
19383            } else if (p in _rotationalProperties) {
19384              _addRotationalPropTween(this, cache, p, startNum, endValue, relative);
19385
19386              continue;
19387            } else if (p === "smoothOrigin") {
19388              _addNonTweeningPT(this, cache, "smooth", cache.smooth, endValue);
19389
19390              continue;
19391            } else if (p === "force3D") {
19392              cache[p] = endValue;
19393              continue;
19394            } else if (p === "transform") {
19395              _addRawTransformPTs(this, endValue, target);
19396
19397              continue;
19398            }
19399          } else if (!(p in style)) {
19400            p = _checkPropPrefix(p) || p;
19401          }
19402
19403          if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {
19404            startUnit = (startValue + "").substr((startNum + "").length);
19405            endNum || (endNum = 0);
19406            endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);
19407            startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));
19408            this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, relative ? relative * endNum : endNum - startNum, !isTransformRelated && (endUnit === "px" || p === "zIndex") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);
19409            this._pt.u = endUnit || 0;
19410
19411            if (startUnit !== endUnit) {
19412              this._pt.b = startValue;
19413              this._pt.r = _renderCSSPropWithBeginning;
19414            }
19415          } else if (!(p in style)) {
19416            if (p in target) {
19417              this.add(target, p, startValue || target[p], endValue, index, targets);
19418            } else {
19419              _missingPlugin(p, endValue);
19420
19421              continue;
19422            }
19423          } else {
19424            _tweenComplexCSSString.call(this, target, p, startValue, endValue);
19425          }
19426
19427          props.push(p);
19428        }
19429      }
19430
19431      hasPriority && _sortPropTweensByPriority(this);
19432    },
19433    get: _get,
19434    aliases: _propertyAliases,
19435    getSetter: function getSetter(target, property, plugin) {
19436      var p = _propertyAliases[property];
19437      p && p.indexOf(",") < 0 && (property = p);
19438      return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, "x")) ? plugin && _recentSetterPlugin === plugin ? property === "scale" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === "scale" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf("-") ? _setterCSSProp : _getSetter(target, property);
19439    },
19440    core: {
19441      _removeProperty: _removeProperty,
19442      _getMatrix: _getMatrix
19443    }
19444  };
vendor: 63,169 bytes, lines 19445-19514
19445  gsap.utils.checkPrefix = _checkPropPrefix;
19446
19447  (function (positionAndScale, rotation, others, aliases) {
19448    var all = _forEachName(positionAndScale + "," + rotation + "," + others, function (name) {
19449      _transformProps[name] = 1;
19450    });
19451
19452    _forEachName(rotation, function (name) {
19453      _config.units[name] = "deg";
19454      _rotationalProperties[name] = 1;
19455    });
19456
19457    _propertyAliases[all[13]] = positionAndScale + "," + rotation;
19458
19459    _forEachName(aliases, function (name) {
19460      var split = name.split(":");
19461      _propertyAliases[split[1]] = all[split[0]];
19462    });
19463  })("x,y,z,scale,scaleX,scaleY,xPercent,yPercent", "rotation,rotationX,rotationY,skewX,skewY", "transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective", "0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY");
19464
19465  _forEachName("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective", function (name) {
19466    _config.units[name] = "px";
19467  });
19468
19469  gsap.registerPlugin(CSSPlugin);
19470
19471  var gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,
19472      TweenMaxWithCSS = gsapWithCSS.core.Tween;
19473
19474  exports.Back = Back;
19475  exports.Bounce = Bounce;
19476  exports.CSSPlugin = CSSPlugin;
19477  exports.Circ = Circ;
19478  exports.Cubic = Cubic;
19479  exports.Elastic = Elastic;
19480  exports.Expo = Expo;
19481  exports.Linear = Linear;
19482  exports.Power0 = Power0;
19483  exports.Power1 = Power1;
19484  exports.Power2 = Power2;
19485  exports.Power3 = Power3;
19486  exports.Power4 = Power4;
19487  exports.Quad = Quad;
19488  exports.Quart = Quart;
19489  exports.Quint = Quint;
19490  exports.Sine = Sine;
19491  exports.SteppedEase = SteppedEase;
19492  exports.Strong = Strong;
19493  exports.TimelineLite = Timeline;
19494  exports.TimelineMax = Timeline;
19495  exports.TweenLite = Tween;
19496  exports.TweenMax = TweenMaxWithCSS;
19497  exports.default = gsapWithCSS;
19498  exports.gsap = gsapWithCSS;
19499
19500  if (typeof(window) === 'undefined' || window !== exports) {Object.defineProperty(exports, '__esModule', { value: true });} else {delete window.default;}
19501
19502})));
19503
19504/*SIGUIENTE LIBRERIA*/
19505/*!
19506 * GSAP 3.7.0
19507 * https://greensock.com
19508 * 
19509 * @license Copyright 2021, GreenSock. All rights reserved.
19510 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
19511 * @author: Jack Doyle, [email protected]
19512 */
19513
19514!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).window=t.window||{})}(this,function(e){"use strict";function _inheritsLoose(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function o(t){return"string"==typeof t}function p(t){return"function"==typeof t}function q(t){return"number"==typeof t}function r(t){return void 0===t}function s(t){return"object"==typeof t}function t(t){return!1!==t}function u(){return"undefined"!=typeof window}function v(t){return p(t)||o(t)}function M(t){return(h=mt(t,ot))&&oe}function N(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")}function O(t,e){return!e&&console.warn(t)}function P(t,e){return t&&(ot[t]=e)&&h&&(h[t]=e)||ot}function Q(){return 0}function $(t){var e,r,i=t[0];if(s(i)||p(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(r=pt.length;r--&&!pt[r].targetTest(i););e=pt[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new Lt(t[r],e)))||t.splice(r,1);return t}function _(t){return t._gsap||$(xt(t))[0]._gsap}function aa(t,e,i){return(i=t[e])&&p(i)?t[e]():r(i)&&t.getAttribute&&t.getAttribute(e)||i}function ba(t,e){return(t=t.split(",")).forEach(e)||t}function ca(t){return Math.round(1e5*t)/1e5||0}function da(t,e){for(var r=e.length,i=0;t.indexOf(e[i])<0&&++i<r;);return i<r}function ea(){var t,e,r=ht.length,i=ht.slice(0);for(lt={},t=ht.length=0;t<r;t++)(e=i[t])&&e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0)._lazy=0)}function fa(t,e,r,i){ht.length&&ea(),t.render(e,r,i),ht.length&&ea()}function ga(t){var e=parseFloat(t);return(e||0===e)&&(t+"").match(at).length<2?e:o(t)?t.trim():t}function ha(t){return t}function ia(t,e){for(var r in e)r in t||(t[r]=e[r]);return t}function ja(t,e){for(var r in e)r in t||"duration"===r||"ease"===r||(t[r]=e[r])}function la(t,e){for(var r in e)"__proto__"!==r&&"constructor"!==r&&"prototype"!==r&&(t[r]=s(e[r])?la(t[r]||(t[r]={}),e[r]):e[r]);return t}function ma(t,e){var r,i={};for(r in t)r in e||(i[r]=t[r]);return i}function na(e){var r=e.parent||R,i=e.keyframes?ja:ia;if(t(e.inherit))for(;r;)i(e,r.vars.defaults),r=r.parent||r._dp;return e}function qa(t,e,r,i){void 0===r&&(r="_first"),void 0===i&&(i="_last");var n=e._prev,a=e._next;n?n._next=a:t[r]===e&&(t[r]=a),a?a._prev=n:t[i]===e&&(t[i]=n),e._next=e._prev=e.parent=null}function ra(t,e){!t.parent||e&&!t.parent.autoRemoveChildren||t.parent.remove(t),t._act=0}function sa(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t}function va(t){return t._repeat?gt(t._tTime,t=t.duration()+t._rDelay)*t:0}function xa(t,e){return(t-e._start)*e._ts+(0<=e._ts?0:e._dirty?e.totalDuration():e._tDur)}function ya(t){return t._end=ca(t._start+(t._tDur/Math.abs(t._ts||t._rts||U)||0))}function za(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=ca(r._time-(0<t._ts?e/t._ts:((t._dirty?t.totalDuration():t._tDur)-e)/-t._ts)),ya(t),r._dirty||sa(r,t)),t}function Aa(t,e){var r;if((e._time||e._initted&&!e._dur)&&(r=xa(t.rawTime(),e),(!e._dur||Tt(0,e.totalDuration(),r)-e._tTime>U)&&e.render(r,!0)),sa(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur<t.duration())for(r=t;r._dp;)0<=r.rawTime()&&r.totalTime(r._tTime),r=r._dp;t._zTime=-U}}function Ba(t,e,r,i){return e.parent&&ra(e),e._start=ca((q(r)?r:r||t!==R?bt(t,r,e):t._time)+e._delay),e._end=ca(e._start+(e.totalDuration()/Math.abs(e.timeScale())||0)),function _addLinkedListItem(t,e,r,i,n){void 0===r&&(r="_first"),void 0===i&&(i="_last");var a,s=t[i];if(n)for(a=e[n];s&&s[n]>a;)s=s._prev;s?(e._next=s._next,s._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[i]=e,e._prev=s,e.parent=e._dp=t}(t,e,"_first","_last",t._sort?"_start":0),vt(e)||(t._recent=e),i||Aa(t,e),t}function Ca(t,e){return(ot.ScrollTrigger||N("scrollTrigger",e))&&ot.ScrollTrigger.create(e,t)}function Da(t,e,r,i){return Ut(t,e),t._initted?!r&&t._pt&&(t._dur&&!1!==t.vars.lazy||!t._dur&&t.vars.lazy)&&f!==Ct.frame?(ht.push(t),t._lazy=[e,i],1):void 0:1}function Ia(t,e,r,i){var n=t._repeat,a=ca(e)||0,s=t._tTime/t._tDur;return s&&!i&&(t._time*=a/t._dur),t._dur=a,t._tDur=n?n<0?1e10:ca(a*(n+1)+t._rDelay*n):a,s&&!i?za(t,t._tTime=t._tDur*s):t.parent&&ya(t),r||sa(t.parent,t),t}function Ja(t){return t instanceof qt?sa(t):Ia(t,t._dur)}function Ma(e,r,i){var n,a,s=q(r[1]),o=(s?2:1)+(e<2?0:1),u=r[o];if(s&&(u.duration=r[1]),u.parent=i,e){for(n=u,a=i;a&&!("immediateRender"in n);)n=a.vars.defaults||{},a=t(a.vars.inherit)&&a.parent;u.immediateRender=t(n.immediateRender),e<2?u.runBackwards=1:u.startAt=r[o-1]}return new Qt(r[0],u,r[1+o])}function Na(t,e){return t||0===t?e(t):e}function Pa(t){if("string"!=typeof t)return"";var e=st.exec(t);return e?t.substr(e.index+e[0].length):""}function Sa(t,e){return t&&s(t)&&"length"in t&&(!e&&!t.length||t.length-1 in t&&s(t[0]))&&!t.nodeType&&t!==i}function Wa(t){return t.sort(function(){return.5-Math.random()})}function Xa(t){if(p(t))return t;var _=s(t)?t:{each:t},m=Ft(_.ease),g=_.from||0,v=parseFloat(_.base)||0,y={},e=0<g&&g<1,b=isNaN(g)||e,T=_.axis,w=g,x=g;return o(g)?w=x={center:.5,edges:.5,end:1}[g]||0:!e&&b&&(w=g[0],x=g[1]),function(t,e,r){var i,n,a,s,o,u,h,l,f,d=(r||_).length,c=y[d];if(!c){if(!(f="auto"===_.grid?0:(_.grid||[1,X])[1])){for(h=-X;h<(h=r[f++].getBoundingClientRect().left)&&f<d;);f--}for(c=y[d]=[],i=b?Math.min(f,d)*w-.5:g%f,n=b?d*x/f-.5:g/f|0,l=X,u=h=0;u<d;u++)a=u%f-i,s=n-(u/f|0),c[u]=o=T?Math.abs("y"===T?s:a):G(a*a+s*s),h<o&&(h=o),o<l&&(l=o);"random"===g&&Wa(c),c.max=h-l,c.min=l,c.v=d=(parseFloat(_.amount)||parseFloat(_.each)*(d<f?d-1:T?"y"===T?d/f:f:Math.max(f,d/f))||0)*("edges"===g?-1:1),c.b=d<0?v-d:v,c.u=Pa(_.amount||_.each)||0,m=m&&d<0?Et(m):m}return d=(c[t]-c.min)/c.max||0,ca(c.b+(m?m(d):d)*c.v)+c.u}}function Ya(r){var i=r<1?Math.pow(10,(r+"").length-2):1;return function(t){var e=Math.round(parseFloat(t)/r)*r*i;return(e-e%1)/i+(q(t)?0:Pa(t))}}function Za(u,t){var h,l,e=H(u);return!e&&s(u)&&(h=e=u.radius||X,u.values?(u=xt(u.values),(l=!q(u[0]))&&(h*=h)):u=Ya(u.increment)),Na(t,e?p(u)?function(t){return l=u(t),Math.abs(l-t)<=h?l:t}:function(t){for(var e,r,i=parseFloat(l?t.x:t),n=parseFloat(l?t.y:0),a=X,s=0,o=u.length;o--;)(e=l?(e=u[o].x-i)*e+(r=u[o].y-n)*r:Math.abs(u[o]-i))<a&&(a=e,s=o);return s=!h||a<=h?u[s]:t,l||s===t||q(t)?s:s+Pa(t)}:Ya(u))}function $a(t,e,r,i){return Na(H(t)?!e:!0===r?!!(r=0):!i,function(){return H(t)?t[~~(Math.random()*t.length)]:(r=r||1e-5)&&(i=r<1?Math.pow(10,(r+"").length-2):1)&&Math.floor(Math.round((t-r/2+Math.random()*(e-t+.99*r))/r)*r*i)/i})}function cb(e,r,t){return Na(t,function(t){return e[~~r(t)]})}function fb(t){for(var e,r,i,n,a=0,s="";~(e=t.indexOf("random(",a));)i=t.indexOf(")",e),n="["===t.charAt(e+7),r=t.substr(e+7,i-e-7).match(n?at:tt),s+=t.substr(a,e-a)+$a(n?r:+r[0],n?0:+r[1],+r[2]||1e-5),a=i+1;return s+t.substr(a,t.length-a)}function ib(t,e,r){var i,n,a,s=t.labels,o=X;for(i in s)(n=s[i]-e)<0==!!r&&n&&o>(n=Math.abs(n))&&(a=i,o=n);return a}function kb(t){return ra(t),t.scrollTrigger&&t.scrollTrigger.kill(!1),t.progress()<1&&Pt(t,"onInterrupt"),t}function pb(t,e,r){return(6*(t=t<0?t+1:1<t?t-1:t)<1?e+(r-e)*t*6:t<.5?r:3*t<2?e+(r-e)*(2/3-t)*6:e)*kt+.5|0}function qb(t,e,r){var i,n,a,s,o,u,h,l,f,d,c=t?q(t)?[t>>16,t>>8&kt,t&kt]:0:Mt.black;if(!c){if(","===t.substr(-1)&&(t=t.substr(0,t.length-1)),Mt[t])c=Mt[t];else if("#"===t.charAt(0)){if(t.length<6&&(t="#"+(i=t.charAt(1))+i+(n=t.charAt(2))+n+(a=t.charAt(3))+a+(5===t.length?t.charAt(4)+t.charAt(4):"")),9===t.length)return[(c=parseInt(t.substr(1,6),16))>>16,c>>8&kt,c&kt,parseInt(t.substr(7),16)/255];c=[(t=parseInt(t.substr(1),16))>>16,t>>8&kt,t&kt]}else if("hsl"===t.substr(0,3))if(c=d=t.match(tt),e){if(~t.indexOf("="))return c=t.match(et),r&&c.length<4&&(c[3]=1),c}else s=+c[0]%360/360,o=c[1]/100,i=2*(u=c[2]/100)-(n=u<=.5?u*(o+1):u+o-u*o),3<c.length&&(c[3]*=1),c[0]=pb(s+1/3,i,n),c[1]=pb(s,i,n),c[2]=pb(s-1/3,i,n);else c=t.match(tt)||Mt.transparent;c=c.map(Number)}return e&&!d&&(i=c[0]/kt,n=c[1]/kt,a=c[2]/kt,u=((h=Math.max(i,n,a))+(l=Math.min(i,n,a)))/2,h===l?s=o=0:(f=h-l,o=.5<u?f/(2-h-l):f/(h+l),s=h===i?(n-a)/f+(n<a?6:0):h===n?(a-i)/f+2:(i-n)/f+4,s*=60),c[0]=~~(s+.5),c[1]=~~(100*o+.5),c[2]=~~(100*u+.5)),r&&c.length<4&&(c[3]=1),c}function rb(t){var r=[],i=[],n=-1;return t.split(At).forEach(function(t){var e=t.match(rt)||[];r.push.apply(r,e),i.push(n+=e.length+1)}),r.c=i,r}function sb(t,e,r){var i,n,a,s,o="",u=(t+o).match(At),h=e?"hsla(":"rgba(",l=0;if(!u)return t;if(u=u.map(function(t){return(t=qb(t,e,1))&&h+(e?t[0]+","+t[1]+"%,"+t[2]+"%,"+t[3]:t.join(","))+")"}),r&&(a=rb(t),(i=r.c).join(o)!==a.c.join(o)))for(s=(n=t.replace(At,"1").split(rt)).length-1;l<s;l++)o+=n[l]+(~i.indexOf(l)?u.shift()||h+"0,0,0,0)":(a.length?a:u.length?u:r).shift());if(!n)for(s=(n=t.split(At)).length-1;l<s;l++)o+=n[l]+u[l];return o+n[s]}function vb(t){var e,r=t.join(" ");if(At.lastIndex=0,At.test(r))return e=St.test(r),t[1]=sb(t[1],e),t[0]=sb(t[0],e,rb(t[1])),!0}function Eb(t){var e=(t+"").split("("),r=zt[e[0]];return r&&1<e.length&&r.config?r.config.apply(null,~t.indexOf("{")?[function _parseObjectInString(t){for(var e,r,i,n={},a=t.substr(1,t.length-3).split(":"),s=a[0],o=1,u=a.length;o<u;o++)r=a[o],e=o!==u-1?r.lastIndexOf(","):r.length,i=r.substr(0,e),n[s]=isNaN(i)?i.replace(Bt,"").trim():+i,s=r.substr(e+1).trim();return n}(e[1])]:function _valueInParentheses(t){var e=t.indexOf("(")+1,r=t.indexOf(")"),i=t.indexOf("(",e);return t.substring(e,~i&&i<r?t.indexOf(")",r+1):r)}(t).split(",").map(ga)):zt._CE&&It.test(t)?zt._CE("",t):r}function Gb(t,e){for(var r,i=t._first;i;)i instanceof qt?Gb(i,e):!i.vars.yoyoEase||i._yoyo&&i._repeat||i._yoyo===e||(i.timeline?Gb(i.timeline,e):(r=i._ease,i._ease=i._yEase,i._yEase=r,i._yoyo=e)),i=i._next}function Ib(t,e,r,i){void 0===r&&(r=function easeOut(t){return 1-e(1-t)}),void 0===i&&(i=function easeInOut(t){return t<.5?e(2*t)/2:1-e(2*(1-t))/2});var n,a={easeIn:e,easeOut:r,easeInOut:i};return ba(t,function(t){for(var e in zt[t]=ot[t]=a,zt[n=t.toLowerCase()]=r,a)zt[n+("easeIn"===e?".in":"easeOut"===e?".out":".inOut")]=zt[t+"."+e]=a[e]}),a}function Jb(e){return function(t){return t<.5?(1-e(1-2*t))/2:.5+e(2*(t-.5))/2}}function Kb(r,t,e){function Ol(t){return 1===t?1:i*Math.pow(2,-10*t)*J((t-a)*n)+1}var i=1<=t?t:1,n=(e||(r?.3:.45))/(t<1?t:1),a=n/V*(Math.asin(1/i)||0),s="out"===r?Ol:"in"===r?function(t){return 1-Ol(1-t)}:Jb(Ol);return n=V/n,s.config=function(t,e){return Kb(r,t,e)},s}function Lb(e,r){function Wl(t){return t?--t*t*((r+1)*t+r)+1:0}void 0===r&&(r=1.70158);var t="out"===e?Wl:"in"===e?function(t){return 1-Wl(1-t)}:Jb(Wl);return t.config=function(t){return Lb(e,t)},t}var F,R,i,n,a,h,l,f,d,c,m,g,y,b,T,w,x,k,A,S,C,D,z,I,B,E,Y={autoSleep:120,force3D:"auto",nullTargetWarn:1,units:{lineHeight:""}},L={duration:.5,overwrite:!1,delay:0},X=1e8,U=1/X,V=2*Math.PI,j=V/4,W=0,G=Math.sqrt,K=Math.cos,J=Math.sin,Z="function"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},H=Array.isArray,tt=/(?:-?\.?\d|\.)+/gi,et=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,rt=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,it=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,nt=/[+-]=-?[.\d]+/,at=/[^,'"\[\]\s]+/gi,st=/[\d.+\-=]+(?:e[-+]\d*)*/i,ot={},ut={},ht=[],lt={},ft={},dt={},ct=30,pt=[],_t="",mt=function _merge(t,e){for(var r in e)t[r]=e[r];return t},gt=function _animationCycle(t,e){var r=Math.floor(t/=e);return t&&r===t?r-1:r},vt=function _isFromOrFromStart(t){var e=t.data;return"isFromStart"===e||"isStart"===e},yt={_start:0,endTime:Q,totalDuration:Q},bt=function _parsePosition(t,e,r){var i,n,a,s=t.labels,u=t._recent||yt,h=t.duration()>=X?u.endTime(!1):t._dur;return o(e)&&(isNaN(e)||e in s)?(n=e.charAt(0),a="%"===e.substr(-1),i=e.indexOf("="),"<"===n||">"===n?(0<=i&&(e=e.replace(/=/,"")),("<"===n?u._start:u.endTime(0<=u._repeat))+(parseFloat(e.substr(1))||0)*(a?(i<0?u:r).totalDuration()/100:1)):i<0?(e in s||(s[e]=h),s[e]):(n=parseFloat(e.charAt(i-1)+e.substr(i+1)),a&&r&&(n=n/100*(H(r)?r[0]:r).totalDuration()),1<i?_parsePosition(t,e.substr(0,i-1),r)+n:h+n)):null==e?h:+e},Tt=function _clamp(t,e,r){return r<t?t:e<r?e:r},wt=[].slice,xt=function toArray(t,e,r){return!o(t)||r||!n&&Dt()?H(t)?function _flatten(t,e,r){return void 0===r&&(r=[]),t.forEach(function(t){return o(t)&&!e||Sa(t,1)?r.push.apply(r,xt(t)):r.push(t)})||r}(t,r):Sa(t)?wt.call(t,0):t?[t]:[]:wt.call((e||a).querySelectorAll(t),0)},Ot=function mapRange(e,t,r,i,n){var a=t-e,s=i-r;return Na(n,function(t){return r+((t-e)/a*s||0)})},Pt=function _callback(t,e,r){var i,n,a=t.vars,s=a[e];if(s)return i=a[e+"Params"],n=a.callbackScope||t,r&&ht.length&&ea(),i?s.apply(n,i):s.call(n)},kt=255,Mt={aqua:[0,kt,kt],lime:[0,kt,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,kt],navy:[0,0,128],white:[kt,kt,kt],olive:[128,128,0],yellow:[kt,kt,0],orange:[kt,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[kt,0,0],pink:[kt,192,203],cyan:[0,kt,kt],transparent:[kt,kt,kt,0]},At=function(){var t,e="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b";for(t in Mt)e+="|"+t+"\\b";return new RegExp(e+")","gi")}(),St=/hsl[a]?\(/,Ct=(x=Date.now,k=500,A=33,S=x(),C=S,z=D=1e3/240,b={time:0,frame:0,tick:function tick(){Kk(!0)},deltaRatio:function deltaRatio(t){return T/(1e3/(t||60))},wake:function wake(){l&&(!n&&u()&&(i=n=window,a=i.document||{},ot.gsap=oe,(i.gsapVersions||(i.gsapVersions=[])).push(oe.version),M(h||i.GreenSockGlobals||!i.gsap&&i||{}),y=i.requestAnimationFrame),m&&b.sleep(),g=y||function(t){return setTimeout(t,z-1e3*b.time+1|0)},c=1,Kk(2))},sleep:function sleep(){(y?i.cancelAnimationFrame:clearTimeout)(m),c=0,g=Q},lagSmoothing:function lagSmoothing(t,e){k=t||1e8,A=Math.min(e,k,0)},fps:function fps(t){D=1e3/(t||240),z=1e3*b.time+D},add:function add(t){I.indexOf(t)<0&&I.push(t),Dt()},remove:function remove(t){var e;~(e=I.indexOf(t))&&I.splice(e,1)&&e<=w&&w--},_listeners:I=[]}),Dt=function _wake(){return!c&&Ct.wake()},zt={},It=/^[\d.\-M][\d.\-,\s]/,Bt=/["']/g,Et=function _invertEase(e){return function(t){return 1-e(1-t)}},Ft=function _parseEase(t,e){return t&&(p(t)?t:zt[t]||Eb(t))||e};function Kk(t){var e,r,i,n,a=x()-C,s=!0===t;if(k<a&&(S+=a-A),(0<(e=(i=(C+=a)-S)-z)||s)&&(n=++b.frame,T=i-1e3*b.time,b.time=i/=1e3,z+=e+(D<=e?4:D-e),r=1),s||(m=g(Kk)),r)for(w=0;w<I.length;w++)I[w](i,T,n,t)}function lm(t){return t<E?B*t*t:t<.7272727272727273?B*Math.pow(t-1.5/2.75,2)+.75:t<.9090909090909092?B*(t-=2.25/2.75)*t+.9375:B*Math.pow(t-2.625/2.75,2)+.984375}ba("Linear,Quad,Cubic,Quart,Quint,Strong",function(t,e){var r=e<5?e+1:e;Ib(t+",Power"+(r-1),e?function(t){return Math.pow(t,r)}:function(t){return t},function(t){return 1-Math.pow(1-t,r)},function(t){return t<.5?Math.pow(2*t,r)/2:1-Math.pow(2*(1-t),r)/2})}),zt.Linear.easeNone=zt.none=zt.Linear.easeIn,Ib("Elastic",Kb("in"),Kb("out"),Kb()),B=7.5625,E=1/2.75,Ib("Bounce",function(t){return 1-lm(1-t)},lm),Ib("Expo",function(t){return t?Math.pow(2,10*(t-1)):0}),Ib("Circ",function(t){return-(G(1-t*t)-1)}),Ib("Sine",function(t){return 1===t?1:1-K(t*j)}),Ib("Back",Lb("in"),Lb("out"),Lb()),zt.SteppedEase=zt.steps=ot.SteppedEase={config:function config(t,e){void 0===t&&(t=1);var r=1/t,i=t+(e?0:1),n=e?1:0;return function(t){return((i*Tt(0,.99999999,t)|0)+n)*r}}},L.ease=zt["quad.out"],ba("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt",function(t){return _t+=t+","+t+"Params,"});var Rt,Lt=function GSCache(t,e){this.id=W++,(t._gsap=this).target=t,this.harness=e,this.get=e?e.get:aa,this.set=e?e.getSetter:Jt},Nt=((Rt=Animation.prototype).delay=function delay(t){return t||0===t?(this.parent&&this.parent.smoothChildTiming&&this.startTime(this._start+t-this._delay),this._delay=t,this):this._delay},Rt.duration=function duration(t){return arguments.length?this.totalDuration(0<this._repeat?t+(t+this._rDelay)*this._repeat:t):this.totalDuration()&&this._dur},Rt.totalDuration=function totalDuration(t){return arguments.length?(this._dirty=0,Ia(this,this._repeat<0?t:(t-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},Rt.totalTime=function totalTime(t,e){if(Dt(),!arguments.length)return this._tTime;var r=this._dp;if(r&&r.smoothChildTiming&&this._ts){for(za(this,t),!r._dp||r.parent||Aa(r,this);r.parent;)r.parent._time!==r._start+(0<=r._ts?r._tTime/r._ts:(r.totalDuration()-r._tTime)/-r._ts)&&r.totalTime(r._tTime,!0),r=r.parent;!this.parent&&this._dp.autoRemoveChildren&&(0<this._ts&&t<this._tDur||this._ts<0&&0<t||!this._tDur&&!t)&&Ba(this._dp,this,this._start-this._delay)}return(this._tTime!==t||!this._dur&&!e||this._initted&&Math.abs(this._zTime)===U||!t&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=t),fa(this,t,e)),this},Rt.time=function time(t,e){return arguments.length?this.totalTime(Math.min(this.totalDuration(),t+va(this))%this._dur||(t?this._dur:0),e):this._time},Rt.totalProgress=function totalProgress(t,e){return arguments.length?this.totalTime(this.totalDuration()*t,e):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.ratio},Rt.progress=function progress(t,e){return arguments.length?this.totalTime(this.duration()*(!this._yoyo||1&this.iteration()?t:1-t)+va(this),e):this.duration()?Math.min(1,this._time/this._dur):this.ratio},Rt.iteration=function iteration(t,e){var r=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(t-1)*r,e):this._repeat?gt(this._tTime,r)+1:1},Rt.timeScale=function timeScale(t){if(!arguments.length)return this._rts===-U?0:this._rts;if(this._rts===t)return this;var e=this.parent&&this._ts?xa(this.parent._time,this):this._tTime;return this._rts=+t||0,this._ts=this._ps||t===-U?0:this._rts,function _recacheAncestors(t){for(var e=t.parent;e&&e.parent;)e._dirty=1,e.totalDuration(),e=e.parent;return t}(this.totalTime(Tt(-this._delay,this._tDur,e),!0))},Rt.paused=function paused(t){return arguments.length?(this._ps!==t&&((this._ps=t)?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(Dt(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&(this._tTime-=U)&&Math.abs(this._zTime)!==U))),this):this._ps},Rt.startTime=function startTime(t){if(arguments.length){this._start=t;var e=this.parent||this._dp;return!e||!e._sort&&this.parent||Ba(e,this,t-this._delay),this}return this._start},Rt.endTime=function endTime(e){return this._start+(t(e)?this.totalDuration():this.duration())/Math.abs(this._ts)},Rt.rawTime=function rawTime(t){var e=this.parent||this._dp;return e?t&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?xa(e.rawTime(t),this):this._tTime:this._tTime},Rt.globalTime=function globalTime(t){for(var e=this,r=arguments.length?t:e.rawTime();e;)r=e._start+r/(e._ts||1),e=e._dp;return r},Rt.repeat=function repeat(t){return arguments.length?(this._repeat=t===1/0?-2:t,Ja(this)):-2===this._repeat?1/0:this._repeat},Rt.repeatDelay=function repeatDelay(t){return arguments.length?(this._rDelay=t,Ja(this)):this._rDelay},Rt.yoyo=function yoyo(t){return arguments.length?(this._yoyo=t,this):this._yoyo},Rt.seek=function seek(e,r){return this.totalTime(bt(this,e),t(r))},Rt.restart=function restart(e,r){return this.play().totalTime(e?-this._delay:0,t(r))},Rt.play=function play(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},Rt.reverse=function reverse(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},Rt.pause=function pause(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},Rt.resume=function resume(){return this.paused(!1)},Rt.reversed=function reversed(t){return arguments.length?(!!t!==this.reversed()&&this.timeScale(-this._rts||(t?-U:0)),this):this._rts<0},Rt.invalidate=function invalidate(){return this._initted=this._act=0,this._zTime=-U,this},Rt.isActive=function isActive(){var t,e=this.parent||this._dp,r=this._start;return!(e&&!(this._ts&&this._initted&&e.isActive()&&(t=e.rawTime(!0))>=r&&t<this.endTime(!0)-U))},Rt.eventCallback=function eventCallback(t,e,r){var i=this.vars;return 1<arguments.length?(e?(i[t]=e,r&&(i[t+"Params"]=r),"onUpdate"===t&&(this._onUpdate=e)):delete i[t],this):i[t]},Rt.then=function then(t){var i=this;return new Promise(function(e){function Bn(){var t=i.then;i.then=null,p(r)&&(r=r(i))&&(r.then||r===i)&&(i.then=t),e(r),i.then=t}var r=p(t)?t:ha;i._initted&&1===i.totalProgress()&&0<=i._ts||!i._tTime&&i._ts<0?Bn():i._prom=Bn})},Rt.kill=function kill(){kb(this)},Animation);function Animation(t){this.vars=t,this._delay=+t.delay||0,(this._repeat=t.repeat===1/0?-2:t.repeat||0)&&(this._rDelay=t.repeatDelay||0,this._yoyo=!!t.yoyo||!!t.yoyoEase),this._ts=1,Ia(this,+t.duration,1,1),this.data=t.data,c||Ct.wake()}ia(Nt.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-U,_prom:0,_ps:!1,_rts:1});var qt=function(n){function Timeline(e,r){var i;return void 0===e&&(e={}),(i=n.call(this,e)||this).labels={},i.smoothChildTiming=!!e.smoothChildTiming,i.autoRemoveChildren=!!e.autoRemoveChildren,i._sort=t(e.sortChildren),R&&Ba(e.parent||R,_assertThisInitialized(i),r),e.reversed&&i.reverse(),e.paused&&i.paused(!0),e.scrollTrigger&&Ca(_assertThisInitialized(i),e.scrollTrigger),i}_inheritsLoose(Timeline,n);var e=Timeline.prototype;return e.to=function to(t,e,r){return Ma(0,arguments,this),this},e.from=function from(t,e,r){return Ma(1,arguments,this),this},e.fromTo=function fromTo(t,e,r,i){return Ma(2,arguments,this),this},e.set=function set(t,e,r){return e.duration=0,e.parent=this,na(e).repeatDelay||(e.repeat=0),e.immediateRender=!!e.immediateRender,new Qt(t,e,bt(this,r),1),this},e.call=function call(t,e,r){return Ba(this,Qt.delayedCall(0,t,e),r)},e.staggerTo=function staggerTo(t,e,r,i,n,a,s){return r.duration=e,r.stagger=r.stagger||i,r.onComplete=a,r.onCompleteParams=s,r.parent=this,new Qt(t,r,bt(this,n)),this},e.staggerFrom=function staggerFrom(e,r,i,n,a,s,o){return i.runBackwards=1,na(i).immediateRender=t(i.immediateRender),this.staggerTo(e,r,i,n,a,s,o)},e.staggerFromTo=function staggerFromTo(e,r,i,n,a,s,o,u){return n.startAt=i,na(n).immediateRender=t(n.immediateRender),this.staggerTo(e,r,n,a,s,o,u)},e.render=function render(t,e,r){var i,n,a,s,o,u,h,l,f,d,c,p,_=this._time,m=this._dirty?this.totalDuration():this._tDur,g=this._dur,v=this!==R&&m-U<t&&0<=t?m:t<U?0:t,y=this._zTime<0!=t<0&&(this._initted||!g);if(v!==this._tTime||r||y){if(_!==this._time&&g&&(v+=this._time-_,t+=this._time-_),i=v,f=this._start,u=!(l=this._ts),y&&(g||(_=this._zTime),!t&&e||(this._zTime=t)),this._repeat){if(c=this._yoyo,o=g+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*o+t,e,r);if(i=ca(v%o),v===m?(s=this._repeat,i=g):((s=~~(v/o))&&s===v/o&&(i=g,s--),g<i&&(i=g)),d=gt(this._tTime,o),!_&&this._tTime&&d!==s&&(d=s),c&&1&s&&(i=g-i,p=1),s!==d&&!this._lock){var b=c&&1&d,T=b===(c&&1&s);if(s<d&&(b=!b),_=b?0:g,this._lock=1,this.render(_||(p?0:ca(s*o)),e,!g)._lock=0,this._tTime=v,!e&&this.parent&&Pt(this,"onRepeat"),this.vars.repeatRefresh&&!p&&(this.invalidate()._lock=1),_&&_!==this._time||u!=!this._ts||this.vars.onRepeat&&!this.parent&&!this._act)return this;if(g=this._dur,m=this._tDur,T&&(this._lock=2,_=b?g:-1e-4,this.render(_,!0),this.vars.repeatRefresh&&!p&&this.invalidate()),this._lock=0,!this._ts&&!u)return this;Gb(this,p)}}if(this._hasPause&&!this._forcing&&this._lock<2&&(h=function _findNextPauseTween(t,e,r){var i;if(e<r)for(i=t._first;i&&i._start<=r;){if(!i._dur&&"isPause"===i.data&&i._start>e)return i;i=i._next}else for(i=t._last;i&&i._start>=r;){if(!i._dur&&"isPause"===i.data&&i._start<e)return i;i=i._prev}}(this,ca(_),ca(i)))&&(v-=i-(i=h._start)),this._tTime=v,this._time=i,this._act=!l,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=t,_=0),!_&&i&&!e&&(Pt(this,"onStart"),this._tTime!==v))return this;if(_<=i&&0<=t)for(n=this._first;n;){if(a=n._next,(n._act||i>=n._start)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0<n._ts?(i-n._start)*n._ts:(n._dirty?n.totalDuration():n._tDur)+(i-n._start)*n._ts,e,r),i!==this._time||!this._ts&&!u){h=0,a&&(v+=this._zTime=-U);break}}n=a}else{n=this._last;for(var w=t<0?t:i;n;){if(a=n._prev,(n._act||w<=n._end)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0<n._ts?(w-n._start)*n._ts:(n._dirty?n.totalDuration():n._tDur)+(w-n._start)*n._ts,e,r),i!==this._time||!this._ts&&!u){h=0,a&&(v+=this._zTime=w?-U:U);break}}n=a}}if(h&&!e&&(this.pause(),h.render(_<=i?0:-U)._zTime=_<=i?1:-1,this._ts))return this._start=f,ya(this),this.render(t,e,r);this._onUpdate&&!e&&Pt(this,"onUpdate",!0),(v===m&&m>=this.totalDuration()||!v&&_)&&(f!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||(!t&&g||!(v===m&&0<this._ts||!v&&this._ts<0)||ra(this,1),e||t<0&&!_||!v&&!_&&m||(Pt(this,v===m&&0<=t?"onComplete":"onReverseComplete",!0),!this._prom||v<m&&0<this.timeScale()||this._prom())))}return this},e.add=function add(t,e){var r=this;if(q(e)||(e=bt(this,e,t)),!(t instanceof Nt)){if(H(t))return t.forEach(function(t){return r.add(t,e)}),this;if(o(t))return this.addLabel(t,e);if(!p(t))return this;t=Qt.delayedCall(0,t)}return this!==t?Ba(this,t,e):this},e.getChildren=function getChildren(t,e,r,i){void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===r&&(r=!0),void 0===i&&(i=-X);for(var n=[],a=this._first;a;)a._start>=i&&(a instanceof Qt?e&&n.push(a):(r&&n.push(a),t&&n.push.apply(n,a.getChildren(!0,e,r)))),a=a._next;return n},e.getById=function getById(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},e.remove=function remove(t){return o(t)?this.removeLabel(t):p(t)?this.killTweensOf(t):(qa(this,t),t===this._recent&&(this._recent=this._last),sa(this))},e.totalTime=function totalTime(t,e){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=ca(Ct.time-(0<this._ts?t/this._ts:(this.totalDuration()-t)/-this._ts))),n.prototype.totalTime.call(this,t,e),this._forcing=0,this):this._tTime},e.addLabel=function addLabel(t,e){return this.labels[t]=bt(this,e),this},e.removeLabel=function removeLabel(t){return delete this.labels[t],this},e.addPause=function addPause(t,e,r){var i=Qt.delayedCall(0,e||Q,r);return i.data="isPause",this._hasPause=1,Ba(this,i,bt(this,t))},e.removePause=function removePause(t){var e=this._first;for(t=bt(this,t);e;)e._start===t&&"isPause"===e.data&&ra(e),e=e._next},e.killTweensOf=function killTweensOf(t,e,r){for(var i=this.getTweensOf(t,r),n=i.length;n--;)Yt!==i[n]&&i[n].kill(t,e);return this},e.getTweensOf=function getTweensOf(t,e){for(var r,i=[],n=xt(t),a=this._first,s=q(e);a;)a instanceof Qt?da(a._targets,n)&&(s?(!Yt||a._initted&&a._ts)&&a.globalTime(0)<=e&&a.globalTime(a.totalDuration())>e:!e||a.isActive())&&i.push(a):(r=a.getTweensOf(n,e)).length&&i.push.apply(i,r),a=a._next;return i},e.tweenTo=function tweenTo(t,e){e=e||{};var r,i=this,n=bt(i,t),a=e.startAt,s=e.onStart,o=e.onStartParams,u=e.immediateRender,h=Qt.to(i,ia({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale())||U,onStart:function onStart(){if(i.pause(),!r){var t=e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale());h._dur!==t&&Ia(h,t,0,1).render(h._time,!0,!0),r=1}s&&s.apply(h,o||[])}},e));return u?h.render(0):h},e.tweenFromTo=function tweenFromTo(t,e,r){return this.tweenTo(e,ia({startAt:{time:bt(this,t)}},r))},e.recent=function recent(){return this._recent},e.nextLabel=function nextLabel(t){return void 0===t&&(t=this._time),ib(this,bt(this,t))},e.previousLabel=function previousLabel(t){return void 0===t&&(t=this._time),ib(this,bt(this,t),1)},e.currentLabel=function currentLabel(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+U)},e.shiftChildren=function shiftChildren(t,e,r){void 0===r&&(r=0);for(var i,n=this._first,a=this.labels;n;)n._start>=r&&(n._start+=t,n._end+=t),n=n._next;if(e)for(i in a)a[i]>=r&&(a[i]+=t);return sa(this)},e.invalidate=function invalidate(){var t=this._first;for(this._lock=0;t;)t.invalidate(),t=t._next;return n.prototype.invalidate.call(this)},e.clear=function clear(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),sa(this)},e.totalDuration=function totalDuration(t){var e,r,i,n=0,a=this,s=a._last,o=X;if(arguments.length)return a.timeScale((a._repeat<0?a.duration():a.totalDuration())/(a.reversed()?-t:t));if(a._dirty){for(i=a.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),o<(r=s._start)&&a._sort&&s._ts&&!a._lock?(a._lock=1,Ba(a,s,r-s._delay,1)._lock=0):o=r,r<0&&s._ts&&(n-=r,(!i&&!a._dp||i&&i.smoothChildTiming)&&(a._start+=r/a._ts,a._time-=r,a._tTime-=r),a.shiftChildren(-r,!1,-Infinity),o=0),s._end>n&&s._ts&&(n=s._end),s=e;Ia(a,a===R&&a._time>n?a._time:n,1,1),a._dirty=0}return a._tDur},Timeline.updateRoot=function updateRoot(t){if(R._ts&&(fa(R,xa(t,R)),f=Ct.frame),Ct.frame>=ct){ct+=Y.autoSleep||120;var e=R._first;if((!e||!e._ts)&&Y.autoSleep&&Ct._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Ct.sleep()}}},Timeline}(Nt);ia(qt.prototype,{_lock:0,_hasPause:0,_forcing:0});function Sb(t,e,r,i,n,a){var u,h,l,f;if(ft[t]&&!1!==(u=new ft[t]).init(n,u.rawVars?e[t]:function _processVars(t,e,r,i,n){if(p(t)&&(t=Vt(t,n,e,r,i)),!s(t)||t.style&&t.nodeType||H(t)||Z(t))return o(t)?Vt(t,n,e,r,i):t;var a,u={};for(a in t)u[a]=Vt(t[a],n,e,r,i);return u}(e[t],i,n,a,r),r,i,a)&&(r._pt=h=new ae(r._pt,n,t,0,1,u.render,u,0,u.priority),r!==d))for(l=r._ptLookup[r._targets.indexOf(n)],f=u._props.length;f--;)l[u._props[f]]=h;return u}var Yt,Xt=function _addPropTween(t,e,r,i,n,a,s,u,h){p(i)&&(i=i(n||0,t,a));var l,f=t[e],d="get"!==r?r:p(f)?h?t[e.indexOf("set")||!p(t["get"+e.substr(3)])?e:"get"+e.substr(3)](h):t[e]():f,c=p(f)?h?$t:Kt:Gt;if(o(i)&&(~i.indexOf("random(")&&(i=fb(i)),"="===i.charAt(1)&&(!(l=parseFloat(d)+parseFloat(i.substr(2))*("-"===i.charAt(0)?-1:1)+(Pa(d)||0))&&0!==l||(i=l))),d!==i)return isNaN(d*i)||""===i?(f||e in t||N(e,i),function _addComplexStringPropTween(t,e,r,i,n,a,s){var o,u,h,l,f,d,c,p,_=new ae(this._pt,t,e,0,1,te,null,n),m=0,g=0;for(_.b=r,_.e=i,r+="",(c=~(i+="").indexOf("random("))&&(i=fb(i)),a&&(a(p=[r,i],t,e),r=p[0],i=p[1]),u=r.match(it)||[];o=it.exec(i);)l=o[0],f=i.substring(m,o.index),h?h=(h+1)%5:"rgba("===f.substr(-5)&&(h=1),l!==u[g++]&&(d=parseFloat(u[g-1])||0,_._pt={_next:_._pt,p:f||1===g?f:",",s:d,c:"="===l.charAt(1)?parseFloat(l.substr(2))*("-"===l.charAt(0)?-1:1):parseFloat(l)-d,m:h&&h<4?Math.round:0},m=it.lastIndex);return _.c=m<i.length?i.substring(m,i.length):"",_.fp=s,(nt.test(i)||c)&&(_.e=0),this._pt=_}.call(this,t,e,d,i,c,u||Y.stringFilter,h)):(l=new ae(this._pt,t,e,+d||0,i-(d||0),"boolean"==typeof f?Ht:Zt,0,c),h&&(l.fp=h),s&&l.modifier(s,this,t),this._pt=l)},Ut=function _initTween(e,r){var i,n,a,s,o,u,h,l,f,d,c,p,m,g=e.vars,v=g.ease,y=g.startAt,b=g.immediateRender,T=g.lazy,w=g.onUpdate,x=g.onUpdateParams,O=g.callbackScope,P=g.runBackwards,k=g.yoyoEase,M=g.keyframes,A=g.autoRevert,S=e._dur,C=e._startAt,D=e._targets,z=e.parent,I=z&&"nested"===z.data?z.parent._targets:D,B="auto"===e._overwrite&&!F,E=e.timeline;if(!E||M&&v||(v="none"),e._ease=Ft(v,L.ease),e._yEase=k?Et(Ft(!0===k?v:k,L.ease)):0,k&&e._yoyo&&!e._repeat&&(k=e._yEase,e._yEase=e._ease,e._ease=k),e._from=!E&&!!g.runBackwards,!E){if(p=(l=D[0]?_(D[0]).harness:0)&&g[l.prop],i=ma(g,ut),C&&C.render(-1,!0).kill(),y)if(ra(e._startAt=Qt.set(D,ia({data:"isStart",overwrite:!1,parent:z,immediateRender:!0,lazy:t(T),startAt:null,delay:0,onUpdate:w,onUpdateParams:x,callbackScope:O,stagger:0},y))),r<0&&!b&&!A&&e._startAt.render(-1,!0),b){if(0<r&&!A&&(e._startAt=0),S&&r<=0)return void(r&&(e._zTime=r))}else!1===A&&(e._startAt=0);else if(P&&S)if(C)A||(e._startAt=0);else if(r&&(b=!1),a=ia({overwrite:!1,data:"isFromStart",lazy:b&&t(T),immediateRender:b,stagger:0,parent:z},i),p&&(a[l.prop]=p),ra(e._startAt=Qt.set(D,a)),r<0&&e._startAt.render(-1,!0),b){if(!r)return}else _initTween(e._startAt,U);for(e._pt=0,T=S&&t(T)||T&&!S,n=0;n<D.length;n++){if(h=(o=D[n])._gsap||$(D)[n]._gsap,e._ptLookup[n]=d={},lt[h.id]&&ht.length&&ea(),c=I===D?n:I.indexOf(o),l&&!1!==(f=new l).init(o,p||i,e,c,I)&&(e._pt=s=new ae(e._pt,o,f.name,0,1,f.render,f,0,f.priority),f._props.forEach(function(t){d[t]=s}),f.priority&&(u=1)),!l||p)for(a in i)ft[a]&&(f=Sb(a,i,e,c,o,I))?f.priority&&(u=1):d[a]=s=Xt.call(e,o,a,"get",i[a],c,I,0,g.stringFilter);e._op&&e._op[n]&&e.kill(o,e._op[n]),B&&e._pt&&(Yt=e,R.killTweensOf(o,d,e.globalTime(0)),m=!e.parent,Yt=0),e._pt&&T&&(lt[h.id]=1)}u&&ne(e),e._onInit&&e._onInit(e)}e._onUpdate=w,e._initted=(!e._op||e._pt)&&!m},Vt=function _parseFuncOrString(t,e,r,i,n){return p(t)?t.call(e,r,i,n):o(t)&&~t.indexOf("random(")?fb(t):t},jt=_t+"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase",Wt=(jt+",id,stagger,delay,duration,paused,scrollTrigger").split(","),Qt=function(S){function Tween(e,r,i,n){var a;"number"==typeof r&&(i.duration=r,r=i,i=null);var o,u,h,l,f,d,c,p,_=(a=S.call(this,n?r:na(r))||this).vars,m=_.duration,g=_.delay,y=_.immediateRender,b=_.stagger,T=_.overwrite,w=_.keyframes,x=_.defaults,P=_.scrollTrigger,k=_.yoyoEase,M=r.parent||R,A=(H(e)||Z(e)?q(e[0]):"length"in r)?[e]:xt(e);if(a._targets=A.length?$(A):O("GSAP target "+e+" not found. https://greensock.com",!Y.nullTargetWarn)||[],a._ptLookup=[],a._overwrite=T,w||b||v(m)||v(g)){if(r=a.vars,(o=a.timeline=new qt({data:"nested",defaults:x||{}})).kill(),o.parent=o._dp=_assertThisInitialized(a),o._start=0,w)ia(o.vars.defaults,{ease:"none"}),b?A.forEach(function(r,i){return w.forEach(function(t,e){return o.to(r,t,e?">":i*b)})}):w.forEach(function(t){return o.to(A,t,">")});else{if(l=A.length,c=b?Xa(b):Q,s(b))for(f in b)~jt.indexOf(f)&&((p=p||{})[f]=b[f]);for(u=0;u<l;u++){for(f in h={},r)Wt.indexOf(f)<0&&(h[f]=r[f]);h.stagger=0,k&&(h.yoyoEase=k),p&&mt(h,p),d=A[u],h.duration=+Vt(m,_assertThisInitialized(a),u,d,A),h.delay=(+Vt(g,_assertThisInitialized(a),u,d,A)||0)-a._delay,!b&&1===l&&h.delay&&(a._delay=g=h.delay,a._start+=g,h.delay=0),o.to(d,h,c(u,d,A))}o.duration()?m=g=0:a.timeline=0}m||a.duration(m=o.duration())}else a.timeline=0;return!0!==T||F||(Yt=_assertThisInitialized(a),R.killTweensOf(A),Yt=0),Ba(M,_assertThisInitialized(a),i),r.reversed&&a.reverse(),r.paused&&a.paused(!0),(y||!m&&!w&&a._start===ca(M._time)&&t(y)&&function _hasNoPausedAncestors(t){return!t||t._ts&&_hasNoPausedAncestors(t.parent)}(_assertThisInitialized(a))&&"nested"!==M.data)&&(a._tTime=-U,a.render(Math.max(0,-g))),P&&Ca(_assertThisInitialized(a),P),a}_inheritsLoose(Tween,S);var e=Tween.prototype;return e.render=function render(t,e,r){var i,n,a,s,o,u,h,l,f,d=this._time,c=this._tDur,p=this._dur,_=c-U<t&&0<=t?c:t<U?0:t;if(p){if(_!==this._tTime||!t||r||!this._initted&&this._tTime||this._startAt&&this._zTime<0!=t<0){if(i=_,l=this.timeline,this._repeat){if(s=p+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*s+t,e,r);if(i=ca(_%s),_===c?(a=this._repeat,i=p):((a=~~(_/s))&&a===_/s&&(i=p,a--),p<i&&(i=p)),(u=this._yoyo&&1&a)&&(f=this._yEase,i=p-i),o=gt(this._tTime,s),i===d&&!r&&this._initted)return this;a!==o&&(l&&this._yEase&&Gb(l,u),!this.vars.repeatRefresh||u||this._lock||(this._lock=r=1,this.render(ca(s*a),!0).invalidate()._lock=0))}if(!this._initted){if(Da(this,t<0?t:i,r,e))return this._tTime=0,this;if(p!==this._dur)return this.render(t,e,r)}if(this._tTime=_,this._time=i,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=h=(f||this._ease)(i/p),this._from&&(this.ratio=h=1-h),!i||d||e||Pt(this,"onStart"),i&&!d&&!e&&(Pt(this,"onStart"),this._tTime!==_))return this;for(n=this._pt;n;)n.r(h,n.d),n=n._next;l&&l.render(t<0?t:!i&&u?-U:l._dur*h,e,r)||this._startAt&&(this._zTime=t),this._onUpdate&&!e&&(t<0&&this._startAt&&this._startAt.render(t,!0,r),Pt(this,"onUpdate")),this._repeat&&a!==o&&this.vars.onRepeat&&!e&&this.parent&&Pt(this,"onRepeat"),_!==this._tDur&&_||this._tTime!==_||(t<0&&this._startAt&&!this._onUpdate&&this._startAt.render(t,!0,!0),!t&&p||!(_===this._tDur&&0<this._ts||!_&&this._ts<0)||ra(this,1),e||t<0&&!d||!_&&!d||(Pt(this,_===c?"onComplete":"onReverseComplete",!0),!this._prom||_<c&&0<this.timeScale()||this._prom()))}}else!function _renderZeroDurationTween(t,e,r,i){var n,a,s,o=t.ratio,u=e<0||!e&&(!t._start&&function _parentPlayheadIsBeforeStart(t){var e=t.parent;return e&&e._ts&&e._initted&&!e._lock&&(e.rawTime()<0||_parentPlayheadIsBeforeStart(e))}(t)&&(t._initted||!vt(t))||(t._ts<0||t._dp._ts<0)&&!vt(t))?0:1,h=t._rDelay,l=0;if(h&&t._repeat&&(l=Tt(0,t._tDur,e),a=gt(l,h),s=gt(t._tTime,h),t._yoyo&&1&a&&(u=1-u),a!==s&&(o=1-u,t.vars.repeatRefresh&&t._initted&&t.invalidate())),u!==o||i||t._zTime===U||!e&&t._zTime){if(!t._initted&&Da(t,e,i,r))return;for(s=t._zTime,t._zTime=e||(r?U:0),r=r||e&&!s,t.ratio=u,t._from&&(u=1-u),t._time=0,t._tTime=l,n=t._pt;n;)n.r(u,n.d),n=n._next;t._startAt&&e<0&&t._startAt.render(e,!0,!0),t._onUpdate&&!r&&Pt(t,"onUpdate"),l&&t._repeat&&!r&&t.parent&&Pt(t,"onRepeat"),(e>=t._tDur||e<0)&&t.ratio===u&&(u&&ra(t,1),r||(Pt(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},e.targets=function targets(){return this._targets},e.invalidate=function invalidate(){return this._pt=this._op=this._startAt=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(),S.prototype.invalidate.call(this)},e.kill=function kill(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?kb(this):this;if(this.timeline){var r=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Yt&&!0!==Yt.vars.overwrite)._first||kb(this),this.parent&&r!==this.timeline.totalDuration()&&Ia(this,this._dur*this.timeline._tDur/r,0,1),this}var i,n,a,s,u,h,l,f=this._targets,d=t?xt(t):f,c=this._ptLookup,p=this._pt;if((!e||"all"===e)&&function _arraysMatch(t,e){for(var r=t.length,i=r===e.length;i&&r--&&t[r]===e[r];);return r<0}(f,d))return"all"===e&&(this._pt=0),kb(this);for(i=this._op=this._op||[],"all"!==e&&(o(e)&&(u={},ba(e,function(t){return u[t]=1}),e=u),e=function _addAliasesToVars(t,e){var r,i,n,a,s=t[0]?_(t[0]).harness:0,o=s&&s.aliases;if(!o)return e;for(i in r=mt({},e),o)if(i in r)for(n=(a=o[i].split(",")).length;n--;)r[a[n]]=r[i];return r}(f,e)),l=f.length;l--;)if(~d.indexOf(f[l]))for(u in n=c[l],"all"===e?(i[l]=e,s=n,a={}):(a=i[l]=i[l]||{},s=e),s)(h=n&&n[u])&&("kill"in h.d&&!0!==h.d.kill(u)||qa(this,h,"_pt"),delete n[u]),"all"!==a&&(a[u]=1);return this._initted&&!this._pt&&p&&kb(this),this},Tween.to=function to(t,e,r){return new Tween(t,e,r)},Tween.from=function from(t,e){return Ma(1,arguments)},Tween.delayedCall=function delayedCall(t,e,r,i){return new Tween(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},Tween.fromTo=function fromTo(t,e,r){return Ma(2,arguments)},Tween.set=function set(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new Tween(t,e)},Tween.killTweensOf=function killTweensOf(t,e,r){return R.killTweensOf(t,e,r)},Tween}(Nt);ia(Qt.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),ba("staggerTo,staggerFrom,staggerFromTo",function(r){Qt[r]=function(){var t=new qt,e=wt.call(arguments,0);return e.splice("staggerFromTo"===r?5:4,0,0),t[r].apply(t,e)}});function bc(t,e,r){return t.setAttribute(e,r)}function jc(t,e,r,i){i.mSet(t,e,i.m.call(i.tween,r,i.mt),i)}var Gt=function _setterPlain(t,e,r){return t[e]=r},Kt=function _setterFunc(t,e,r){return t[e](r)},$t=function _setterFuncWithParam(t,e,r,i){return t[e](i.fp,r)},Jt=function _getSetter(t,e){return p(t[e])?Kt:r(t[e])&&t.setAttribute?bc:Gt},Zt=function _renderPlain(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},Ht=function _renderBoolean(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},te=function _renderComplexString(t,e){var r=e._pt,i="";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;r;)i=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+i,r=r._next;i+=e.c}e.set(e.t,e.p,i,e)},ee=function _renderPropTweens(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},re=function _addPluginModifier(t,e,r,i){for(var n,a=this._pt;a;)n=a._next,a.p===i&&a.modifier(t,e,r),a=n},ie=function _killPropTweensOf(t){for(var e,r,i=this._pt;i;)r=i._next,i.p===t&&!i.op||i.op===t?qa(this,i,"_pt"):i.dep||(e=1),i=r;return!e},ne=function _sortPropTweensByPriority(t){for(var e,r,i,n,a=t._pt;a;){for(e=a._next,r=i;r&&r.pr>a.pr;)r=r._next;(a._prev=r?r._prev:n)?a._prev._next=a:i=a,(a._next=r)?r._prev=a:n=a,a=e}t._pt=i},ae=(PropTween.prototype.modifier=function modifier(t,e,r){this.mSet=this.mSet||this.set,this.set=jc,this.m=t,this.mt=r,this.tween=e},PropTween);function PropTween(t,e,r,i,n,a,s,o,u){this.t=e,this.s=i,this.c=n,this.p=r,this.r=a||Zt,this.d=s||this,this.set=o||Gt,this.pr=u||0,(this._next=t)&&(t._prev=this)}ba(_t+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",function(t){return ut[t]=1}),ot.TweenMax=ot.TweenLite=Qt,ot.TimelineLite=ot.TimelineMax=qt,R=new qt({sortChildren:!1,defaults:L,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),Y.stringFilter=vb;var se={registerPlugin:function registerPlugin(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];e.forEach(function(t){return function _createPlugin(t){var e=(t=!t.name&&t.default||t).name,r=p(t),i=e&&!r&&t.init?function(){this._props=[]}:t,n={init:Q,render:ee,add:Xt,kill:ie,modifier:re,rawVars:0},a={targetTest:0,get:0,getSetter:Jt,aliases:{},register:0};if(Dt(),t!==i){if(ft[e])return;ia(i,ia(ma(t,n),a)),mt(i.prototype,mt(n,ma(t,a))),ft[i.prop=e]=i,t.targetTest&&(pt.push(i),ut[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}P(e,i),t.register&&t.register(oe,i,ae)}(t)})},timeline:function timeline(t){return new qt(t)},getTweensOf:function getTweensOf(t,e){return R.getTweensOf(t,e)},getProperty:function getProperty(i,t,e,r){o(i)&&(i=xt(i)[0]);var n=_(i||{}).get,a=e?ha:ga;return"native"===e&&(e=""),i?t?a((ft[t]&&ft[t].get||n)(i,t,e,r)):function(t,e,r){return a((ft[t]&&ft[t].get||n)(i,t,e,r))}:i},quickSetter:function quickSetter(r,e,i){if(1<(r=xt(r)).length){var n=r.map(function(t){return oe.quickSetter(t,e,i)}),a=n.length;return function(t){for(var e=a;e--;)n[e](t)}}r=r[0]||{};var s=ft[e],o=_(r),u=o.harness&&(o.harness.aliases||{})[e]||e,h=s?function(t){var e=new s;d._pt=0,e.init(r,i?t+i:t,d,0,[r]),e.render(1,e),d._pt&&ee(1,d)}:o.set(r,u);return s?h:function(t){return h(r,u,i?t+i:t,o,1)}},isTweening:function isTweening(t){return 0<R.getTweensOf(t,!0).length},defaults:function defaults(t){return t&&t.ease&&(t.ease=Ft(t.ease,L.ease)),la(L,t||{})},config:function config(t){return la(Y,t||{})},registerEffect:function registerEffect(t){var i=t.name,n=t.effect,e=t.plugins,a=t.defaults,r=t.extendTimeline;(e||"").split(",").forEach(function(t){return t&&!ft[t]&&!ot[t]&&O(i+" effect requires "+t+" plugin.")}),dt[i]=function(t,e,r){return n(xt(t),ia(e||{},a),r)},r&&(qt.prototype[i]=function(t,e,r){return this.add(dt[i](t,s(e)?e:(r=e)&&{},this),r)})},registerEase:function registerEase(t,e){zt[t]=Ft(e)},parseEase:function parseEase(t,e){return arguments.length?Ft(t,e):zt},getById:function getById(t){return R.getById(t)},exportRoot:function exportRoot(e,r){void 0===e&&(e={});var i,n,a=new qt(e);for(a.smoothChildTiming=t(e.smoothChildTiming),R.remove(a),a._dp=0,a._time=a._tTime=R._time,i=R._first;i;)n=i._next,!r&&!i._dur&&i instanceof Qt&&i.vars.onComplete===i._targets[0]||Ba(a,i,i._start-i._delay),i=n;return Ba(R,a,0),a},utils:{wrap:function wrap(e,t,r){var i=t-e;return H(e)?cb(e,wrap(0,e.length),t):Na(r,function(t){return(i+(t-e)%i)%i+e})},wrapYoyo:function wrapYoyo(e,t,r){var i=t-e,n=2*i;return H(e)?cb(e,wrapYoyo(0,e.length-1),t):Na(r,function(t){return e+(i<(t=(n+(t-e)%n)%n||0)?n-t:t)})},distribute:Xa,random:$a,snap:Za,normalize:function normalize(t,e,r){return Ot(t,e,0,1,r)},getUnit:Pa,clamp:function clamp(e,r,t){return Na(t,function(t){return Tt(e,r,t)})},splitColor:qb,toArray:xt,selector:function selector(r){return r=xt(r)[0]||O("Invalid scope")||{},function(t){var e=r.current||r.nativeElement||r;return xt(t,e.querySelectorAll?e:e===r?O("Invalid scope")||a.createElement("div"):r)}},mapRange:Ot,pipe:function pipe(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return function(t){return e.reduce(function(t,e){return e(t)},t)}},unitize:function unitize(e,r){return function(t){return e(parseFloat(t))+(r||Pa(t))}},interpolate:function interpolate(e,r,t,i){var n=isNaN(e+r)?0:function(t){return(1-t)*e+t*r};if(!n){var a,s,u,h,l,f=o(e),d={};if(!0===t&&(i=1)&&(t=null),f)e={p:e},r={p:r};else if(H(e)&&!H(r)){for(u=[],h=e.length,l=h-2,s=1;s<h;s++)u.push(interpolate(e[s-1],e[s]));h--,n=function func(t){t*=h;var e=Math.min(l,~~t);return u[e](t-e)},t=r}else i||(e=mt(H(e)?[]:{},e));if(!u){for(a in r)Xt.call(d,e,a,"get",r[a]);n=function func(t){return ee(t,d)||(f?e.p:e)}}}return Na(t,n)},shuffle:Wa},install:M,effects:dt,ticker:Ct,updateRoot:qt.updateRoot,plugins:ft,globalTimeline:R,core:{PropTween:ae,globals:P,Tween:Qt,Timeline:qt,Animation:Nt,getCache:_,_removeLinkedListItem:qa,suppressOverwrites:function suppressOverwrites(t){return F=t}}};ba("to,from,fromTo,delayedCall,set,killTweensOf",function(t){return se[t]=Qt[t]}),Ct.add(qt.updateRoot),d=se.to({},{duration:0});function nc(t,e){for(var r=t._pt;r&&r.p!==e&&r.op!==e&&r.fp!==e;)r=r._next;return r}function pc(t,n){return{name:t,rawVars:1,init:function init(t,i,e){e._onInit=function(t){var e,r;if(o(i)&&(e={},ba(i,function(t){return e[t]=1}),i=e),n){for(r in e={},i)e[r]=n(i[r]);i=e}!function _addModifiers(t,e){var r,i,n,a=t._targets;for(r in e)for(i=a.length;i--;)(n=(n=t._ptLookup[i][r])&&n.d)&&(n._pt&&(n=nc(n,r)),n&&n.modifier&&n.modifier(e[r],t,a[i],r))}(t,i)}}}}var oe=se.registerPlugin({name:"attr",init:function init(t,e,r,i,n){var a,s;for(a in e)(s=this.add(t,"setAttribute",(t.getAttribute(a)||0)+"",e[a],i,n,0,0,a))&&(s.op=a),this._props.push(a)}},{name:"endArray",init:function init(t,e){for(var r=e.length;r--;)this.add(t,r,t[r]||0,e[r])}},pc("roundProps",Ya),pc("modifiers"),pc("snap",Za))||se;Qt.version=qt.version=oe.version="3.7.0",l=1,u()&&Dt();function $c(t,e){return e.set(e.t,e.p,Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)}function _c(t,e){return e.set(e.t,e.p,1===t?e.e:Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)}function ad(t,e){return e.set(e.t,e.p,t?Math.round(1e4*(e.s+e.c*t))/1e4+e.u:e.b,e)}function bd(t,e){var r=e.s+e.c*t;e.set(e.t,e.p,~~(r+(r<0?-.5:.5))+e.u,e)}function cd(t,e){return e.set(e.t,e.p,t?e.e:e.b,e)}function dd(t,e){return e.set(e.t,e.p,1!==t?e.b:e.e,e)}function ed(t,e,r){return t.style[e]=r}function fd(t,e,r){return t.style.setProperty(e,r)}function gd(t,e,r){return t._gsap[e]=r}function hd(t,e,r){return t._gsap.scaleX=t._gsap.scaleY=r}function id(t,e,r,i,n){var a=t._gsap;a.scaleX=a.scaleY=r,a.renderTransform(n,a)}function jd(t,e,r,i,n){var a=t._gsap;a[e]=r,a.renderTransform(n,a)}function nd(t,e){var r=he.createElementNS?he.createElementNS((e||"http://www.w3.org/1999/xhtml").replace(/^https/,"http"),t):he.createElement(t);return r.style?r:he.createElement(t)}function od(t,e,r){var i=getComputedStyle(t);return i[e]||i.getPropertyValue(e.replace(Re,"-$1").toLowerCase())||i.getPropertyValue(e)||!r&&od(t,Ve(e)||e,1)||""}function rd(){(function _windowExists(){return"undefined"!=typeof window})()&&window.document&&(ue=window,he=ue.document,le=he.documentElement,de=nd("div")||{style:{}},nd("div"),Ye=Ve(Ye),Xe=Ye+"Origin",de.style.cssText="border-width:0;line-height:0;position:absolute;padding:0",pe=!!Ve("perspective"),fe=1)}function sd(t){var e,r=nd("svg",this.ownerSVGElement&&this.ownerSVGElement.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),i=this.parentNode,n=this.nextSibling,a=this.style.cssText;if(le.appendChild(r),r.appendChild(this),this.style.display="block",t)try{e=this.getBBox(),this._gsapBBox=this.getBBox,this.getBBox=sd}catch(t){}else this._gsapBBox&&(e=this._gsapBBox());return i&&(n?i.insertBefore(this,n):i.appendChild(this)),le.removeChild(r),this.style.cssText=a,e}function td(t,e){for(var r=e.length;r--;)if(t.hasAttribute(e[r]))return t.getAttribute(e[r])}function ud(e){var r;try{r=e.getBBox()}catch(t){r=sd.call(e,!0)}return r&&(r.width||r.height)||e.getBBox===sd||(r=sd.call(e,!0)),!r||r.width||r.x||r.y?r:{x:+td(e,["x","cx","x1"])||0,y:+td(e,["y","cy","y1"])||0,width:0,height:0}}function vd(t){return!(!t.getCTM||t.parentNode&&!t.ownerSVGElement||!ud(t))}function wd(t,e){if(e){var r=t.style;e in Ie&&e!==Xe&&(e=Ye),r.removeProperty?("ms"!==e.substr(0,2)&&"webkit"!==e.substr(0,6)||(e="-"+e),r.removeProperty(e.replace(Re,"-$1").toLowerCase())):r.removeAttribute(e)}}function xd(t,e,r,i,n,a){var s=new ae(t._pt,e,r,0,1,a?dd:cd);return(t._pt=s).b=i,s.e=n,t._props.push(r),s}function zd(t,e,r,i){var n,a,s,o,u=parseFloat(r)||0,h=(r+"").trim().substr((u+"").length)||"px",l=de.style,f=Le.test(e),d="svg"===t.tagName.toLowerCase(),c=(d?"client":"offset")+(f?"Width":"Height"),p="px"===i,m="%"===i;return i===h||!u||je[i]||je[h]?u:("px"===h||p||(u=zd(t,e,r,"px")),o=t.getCTM&&vd(t),!m&&"%"!==h||!Ie[e]&&!~e.indexOf("adius")?(l[f?"width":"height"]=100+(p?h:i),a=~e.indexOf("adius")||"em"===i&&t.appendChild&&!d?t:t.parentNode,o&&(a=(t.ownerSVGElement||{}).parentNode),a&&a!==he&&a.appendChild||(a=he.body),(s=a._gsap)&&m&&s.width&&f&&s.time===Ct.time?ca(u/s.width*100):(!m&&"%"!==h||(l.position=od(t,"position")),a===t&&(l.position="static"),a.appendChild(de),n=de[c],a.removeChild(de),l.position="absolute",f&&m&&((s=_(a)).time=Ct.time,s.width=a[c]),ca(p?n*u/100:n&&u?100/n*u:0))):(n=o?t.getBBox()[f?"width":"height"]:t[c],ca(m?u/n*100:u/100*n)))}function Ad(t,e,r,i){var n;return fe||rd(),e in qe&&"transform"!==e&&~(e=qe[e]).indexOf(",")&&(e=e.split(",")[0]),Ie[e]&&"transform"!==e?(n=$e(t,i),n="transformOrigin"!==e?n[e]:n.svg?n.origin:Je(od(t,Xe))+" "+n.zOrigin+"px"):(n=t.style[e])&&"auto"!==n&&!i&&!~(n+"").indexOf("calc(")||(n=Qe[e]&&Qe[e](t,e,r)||od(t,e)||aa(t,e)||("opacity"===e?1:0)),r&&!~(n+"").trim().indexOf(" ")?zd(t,e,n,r)+r:n}function Bd(t,e,r,i){if(!r||"none"===r){var n=Ve(e,t,1),a=n&&od(t,n,1);a&&a!==r?(e=n,r=a):"borderColor"===e&&(r=od(t,"borderTopColor"))}var s,o,u,h,l,f,d,c,p,_,m,g,v=new ae(this._pt,t.style,e,0,1,te),y=0,b=0;if(v.b=r,v.e=i,r+="","auto"===(i+="")&&(t.style[e]=i,i=od(t,e)||i,t.style[e]=r),vb(s=[r,i]),i=s[1],u=(r=s[0]).match(rt)||[],(i.match(rt)||[]).length){for(;o=rt.exec(i);)d=o[0],p=i.substring(y,o.index),l?l=(l+1)%5:"rgba("!==p.substr(-5)&&"hsla("!==p.substr(-5)||(l=1),d!==(f=u[b++]||"")&&(h=parseFloat(f)||0,m=f.substr((h+"").length),(g="="===d.charAt(1)?+(d.charAt(0)+"1"):0)&&(d=d.substr(2)),c=parseFloat(d),_=d.substr((c+"").length),y=rt.lastIndex-_.length,_||(_=_||Y.units[e]||m,y===i.length&&(i+=_,v.e+=_)),m!==_&&(h=zd(t,e,f,_)||0),v._pt={_next:v._pt,p:p||1===b?p:",",s:h,c:g?g*c:c-h,m:l&&l<4||"zIndex"===e?Math.round:0});v.c=y<i.length?i.substring(y,i.length):""}else v.r="display"===e&&"none"===i?dd:cd;return nt.test(i)&&(v.e=0),this._pt=v}function Dd(t){var e=t.split(" "),r=e[0],i=e[1]||"50%";return"top"!==r&&"bottom"!==r&&"left"!==i&&"right"!==i||(t=r,r=i,i=t),e[0]=We[r]||r,e[1]=We[i]||i,e.join(" ")}function Ed(t,e){if(e.tween&&e.tween._time===e.tween._dur){var r,i,n,a=e.t,s=a.style,o=e.u,u=a._gsap;if("all"===o||!0===o)s.cssText="",i=1;else for(n=(o=o.split(",")).length;-1<--n;)r=o[n],Ie[r]&&(i=1,r="transformOrigin"===r?Xe:Ye),wd(a,r);i&&(wd(a,Ye),u&&(u.svg&&a.removeAttribute("transform"),$e(a,1),u.uncache=1))}}function Id(t){return"matrix(1, 0, 0, 1, 0, 0)"===t||"none"===t||!t}function Jd(t){var e=od(t,Ye);return Id(e)?Ge:e.substr(7).match(et).map(ca)}function Kd(t,e){var r,i,n,a,s=t._gsap||_(t),o=t.style,u=Jd(t);return s.svg&&t.getAttribute("transform")?"1,0,0,1,0,0"===(u=[(n=t.transform.baseVal.consolidate().matrix).a,n.b,n.c,n.d,n.e,n.f]).join(",")?Ge:u:(u!==Ge||t.offsetParent||t===le||s.svg||(n=o.display,o.display="block",(r=t.parentNode)&&t.offsetParent||(a=1,i=t.nextSibling,le.appendChild(t)),u=Jd(t),n?o.display=n:wd(t,"display"),a&&(i?r.insertBefore(t,i):r?r.appendChild(t):le.removeChild(t))),e&&6<u.length?[u[0],u[1],u[4],u[5],u[12],u[13]]:u)}function Ld(t,e,r,i,n,a){var s,o,u,h=t._gsap,l=n||Kd(t,!0),f=h.xOrigin||0,d=h.yOrigin||0,c=h.xOffset||0,p=h.yOffset||0,_=l[0],m=l[1],g=l[2],v=l[3],y=l[4],b=l[5],T=e.split(" "),w=parseFloat(T[0])||0,x=parseFloat(T[1])||0;r?l!==Ge&&(o=_*v-m*g)&&(u=w*(-m/o)+x*(_/o)-(_*b-m*y)/o,w=w*(v/o)+x*(-g/o)+(g*b-v*y)/o,x=u):(w=(s=ud(t)).x+(~T[0].indexOf("%")?w/100*s.width:w),x=s.y+(~(T[1]||T[0]).indexOf("%")?x/100*s.height:x)),i||!1!==i&&h.smooth?(y=w-f,b=x-d,h.xOffset=c+(y*_+b*g)-y,h.yOffset=p+(y*m+b*v)-b):h.xOffset=h.yOffset=0,h.xOrigin=w,h.yOrigin=x,h.smooth=!!i,h.origin=e,h.originIsAbsolute=!!r,t.style[Xe]="0px 0px",a&&(xd(a,h,"xOrigin",f,w),xd(a,h,"yOrigin",d,x),xd(a,h,"xOffset",c,h.xOffset),xd(a,h,"yOffset",p,h.yOffset)),t.setAttribute("data-svg-origin",w+" "+x)}function Od(t,e,r){var i=Pa(e);return ca(parseFloat(e)+parseFloat(zd(t,"x",r+"px",i)))+i}function Vd(t,e,r,i,n,a){var s,u,h=360,l=o(n),f=parseFloat(n)*(l&&~n.indexOf("rad")?Be:1),d=a?f*a:f-i,c=i+d+"deg";return l&&("short"===(s=n.split("_")[1])&&(d%=h)!==d%180&&(d+=d<0?h:-h),"cw"===s&&d<0?d=(d+36e9)%h-~~(d/h)*h:"ccw"===s&&0<d&&(d=(d-36e9)%h-~~(d/h)*h)),t._pt=u=new ae(t._pt,e,r,i,d,_c),u.e=c,u.u="deg",t._props.push(r),u}function Wd(t,e){for(var r in e)t[r]=e[r];return t}function Xd(t,e,r){var i,n,a,s,o,u,h,l=Wd({},r._gsap),f=r.style;for(n in l.svg?(a=r.getAttribute("transform"),r.setAttribute("transform",""),f[Ye]=e,i=$e(r,1),wd(r,Ye),r.setAttribute("transform",a)):(a=getComputedStyle(r)[Ye],f[Ye]=e,i=$e(r,1),f[Ye]=a),Ie)(a=l[n])!==(s=i[n])&&"perspective,force3D,transformOrigin,svgOrigin".indexOf(n)<0&&(o=Pa(a)!==(h=Pa(s))?zd(r,n,a,h):parseFloat(a),u=parseFloat(s),t._pt=new ae(t._pt,i,n,o,u-o,$c),t._pt.u=h||0,t._props.push(n));Wd(i,l)}var ue,he,le,fe,de,ce,pe,_e=zt.Power0,me=zt.Power1,ge=zt.Power2,ve=zt.Power3,ye=zt.Power4,be=zt.Linear,Te=zt.Quad,we=zt.Cubic,xe=zt.Quart,Oe=zt.Quint,Pe=zt.Strong,ke=zt.Elastic,Me=zt.Back,Ae=zt.SteppedEase,Se=zt.Bounce,Ce=zt.Sine,De=zt.Expo,ze=zt.Circ,Ie={},Be=180/Math.PI,Ee=Math.PI/180,Fe=Math.atan2,Re=/([A-Z])/g,Le=/(?:left|right|width|margin|padding|x)/i,Ne=/[\s,\(]\S/,qe={autoAlpha:"opacity,visibility",scale:"scaleX,scaleY",alpha:"opacity"},Ye="transform",Xe=Ye+"Origin",Ue="O,Moz,ms,Ms,Webkit".split(","),Ve=function _checkPropPrefix(t,e,r){var i=(e||de).style,n=5;if(t in i&&!r)return t;for(t=t.charAt(0).toUpperCase()+t.substr(1);n--&&!(Ue[n]+t in i););return n<0?null:(3===n?"ms":0<=n?Ue[n]:"")+t},je={deg:1,rad:1,turn:1},We={top:"0%",bottom:"100%",left:"0%",right:"100%",center:"50%"},Qe={clearProps:function clearProps(t,e,r,i,n){if("isFromStart"!==n.data){var a=t._pt=new ae(t._pt,e,r,0,0,Ed);return a.u=i,a.pr=-10,a.tween=n,t._props.push(r),1}}},Ge=[1,0,0,1,0,0],Ke={},$e=function _parseTransform(t,e){var r=t._gsap||new Lt(t);if("x"in r&&!e&&!r.uncache)return r;var i,n,a,s,o,u,h,l,f,d,c,p,_,m,g,v,y,b,T,w,x,O,P,k,M,A,S,C,D,z,I,B,E=t.style,F=r.scaleX<0,R="deg",L=od(t,Xe)||"0";return i=n=a=u=h=l=f=d=c=0,s=o=1,r.svg=!(!t.getCTM||!vd(t)),m=Kd(t,r.svg),r.svg&&(k=(!r.uncache||"0px 0px"===L)&&!e&&t.getAttribute("data-svg-origin"),Ld(t,k||L,!!k||r.originIsAbsolute,!1!==r.smooth,m)),p=r.xOrigin||0,_=r.yOrigin||0,m!==Ge&&(b=m[0],T=m[1],w=m[2],x=m[3],i=O=m[4],n=P=m[5],6===m.length?(s=Math.sqrt(b*b+T*T),o=Math.sqrt(x*x+w*w),u=b||T?Fe(T,b)*Be:0,(f=w||x?Fe(w,x)*Be+u:0)&&(o*=Math.abs(Math.cos(f*Ee))),r.svg&&(i-=p-(p*b+_*w),n-=_-(p*T+_*x))):(B=m[6],z=m[7],S=m[8],C=m[9],D=m[10],I=m[11],i=m[12],n=m[13],a=m[14],h=(g=Fe(B,D))*Be,g&&(k=O*(v=Math.cos(-g))+S*(y=Math.sin(-g)),M=P*v+C*y,A=B*v+D*y,S=O*-y+S*v,C=P*-y+C*v,D=B*-y+D*v,I=z*-y+I*v,O=k,P=M,B=A),l=(g=Fe(-w,D))*Be,g&&(v=Math.cos(-g),I=x*(y=Math.sin(-g))+I*v,b=k=b*v-S*y,T=M=T*v-C*y,w=A=w*v-D*y),u=(g=Fe(T,b))*Be,g&&(k=b*(v=Math.cos(g))+T*(y=Math.sin(g)),M=O*v+P*y,T=T*v-b*y,P=P*v-O*y,b=k,O=M),h&&359.9<Math.abs(h)+Math.abs(u)&&(h=u=0,l=180-l),s=ca(Math.sqrt(b*b+T*T+w*w)),o=ca(Math.sqrt(P*P+B*B)),g=Fe(O,P),f=2e-4<Math.abs(g)?g*Be:0,c=I?1/(I<0?-I:I):0),r.svg&&(k=t.getAttribute("transform"),r.forceCSS=t.setAttribute("transform","")||!Id(od(t,Ye)),k&&t.setAttribute("transform",k))),90<Math.abs(f)&&Math.abs(f)<270&&(F?(s*=-1,f+=u<=0?180:-180,u+=u<=0?180:-180):(o*=-1,f+=f<=0?180:-180)),r.x=i-((r.xPercent=i&&(r.xPercent||(Math.round(t.offsetWidth/2)===Math.round(-i)?-50:0)))?t.offsetWidth*r.xPercent/100:0)+"px",r.y=n-((r.yPercent=n&&(r.yPercent||(Math.round(t.offsetHeight/2)===Math.round(-n)?-50:0)))?t.offsetHeight*r.yPercent/100:0)+"px",r.z=a+"px",r.scaleX=ca(s),r.scaleY=ca(o),r.rotation=ca(u)+R,r.rotationX=ca(h)+R,r.rotationY=ca(l)+R,r.skewX=f+R,r.skewY=d+R,r.transformPerspective=c+"px",(r.zOrigin=parseFloat(L.split(" ")[2])||0)&&(E[Xe]=Je(L)),r.xOffset=r.yOffset=0,r.force3D=Y.force3D,r.renderTransform=r.svg?ir:pe?rr:Ze,r.uncache=0,r},Je=function _firstTwoOnly(t){return(t=t.split(" "))[0]+" "+t[1]},Ze=function _renderNon3DTransforms(t,e){e.z="0px",e.rotationY=e.rotationX="0deg",e.force3D=0,rr(t,e)},He="0deg",tr="0px",er=") ",rr=function _renderCSSTransforms(t,e){var r=e||this,i=r.xPercent,n=r.yPercent,a=r.x,s=r.y,o=r.z,u=r.rotation,h=r.rotationY,l=r.rotationX,f=r.skewX,d=r.skewY,c=r.scaleX,p=r.scaleY,_=r.transformPerspective,m=r.force3D,g=r.target,v=r.zOrigin,y="",b="auto"===m&&t&&1!==t||!0===m;if(v&&(l!==He||h!==He)){var T,w=parseFloat(h)*Ee,x=Math.sin(w),O=Math.cos(w);w=parseFloat(l)*Ee,T=Math.cos(w),a=Od(g,a,x*T*-v),s=Od(g,s,-Math.sin(w)*-v),o=Od(g,o,O*T*-v+v)}_!==tr&&(y+="perspective("+_+er),(i||n)&&(y+="translate("+i+"%, "+n+"%) "),!b&&a===tr&&s===tr&&o===tr||(y+=o!==tr||b?"translate3d("+a+", "+s+", "+o+") ":"translate("+a+", "+s+er),u!==He&&(y+="rotate("+u+er),h!==He&&(y+="rotateY("+h+er),l!==He&&(y+="rotateX("+l+er),f===He&&d===He||(y+="skew("+f+", "+d+er),1===c&&1===p||(y+="scale("+c+", "+p+er),g.style[Ye]=y||"translate(0, 0)"},ir=function _renderSVGTransforms(t,e){var r,i,n,a,s,o=e||this,u=o.xPercent,h=o.yPercent,l=o.x,f=o.y,d=o.rotation,c=o.skewX,p=o.skewY,_=o.scaleX,m=o.scaleY,g=o.target,v=o.xOrigin,y=o.yOrigin,b=o.xOffset,T=o.yOffset,w=o.forceCSS,x=parseFloat(l),O=parseFloat(f);d=parseFloat(d),c=parseFloat(c),(p=parseFloat(p))&&(c+=p=parseFloat(p),d+=p),d||c?(d*=Ee,c*=Ee,r=Math.cos(d)*_,i=Math.sin(d)*_,n=Math.sin(d-c)*-m,a=Math.cos(d-c)*m,c&&(p*=Ee,s=Math.tan(c-p),n*=s=Math.sqrt(1+s*s),a*=s,p&&(s=Math.tan(p),r*=s=Math.sqrt(1+s*s),i*=s)),r=ca(r),i=ca(i),n=ca(n),a=ca(a)):(r=_,a=m,i=n=0),(x&&!~(l+"").indexOf("px")||O&&!~(f+"").indexOf("px"))&&(x=zd(g,"x",l,"px"),O=zd(g,"y",f,"px")),(v||y||b||T)&&(x=ca(x+v-(v*r+y*n)+b),O=ca(O+y-(v*i+y*a)+T)),(u||h)&&(s=g.getBBox(),x=ca(x+u/100*s.width),O=ca(O+h/100*s.height)),s="matrix("+r+","+i+","+n+","+a+","+x+","+O+")",g.setAttribute("transform",s),w&&(g.style[Ye]=s)};ba("padding,margin,Width,Radius",function(e,r){var t="Right",i="Bottom",n="Left",o=(r<3?["Top",t,i,n]:["Top"+n,"Top"+t,i+t,i+n]).map(function(t){return r<2?e+t:"border"+t+e});Qe[1<r?"border"+e:e]=function(e,t,r,i,n){var a,s;if(arguments.length<4)return a=o.map(function(t){return Ad(e,t,r)}),5===(s=a.join(" ")).split(a[0]).length?a[0]:s;a=(i+"").split(" "),s={},o.forEach(function(t,e){return s[t]=a[e]=a[e]||a[(e-1)/2|0]}),e.init(t,s,n)}});var nr,ar,sr,or={name:"css",register:rd,targetTest:function targetTest(t){return t.style&&t.nodeType},init:function init(t,e,r,i,n){var a,s,o,u,h,l,f,d,c,p,_,m,g,v,y,b=this._props,T=t.style,w=r.vars.startAt;for(f in fe||rd(),e)if("autoRound"!==f&&(s=e[f],!ft[f]||!Sb(f,e,r,i,t,n)))if(h=typeof s,l=Qe[f],"function"===h&&(h=typeof(s=s.call(r,i,t,n))),"string"===h&&~s.indexOf("random(")&&(s=fb(s)),l)l(this,t,f,s,r)&&(y=1);else if("--"===f.substr(0,2))a=(getComputedStyle(t).getPropertyValue(f)+"").trim(),s+="",At.lastIndex=0,At.test(a)||(d=Pa(a),c=Pa(s)),c?d!==c&&(a=zd(t,f,a,c)+c):d&&(s+=d),this.add(T,"setProperty",a,s,i,n,0,0,f),b.push(f);else if("undefined"!==h){if(w&&f in w?(a="function"==typeof w[f]?w[f].call(r,i,t,n):w[f],f in Y.units&&!Pa(a)&&(a+=Y.units[f]),"="===(a+"").charAt(1)&&(a=Ad(t,f))):a=Ad(t,f),u=parseFloat(a),(p="string"===h&&"="===s.charAt(1)?+(s.charAt(0)+"1"):0)&&(s=s.substr(2)),o=parseFloat(s),f in qe&&("autoAlpha"===f&&(1===u&&"hidden"===Ad(t,"visibility")&&o&&(u=0),xd(this,T,"visibility",u?"inherit":"hidden",o?"inherit":"hidden",!o)),"scale"!==f&&"transform"!==f&&~(f=qe[f]).indexOf(",")&&(f=f.split(",")[0])),_=f in Ie)if(m||((g=t._gsap).renderTransform&&!e.parseTransform||$e(t,e.parseTransform),v=!1!==e.smoothOrigin&&g.smooth,(m=this._pt=new ae(this._pt,T,Ye,0,1,g.renderTransform,g,0,-1)).dep=1),"scale"===f)this._pt=new ae(this._pt,g,"scaleY",g.scaleY,(p?p*o:o-g.scaleY)||0),b.pu
19514sh("scaleY",f),f+="X";else{if("transformOrigin"===f){s=Dd(s),g.svg?Ld(t,s,0,v,0,this):((c=parseFloat(s.split(" ")[2])||0)!==g.zOrigin&&xd(this,g,"zOrigin",g.zOrigin,c),xd(this,T,f,Je(a),Je(s)));continue}if("svgOrigin"===f){Ld(t,s,1,v,0,this);continue}if(f in Ke){Vd(this,g,f,u,s,p);continue}if("smoothOrigin"===f){xd(this,g,"smooth",g.smooth,s);continue}if("force3D"===f){g[f]=s;continue}if("transform"===f){Xd(this,s,t);continue}}else f in T||(f=Ve(f)||f);if(_||(o||0===o)&&(u||0===u)&&!Ne.test(s)&&f in T)o=o||0,(d=(a+"").substr((u+"").length))!==(c=Pa(s)||(f in Y.units?Y.units[f]:d))&&(u=zd(t,f,a,c)),this._pt=new ae(this._pt,_?g:T,f,u,p?p*o:o-u,_||"px"!==c&&"zIndex"!==f||!1===e.autoRound?$c:bd),this._pt.u=c||0,d!==c&&(this._pt.b=a,this._pt.r=ad);else if(f in T)Bd.call(this,t,f,a,s);else{if(!(f in t)){N(f,s);continue}this.add(t,f,a||t[f],s,i,n)}b.push(f)}y&&ne(this)},get:Ad,aliases:qe,getSetter:function getSetter(t,e,i){var n=qe[e];return n&&n.indexOf(",")<0&&(e=n),e in Ie&&e!==Xe&&(t._gsap.x||Ad(t,"x"))?i&&ce===i?"scale"===e?hd:gd:(ce=i||{})&&("scale"===e?id:jd):t.style&&!r(t.style[e])?ed:~e.indexOf("-")?fd:Jt(t,e)},core:{_removeProperty:wd,_getMatrix:Kd}};oe.utils.checkPrefix=Ve,sr=ba((nr="x,y,z,scale,scaleX,scaleY,xPercent,yPercent")+","+(ar="rotation,rotationX,rotationY,skewX,skewY")+",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective",function(t){Ie[t]=1}),ba(ar,function(t){Y.units[t]="deg",Ke[t]=1}),qe[sr[13]]=nr+","+ar,ba("0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY",function(t){var e=t.split(":");qe[e[1]]=sr[e[0]]}),ba("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective",function(t){Y.units[t]="px"}),oe.registerPlugin(or);var ur=oe.registerPlugin(or)||oe,hr=ur.core.Tween;e.Back=Me,e.Bounce=Se,e.CSSPlugin=or,e.Circ=ze,e.Cubic=we,e.Elastic=ke,e.Expo=De,e.Linear=be,e.Power0=_e,e.Power1=me,e.Power2=ge,e.Power3=ve,e.Power4=ye,e.Quad=Te,e.Quart=xe,e.Quint=Oe,e.Sine=Ce,e.SteppedEase=Ae,e.Strong=Pe,e.TimelineLite=qt,e.TimelineMax=qt,e.TweenLite=Qt,e.TweenMax=hr,e.default=ur,e.gsap=ur;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
19515
19516
19517/*SIGUIENTE LIBRERIA*/
19518(function (global, factory) {
19519	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
19520	typeof define === 'function' && define.amd ? define(['exports'], factory) :
19521	(global = global || self, factory(global.window = global.window || {}));
19522}(this, (function (exports) { 'use strict';
19523
19524	var _svgPathExp = /[achlmqstvz]|(-?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/ig,
19525	    _numbersExp = /(?:(-)?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/ig,
19526	    _scientific = /[\+\-]?\d*\.?\d+e[\+\-]?\d+/ig,
19527	    _selectorExp = /(^[#\.][a-z]|[a-y][a-z])/i,
19528	    _DEG2RAD = Math.PI / 180,
19529	    _RAD2DEG = 180 / Math.PI,
19530	    _sin = Math.sin,
19531	    _cos = Math.cos,
19532	    _abs = Math.abs,
19533	    _sqrt = Math.sqrt,
19534	    _atan2 = Math.atan2,
19535	    _largeNum = 1e8,
19536	    _isString = function _isString(value) {
19537	  return typeof value === "string";
19538	},
19539	    _isNumber = function _isNumber(value) {
19540	  return typeof value === "number";
19541	},
19542	    _isUndefined = function _isUndefined(value) {
19543	  return typeof value === "undefined";
19544	},
19545	    _temp = {},
19546	    _temp2 = {},
19547	    _roundingNum = 1e5,
19548	    _wrapProgress = function _wrapProgress(progress) {
19549	  return Math.round((progress + _largeNum) % 1 * _roundingNum) / _roundingNum || (progress < 0 ? 0 : 1);
19550	},
19551	    _round = function _round(value) {
19552	  return Math.round(value * _roundingNum) / _roundingNum || 0;
19553	},
19554	    _roundPrecise = function _roundPrecise(value) {
19555	  return Math.round(value * 1e10) / 1e10 || 0;
19556	},
19557	    _splitSegment = function _splitSegment(rawPath, segIndex, i, t) {
19558	  var segment = rawPath[segIndex],
19559	      shift = t === 1 ? 6 : subdivideSegment(segment, i, t);
19560
19561	  if (shift && shift + i + 2 < segment.length) {
19562	    rawPath.splice(segIndex, 0, segment.slice(0, i + shift + 2));
19563	    segment.splice(0, i + shift);
19564	    return 1;
19565	  }
19566	},
19567	    _reverseRawPath = function _reverseRawPath(rawPath, skipOuter) {
19568	  var i = rawPath.length;
19569	  skipOuter || rawPath.reverse();
19570
19571	  while (i--) {
19572	    rawPath[i].reversed || reverseSegment(rawPath[i]);
19573	  }
19574	},
19575	    _copyMetaData = function _copyMetaData(source, copy) {
19576	  copy.totalLength = source.totalLength;
19577
19578	  if (source.samples) {
19579	    copy.samples = source.samples.slice(0);
19580	    copy.lookup = source.lookup.slice(0);
19581	    copy.minLength = source.minLength;
19582	    copy.resolution = source.resolution;
19583	  } else if (source.totalPoints) {
19584	    copy.totalPoints = source.totalPoints;
19585	  }
19586
19587	  return copy;
19588	},
19589	    _appendOrMerge = function _appendOrMerge(rawPath, segment) {
19590	  var index = rawPath.length,
19591	      prevSeg = rawPath[index - 1] || [],
19592	      l = prevSeg.length;
19593
19594	  if (index && segment[0] === prevSeg[l - 2] && segment[1] === prevSeg[l - 1]) {
19595	    segment = prevSeg.concat(segment.slice(2));
19596	    index--;
19597	  }
19598
19599	  rawPath[index] = segment;
19600	};
19601
19602	function getRawPath(value) {
19603	  value = _isString(value) && _selectorExp.test(value) ? document.querySelector(value) || value : value;
19604	  var e = value.getAttribute ? value : 0,
19605	      rawPath;
19606
19607	  if (e && (value = value.getAttribute("d"))) {
19608	    if (!e._gsPath) {
19609	      e._gsPath = {};
19610	    }
19611
19612	    rawPath = e._gsPath[value];
19613	    return rawPath && !rawPath._dirty ? rawPath : e._gsPath[value] = stringToRawPath(value);
19614	  }
19615
19616	  return !value ? console.warn("Expecting a <path> element or an SVG path data string") : _isString(value) ? stringToRawPath(value) : _isNumber(value[0]) ? [value] : value;
19617	}
19618	function copyRawPath(rawPath) {
19619	  var a = [],
19620	      i = 0;
19621
19622	  for (; i < rawPath.length; i++) {
19623	    a[i] = _copyMetaData(rawPath[i], rawPath[i].slice(0));
19624	  }
19625
19626	  return _copyMetaData(rawPath, a);
19627	}
19628	function reverseSegment(segment) {
19629	  var i = 0,
19630	      y;
19631	  segment.reverse();
19632
19633	  for (; i < segment.length; i += 2) {
19634	    y = segment[i];
19635	    segment[i] = segment[i + 1];
19636	    segment[i + 1] = y;
19637	  }
19638
19639	  segment.reversed = !segment.reversed;
19640	}
19641
19642	var _createPath = function _createPath(e, ignore) {
19643	  var path = document.createElementNS("http://www.w3.org/2000/svg", "path"),
19644	      attr = [].slice.call(e.attributes),
19645	      i = attr.length,
19646	      name;
19647	  ignore = "," + ignore + ",";
19648
19649	  while (--i > -1) {
19650	    name = attr[i].nodeName.toLowerCase();
19651
19652	    if (ignore.indexOf("," + name + ",") < 0) {
19653	      path.setAttributeNS(null, name, attr[i].nodeValue);
19654	    }
19655	  }
19656
19657	  return path;
19658	},
19659	    _typeAttrs = {
19660	  rect: "rx,ry,x,y,width,height",
19661	  circle: "r,cx,cy",
19662	  ellipse: "rx,ry,cx,cy",
19663	  line: "x1,x2,y1,y2"
19664	},
19665	    _attrToObj = function _attrToObj(e, attrs) {
19666	  var props = attrs ? attrs.split(",") : [],
19667	      obj = {},
19668	      i = props.length;
19669
19670	  while (--i > -1) {
19671	    obj[props[i]] = +e.getAttribute(props[i]) || 0;
19672	  }
19673
19674	  return obj;
19675	};
19676
19677	function convertToPath(element, swap) {
19678	  var type = element.tagName.toLowerCase(),
19679	      circ = 0.552284749831,
19680	      data,
19681	      x,
19682	      y,
19683	      r,
19684	      ry,
19685	      path,
19686	      rcirc,
19687	      rycirc,
19688	      points,
19689	      w,
19690	      h,
19691	      x2,
19692	      x3,
19693	      x4,
19694	      x5,
19695	      x6,
19696	      y2,
19697	      y3,
19698	      y4,
19699	      y5,
19700	      y6,
19701	      attr;
19702
19703	  if (type === "path" || !element.getBBox) {
19704	    return element;
19705	  }
19706
19707	  path = _createPath(element, "x,y,width,height,cx,cy,rx,ry,r,x1,x2,y1,y2,points");
19708	  attr = _attrToObj(element, _typeAttrs[type]);
19709
19710	  if (type === "rect") {
19711	    r = attr.rx;
19712	    ry = attr.ry || r;
19713	    x = attr.x;
19714	    y = attr.y;
19715	    w = attr.width - r * 2;
19716	    h = attr.height - ry * 2;
19717
19718	    if (r || ry) {
19719	      x2 = x + r * (1 - circ);
19720	      x3 = x + r;
19721	      x4 = x3 + w;
19722	      x5 = x4 + r * circ;
19723	      x6 = x4 + r;
19724	      y2 = y + ry * (1 - circ);
19725	      y3 = y + ry;
19726	      y4 = y3 + h;
19727	      y5 = y4 + ry * circ;
19728	      y6 = y4 + ry;
19729	      data = "M" + x6 + "," + y3 + " V" + y4 + " C" + [x6, y5, x5, y6, x4, y6, x4 - (x4 - x3) / 3, y6, x3 + (x4 - x3) / 3, y6, x3, y6, x2, y6, x, y5, x, y4, x, y4 - (y4 - y3) / 3, x, y3 + (y4 - y3) / 3, x, y3, x, y2, x2, y, x3, y, x3 + (x4 - x3) / 3, y, x4 - (x4 - x3) / 3, y, x4, y, x5, y, x6, y2, x6, y3].join(",") + "z";
19730	    } else {
19731	      data = "M" + (x + w) + "," + y + " v" + h + " h" + -w + " v" + 
vendor: 9,465 bytes, lines 19731-20079
19731-h + " h" + w + "z";
19732	    }
19733	  } else if (type === "circle" || type === "ellipse") {
19734	    if (type === "circle") {
19735	      r = ry = attr.r;
19736	      rycirc = r * circ;
19737	    } else {
19738	      r = attr.rx;
19739	      ry = attr.ry;
19740	      rycirc = ry * circ;
19741	    }
19742
19743	    x = attr.cx;
19744	    y = attr.cy;
19745	    rcirc = r * circ;
19746	    data = "M" + (x + r) + "," + y + " C" + [x + r, y + rycirc, x + rcirc, y + ry, x, y + ry, x - rcirc, y + ry, x - r, y + rycirc, x - r, y, x - r, y - rycirc, x - rcirc, y - ry, x, y - ry, x + rcirc, y - ry, x + r, y - rycirc, x + r, y].join(",") + "z";
19747	  } else if (type === "line") {
19748	    data = "M" + attr.x1 + "," + attr.y1 + " L" + attr.x2 + "," + attr.y2;
19749	  } else if (type === "polyline" || type === "polygon") {
19750	    points = (element.getAttribute("points") + "").match(_numbersExp) || [];
19751	    x = points.shift();
19752	    y = points.shift();
19753	    data = "M" + x + "," + y + " L" + points.join(",");
19754
19755	    if (type === "polygon") {
19756	      data += "," + x + "," + y + "z";
19757	    }
19758	  }
19759
19760	  path.setAttribute("d", rawPathToString(path._gsRawPath = stringToRawPath(data)));
19761
19762	  if (swap && element.parentNode) {
19763	    element.parentNode.insertBefore(path, element);
19764	    element.parentNode.removeChild(element);
19765	  }
19766
19767	  return path;
19768	}
19769
19770	function getRotationAtBezierT(segment, i, t) {
19771	  var a = segment[i],
19772	      b = segment[i + 2],
19773	      c = segment[i + 4],
19774	      x;
19775	  a += (b - a) * t;
19776	  b += (c - b) * t;
19777	  a += (b - a) * t;
19778	  x = b + (c + (segment[i + 6] - c) * t - b) * t - a;
19779	  a = segment[i + 1];
19780	  b = segment[i + 3];
19781	  c = segment[i + 5];
19782	  a += (b - a) * t;
19783	  b += (c - b) * t;
19784	  a += (b - a) * t;
19785	  return _round(_atan2(b + (c + (segment[i + 7] - c) * t - b) * t - a, x) * _RAD2DEG);
19786	}
19787
19788	function sliceRawPath(rawPath, start, end) {
19789	  end = _isUndefined(end) ? 1 : _roundPrecise(end) || 0;
19790	  start = _roundPrecise(start) || 0;
19791	  var loops = Math.max(0, ~~(_abs(end - start) - 1e-8)),
19792	      path = copyRawPath(rawPath);
19793
19794	  if (start > end) {
19795	    start = 1 - start;
19796	    end = 1 - end;
19797
19798	    _reverseRawPath(path);
19799
19800	    path.totalLength = 0;
19801	  }
19802
19803	  if (start < 0 || end < 0) {
19804	    var offset = Math.abs(~~Math.min(start, end)) + 1;
19805	    start += offset;
19806	    end += offset;
19807	  }
19808
19809	  path.totalLength || cacheRawPathMeasurements(path);
19810	  var wrap = end > 1,
19811	      s = getProgressData(path, start, _temp, true),
19812	      e = getProgressData(path, end, _temp2),
19813	      eSeg = e.segment,
19814	      sSeg = s.segment,
19815	      eSegIndex = e.segIndex,
19816	      sSegIndex = s.segIndex,
19817	      ei = e.i,
19818	      si = s.i,
19819	      sameSegment = sSegIndex === eSegIndex,
19820	      sameBezier = ei === si && sameSegment,
19821	      wrapsBehind,
19822	      sShift,
19823	      eShift,
19824	      i,
19825	      copy,
19826	      totalSegments,
19827	      l,
19828	      j;
19829
19830	  if (wrap || loops) {
19831	    wrapsBehind = eSegIndex < sSegIndex || sameSegment && ei < si || sameBezier && e.t < s.t;
19832
19833	    if (_splitSegment(path, sSegIndex, si, s.t)) {
19834	      sSegIndex++;
19835
19836	      if (!wrapsBehind) {
19837	        eSegIndex++;
19838
19839	        if (sameBezier) {
19840	          e.t = (e.t - s.t) / (1 - s.t);
19841	          ei = 0;
19842	        } else if (sameSegment) {
19843	          ei -= si;
19844	        }
19845	      }
19846	    }
19847
19848	    if (1 - (end - start) < 1e-5) {
19849	      eSegIndex = sSegIndex - 1;
19850	    } else if (!e.t && eSegIndex) {
19851	      eSegIndex--;
19852	    } else if (_splitSegment(path, eSegIndex, ei, e.t) && wrapsBehind) {
19853	      sSegIndex++;
19854	    }
19855
19856	    if (s.t === 1) {
19857	      sSegIndex = (sSegIndex + 1) % path.length;
19858	    }
19859
19860	    copy = [];
19861	    totalSegments = path.length;
19862	    l = 1 + totalSegments * loops;
19863	    j = sSegIndex;
19864	    l += (totalSegments - sSegIndex + eSegIndex) % totalSegments;
19865
19866	    for (i = 0; i < l; i++) {
19867	      _appendOrMerge(copy, path[j++ % totalSegments]);
19868	    }
19869
19870	    path = copy;
19871	  } else {
19872	    eShift = e.t === 1 ? 6 : subdivideSegment(eSeg, ei, e.t);
19873
19874	    if (start !== end) {
19875	      sShift = subdivideSegment(sSeg, si, sameBezier ? s.t / e.t : s.t);
19876	      sameSegment && (eShift += sShift);
19877	      eSeg.splice(ei + eShift + 2);
19878	      (sShift || si) && sSeg.splice(0, si + sShift);
19879	      i = path.length;
19880
19881	      while (i--) {
19882	        (i < sSegIndex || i > eSegIndex) && path.splice(i, 1);
19883	      }
19884	    } else {
19885	      eSeg.angle = getRotationAtBezierT(eSeg, ei + eShift, 0);
19886	      ei += eShift;
19887	      s = eSeg[ei];
19888	      e = eSeg[ei + 1];
19889	      eSeg.length = eSeg.totalLength = 0;
19890	      eSeg.totalPoints = path.totalPoints = 8;
19891	      eSeg.push(s, e, s, e, s, e, s, e);
19892	    }
19893	  }
19894
19895	  path.totalLength = 0;
19896	  return path;
19897	}
19898
19899	function measureSegment(segment, startIndex, bezierQty) {
19900	  startIndex = startIndex || 0;
19901
19902	  if (!segment.samples) {
19903	    segment.samples = [];
19904	    segment.lookup = [];
19905	  }
19906
19907	  var resolution = ~~segment.resolution || 12,
19908	      inc = 1 / resolution,
19909	      endIndex = bezierQty ? startIndex + bezierQty * 6 + 1 : segment.length,
19910	      x1 = segment[startIndex],
19911	      y1 = segment[startIndex + 1],
19912	      samplesIndex = startIndex ? startIndex / 6 * resolution : 0,
19913	      samples = segment.samples,
19914	      lookup = segment.lookup,
19915	      min = (startIndex ? segment.minLength : _largeNum) || _largeNum,
19916	      prevLength = samples[samplesIndex + bezierQty * resolution - 1],
19917	      length = startIndex ? samples[samplesIndex - 1] : 0,
19918	      i,
19919	      j,
19920	      x4,
19921	      x3,
19922	      x2,
19923	      xd,
19924	      xd1,
19925	      y4,
19926	      y3,
19927	      y2,
19928	      yd,
19929	      yd1,
19930	      inv,
19931	      t,
19932	      lengthIndex,
19933	      l,
19934	      segLength;
19935	  samples.length = lookup.length = 0;
19936
19937	  for (j = startIndex + 2; j < endIndex; j += 6) {
19938	    x4 = segment[j + 4] - x1;
19939	    x3 = segment[j + 2] - x1;
19940	    x2 = segment[j] - x1;
19941	    y4 = segment[j + 5] - y1;
19942	    y3 = segment[j + 3] - y1;
19943	    y2 = segment[j + 1] - y1;
19944	    xd = xd1 = yd = yd1 = 0;
19945
19946	    if (_abs(x4) < 1e-5 && _abs(y4) < 1e-5 && _abs(x2) + _abs(y2) < 1e-5) {
19947	      if (segment.length > 8) {
19948	        segment.splice(j, 6);
19949	        j -= 6;
19950	        endIndex -= 6;
19951	      }
19952	    } else {
19953	      for (i = 1; i <= resolution; i++) {
19954	        t = inc * i;
19955	        inv = 1 - t;
19956	        xd = xd1 - (xd1 = (t * t * x4 + 3 * inv * (t * x3 + inv * x2)) * t);
19957	        yd = yd1 - (yd1 = (t * t * y4 + 3 * inv * (t * y3 + inv * y2)) * t);
19958	        l = _sqrt(yd * yd + xd * xd);
19959
19960	        if (l < min) {
19961	          min = l;
19962	        }
19963
19964	        length += l;
19965	        samples[samplesIndex++] = length;
19966	      }
19967	    }
19968
19969	    x1 += x4;
19970	    y1 += y4;
19971	  }
19972
19973	  if (prevLength) {
19974	    prevLength -= length;
19975
19976	    for (; samplesIndex < samples.length; samplesIndex++) {
19977	      samples[samplesIndex] += prevLength;
19978	    }
19979	  }
19980
19981	  if (samples.length && min) {
19982	    segment.totalLength = segLength = samples[samples.length - 1] || 0;
19983	    segment.minLength = min;
19984	    l = lengthIndex = 0;
19985
19986	    for (i = 0; i < segLength; i += min) {
19987	      lookup[l++] = samples[lengthIndex] < i ? ++lengthIndex : lengthIndex;
19988	    }
19989	  } else {
19990	    segment.totalLength = samples[0] = 0;
19991	  }
19992
19993	  return startIndex ? length - samples[startIndex / 2 - 1] : length;
19994	}
19995
19996	function cacheRawPathMeasurements(rawPath, resolution) {
19997	  var pathLength, points, i;
19998
19999	  for (i = pathLength = points = 0; i < rawPath.length; i++) {
20000	    rawPath[i].resolution = ~~resolution || 12;
20001	    points += rawPath[i].length;
20002	    pathLength += measureSegment(rawPath[i]);
20003	  }
20004
20005	  rawPath.totalPoints = points;
20006	  rawPath.totalLength = pathLength;
20007	  return rawPath;
20008	}
20009	function subdivideSegment(segment, i, t) {
20010	  if (t <= 0 || t >= 1) {
20011	    return 0;
20012	  }
20013
20014	  var ax = segment[i],
20015	      ay = segment[i + 1],
20016	      cp1x = segment[i + 2],
20017	      cp1y = segment[i + 3],
20018	      cp2x = segment[i + 4],
20019	      cp2y = segment[i + 5],
20020	      bx = segment[i + 6],
20021	      by = segment[i + 7],
20022	      x1a = ax + (cp1x - ax) * t,
20023	      x2 = cp1x + (cp2x - cp1x) * t,
20024	      y1a = ay + (cp1y - ay) * t,
20025	      y2 = cp1y + (cp2y - cp1y) * t,
20026	      x1 = x1a + (x2 - x1a) * t,
20027	      y1 = y1a + (y2 - y1a) * t,
20028	      x2a = cp2x + (bx - cp2x) * t,
20029	      y2a = cp2y + (by - cp2y) * t;
20030	  x2 += (x2a - x2) * t;
20031	  y2 += (y2a - y2) * t;
20032	  segment.splice(i + 2, 4, _round(x1a), _round(y1a), _round(x1), _round(y1), _round(x1 + (x2 - x1) * t), _round(y1 + (y2 - y1) * t), _round(x2), _round(y2), _round(x2a), _round(y2a));
20033	  segment.samples && segment.samples.splice(i / 6 * segment.resolution | 0, 0, 0, 0, 0, 0, 0, 0);
20034	  return 6;
20035	}
20036
20037	function getProgressData(rawPath, progress, decoratee, pushToNextIfAtEnd) {
20038	  decoratee = decoratee || {};
20039	  rawPath.totalLength || cacheRawPathMeasurements(rawPath);
20040
20041	  if (progress < 0 || progress > 1) {
20042	    progress = _wrapProgress(progress);
20043	  }
20044
20045	  var segIndex = 0,
20046	      segment = rawPath[0],
20047	      samples,
20048	      resolution,
20049	      length,
20050	      min,
20051	      max,
20052	      i,
20053	      t;
20054
20055	  if (!progress) {
20056	    t = i = segIndex = 0;
20057	    segment = rawPath[0];
20058	  } else if (progress === 1) {
20059	    t = 1;
20060	    segIndex = rawPath.length - 1;
20061	    segment = rawPath[segIndex];
20062	    i = segment.length - 8;
20063	  } else {
20064	    if (rawPath.length > 1) {
20065	      length = rawPath.totalLength * progress;
20066	      max = i = 0;
20067
20068	      while ((max += rawPath[i++].totalLength) < length) {
20069	        segIndex = i;
20070	      }
20071
20072	      segment = rawPath[segIndex];
20073	      min = max - segment.totalLength;
20074	      progress = (length - min) / (max - min) || 0;
20075	    }
20076
20077	    samples = segment.samples;
20078	    resolution = segment.resolution;
20079	    length = segment.totalLength * progress;
vendor: 4,606 bytes, lines 20080-20251
20080	    i = segment.lookup[~~(length / segment.minLength)] || 0;
20081	    min = i ? samples[i - 1] : 0;
20082	    max = samples[i];
20083
20084	    if (max < length) {
20085	      min = max;
20086	      max = samples[++i];
20087	    }
20088
20089	    t = 1 / resolution * ((length - min) / (max - min) + i % resolution);
20090	    i = ~~(i / resolution) * 6;
20091
20092	    if (pushToNextIfAtEnd && t === 1) {
20093	      if (i + 6 < segment.length) {
20094	        i += 6;
20095	        t = 0;
20096	      } else if (segIndex + 1 < rawPath.length) {
20097	        i = t = 0;
20098	        segment = rawPath[++segIndex];
20099	      }
20100	    }
20101	  }
20102
20103	  decoratee.t = t;
20104	  decoratee.i = i;
20105	  decoratee.path = rawPath;
20106	  decoratee.segment = segment;
20107	  decoratee.segIndex = segIndex;
20108	  return decoratee;
20109	}
20110
20111	function getPositionOnPath(rawPath, progress, includeAngle, point) {
20112	  var segment = rawPath[0],
20113	      result = point || {},
20114	      samples,
20115	      resolution,
20116	      length,
20117	      min,
20118	      max,
20119	      i,
20120	      t,
20121	      a,
20122	      inv;
20123
20124	  if (progress < 0 || progress > 1) {
20125	    progress = _wrapProgress(progress);
20126	  }
20127
20128	  if (rawPath.length > 1) {
20129	    length = rawPath.totalLength * progress;
20130	    max = i = 0;
20131
20132	    while ((max += rawPath[i++].totalLength) < length) {
20133	      segment = rawPath[i];
20134	    }
20135
20136	    min = max - segment.totalLength;
20137	    progress = (length - min) / (max - min) || 0;
20138	  }
20139
20140	  samples = segment.samples;
20141	  resolution = segment.resolution;
20142	  length = segment.totalLength * progress;
20143	  i = segment.lookup[progress < 1 ? ~~(length / segment.minLength) : segment.lookup.length - 1] || 0;
20144	  min = i ? samples[i - 1] : 0;
20145	  max = samples[i];
20146
20147	  if (max < length) {
20148	    min = max;
20149	    max = samples[++i];
20150	  }
20151
20152	  t = 1 / resolution * ((length - min) / (max - min) + i % resolution) || 0;
20153	  inv = 1 - t;
20154	  i = ~~(i / resolution) * 6;
20155	  a = segment[i];
20156	  result.x = _round((t * t * (segment[i + 6] - a) + 3 * inv * (t * (segment[i + 4] - a) + inv * (segment[i + 2] - a))) * t + a);
20157	  result.y = _round((t * t * (segment[i + 7] - (a = segment[i + 1])) + 3 * inv * (t * (segment[i + 5] - a) + inv * (segment[i + 3] - a))) * t + a);
20158
20159	  if (includeAngle) {
20160	    result.angle = segment.totalLength ? getRotationAtBezierT(segment, i, t >= 1 ? 1 - 1e-9 : t ? t : 1e-9) : segment.angle || 0;
20161	  }
20162
20163	  return result;
20164	}
20165	function transformRawPath(rawPath, a, b, c, d, tx, ty) {
20166	  var j = rawPath.length,
20167	      segment,
20168	      l,
20169	      i,
20170	      x,
20171	      y;
20172
20173	  while (--j > -1) {
20174	    segment = rawPath[j];
20175	    l = segment.length;
20176
20177	    for (i = 0; i < l; i += 2) {
20178	      x = segment[i];
20179	      y = segment[i + 1];
20180	      segment[i] = x * a + y * c + tx;
20181	      segment[i + 1] = x * b + y * d + ty;
20182	    }
20183	  }
20184
20185	  rawPath._dirty = 1;
20186	  return rawPath;
20187	}
20188
20189	function arcToSegment(lastX, lastY, rx, ry, angle, largeArcFlag, sweepFlag, x, y) {
20190	  if (lastX === x && lastY === y) {
20191	    return;
20192	  }
20193
20194	  rx = _abs(rx);
20195	  ry = _abs(ry);
20196
20197	  var angleRad = angle % 360 * _DEG2RAD,
20198	      cosAngle = _cos(angleRad),
20199	      sinAngle = _sin(angleRad),
20200	      PI = Math.PI,
20201	      TWOPI = PI * 2,
20202	      dx2 = (lastX - x) / 2,
20203	      dy2 = (lastY - y) / 2,
20204	      x1 = cosAngle * dx2 + sinAngle * dy2,
20205	      y1 = -sinAngle * dx2 + cosAngle * dy2,
20206	      x1_sq = x1 * x1,
20207	      y1_sq = y1 * y1,
20208	      radiiCheck = x1_sq / (rx * rx) + y1_sq / (ry * ry);
20209
20210	  if (radiiCheck > 1) {
20211	    rx = _sqrt(radiiCheck) * rx;
20212	    ry = _sqrt(radiiCheck) * ry;
20213	  }
20214
20215	  var rx_sq = rx * rx,
20216	      ry_sq = ry * ry,
20217	      sq = (rx_sq * ry_sq - rx_sq * y1_sq - ry_sq * x1_sq) / (rx_sq * y1_sq + ry_sq * x1_sq);
20218
20219	  if (sq < 0) {
20220	    sq = 0;
20221	  }
20222
20223	  var coef = (largeArcFlag === sweepFlag ? -1 : 1) * _sqrt(sq),
20224	      cx1 = coef * (rx * y1 / ry),
20225	      cy1 = coef * -(ry * x1 / rx),
20226	      sx2 = (lastX + x) / 2,
20227	      sy2 = (lastY + y) / 2,
20228	      cx = sx2 + (cosAngle * cx1 - sinAngle * cy1),
20229	      cy = sy2 + (sinAngle * cx1 + cosAngle * cy1),
20230	      ux = (x1 - cx1) / rx,
20231	      uy = (y1 - cy1) / ry,
20232	      vx = (-x1 - cx1) / rx,
20233	      vy = (-y1 - cy1) / ry,
20234	      temp = ux * ux + uy * uy,
20235	      angleStart = (uy < 0 ? -1 : 1) * Math.acos(ux / _sqrt(temp)),
20236	      angleExtent = (ux * vy - uy * vx < 0 ? -1 : 1) * Math.acos((ux * vx + uy * vy) / _sqrt(temp * (vx * vx + vy * vy)));
20237
20238	  isNaN(angleExtent) && (angleExtent = PI);
20239
20240	  if (!sweepFlag && angleExtent > 0) {
20241	    angleExtent -= TWOPI;
20242	  } else if (sweepFlag && angleExtent < 0) {
20243	    angleExtent += TWOPI;
20244	  }
20245
20246	  angleStart %= TWOPI;
20247	  angleExtent %= TWOPI;
20248
20249	  var segments = Math.ceil(_abs(angleExtent) / (TWOPI / 4)),
20250	      rawPath = [],
20251	      angleIncrement = angleExtent / segments,
vendor: 6,895 bytes, lines 20252-20520
20252	      controlLength = 4 / 3 * _sin(angleIncrement / 2) / (1 + _cos(angleIncrement / 2)),
20253	      ma = cosAngle * rx,
20254	      mb = sinAngle * rx,
20255	      mc = sinAngle * -ry,
20256	      md = cosAngle * ry,
20257	      i;
20258
20259	  for (i = 0; i < segments; i++) {
20260	    angle = angleStart + i * angleIncrement;
20261	    x1 = _cos(angle);
20262	    y1 = _sin(angle);
20263	    ux = _cos(angle += angleIncrement);
20264	    uy = _sin(angle);
20265	    rawPath.push(x1 - controlLength * y1, y1 + controlLength * x1, ux + controlLength * uy, uy - controlLength * ux, ux, uy);
20266	  }
20267
20268	  for (i = 0; i < rawPath.length; i += 2) {
20269	    x1 = rawPath[i];
20270	    y1 = rawPath[i + 1];
20271	    rawPath[i] = x1 * ma + y1 * mc + cx;
20272	    rawPath[i + 1] = x1 * mb + y1 * md + cy;
20273	  }
20274
20275	  rawPath[i - 2] = x;
20276	  rawPath[i - 1] = y;
20277	  return rawPath;
20278	}
20279
20280	function stringToRawPath(d) {
20281	  var a = (d + "").replace(_scientific, function (m) {
20282	    var n = +m;
20283	    return n < 0.0001 && n > -0.0001 ? 0 : n;
20284	  }).match(_svgPathExp) || [],
20285	      path = [],
20286	      relativeX = 0,
20287	      relativeY = 0,
20288	      twoThirds = 2 / 3,
20289	      elements = a.length,
20290	      points = 0,
20291	      errorMessage = "ERROR: malformed path: " + d,
20292	      i,
20293	      j,
20294	      x,
20295	      y,
20296	      command,
20297	      isRelative,
20298	      segment,
20299	      startX,
20300	      startY,
20301	      difX,
20302	      difY,
20303	      beziers,
20304	      prevCommand,
20305	      flag1,
20306	      flag2,
20307	      line = function line(sx, sy, ex, ey) {
20308	    difX = (ex - sx) / 3;
20309	    difY = (ey - sy) / 3;
20310	    segment.push(sx + difX, sy + difY, ex - difX, ey - difY, ex, ey);
20311	  };
20312
20313	  if (!d || !isNaN(a[0]) || isNaN(a[1])) {
20314	    console.log(errorMessage);
20315	    return path;
20316	  }
20317
20318	  for (i = 0; i < elements; i++) {
20319	    prevCommand = command;
20320
20321	    if (isNaN(a[i])) {
20322	      command = a[i].toUpperCase();
20323	      isRelative = command !== a[i];
20324	    } else {
20325	      i--;
20326	    }
20327
20328	    x = +a[i + 1];
20329	    y = +a[i + 2];
20330
20331	    if (isRelative) {
20332	      x += relativeX;
20333	      y += relativeY;
20334	    }
20335
20336	    if (!i) {
20337	      startX = x;
20338	      startY = y;
20339	    }
20340
20341	    if (command === "M") {
20342	      if (segment) {
20343	        if (segment.length < 8) {
20344	          path.length -= 1;
20345	        } else {
20346	          points += segment.length;
20347	        }
20348	      }
20349
20350	      relativeX = startX = x;
20351	      relativeY = startY = y;
20352	      segment = [x, y];
20353	      path.push(segment);
20354	      i += 2;
20355	      command = "L";
20356	    } else if (command === "C") {
20357	      if (!segment) {
20358	        segment = [0, 0];
20359	      }
20360
20361	      if (!isRelative) {
20362	        relativeX = relativeY = 0;
20363	      }
20364
20365	      segment.push(x, y, relativeX + a[i + 3] * 1, relativeY + a[i + 4] * 1, relativeX += a[i + 5] * 1, relativeY += a[i + 6] * 1);
20366	      i += 6;
20367	    } else if (command === "S") {
20368	      difX = relativeX;
20369	      difY = relativeY;
20370
20371	      if (prevCommand === "C" || prevCommand === "S") {
20372	        difX += relativeX - segment[segment.length - 4];
20373	        difY += relativeY - segment[segment.length - 3];
20374	      }
20375
20376	      if (!isRelative) {
20377	        relativeX = relativeY = 0;
20378	      }
20379
20380	      segment.push(difX, difY, x, y, relativeX += a[i + 3] * 1, relativeY += a[i + 4] * 1);
20381	      i += 4;
20382	    } else if (command === "Q") {
20383	      difX = relativeX + (x - relativeX) * twoThirds;
20384	      difY = relativeY + (y - relativeY) * twoThirds;
20385
20386	      if (!isRelative) {
20387	        relativeX = relativeY = 0;
20388	      }
20389
20390	      relativeX += a[i + 3] * 1;
20391	      relativeY += a[i + 4] * 1;
20392	      segment.push(difX, difY, relativeX + (x - relativeX) * twoThirds, relativeY + (y - relativeY) * twoThirds, relativeX, relativeY);
20393	      i += 4;
20394	    } else if (command === "T") {
20395	      difX = relativeX - segment[segment.length - 4];
20396	      difY = relativeY - segment[segment.length - 3];
20397	      segment.push(relativeX + difX, relativeY + difY, x + (relativeX + difX * 1.5 - x) * twoThirds, y + (relativeY + difY * 1.5 - y) * twoThirds, relativeX = x, relativeY = y);
20398	      i += 2;
20399	    } else if (command === "H") {
20400	      line(relativeX, relativeY, relativeX = x, relativeY);
20401	      i += 1;
20402	    } else if (command === "V") {
20403	      line(relativeX, relativeY, relativeX, relativeY = x + (isRelative ? relativeY - relativeX : 0));
20404	      i += 1;
20405	    } else if (command === "L" || command === "Z") {
20406	      if (command === "Z") {
20407	        x = startX;
20408	        y = startY;
20409	        segment.closed = true;
20410	      }
20411
20412	      if (command === "L" || _abs(relativeX - x) > 0.5 || _abs(relativeY - y) > 0.5) {
20413	        line(relativeX, relativeY, x, y);
20414
20415	        if (command === "L") {
20416	          i += 2;
20417	        }
20418	      }
20419
20420	      relativeX = x;
20421	      relativeY = y;
20422	    } else if (command === "A") {
20423	      flag1 = a[i + 4];
20424	      flag2 = a[i + 5];
20425	      difX = a[i + 6];
20426	      difY = a[i + 7];
20427	      j = 7;
20428
20429	      if (flag1.length > 1) {
20430	        if (flag1.length < 3) {
20431	          difY = difX;
20432	          difX = flag2;
20433	          j--;
20434	        } else {
20435	          difY = flag2;
20436	          difX = flag1.substr(2);
20437	          j -= 2;
20438	        }
20439
20440	        flag2 = flag1.charAt(1);
20441	        flag1 = flag1.charAt(0);
20442	      }
20443
20444	      beziers = arcToSegment(relativeX, relativeY, +a[i + 1], +a[i + 2], +a[i + 3], +flag1, +flag2, (isRelative ? relativeX : 0) + difX * 1, (isRelative ? relativeY : 0) + difY * 1);
20445	      i += j;
20446
20447	      if (beziers) {
20448	        for (j = 0; j < beziers.length; j++) {
20449	          segment.push(beziers[j]);
20450	        }
20451	      }
20452
20453	      relativeX = segment[segment.length - 2];
20454	      relativeY = segment[segment.length - 1];
20455	    } else {
20456	      console.log(errorMessage);
20457	    }
20458	  }
20459
20460	  i = segment.length;
20461
20462	  if (i < 6) {
20463	    path.pop();
20464	    i = 0;
20465	  } else if (segment[0] === segment[i - 2] && segment[1] === segment[i - 1]) {
20466	    segment.closed = true;
20467	  }
20468
20469	  path.totalPoints = points + i;
20470	  return path;
20471	}
20472	function flatPointsToSegment(points, curviness) {
20473	  if (curviness === void 0) {
20474	    curviness = 1;
20475	  }
20476
20477	  var x = points[0],
20478	      y = 0,
20479	      segment = [x, y],
20480	      i = 2;
20481
20482	  for (; i < points.length; i += 2) {
20483	    segment.push(x, y, points[i], y = (points[i] - x) * curviness / 2, x = points[i], -y);
20484	  }
20485
20486	  return segment;
20487	}
20488	function pointsToSegment(points, curviness, cornerThreshold) {
20489	  _abs(points[0] - points[2]) < 1e-4 && _abs(points[1] - points[3]) < 1e-4 && (points = points.slice(2));
20490	  var l = points.length - 2,
20491	      x = +points[0],
20492	      y = +points[1],
20493	      nextX = +points[2],
20494	      nextY = +points[3],
20495	      segment = [x, y, x, y],
20496	      dx2 = nextX - x,
20497	      dy2 = nextY - y,
20498	      closed = Math.abs(points[l] - x) < 0.001 && Math.abs(points[l + 1] - y) < 0.001,
20499	      prevX,
20500	      prevY,
20501	      angle,
20502	      slope,
20503	      i,
20504	      dx1,
20505	      dx3,
20506	      dy1,
20507	      dy3,
20508	      d1,
20509	      d2,
20510	      a,
20511	      b,
20512	      c;
20513
20514	  if (isNaN(cornerThreshold)) {
20515	    cornerThreshold = Math.PI / 10;
20516	  }
20517
20518	  if (closed) {
20519	    points.push(nextX, nextY);
20520	    nextX = x;
20521	    nextY = y;
20522	    x = points[l - 2];
20523	    y = points[l - 1];
20524	    points.unshift(x, y);
20525	    l += 4;
20526	  }
20527
20528	  curviness = curviness || curviness === 0 ? +curviness : 1;
20529
20530	  for (i = 2; i < l; i += 2) {
20531	    prevX = x;
20532	    prevY = y;
20533	    x = nextX;
20534	    y = nextY;
20535	    nextX = +points[i + 2];
20536	    nextY = +points[i + 3];
20537
20538	    if (x === nextX && y === nextY) {
20539	      continue;
20540	    }
20541
20542	    dx1 = dx2;
20543	    dy1 = dy2;
20544	    dx2 = nextX - x;
20545	    dy2 = nextY - y;
20546	    dx3 = nextX - prevX;
20547	    dy3 = nextY - prevY;
20548	    a = dx1 * dx1 + dy1 * dy1;
20549	    b = dx2 * dx2 + dy2 * dy2;
20550	    c = dx3 * dx3 + dy3 * dy3;
20551	    angle = Math.acos((a + b - c) / _sqrt(4 * a * b));
20552	    d2 = angle / Math.PI * curviness;
20553	    d1 = _sqrt(a) * d2;
20554	    d2 *= _sqrt(b);
20555
20556	    if (x !== prevX || y !== prevY) {
20557	      if (angle > cornerThreshold) {
20558	        slope = _atan2(dy3, dx3);
20559	        segment.push(_round(x - _cos(slope) * d1), _round(y - _sin(slope) * d1), _round(x), _round(y), _round(x + _cos(slope) * d2), _round(y + _sin(slope) * d2));
20560	      } else {
20561	        slope = _atan2(dy1, dx1);
20562	        segment.push(_round(x - _cos(slope) * d1), _round(y - _sin(slope) * d1));
20563	        slope = _atan2(dy2, dx2);
20564	        segment.push(_round(x), _round(y), _round(x + _cos(slope) * d2), _round(y + _sin(slope) * d2));
20565	      }
20566	    }
20567	  }
20568
20569	  x !== nextX || y !== nextY || segment.length < 4 ? segment.push(_round(nextX), _round(nextY), _round(nextX), _round(nextY)) : segment.length -= 2;
20570
20571	  if (closed) {
20572	    segment.splice(0, 6);
20573	    segment.length = segment.length - 6;
20574	  }
20575
20576	  return segment;
20577	}
20578	function rawPathToString(rawPath) {
20579	  if (_isNumber(rawPath[0])) {
20580	    rawPath = [rawPath];
20581	  }
20582
20583	  var result = "",
20584	      l = rawPath.length,
20585	      sl,
20586	      s,
20587	      i,
20588	      segment;
20589
20590	  for (s = 0; s < l; s++) {
20591	    segment = rawPath[s];
20592	    result += "M" + _round(segment[0]) + "," + _round(segment[1]) + " C";
20593	    sl = segment.length;
20594
20595	    for (i = 2; i < sl; i++) {
20596	      result += _round(segment[i++]) + "," + _round(segment[i++]) + " " + _round(segment[i++]) + "," + _round(segment[i++]) + " " + _round(segment[i++]) + "," + _round(segment[i]) + " ";
20597	    }
20598
20599	    if (segment.closed) {
20600	      result += "z";
20601	    }
20602	  }
20603
20604	  return result;
20605	}
20606
20607	var _doc,
20608	    _win,
20609	    _docElement,
20610	    _body,
20611	    _divContainer,
20612	    _svgContainer,
20613	    _identityMatrix,
20614	    _transformProp = "transform",
20615	    _transformOriginProp = _transformProp + "Origin",
20616	    _hasOffsetBug,
20617	    _setDoc = function _setDoc(element) {
20618	  var doc = element.ownerDocument || element;
20619
20620	  if (!(_transformProp in element.style) && "msTransform" in element.style) {
20621	    _transformProp = "msTransform";
20622	    _transformOriginProp = _transformProp + "Origin";
20623	  }
20624
20625	  while (doc.parentNode && (doc = doc.parentNode)) {}
20626
20627	  _win = window;
20628	  _identityMatrix = new Matrix2D();
20629
20630	  if (doc) {
20631	    _doc = doc;
20632	    _docElement = doc.documentElement;
20633	    _body = doc.body;
20634	    var d1 = doc.createElement("div"),
20635	        d2 = doc.createElement("div");
20636
20637	    _body.appendChild(d1);
20638
20639	    d1.appendChild(d2);
20640	    d1.style.position = "static";
20641	    d1.style[_transformProp] = "translate3d(0,0,1px)";
20642	    _hasOffsetBug = d2.offsetParent !== d1;
20643
20644	    _body.removeChild(d1);
20645	  }
20646
20647	  return doc;
20648	},
20649	    _forceNonZeroScale = function _forceNonZeroScale(e) {
20650	  var a, cache;
20651
20652	  while (e && e !== _body) {
20653	    cache = e._gsap;
20654	    cache && cache.uncache && cache.get(e, "x");
20655
20656	    if (cache && !cache.scaleX && !cache.scaleY && cache.renderTransform) {
20657	      cache.scaleX = cache.scaleY = 1e-4;
20658	      cache.renderTransform(1, cache);
20659	      a ? a.push(cache) : a = [cache];
20660	    }
20661
20662	    e = e.parentNode;
20663	  }
20664
20665	  return a;
20666	},
20667	    _svgTemps = [],
20668	    _divTemps = [],
20669	    _getDocScrollTop = function _getDocScrollTop() {
20670	  return _win.pageYOffset || _doc.scrollTop || _docElement.scrollTop || _body.scrollTop || 0;
20671	},
20672	    _getDocScrollLeft = function _getDocScrollLeft() {
20673	  return _win.pageXOffset || _doc.scrollLeft || _docElement.scrollLeft || _body.scrollLeft || 0;
20674	},
20675	    _svgOwner = function _svgOwner(element) {
20676	  return element.ownerSVGElement || ((element.tagName + "").toLowerCase() === "svg" ? element : null);
20677	},
20678	    _isFixed = function _isFixed(element) {
20679	  if (_win.getComputedStyle(element).position === "fixed") {
20680	    return true;
20681	  }
20682
20683	  element = element.parentNode;
20684
20685	  if (element && element.nodeType === 1) {
20686	    return _isFixed(element);
20687	  }
20688	},
20689	    _createSibling = function _createSibling(element, i) {
20690	  if (element.parentNode && (_doc || _setDoc(element))) {
20691	    var svg = _svgOwner(element),
20692	        ns = svg ? svg.getAttribute("xmlns") || "http://www.w3.org/2000/svg" : "http://www.w3.org/1999/xhtml",
20693	        type = svg ? i ? "rect" : "g" : "div",
20694	        x = i !== 2 ? 0 : 100,
20695	        y = i === 3 ? 100 : 0,
20696	        css = "position:absolute;display:block;pointer-events:none;margin:0;padding:0;",
20697	        e = _doc.createElementNS ? _doc.createElementNS(ns.replace(/^https/, "http"), type) : _doc.createElement(type);
20698
20699	    if (i) {
20700	      if (!svg) {
20701	        if (!_divContainer) {
20702	          _divContainer = _createSibling(element);
20703	          _divContainer.style.cssText = css;
20704	        }
20705
20706	        e.style.cssText = css + "width:0.1px;height:0.1px;top:" + y + "px;left:" + x + "px";
20707
20708	        _divContainer.appendChild(e);
20709	      } else {
20710	        _svgContainer || (_svgContainer = _createSibling(element));
20711	        e.setAttribute("width", 0.01);
20712	        e.setAttribute("height", 0.01);
20713	        e.setAttribute("transform", "translate(" + x + "," + y + ")");
20714
20715	        _svgContainer.appendChild(e);
20716	      }
20717	    }
20718
20719	    return e;
20720	  }
20721
20722	  throw "Need document and parent.";
20723	},
20724	    _consolidate = function _consolidate(m) {
20725	  var c = new Matrix2D(),
20726	      i = 0;
20727
20728	  for (; i < m.numberOfItems; i++) {
20729	    c.multiply(m.getItem(i).matrix);
20730	  }
20731
20732	  return c;
20733	},
20734	    _placeSiblings = function _placeSiblings(element, adjustGOffset) {
20735	  var svg = _svgOwner(element),
20736	      isRootSVG = element === svg,
20737	      siblings = svg ? _svgTemps : _divTemps,
20738	      parent = element.parentNode,
20739	      container,
20740	      m,
20741	      b,
20742	      x,
20743	      y,
20744	      cs;
20745
20746	  if (element === _win) {
20747	    return element;
20748	  }
20749
20750	  siblings.length || siblings.push(_createSibling(element, 1), _createSibling(element, 2), _createSibling(element, 3));
20751	  container = svg ? _svgContainer : _divContainer;
20752
20753	  if (svg) {
20754	    b = isRootSVG ? {
20755	      x: 0,
20756	      y: 0
20757	    } : element.getBBox();
20758	    m = element.transform ? element.transform.baseVal : {};
20759
20760	    if (m.numberOfItems) {
20761	      m = m.numberOfItems > 1 ? _consolidate(m) : m.getItem(0).matrix;
20762	      x = m.a * b.x + m.c * b.y;
20763	      y = m.b * b.x + m.d * b.y;
20764	    } else {
20765	      m = _identityMatrix;
20766	      x = b.x;
20767	      y = b.y;
20768	    }
20769
20770	    if (adjustGOffset && element.tagName.toLowerCase() === "g") {
20771	      x = y = 0;
20772	    }
20773
20774	    (isRootSVG ? svg : parent).appendChild(container);
vendor: 7,530 bytes, lines 20775-21037
20775	    container.setAttribute("transform", "matrix(" + m.a + "," + m.b + "," + m.c + "," + m.d + "," + (m.e + x) + "," + (m.f + y) + ")");
20776	  } else {
20777	    x = y = 0;
20778
20779	    if (_hasOffsetBug) {
20780	      m = element.offsetParent;
20781	      b = element;
20782
20783	      while (b && (b = b.parentNode) && b !== m && b.parentNode) {
20784	        if ((_win.getComputedStyle(b)[_transformProp] + "").length > 4) {
20785	          x = b.offsetLeft;
20786	          y = b.offsetTop;
20787	          b = 0;
20788	        }
20789	      }
20790	    }
20791
20792	    cs = _win.getComputedStyle(element);
20793
20794	    if (cs.position !== "absolute") {
20795	      m = element.offsetParent;
20796
20797	      while (parent && parent !== m) {
20798	        x += parent.scrollLeft || 0;
20799	        y += parent.scrollTop || 0;
20800	        parent = parent.parentNode;
20801	      }
20802	    }
20803
20804	    b = container.style;
20805	    b.top = element.offsetTop - y + "px";
20806	    b.left = element.offsetLeft - x + "px";
20807	    b[_transformProp] = cs[_transformProp];
20808	    b[_transformOriginProp] = cs[_transformOriginProp];
20809	    b.position = cs.position === "fixed" ? "fixed" : "absolute";
20810	    element.parentNode.appendChild(container);
20811	  }
20812
20813	  return container;
20814	},
20815	    _setMatrix = function _setMatrix(m, a, b, c, d, e, f) {
20816	  m.a = a;
20817	  m.b = b;
20818	  m.c = c;
20819	  m.d = d;
20820	  m.e = e;
20821	  m.f = f;
20822	  return m;
20823	};
20824
20825	var Matrix2D = function () {
20826	  function Matrix2D(a, b, c, d, e, f) {
20827	    if (a === void 0) {
20828	      a = 1;
20829	    }
20830
20831	    if (b === void 0) {
20832	      b = 0;
20833	    }
20834
20835	    if (c === void 0) {
20836	      c = 0;
20837	    }
20838
20839	    if (d === void 0) {
20840	      d = 1;
20841	    }
20842
20843	    if (e === void 0) {
20844	      e = 0;
20845	    }
20846
20847	    if (f === void 0) {
20848	      f = 0;
20849	    }
20850
20851	    _setMatrix(this, a, b, c, d, e, f);
20852	  }
20853
20854	  var _proto = Matrix2D.prototype;
20855
20856	  _proto.inverse = function inverse() {
20857	    var a = this.a,
20858	        b = this.b,
20859	        c = this.c,
20860	        d = this.d,
20861	        e = this.e,
20862	        f = this.f,
20863	        determinant = a * d - b * c || 1e-10;
20864	    return _setMatrix(this, d / determinant, -b / determinant, -c / determinant, a / determinant, (c * f - d * e) / determinant, -(a * f - b * e) / determinant);
20865	  };
20866
20867	  _proto.multiply = function multiply(matrix) {
20868	    var a = this.a,
20869	        b = this.b,
20870	        c = this.c,
20871	        d = this.d,
20872	        e = this.e,
20873	        f = this.f,
20874	        a2 = matrix.a,
20875	        b2 = matrix.c,
20876	        c2 = matrix.b,
20877	        d2 = matrix.d,
20878	        e2 = matrix.e,
20879	        f2 = matrix.f;
20880	    return _setMatrix(this, a2 * a + c2 * c, a2 * b + c2 * d, b2 * a + d2 * c, b2 * b + d2 * d, e + e2 * a + f2 * c, f + e2 * b + f2 * d);
20881	  };
20882
20883	  _proto.clone = function clone() {
20884	    return new Matrix2D(this.a, this.b, this.c, this.d, this.e, this.f);
20885	  };
20886
20887	  _proto.equals = function equals(matrix) {
20888	    var a = this.a,
20889	        b = this.b,
20890	        c = this.c,
20891	        d = this.d,
20892	        e = this.e,
20893	        f = this.f;
20894	    return a === matrix.a && b === matrix.b && c === matrix.c && d === matrix.d && e === matrix.e && f === matrix.f;
20895	  };
20896
20897	  _proto.apply = function apply(point, decoratee) {
20898	    if (decoratee === void 0) {
20899	      decoratee = {};
20900	    }
20901
20902	    var x = point.x,
20903	        y = point.y,
20904	        a = this.a,
20905	        b = this.b,
20906	        c = this.c,
20907	        d = this.d,
20908	        e = this.e,
20909	        f = this.f;
20910	    decoratee.x = x * a + y * c + e || 0;
20911	    decoratee.y = x * b + y * d + f || 0;
20912	    return decoratee;
20913	  };
20914
20915	  return Matrix2D;
20916	}();
20917	function getGlobalMatrix(element, inverse, adjustGOffset, includeScrollInFixed) {
20918	  if (!element || !element.parentNode || (_doc || _setDoc(element)).documentElement === element) {
20919	    return new Matrix2D();
20920	  }
20921
20922	  var zeroScales = _forceNonZeroScale(element),
20923	      svg = _svgOwner(element),
20924	      temps = svg ? _svgTemps : _divTemps,
20925	      container = _placeSiblings(element, adjustGOffset),
20926	      b1 = temps[0].getBoundingClientRect(),
20927	      b2 = temps[1].getBoundingClientRect(),
20928	      b3 = temps[2].getBoundingClientRect(),
20929	      parent = container.parentNode,
20930	      isFixed = !includeScrollInFixed && _isFixed(element),
20931	      m = new Matrix2D((b2.left - b1.left) / 100, (b2.top - b1.top) / 100, (b3.left - b1.left) / 100, (b3.top - b1.top) / 100, b1.left + (isFixed ? 0 : _getDocScrollLeft()), b1.top + (isFixed ? 0 : _getDocScrollTop()));
20932
20933	  parent.removeChild(container);
20934
20935	  if (zeroScales) {
20936	    b1 = zeroScales.length;
20937
20938	    while (b1--) {
20939	      b2 = zeroScales[b1];
20940	      b2.scaleX = b2.scaleY = 0;
20941	      b2.renderTransform(1, b2);
20942	    }
20943	  }
20944
20945	  return inverse ? m.inverse() : m;
20946	}
20947
20948	/*!
20949	 * MotionPathPlugin 3.7.0
20950	 * https://greensock.com
20951	 *
20952	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
20953	 * Subject to the terms at https://greensock.com/standard-license or for
20954	 * Club GreenSock members, the agreement issued with that membership.
20955	 * @author: Jack Doyle, [email protected]
20956	*/
20957
20958	var _xProps = "x,translateX,left,marginLeft,xPercent".split(","),
20959	    _yProps = "y,translateY,top,marginTop,yPercent".split(","),
20960	    _DEG2RAD$1 = Math.PI / 180,
20961	    gsap,
20962	    PropTween,
20963	    _getUnit,
20964	    _toArray,
20965	    _getGSAP = function _getGSAP() {
20966	  return gsap || typeof window !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap;
20967	},
20968	    _populateSegmentFromArray = function _populateSegmentFromArray(segment, values, property, mode) {
20969	  var l = values.length,
20970	      si = mode === 2 ? 0 : mode,
20971	      i = 0,
20972	      v;
20973
20974	  for (; i < l; i++) {
20975	    segment[si] = v = parseFloat(values[i][property]);
20976	    mode === 2 && (segment[si + 1] = 0);
20977	    si += 2;
20978	  }
20979
20980	  return segment;
20981	},
20982	    _getPropNum = function _getPropNum(target, prop, unit) {
20983	  return parseFloat(target._gsap.get(target, prop, unit || "px")) || 0;
20984	},
20985	    _relativize = function _relativize(segment) {
20986	  var x = segment[0],
20987	      y = segment[1],
20988	      i;
20989
20990	  for (i = 2; i < segment.length; i += 2) {
20991	    x = segment[i] += x;
20992	    y = segment[i + 1] += y;
20993	  }
20994	},
20995	    _segmentToRawPath = function _segmentToRawPath(plugin, segment, target, x, y, slicer, vars, unitX, unitY) {
20996	  if (vars.type === "cubic") {
20997	    segment = [segment];
20998	  } else {
20999	    vars.fromCurrent !== false && segment.unshift(_getPropNum(target, x, unitX), y ? _getPropNum(target, y, unitY) : 0);
21000	    vars.relative && _relativize(segment);
21001	    var pointFunc = y ? pointsToSegment : flatPointsToSegment;
21002	    segment = [pointFunc(segment, vars.curviness)];
21003	  }
21004
21005	  segment = slicer(_align(segment, target, vars));
21006
21007	  _addDimensionalPropTween(plugin, target, x, segment, "x", unitX);
21008
21009	  y && _addDimensionalPropTween(plugin, target, y, segment, "y", unitY);
21010	  return cacheRawPathMeasurements(segment, vars.resolution || (vars.curviness === 0 ? 20 : 12));
21011	},
21012	    _emptyFunc = function _emptyFunc(v) {
21013	  return v;
21014	},
21015	    _numExp = /[-+\.]*\d+[\.e\-\+]*\d*[e\-\+]*\d*/g,
21016	    _originToPoint = function _originToPoint(element, origin, parentMatrix) {
21017	  var m = getGlobalMatrix(element),
21018	      svg,
21019	      x,
21020	      y;
21021
21022	  if ((element.tagName + "").toLowerCase() === "svg") {
21023	    svg = element.viewBox.baseVal;
21024	    x = svg.x;
21025	    y = svg.y;
21026	    svg.width || (svg = {
21027	      width: +element.getAttribute("width"),
21028	      height: +element.getAttribute("height")
21029	    });
21030	  } else {
21031	    svg = origin && element.getBBox && element.getBBox();
21032	    x = y = 0;
21033	  }
21034
21035	  if (origin && origin !== "auto") {
21036	    x += origin.push ? origin[0] * (svg ? svg.width : element.offsetWidth || 0) : origin.x;
21037	    y += origin.push ? origin[1] * (svg ? svg.height : element.offsetHeight || 0
vendor: 10,733 bytes, lines 21037-21298
21037) : origin.y;
21038	  }
21039
21040	  return parentMatrix.apply(x || y ? m.apply({
21041	    x: x,
21042	    y: y
21043	  }) : {
21044	    x: m.e,
21045	    y: m.f
21046	  });
21047	},
21048	    _getAlignMatrix = function _getAlignMatrix(fromElement, toElement, fromOrigin, toOrigin) {
21049	  var parentMatrix = getGlobalMatrix(fromElement.parentNode, true, true),
21050	      m = parentMatrix.clone().multiply(getGlobalMatrix(toElement)),
21051	      fromPoint = _originToPoint(fromElement, fromOrigin, parentMatrix),
21052	      _originToPoint2 = _originToPoint(toElement, toOrigin, parentMatrix),
21053	      x = _originToPoint2.x,
21054	      y = _originToPoint2.y,
21055	      p;
21056
21057	  m.e = m.f = 0;
21058
21059	  if (toOrigin === "auto" && toElement.getTotalLength && toElement.tagName.toLowerCase() === "path") {
21060	    p = toElement.getAttribute("d").match(_numExp) || [];
21061	    p = m.apply({
21062	      x: +p[0],
21063	      y: +p[1]
21064	    });
21065	    x += p.x;
21066	    y += p.y;
21067	  }
21068
21069	  if (p || toElement.getBBox && fromElement.getBBox && toElement.ownerSVGElement === fromElement.ownerSVGElement) {
21070	    p = m.apply(toElement.getBBox());
21071	    x -= p.x;
21072	    y -= p.y;
21073	  }
21074
21075	  m.e = x - fromPoint.x;
21076	  m.f = y - fromPoint.y;
21077	  return m;
21078	},
21079	    _align = function _align(rawPath, target, _ref) {
21080	  var align = _ref.align,
21081	      matrix = _ref.matrix,
21082	      offsetX = _ref.offsetX,
21083	      offsetY = _ref.offsetY,
21084	      alignOrigin = _ref.alignOrigin;
21085
21086	  var x = rawPath[0][0],
21087	      y = rawPath[0][1],
21088	      curX = _getPropNum(target, "x"),
21089	      curY = _getPropNum(target, "y"),
21090	      alignTarget,
21091	      m,
21092	      p;
21093
21094	  if (!rawPath || !rawPath.length) {
21095	    return getRawPath("M0,0L0,0");
21096	  }
21097
21098	  if (align) {
21099	    if (align === "self" || (alignTarget = _toArray(align)[0] || target) === target) {
21100	      transformRawPath(rawPath, 1, 0, 0, 1, curX - x, curY - y);
21101	    } else {
21102	      if (alignOrigin && alignOrigin[2] !== false) {
21103	        gsap.set(target, {
21104	          transformOrigin: alignOrigin[0] * 100 + "% " + alignOrigin[1] * 100 + "%"
21105	        });
21106	      } else {
21107	        alignOrigin = [_getPropNum(target, "xPercent") / -100, _getPropNum(target, "yPercent") / -100];
21108	      }
21109
21110	      m = _getAlignMatrix(target, alignTarget, alignOrigin, "auto");
21111	      p = m.apply({
21112	        x: x,
21113	        y: y
21114	      });
21115	      transformRawPath(rawPath, m.a, m.b, m.c, m.d, curX + m.e - (p.x - m.e), curY + m.f - (p.y - m.f));
21116	    }
21117	  }
21118
21119	  if (matrix) {
21120	    transformRawPath(rawPath, matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);
21121	  } else if (offsetX || offsetY) {
21122	    transformRawPath(rawPath, 1, 0, 0, 1, offsetX || 0, offsetY || 0);
21123	  }
21124
21125	  return rawPath;
21126	},
21127	    _addDimensionalPropTween = function _addDimensionalPropTween(plugin, target, property, rawPath, pathProperty, forceUnit) {
21128	  var cache = target._gsap,
21129	      harness = cache.harness,
21130	      alias = harness && harness.aliases && harness.aliases[property],
21131	      prop = alias && alias.indexOf(",") < 0 ? alias : property,
21132	      pt = plugin._pt = new PropTween(plugin._pt, target, prop, 0, 0, _emptyFunc, 0, cache.set(target, prop, plugin));
21133	  pt.u = _getUnit(cache.get(target, prop, forceUnit)) || 0;
21134	  pt.path = rawPath;
21135	  pt.pp = pathProperty;
21136
21137	  plugin._props.push(prop);
21138	},
21139	    _sliceModifier = function _sliceModifier(start, end) {
21140	  return function (rawPath) {
21141	    return start || end !== 1 ? sliceRawPath(rawPath, start, end) : rawPath;
21142	  };
21143	};
21144
21145	var MotionPathPlugin = {
21146	  version: "3.7.0",
21147	  name: "motionPath",
21148	  register: function register(core, Plugin, propTween) {
21149	    gsap = core;
21150	    _getUnit = gsap.utils.getUnit;
21151	    _toArray = gsap.utils.toArray;
21152	    PropTween = propTween;
21153	  },
21154	  init: function init(target, vars) {
21155	    if (!gsap) {
21156	      console.warn("Please gsap.registerPlugin(MotionPathPlugin)");
21157	      return false;
21158	    }
21159
21160	    if (!(typeof vars === "object" && !vars.style) || !vars.path) {
21161	      vars = {
21162	        path: vars
21163	      };
21164	    }
21165
21166	    var rawPaths = [],
21167	        _vars = vars,
21168	        path = _vars.path,
21169	        autoRotate = _vars.autoRotate,
21170	        unitX = _vars.unitX,
21171	        unitY = _vars.unitY,
21172	        x = _vars.x,
21173	        y = _vars.y,
21174	        firstObj = path[0],
21175	        slicer = _sliceModifier(vars.start, "end" in vars ? vars.end : 1),
21176	        rawPath,
21177	        p;
21178
21179	    this.rawPaths = rawPaths;
21180	    this.target = target;
21181
21182	    if (this.rotate = autoRotate || autoRotate === 0) {
21183	      this.rOffset = parseFloat(autoRotate) || 0;
21184	      this.radians = !!vars.useRadians;
21185	      this.rProp = vars.rotation || "rotation";
21186	      this.rSet = target._gsap.set(target, this.rProp, this);
21187	      this.ru = _getUnit(target._gsap.get(target, this.rProp)) || 0;
21188	    }
21189
21190	    if (Array.isArray(path) && !("closed" in path) && typeof firstObj !== "number") {
21191	      for (p in firstObj) {
21192	        if (!x && ~_xProps.indexOf(p)) {
21193	          x = p;
21194	        } else if (!y && ~_yProps.indexOf(p)) {
21195	          y = p;
21196	        }
21197	      }
21198
21199	      if (x && y) {
21200	        rawPaths.push(_segmentToRawPath(this, _populateSegmentFromArray(_populateSegmentFromArray([], path, x, 0), path, y, 1), target, x, y, slicer, vars, unitX || _getUnit(path[0][x]), unitY || _getUnit(path[0][y])));
21201	      } else {
21202	        x = y = 0;
21203	      }
21204
21205	      for (p in firstObj) {
21206	        p !== x && p !== y && rawPaths.push(_segmentToRawPath(this, _populateSegmentFromArray([], path, p, 2), target, p, 0, slicer, vars, _getUnit(path[0][p])));
21207	      }
21208	    } else {
21209	      rawPath = slicer(_align(getRawPath(vars.path), target, vars));
21210	      cacheRawPathMeasurements(rawPath, vars.resolution);
21211	      rawPaths.push(rawPath);
21212
21213	      _addDimensionalPropTween(this, target, vars.x || "x", rawPath, "x", vars.unitX || "px");
21214
21215	      _addDimensionalPropTween(this, target, vars.y || "y", rawPath, "y", vars.unitY || "px");
21216	    }
21217	  },
21218	  render: function render(ratio, data) {
21219	    var rawPaths = data.rawPaths,
21220	        i = rawPaths.length,
21221	        pt = data._pt;
21222
21223	    if (ratio > 1) {
21224	      ratio = 1;
21225	    } else if (ratio < 0) {
21226	      ratio = 0;
21227	    }
21228
21229	    while (i--) {
21230	      getPositionOnPath(rawPaths[i], ratio, !i && data.rotate, rawPaths[i]);
21231	    }
21232
21233	    while (pt) {
21234	      pt.set(pt.t, pt.p, pt.path[pt.pp] + pt.u, pt.d, ratio);
21235	      pt = pt._next;
21236	    }
21237
21238	    data.rotate && data.rSet(data.target, data.rProp, rawPaths[0].angle * (data.radians ? _DEG2RAD$1 : 1) + data.rOffset + data.ru, data, ratio);
21239	  },
21240	  getLength: function getLength(path) {
21241	    return cacheRawPathMeasurements(getRawPath(path)).totalLength;
21242	  },
21243	  sliceRawPath: sliceRawPath,
21244	  getRawPath: getRawPath,
21245	  pointsToSegment: pointsToSegment,
21246	  stringToRawPath: stringToRawPath,
21247	  rawPathToString: rawPathToString,
21248	  transformRawPath: transformRawPath,
21249	  getGlobalMatrix: getGlobalMatrix,
21250	  getPositionOnPath: getPositionOnPath,
21251	  cacheRawPathMeasurements: cacheRawPathMeasurements,
21252	  convertToPath: function convertToPath$1(targets, swap) {
21253	    return _toArray(targets).map(function (target) {
21254	      return convertToPath(target, swap !== false);
21255	    });
21256	  },
21257	  convertCoordinates: function convertCoordinates(fromElement, toElement, point) {
21258	    var m = getGlobalMatrix(toElement, true, true).multiply(getGlobalMatrix(fromElement));
21259	    return point ? m.apply(point) : m;
21260	  },
21261	  getAlignMatrix: _getAlignMatrix,
21262	  getRelativePosition: function getRelativePosition(fromElement, toElement, fromOrigin, toOrigin) {
21263	    var m = _getAlignMatrix(fromElement, toElement, fromOrigin, toOrigin);
21264
21265	    return {
21266	      x: m.e,
21267	      y: m.f
21268	    };
21269	  },
21270	  arrayToRawPath: function arrayToRawPath(value, vars) {
21271	    vars = vars || {};
21272
21273	    var segment = _populateSegmentFromArray(_populateSegmentFromArray([], value, vars.x || "x", 0), value, vars.y || "y", 1);
21274
21275	    vars.relative && _relativize(segment);
21276	    return [vars.type === "cubic" ? segment : pointsToSegment(segment, vars.curviness)];
21277	  }
21278	};
21279	_getGSAP() && gsap.registerPlugin(MotionPathPlugin);
21280
21281	exports.MotionPathPlugin = MotionPathPlugin;
21282	exports.default = MotionPathPlugin;
21283
21284	Object.defineProperty(exports, '__esModule', { value: true });
21285
21286})));
21287
21288/*SIGUIENTE LIBRERIA*/
21289/*!
21290 * MotionPathPlugin 3.7.0
21291 * https://greensock.com
21292 * 
21293 * @license Copyright 2021, GreenSock. All rights reserved.
21294 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
21295 * @author: Jack Doyle, [email protected]
21296 */
21297
21298!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).window=t.window||{})}(this,function(t){"use strict";function p(t){return"string"==typeof t}function x(t){return Math.round(1e10*t)/1e10||0}function y(t,e,n,r){var a=t[e],o=1===r?6:subdivideSegment(a,n,r);if(o&&o+n+2<a.length)return t.splice(e,0,a.slice(0,n+o+2)),a.splice(0,n+o),1}function B(t,e){var n=t.length,r=t[n-1]||[],a=r.length;n&&e[0]===r[a-2]&&e[1]===r[a-1]&&(e=r.concat(e.slice(2)),n--),t[n]=e}var M=/[achlmqstvz]|(-?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/gi,T=/(?:(-)?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/gi,L=/[\+\-]?\d*\.?\d+e[\+\-]?\d+/gi,r=/(^[#\.][a-z]|[a-y][a-z])/i,F=Math.PI/180,s=180/Math.PI,U=Math.sin,H=Math.cos,Q=Math.abs,W=Math.sqrt,S=Math.atan2,A=1e8,l=function _isNumber(t){return"number"==typeof t},N={},_={},e=1e5,d=function _wrapProgress(t){return Math.round((t+A)%1*e)/e||(t<0?0:1)},C=function _round(t){return Math.round(t*e)/e||0},O=function _copyMetaData(t,e){return e.totalLength=t.totalLength,t.samples?(e.samples=t.samples.slice(0),e.lookup=t.lookup.slice(0),e.minLength=t.minLength,e.resolution=t.resolution):t.totalPoints&&(e.totalPoints=t.totalPoints),e};function getRawPath(t){var e,n=(t=p(t)&&r.test(t)&&document.querySelector(t)||t).getAttribute?t:0;return n&&(t=t.getAttribute("d"))?(n._gsPath||(n._gsPath={}),(e=n._gsPath[t])&&!e._dirty?e:n._gsPath[t]=stringToRawPath(t)):t?p(t)?stringToRawPath(t):l(t[0])?[t]:t:console.warn("Expecting a <path> element or an SVG path data string")}function reverseSegment(t){var e,n=0;for(t.reverse();n<t.length;n+=2)e=t[n],t[n]=t[n+1],t[n+1]=e;t.reversed=!t.reversed}var j={rect:"rx,ry,x,y,width,height",circle:"r,cx,cy",ellipse:"rx,ry,cx,cy",line:"x1,x2,y1,y2"};function convertToPath(t,e){var n,r,a,o,i,s,l,h,u,g,f,c,p,d,m,v,x,P,y,w,b,M,L=t.tagName.toLowerCase(),R=.552284749831;return"path"!==L&&t.getBBox?(s=function _createPath(t,e){var n,r=document.createElementNS("http://www.w3.org/2000/svg","path"),a=[].slice.call(t.attributes),o=a.length;for(e=","+e+",";-1<--o;)n=a[o].nodeName.toLowerCase(),e.indexOf(","+n+",")<0&&r.setAttributeNS(null,n,a[o].nodeValue);return r}(t,"x,y,width,height,cx,cy,rx,ry,r,x1,x2,y1,y2,points"),M=function _attrToObj(t,e){for(var n=e?e.split(","):[],r={},a=n.length;-1<--a;
vendor: 9,315 bytes, line 21298
21298)r[n[a]]=+t.getAttribute(n[a])||0;return r}(t,j[L]),"rect"===L?(o=M.rx,i=M.ry||o,r=M.x,a=M.y,g=M.width-2*o,f=M.height-2*i,n=o||i?"M"+(v=(d=(p=r+o)+g)+o)+","+(P=a+i)+" V"+(y=P+f)+" C"+[v,w=y+i*R,m=d+o*R,b=y+i,d,b,d-(d-p)/3,b,p+(d-p)/3,b,p,b,c=r+o*(1-R),b,r,w,r,y,r,y-(y-P)/3,r,P+(y-P)/3,r,P,r,x=a+i*(1-R),c,a,p,a,p+(d-p)/3,a,d-(d-p)/3,a,d,a,m,a,v,x,v,P].join(",")+"z":"M"+(r+g)+","+a+" v"+f+" h"+-g+" v"+-f+" h"+g+"z"):"circle"===L||"ellipse"===L?(h="circle"===L?(o=i=M.r)*R:(o=M.rx,(i=M.ry)*R),n="M"+((r=M.cx)+o)+","+(a=M.cy)+" C"+[r+o,a+h,r+(l=o*R),a+i,r,a+i,r-l,a+i,r-o,a+h,r-o,a,r-o,a-h,r-l,a-i,r,a-i,r+l,a-i,r+o,a-h,r+o,a].join(",")+"z"):"line"===L?n="M"+M.x1+","+M.y1+" L"+M.x2+","+M.y2:"polyline"!==L&&"polygon"!==L||(n="M"+(r=(u=(t.getAttribute("points")+"").match(T)||[]).shift())+","+(a=u.shift())+" L"+u.join(","),"polygon"===L&&(n+=","+r+","+a+"z")),s.setAttribute("d",rawPathToString(s._gsRawPath=stringToRawPath(n))),e&&t.parentNode&&(t.parentNode.insertBefore(s,t),t.parentNode.removeChild(t)),s):t}function getRotationAtBezierT(t,e,n){var r,a=t[e],o=t[e+2],i=t[e+4];return a+=(o-a)*n,a+=((o+=(i-o)*n)-a)*n,r=o+(i+(t[e+6]-i)*n-o)*n-a,a=t[e+1],a+=((o=t[e+3])-a)*n,a+=((o+=((i=t[e+5])-o)*n)-a)*n,C(S(o+(i+(t[e+7]-i)*n-o)*n-a,r)*s)}function sliceRawPath(t,e,n){n=function _isUndefined(t){return void 0===t}(n)?1:x(n)||0,e=x(e)||0;var r=Math.max(0,~~(Q(n-e)-1e-8)),a=function copyRawPath(t){for(var e=[],n=0;n<t.length;n++)e[n]=O(t[n],t[n].slice(0));return O(t,e)}(t);if(n<e&&(e=1-e,n=1-n,function _reverseRawPath(t,e){var n=t.length;for(e||t.reverse();n--;)t[n].reversed||reverseSegment(t[n])}(a),a.totalLength=0),e<0||n<0){var o=Math.abs(~~Math.min(e,n))+1;e+=o,n+=o}a.totalLength||cacheRawPathMeasurements(a);var i,s,l,h,u,g,f,c,p=1<n,d=getProgressData(a,e,N,!0),m=getProgressData(a,n,_),v=m.segment,P=d.segment,w=m.segIndex,b=d.segIndex,M=m.i,L=d.i,R=b===w,T=M===L&&R;if(p||r){for(i=w<b||R&&M<L||T&&m.t<d.t,y(a,b,L,d.t)&&(b++,i||(w++,T?(m.t=(m.t-d.t)/(1-d.t),M=0):R&&(M-=L))),1-(n-e)<1e-5?w=b-1:!m.t&&w?w--:y(a,w,M,m.t)&&i&&b++,1===d.t&&(b=(b+1)%a.length),u=[],f=1+(g=a.length)*r,f+=(g-(c=b)+w)%g,h=0;h<f;h++)B(u,a[c++%g]);a=u}else if(l=1===m.t?6:subdivideSegment(v,M,m.t),e!==n)for(s=subdivideSegment(P,L,T?d.t/m.t:d.t),R&&(l+=s),v.splice(M+l+2),(s||L)&&P.splice(0,L+s),h=a.length;h--;)(h<b||w<h)&&a.splice(h,1);else v.angle=getRotationAtBezierT(v,M+l,0),d=v[M+=l],m=v[M+1],v.length=v.totalLength=0,v.totalPoints=a.totalPoints=8,v.push(d,m,d,m,d,m,d,m);return a.totalLength=0,a}function measureSegment(t,e,n){e=e||0,t.samples||(t.samples=[],t.lookup=[]);var r,a,o,i,s,l,h,u,g,f,c,p,d,m,v,x,P,y=~~t.resolution||12,w=1/y,b=n?e+6*n+1:t.length,M=t[e],L=t[e+1],R=e?e/6*y:0,T=t.samples,S=t.lookup,N=(e?t.minLength:A)||A,_=T[R+n*y-1],C=e?T[R-1]:0;for(T.length=S.length=0,a=e+2;a<b;a+=6){if(o=t[a+4]-M,i=t[a+2]-M,s=t[a]-M,u=t[a+5]-L,g=t[a+3]-L,f=t[a+1]-L,l=h=c=p=0,Q(o)<1e-5&&Q(u)<1e-5&&Q(s)+Q(f)<1e-5)8<t.length&&(t.splice(a,6),a-=6,b-=6);else for(r=1;r<=y;r++)l=h-(h=((m=w*r)*m*o+3*(d=1-m)*(m*i+d*s))*m),c=p-(p=(m*m*u+3*d*(m*g+d*f))*m),(x=W(c*c+l*l))<N&&(N=x),C+=x,T[R++]=C;M+=o,L+=u}if(_)for(_-=C;R<T.length;R++)T[R]+=_;if(T.length&&N)for(t.totalLength=P=T[T.length-1]||0,t.minLength=N,x=v=0,r=0;r<P;r+=N)S[x++]=T[v]<r?++v:v;else t.totalLength=T[0]=0;return e?C-T[e/2-1]:C}function cacheRawPathMeasurements(t,e){var n,r,a;for(a=n=r=0;a<t.length;a++)t[a].resolution=~~e||12,r+=t[a].length,n+=measureSegment(t[a]);return t.totalPoints=r,t.totalLength=n,t}function subdivideSegment(t,e,n){if(n<=0||1<=n)return 0;var r=t[e],a=t[e+1],o=t[e+2],i=t[e+3],s=t[e+4],l=t[e+5],h=r+(o-r)*n,u=o+(s-o)*n,g=a+(i-a)*n,f=i+(l-i)*n,c=h+(u-h)*n,p=g+(f-g)*n,d=s+(t[e+6]-s)*n,m=l+(t[e+7]-l)*n;return u+=(d-u)*n,f+=(m-f)*n,t.splice(e+2,4,C(h),C(g),C(c),C(p),C(c+(u-c)*n),C(p+(f-p)*n),C(u),C(f),C(d),C(m)),t.samples&&t.samples.splice(e/6*t.resolution|0,0,0,0,0,0,0,0),6}function getProgressData(t,e,n,r){n=n||{},t.totalLength||cacheRawPathMeasurements(t),(e<0||1<e)&&(e=d(e));var a,o,i,s,l,h,u,g=0,f=t[0];if(e)if(1===e)u=1,h=(f=t[g=t.length-1]).length-8;else{if(1<t.length){for(i=t.totalLength*e,l=h=0;(l+=t[h++].totalLength)<i;)g=h;e=(i-(s=l-(f=t[g]).totalLength))/(l-s)||0}a=f.samples,o=f.resolution,i=f.totalLength*e,s=(h=f.lookup[~~(i/f.minLength)]||0)?a[h-1]:0,(l=a[h])<i&&(s=l,l=a[++h]),u=1/o*((i-s)/(l-s)+h%o),h=6*~~(h/o),r&&1===u&&(h+6<f.length?(h+=6,u=0):g+1<t.length&&(h=u=0,f=t[++g]))}else u=h=g=0,f=t[0];return n.t=u,n.i=h,n.path=t,n.segment=f,n.segIndex=g,n}function getPositionOnPath(t,e,n,r){var a,o,i,s,l,h,u,g,f,c=t[0],p=r||{};if((e<0||1<e)&&(e=d(e)),1<t.length){for(i=t.totalLength*e,l=h=0;(l+=t[h++].totalLength)<i;)c=t[h];e=(i-(s=l-c.totalLength))/(l-s)||0}return a=c.samples,o=c.resolution,i=c.totalLength*e,s=(h=c.lookup[e<1?~~(i/c.minLength):c.lookup.length-1]||0)?a[h-1]:0,(l=a[h])<i&&(s=l,l=a[++h]),f=1-(u=1/o*((i-s)/(l-s)+h%o)||0),g=c[h=6*~~(h/o)],p.x=C((u*u*(c[h+6]-g)+3*f*(u*(c[h+4]-g)+f*(c[h+2]-g)))*u+g),p.y=C((u*u*(c[h+7]-(g=c[h+1]))+3*f*(u*(c[h+5]-g)+f*(c[h+3]-g)))*u+g),n&&(p.angle=c.totalLength?getRotationAtBezierT(c,h,1<=u?1-1e-9:u||1e-9):c.angle||0),p}function transformRawPath(t,e,n,r,a,o,i){for(var s,l,h,u,g,f=t.length;-1<--f;)for(l=(s=t[f]).length,h=0;h<l;h+=2)u=s[h],g=s[h+1],s[h]=u*e+g*r+o,s[h+1]=u*n+g*a+i;return t._dirty=1,t}function arcToSegment(t,e,n,r,a,o,i,s,l){if(t!==s||e!==l){n=Q(n),r=Q(r);var h=a%360*F,u=H(h),g=U(h),f=Math.PI,c=2*f,p=(t-s)/2,d=(e-l)/2,m=u*p+g*d,v=-g*p+u*d,x=m*m,P=v*v,y=x/(n*n)+P/(r*r);1<y&&(n=W(y)*n,r=W(y)*r);var w=n*n,b=r*r,M=(w*b-w*P-b*x)/(w*P+b*x);M<0&&(M=0);var L=(o===i?-1:1)*W(M),R=n*v/r*L,T=-r*m/n*L,S=u*R-g*T+(t+s)/2,N=g*R+u*T+(e+l)/2,_=(m-R)/n,C=(v-T)/r,A=(-m-R)/n,B=(-v-T)/r,O=_*_+C*C,j=(C<0?-1:1)*Math.acos(_/W(O)),I=(_*B-C*A<0?-1:1)*Math.acos((_*A+C*B)/W(O*(A*A+B*B)));isNaN(I)&&(I=f),!i&&0<I?I-=c:i&&I<0&&(I+=c),j%=c,I%=c;var X,E=Math.ceil(Q(I)/(c/4)),G=[],V=I/E,D=4/3*U(V/2)/(1+H(V/2)),k=u*n,z=g*n,Y=g*-r,q=u*r;for(X=0;X<E;X++)m=H(a=j+X*V),v=U(a),_=H(a+=V),C=U(a),G.push(m-D*v,v+D*m,_+D*C,C-D*_,_,C);for(X=0;X<G.length;X+=2)m=G[X],v=G[X+1],G[X]=m*k+v*Y+S,G[X+1]=m*z+v*q+N;return G[X-2]=s,G[X-1]=l,G}}function stringToRawPath(t){function sf(t,e,n,r){u=(n-t)/3,g=(r-e)/3,s.push(t+u,e+g,n-u,r-g,n,r)}var e,n,r,a,o,i,s,l,h,u,g,f,c,p,d,m=(t+"").replace(L,function(t){var e=+t;return e<1e-4&&-1e-4<e?0:e}).match(M)||[],v=[],x=0,P=0,y=m.length,w=0,b="ERROR: malformed path: "+t;if(!t||!isNaN(m[0])||isNaN(m[1]))return console.log(b),v;for(e=0;e<y;e++)if(c=o,isNaN(m[e])?i=(o=m[e].toUpperCase())!==m[e]:e--,r=+m[e+1],a=+m[e+2],i&&(r+=x,a+=P),e||(l=r,h=a),"M"===o)s&&(s.length<8?--v.length:w+=s.length),x=l=r,P=h=a,s=[r,a],v.push(s),e+=2,o="L";else if("C"===o)i||(x=P=0),(s=s||[0,0]).push(r,a,x+1*m[e+3],P+1*m[e+4],x+=1*m[e+5],P+=1*m[e+6]),e+=6;else if("S"===o)u=x,g=P,"C"!==c&&"S"!==c||(u+=x-s[s.length-4],g+=P-s[s.length-3]),i||(x=P=0),s.push(u,g,r,a,x+=1*m[e+3],P+=1*m[e+4]),e+=4;else if("Q"===o)u=x+2/3*(r-x),g=P+2/3*(a-P),i||(x=P=0),x+=1*m[e+3],P+=1*m[e+4],s.push(u,g,x+2/3*(r-x),P+2/3*(a-P),x,P),e+=4;else if("T"===o)u=x-s[s.length-4],g=P-s[s.length-3],s.push(x+u,P+g,r+2/3*(x+1.5*u-r),a+2/3*(P+1.5*g-a),x=r,P=a),e+=2;else if("H"===o)sf(x,P,x=r,P),e+=1;else if("V"===o)sf(x,P,x,P=r+(i?P-x:0)),e+=1;else if("L"===o||"Z"===o)"Z"===o&&(r=l,a=h,s.closed=!0),("L"===o||.5<Q(x-r)||.5<Q(P-a))&&(sf(x,P,r,a),"L"===o&&(e+=2)),x=r,P=a;else if("A"===o){if(p=m[e+4],d=m[e+5],u=m[e+6],g=m[e+7],n=7,1<p.length&&(p.length<3?(g=u,u=d,n--):(g=d,u=p.substr(2),n-=2),d=p.charAt(1),p=p.charAt(0)),f=arcToSegment(x,P,+m[e+1],+m[e+2],+m[e+3],+p,+d,(i?x:0)+1*u,(i?P:0)+1*g),e+=n,f)for(n=0;n<f.length;n++)s.push(f[n]);x=s[s.length-2],P=s[s.length-1]}else console.log(b);return(e=s.length)<6?(v.pop(),e=0):s[0]===s[e-2]&&s[1]===s[e-1]&&(s.closed=!0),v.totalPoints=w+e,v}function flatPointsToSegment(t,e){void 0===e&&(e=1);for(var n=t[0],r=0,a=[n,r],o=2;o<t.length;o+=2)a.push(n,r,t[o],r=(t[o]-n)*e/2,n=t[o],-r);return a}function pointsToSegment(t,e,n){Q(t[0]-t[2])<1e-4&&Q(t[1]-t[3])<1e-4&&(t=t.slice(2));var r,a,o,i,s,l,h,u,g,f,c,p,d,m,v=t.length-2,x=+t[0],P=+t[1],y=+t[2],w=+t[3],b=[x,P,x,P],M=y-x,L=w-P,R=Math.abs(t[v]-x)<.001&&Math.abs(t[v+1]-P)<.001;for(isNaN(n)&&(n=Math.PI/10),R&&(t.push(y,w),y=x,w=P,x=t[v-2],P=t[v-1],t.unshift(x,P),v+=4),e=e||0===e?+e:1,s=2;s<v;s+=2)r=x,a=P,x=y,P=w,y=+t[s+2],w=+t[s+3],x===y&&P===w||(p=(l=M)*l+(u=L)*u,d=(M=y-x)*M+(L=w-P)*L,m=(h=y-r)*h+(g=w-a)*g,c=(o=Math.acos((p+d-m)/W(4*p*d)))/Math.PI*e,f=W(p)*c,c*=W(d),x===r&&P===a||(n<o?(i=S(g,h),b.push(C(x-H(i)*f),C(P-U(i)*f),C(x),C(P),C(x+H(i)*c),C(P+U(i)*c))):(i=S(u,l),b.push(C(x-H(i)*f),C(P-U(i)*f)),i=S(L,M),b.push(C(x),C(P),C(x+H(i)*c),C(P+U(i)*c)))));return x!==y||P!==w||b.length<4?b.push(C(y),C(w),C(y),C(w)):b.length-=2,R&&(b.splice(0,6),b.length=b.length-6),b}function rawPathToString(t){l(t[0])&&(t=[t]);var e,n,r,a,o="",i=t.length;for(n=0;n<i;n++){for(a=t[n],o+="M"+C(a[0])+","+C(a[1])+" C",e=a.length,r=2;r<e;r++)o+=C(a[r++])+","+C(a[r++])+" "+C(a[r++])+","+C(a[r++])+" "+C(a[r++])+","+C(a[r])+" ";a.closed&&(o+="z")}return o}function P(t){var e=t.ownerDocument||t;!(E in t.style)&&"msTransform"in t.style&&(G=(E="msTransform")+"Origin");for(;e.parentNode&&(e=e.parentNode););if(m=window,R=new z,e){v=(c=e).documentElement,w=e.body;var n=e.createElement("div"),r=e.createElement("div");w.appendChild(n),n.appendChild(r),n.style.position="static",n.style[E]="translate3d(0,
212980,1px)",I=r.offsetParent!==n,w.removeChild(n)}return e}function V(t){return t.ownerSVGElement||("svg"===(t.tagName+"").toLowerCase()?t:null)}function X(t,e){if(t.parentNode&&(c||P(t))){var n=V(t),r=n?n.getAttribute("xmlns")||"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",a=n?e?"rect":"g":"div",o=2!==e?0:100,i=3===e?100:0,s="position:absolute;display:block;pointer-events:none;margin:0;padding:0;",l=c.createElementNS?c.createElementNS(r.replace(/^https/,"http"),a):c.createElement(a);return e&&(n?(b=b||X(t),l.setAttribute("width",.01),l.setAttribute("height",.01),l.setAttribute("transform","translate("+o+","+i+")"),b.appendChild(l)):(f||((f=X(t)).style.cssText=s),l.style.cssText=s+"width:0.1px;height:0.1px;top:"+i+"px;left:"+o+"px",f.appendChild(l))),l}throw"Need document and parent."}function Z(t,e){var n,r,a,o,i,s,l=V(t),h=t===l,u=l?D:k,g=t.parentNode;if(t===m)return t;if(u.length||u.push(X(t,1),X(t,2),X(t,3)),n=l?b:f,l)a=h?{x:0,y:0}:t.getBBox(),i=(r=t.transform?t.transform.baseVal:{}).numberOfItems?(o=(r=1<r.numberOfItems?function _consolidate(t){for(var e=new z,n=0;n<t.numberOfItems;n++)e.multiply(t.getItem(n).matrix);return e}(r):r.getItem(0).matrix).a*a.x+r.c*a.y,r.b*a.x+r.d*a.y):(r=R,o=a.x,a.y),e&&"g"===t.tagName.toLowerCase()&&(o=i=0),(h?l:g).appendChild(n),n.setAttribute("transform","matrix("+r.a+","+r.b+","+r.c+","+r.d+","+(r.e+o)+","+(r.f+i)+")");else{if(o=i=0,I)for(r=t.offsetParent,a=t;(a=a&&a.parentNode)&&a!==r&&a.parentNode;)4<(m.getComputedStyle(a)[E]+"").length&&(o=a.offsetLeft,i=a.offsetTop,a=0);if("absolute"!==(s=m.getComputedStyle(t)).position)for(r=t.offsetParent;g&&g!==r;)o+=g.scrollLeft||0,i+=g.scrollTop||0,g=g.parentNode;(a=n.style).top=t.offsetTop-i+"px",a.left=t.offsetLeft-o+"px",a[E]=s[E],a[G]=s[G],a.position="fixed"===s.position?"fixed":"absolute",t.parentNode.appendChild(n)}return n}function $(t,e,n,r,a,o,i){return t.a=e,t.b=n,t.c=r,t.d=a,t.e=o,t.f=i,t}var c,m,v,w,f,b,R,I,n,E="transform",G=E+"Origin",D=[],k=[],z=((n=Matrix2D.prototype).inverse=function inverse(){var t=this.a,e=this.b,n=this.c,r=this.d,a=this.e,o=this.f,i=t*r-e*n||1e-10;return $(this,r/i,-e/i,-n/i,t/i,(n*o-r*a)/i,-(t*o-e*a)/i)},n.multiply=function multiply(t){var e=this.a,n=this.b,r=this.c,a=this.d,o=this.e,i=this.f,s=t.a,l=t.c,h=t.b,u=t.d,g=t.e,f=t.f;return $(this,s*e+h*r,s*n+h*a,l*e+u*r,l*n+u*a,o+g*e+f*r,i+g*n+f*a)},n.clone=function clone(){return new Matrix2D(this.a,this.b,this.c,this.d,this.e,this.f)},n.equals=function equals(t){var e=this.a,n=this.b,r=this.c,a=this.d,o=this.e,i=this.f;return e===t.a&&n===t.b&&r===t.c&&a===t.d&&o===t.e&&i===t.f},n.apply=function apply(t,e){void 0===e&&(e={});var n=t.x,r=t.y,a=this.a,o=this.b,i=this.c,s=this.d,l=this.e,h=this.f;return e.x=n*a+r*i+l||0,e.y=n*o+r*s+h||0,e},Matrix2D);function Matrix2D(t,e,n,r,a,o){void 0===t&&(t=1),void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=1),void 0===a&&(a=0),void 0===o&&(o=0),$(this,t,e,n,r,a,o)}function getGlobalMatrix(t,e,n,r){if(!t||!t.parentNode||(c||P(t)).documentElement===t)return new z;var a=function _forceNonZeroScale(t){for(var e,n;t&&t!==w;)(n=t._gsap)&&n.uncache&&n.get(t,"x"),n&&!n.scaleX&&!n.scaleY&&n.renderTransform&&(n.scaleX=n.scaleY=1e-4,n.renderTransform(1,n),e?e.push(n):e=[n]),t=t.parentNode;return e}(t),o=V(t)?D:k,i=Z(t,n),s=o[0].getBoundingClientRect(),l=o[1].getBoundingClientRect(),h=o[2].getBoundingClientRect(),u=i.parentNode,g=!r&&function _isFixed(t){return"fixed"===m.getComputedStyle(t).position||((t=t.parentNode)&&1===t.nodeType?_isFixed(t):void 0)}(t),f=new z((l.left-s.left)/100,(l.top-s.top)/100,(h.left-s.left)/100,(h.top-s.top)/100,s.left+(g?0:function _getDocScrollLeft(){return m.pageXOffset||c.scrollLeft||v.scrollLeft||w.scrollLeft||0}()),s.top+(g?0:function _getDocScrollTop(){return m.pageYOffset||c.scrollTop||v.scrollTop||w.scrollTop||0}()));if(u.removeChild(i),a)for(s=a.length;s--;)(l=a[s]).scaleX=l.scaleY=0,l.renderTransform(1,l);return e?f.inverse():f}function ia(t,e,n,r){for(var a=e.length,o=2===r?0:r,i=0;i<a;i++)t[o]=parseFloat(e[i][n]),2===r&&(t[o+1]=0),o+=2;return t}function ja(t,e,n){return parseFloat(t._gsap.get(t,e,n||"px"))||0}function ka(t){var e,n=t[0],r=t[1];for(e=2;e<t.length;e+=2)n=t[e]+=n,r=t[e+1]+=r}
vendor: 4,717 bytes, line 21298
21298function la(t,e,n,r,a,o,i,s,l){return e="cubic"===i.type?[e]:(!1!==i.fromCurrent&&e.unshift(ja(n,r,s),a?ja(n,a,l):0),i.relative&&ka(e),[(a?pointsToSegment:flatPointsToSegment)(e,i.curviness)]),e=o(nt(e,n,i)),rt(t,n,r,e,"x",s),a&&rt(t,n,a,e,"y",l),cacheRawPathMeasurements(e,i.resolution||(0===i.curviness?20:12))}function ma(t){return t}function oa(t,e,n){var r,a,o,i=getGlobalMatrix(t);return"svg"===(t.tagName+"").toLowerCase()?(a=(r=t.viewBox.baseVal).x,o=r.y,r.width||(r={width:+t.getAttribute("width"),height:+t.getAttribute("height")})):(r=e&&t.getBBox&&t.getBBox(),a=o=0),e&&"auto"!==e&&(a+=e.push?e[0]*(r?r.width:t.offsetWidth||0):e.x,o+=e.push?e[1]*(r?r.height:t.offsetHeight||0):e.y),n.apply(a||o?i.apply({x:a,y:o}):{x:i.e,y:i.f})}function pa(t,e,n,r){var a,o=getGlobalMatrix(t.parentNode,!0,!0),i=o.clone().multiply(getGlobalMatrix(e)),s=oa(t,n,o),l=oa(e,r,o),h=l.x,u=l.y;return i.e=i.f=0,"auto"===r&&e.getTotalLength&&"path"===e.tagName.toLowerCase()&&(a=e.getAttribute("d").match(et)||[],h+=(a=i.apply({x:+a[0],y:+a[1]})).x,u+=a.y),(a||e.getBBox&&t.getBBox&&e.ownerSVGElement===t.ownerSVGElement)&&(h-=(a=i.apply(e.getBBox())).x,u-=a.y),i.e=h-s.x,i.f=u-s.y,i}var Y,g,q,J,K="x,translateX,left,marginLeft,xPercent".split(","),tt="y,translateY,top,marginTop,yPercent".split(","),o=Math.PI/180,et=/[-+\.]*\d+[\.e\-\+]*\d*[e\-\+]*\d*/g,nt=function _align(t,e,n){var r,a,o,i=n.align,s=n.matrix,l=n.offsetX,h=n.offsetY,u=n.alignOrigin,g=t[0][0],f=t[0][1],c=ja(e,"x"),p=ja(e,"y");return t&&t.length?(i&&("self"===i||(r=J(i)[0]||e)===e?transformRawPath(t,1,0,0,1,c-g,p-f):(u&&!1!==u[2]?Y.set(e,{transformOrigin:100*u[0]+"% "+100*u[1]+"%"}):u=[ja(e,"xPercent")/-100,ja(e,"yPercent")/-100],o=(a=pa(e,r,u,"auto")).apply({x:g,y:f}),transformRawPath(t,a.a,a.b,a.c,a.d,c+a.e-(o.x-a.e),p+a.f-(o.y-a.f)))),s?transformRawPath(t,s.a,s.b,s.c,s.d,s.e,s.f):(l||h)&&transformRawPath(t,1,0,0,1,l||0,h||0),t):getRawPath("M0,0L0,0")},rt=function _addDimensionalPropTween(t,e,n,r,a,o){var i=e._gsap,s=i.harness,l=s&&s.aliases&&s.aliases[n],h=l&&l.indexOf(",")<0?l:n,u=t._pt=new g(t._pt,e,h,0,0,ma,0,i.set(e,h,t));u.u=q(i.get(e,h,o))||0,u.path=r,u.pp=a,t._props.push(h)},a={version:"3.7.0",name:"motionPath",register:function register(t,e,n){q=(Y=t).utils.getUnit,J=Y.utils.toArray,g=n},init:function init(t,e){if(!Y)return console.warn("Please gsap.registerPlugin(MotionPathPlugin)"),!1;"object"==typeof e&&!e.style&&e.path||(e={path:e});var n,r,a=[],o=e.path,i=e.autoRotate,s=e.unitX,l=e.unitY,h=e.x,u=e.y,g=o[0],f=function _sliceModifier(e,n){return function(t){return e||1!==n?sliceRawPath(t,e,n):t}}(e.start,"end"in e?e.end:1);if(this.rawPaths=a,this.target=t,(this.rotate=i||0===i)&&(this.rOffset=parseFloat(i)||0,this.radians=!!e.useRadians,this.rProp=e.rotation||"rotation",this.rSet=t._gsap.set(t,this.rProp,this),this.ru=q(t._gsap.get(t,this.rProp))||0),!Array.isArray(o)||"closed"in o||"number"==typeof g)cacheRawPathMeasurements(n=f(nt(getRawPath(e.path),t,e)),e.resolution),a.push(n),rt(this,t,e.x||"x",n,"x",e.unitX||"px"),rt(this,t,e.y||"y",n,"y",e.unitY||"px");else{for(r in g)!h&&~K.indexOf(r)?h=r:!u&&~tt.indexOf(r)&&(u=r);for(r in h&&u?a.push(la(this,ia(ia([],o,h,0),o,u,1),t,h,u,f,e,s||q(o[0][h]),l||q(o[0][u]))):h=u=0,g)r!==h&&r!==u&&a.push(la(this,ia([],o,r,2),t,r,0,f,e,q(o[0][r])))}},render:function render(t,e){var n=e.rawPaths,r=n.length,a=e._pt;for(1<t?t=1:t<0&&(t=0);r--;)getPositionOnPath(n[r],t,!r&&e.rotate,n[r]);for(;a;)a.set(a.t,a.p,a.path[a.pp]+a.u,a.d,t),a=a._next;e.rotate&&e.rSet(e.target,e.rProp,n[0].angle*(e.radians?o:1)+e.rOffset+e.ru,e,t)},getLength:function getLength(t){return cacheRawPathMeasurements(getRawPath(t)).totalLength},sliceRawPath:sliceRawPath,getRawPath:getRawPath,pointsToSegment:pointsToSegment,stringToRawPath:stringToRawPath,rawPathToString:rawPathToString,transformRawPath:transformRawPath,getGlobalMatrix:getGlobalMatrix,getPositionOnPath:getPositionOnPath,cacheRawPathMeasurements:cacheRawPathMeasurements,convertToPath:function convertToPath$1(t,e){return J(t).map(function(t){return convertToPath(t,!1!==e)})},convertCoordinates:function convertCoordinates(t,e,n){var r=getGlobalMatrix(e,!0,!0).multiply(getGlobalMatrix(t));return n?r.apply(n):r},getAlignMatrix:pa,getRelativePosition:function getRelativePosition(t,e,n,r){var a=pa(t,e,n,r);return{x:a.e,y:a.f}},arrayToRawPath:function arrayToRawPath(t,e){var n=ia(ia([],t,(e=e||{}).x||"x",0),t,e.y||"y",1);return e.relative&&ka(n),["cubic"===e.type?n:pointsToSegment(n,e.curviness)]}};!function _getGSAP(){return Y||"undefined"!=typeof window&&(Y=window.gsap)&&Y.registerPlugin&&Y}()||Y.registerPlugin(a),t.MotionPathPlugin=a,t.default=a;if (typeof(window)==="undefined"||window!==t){Object.defineProperty(t,"__esMo
vendor: 14,497 bytes, lines 21298-21752
21298dule",{value:!0})} else {delete t.default}});
21299
21300
21301/*SIGUIENTE LIBRERIA*/
21302(function (global, factory) {
21303	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
21304	typeof define === 'function' && define.amd ? define(['exports'], factory) :
21305	(global = global || self, factory(global.window = global.window || {}));
21306}(this, (function (exports) { 'use strict';
21307
21308	/*!
21309	 * PixiPlugin 3.7.0
21310	 * https://greensock.com
21311	 *
21312	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
21313	 * Subject to the terms at https://greensock.com/standard-license or for
21314	 * Club GreenSock members, the agreement issued with that membership.
21315	 * @author: Jack Doyle, [email protected]
21316	*/
21317	var gsap,
21318	    _win,
21319	    _splitColor,
21320	    _coreInitted,
21321	    _PIXI,
21322	    PropTween,
21323	    _getSetter,
21324	    _windowExists = function _windowExists() {
21325	  return typeof window !== "undefined";
21326	},
21327	    _getGSAP = function _getGSAP() {
21328	  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;
21329	},
21330	    _isFunction = function _isFunction(value) {
21331	  return typeof value === "function";
21332	},
21333	    _warn = function _warn(message) {
21334	  return console.warn(message);
21335	},
21336	    _idMatrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
21337	    _lumR = 0.212671,
21338	    _lumG = 0.715160,
21339	    _lumB = 0.072169,
21340	    _applyMatrix = function _applyMatrix(m, m2) {
21341	  var temp = [],
21342	      i = 0,
21343	      z = 0,
21344	      y,
21345	      x;
21346
21347	  for (y = 0; y < 4; y++) {
21348	    for (x = 0; x < 5; x++) {
21349	      z = x === 4 ? m[i + 4] : 0;
21350	      temp[i + x] = m[i] * m2[x] + m[i + 1] * m2[x + 5] + m[i + 2] * m2[x + 10] + m[i + 3] * m2[x + 15] + z;
21351	    }
21352
21353	    i += 5;
21354	  }
21355
21356	  return temp;
21357	},
21358	    _setSaturation = function _setSaturation(m, n) {
21359	  var inv = 1 - n,
21360	      r = inv * _lumR,
21361	      g = inv * _lumG,
21362	      b = inv * _lumB;
21363	  return _applyMatrix([r + n, g, b, 0, 0, r, g + n, b, 0, 0, r, g, b + n, 0, 0, 0, 0, 0, 1, 0], m);
21364	},
21365	    _colorize = function _colorize(m, color, amount) {
21366	  var c = _splitColor(color),
21367	      r = c[0] / 255,
21368	      g = c[1] / 255,
21369	      b = c[2] / 255,
21370	      inv = 1 - amount;
21371
21372	  return _applyMatrix([inv + amount * r * _lumR, amount * r * _lumG, amount * r * _lumB, 0, 0, amount * g * _lumR, inv + amount * g * _lumG, amount * g * _lumB, 0, 0, amount * b * _lumR, amount * b * _lumG, inv + amount * b * _lumB, 0, 0, 0, 0, 0, 1, 0], m);
21373	},
21374	    _setHue = function _setHue(m, n) {
21375	  n *= Math.PI / 180;
21376	  var c = Math.cos(n),
21377	      s = Math.sin(n);
21378	  return _applyMatrix([_lumR + c * (1 - _lumR) + s * -_lumR, _lumG + c * -_lumG + s * -_lumG, _lumB + c * -_lumB + s * (1 - _lumB), 0, 0, _lumR + c * -_lumR + s * 0.143, _lumG + c * (1 - _lumG) + s * 0.14, _lumB + c * -_lumB + s * -0.283, 0, 0, _lumR + c * -_lumR + s * -(1 - _lumR), _lumG + c * -_lumG + s * _lumG, _lumB + c * (1 - _lumB) + s * _lumB, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], m);
21379	},
21380	    _setContrast = function _setContrast(m, n) {
21381	  return _applyMatrix([n, 0, 0, 0, 0.5 * (1 - n), 0, n, 0, 0, 0.5 * (1 - n), 0, 0, n, 0, 0.5 * (1 - n), 0, 0, 0, 1, 0], m);
21382	},
21383	    _getFilter = function _getFilter(target, type) {
21384	  var filterClass = _PIXI.filters[type],
21385	      filters = target.filters || [],
21386	      i = filters.length,
21387	      filter;
21388
21389	  if (!filterClass) {
21390	    _warn(type + " not found. PixiPlugin.registerPIXI(PIXI)");
21391	  }
21392
21393	  while (--i > -1) {
21394	    if (filters[i] instanceof filterClass) {
21395	      return filters[i];
21396	    }
21397	  }
21398
21399	  filter = new filterClass();
21400
21401	  if (type === "BlurFilter") {
21402	    filter.blur = 0;
21403	  }
21404
21405	  filters.push(filter);
21406	  target.filters = filters;
21407	  return filter;
21408	},
21409	    _addColorMatrixFilterCacheTween = function _addColorMatrixFilterCacheTween(p, plugin, cache, vars) {
21410	  plugin.add(cache, p, cache[p], vars[p]);
21411
21412	  plugin._props.push(p);
21413	},
21414	    _applyBrightnessToMatrix = function _applyBrightnessToMatrix(brightness, matrix) {
21415	  var temp = new _PIXI.filters.ColorMatrixFilter();
21416	  temp.matrix = matrix;
21417	  temp.brightness(brightness, true);
21418	  return temp.matrix;
21419	},
21420	    _copy = function _copy(obj) {
21421	  var copy = {},
21422	      p;
21423
21424	  for (p in obj) {
21425	    copy[p] = obj[p];
21426	  }
21427
21428	  return copy;
21429	},
21430	    _CMFdefaults = {
21431	  contrast: 1,
21432	  saturation: 1,
21433	  colorizeAmount: 0,
21434	  colorize: "rgb(255,255,255)",
21435	  hue: 0,
21436	  brightness: 1
21437	},
21438	    _parseColorMatrixFilter = function _parseColorMatrixFilter(target, v, pg) {
21439	  var filter = _getFilter(target, "ColorMatrixFilter"),
21440	      cache = target._gsColorMatrixFilter = target._gsColorMatrixFilter || _copy(_CMFdefaults),
21441	      combine = v.combineCMF && !("colorMatrixFilter" in v && !v.colorMatrixFilter),
21442	      i,
21443	      matrix,
21444	      startMatrix;
21445
21446	  startMatrix = filter.matrix;
21447
21448	  if (v.resolution) {
21449	    filter.resolution = v.resolution;
21450	  }
21451
21452	  if (v.matrix && v.matrix.length === startMatrix.length) {
21453	    matrix = v.matrix;
21454
21455	    if (cache.contrast !== 1) {
21456	      _addColorMatrixFilterCacheTween("contrast", pg, cache, _CMFdefaults);
21457	    }
21458
21459	    if (cache.hue) {
21460	      _addColorMatrixFilterCacheTween("hue", pg, cache, _CMFdefaults);
21461	    }
21462
21463	    if (cache.brightness !== 1) {
21464	      _addColorMatrixFilterCacheTween("brightness", pg, cache, _CMFdefaults);
21465	    }
21466
21467	    if (cache.colorizeAmount) {
21468	      _addColorMatrixFilterCacheTween("colorize", pg, cache, _CMFdefaults);
21469
21470	      _addColorMatrixFilterCacheTween("colorizeAmount", pg, cache, _CMFdefaults);
21471	    }
21472
21473	    if (cache.saturation !== 1) {
21474	      _addColorMatrixFilterCacheTween("saturation", pg, cache, _CMFdefaults);
21475	    }
21476	  } else {
21477	    matrix = _idMatrix.slice();
21478
21479	    if (v.contrast != null) {
21480	      matrix = _setContrast(matrix, +v.contrast);
21481
21482	      _addColorMatrixFilterCacheTween("contrast", pg, cache, v);
21483	    } else if (cache.contrast !== 1) {
21484	      if (combine) {
21485	        matrix = _setContrast(matrix, cache.contrast);
21486	      } else {
21487	        _addColorMatrixFilterCacheTween("contrast", pg, cache, _CMFdefaults);
21488	      }
21489	    }
21490
21491	    if (v.hue != null) {
21492	      matrix = _setHue(matrix, +v.hue);
21493
21494	      _addColorMatrixFilterCacheTween("hue", pg, cache, v);
21495	    } else if (cache.hue) {
21496	      if (combine) {
21497	        matrix = _setHue(matrix, cache.hue);
21498	      } else {
21499	        _addColorMatrixFilterCacheTween("hue", pg, cache, _CMFdefaults);
21500	      }
21501	    }
21502
21503	    if (v.brightness != null) {
21504	      matrix = _applyBrightnessToMatrix(+v.brightness, matrix);
21505
21506	      _addColorMatrixFilterCacheTween("brightness", pg, cache, v);
21507	    } else if (cache.brightness !== 1) {
21508	      if (combine) {
21509	        matrix = _applyBrightnessToMatrix(cache.brightness, matrix);
21510	      } else {
21511	        _addColorMatrixFilterCacheTween("brightness", pg, cache, _CMFdefaults);
21512	      }
21513	    }
21514
21515	    if (v.colorize != null) {
21516	      v.colorizeAmount = "colorizeAmount" in v ? +v.colorizeAmount : 1;
21517	      matrix = _colorize(matrix, v.colorize, v.colorizeAmount);
21518
21519	      _addColorMatrixFilterCacheTween("colorize", pg, cache, v);
21520
21521	      _addColorMatrixFilterCacheTween("colorizeAmount", pg, cache, v);
21522	    } else if (cache.colorizeAmount) {
21523	      if (combine) {
21524	        matrix = _colorize(matrix, cache.colorize, cache.colorizeAmount);
21525	      } else {
21526	        _addColorMatrixFilterCacheTween("colorize", pg, cache, _CMFdefaults);
21527
21528	        _addColorMatrixFilterCacheTween("colorizeAmount", pg, cache, _CMFdefaults);
21529	      }
21530	    }
21531
21532	    if (v.saturation != null) {
21533	      matrix = _setSaturation(matrix, +v.saturation);
21534
21535	      _addColorMatrixFilterCacheTween("saturation", pg, cache, v);
21536	    } else if (cache.saturation !== 1) {
21537	      if (combine) {
21538	        matrix = _setSaturation(matrix, cache.saturation);
21539	      } else {
21540	        _addColorMatrixFilterCacheTween("saturation", pg, cache, _CMFdefaults);
21541	      }
21542	    }
21543	  }
21544
21545	  i = matrix.length;
21546
21547	  while (--i > -1) {
21548	    if (matrix[i] !== startMatrix[i]) {
21549	      pg.add(startMatrix, i, startMatrix[i], matrix[i], "colorMatrixFilter");
21550	    }
21551	  }
21552
21553	  pg._props.push("colorMatrixFilter");
21554	},
21555	    _renderColor = function _renderColor(ratio, _ref) {
21556	  var t = _ref.t,
21557	      p = _ref.p,
21558	      color = _ref.color,
21559	      set = _ref.set;
21560	  set(t, p, color[0] << 16 | color[1] << 8 | color[2]);
21561	},
21562	    _renderDirtyCache = function _renderDirtyCache(ratio, _ref2) {
21563	  var g = _ref2.g;
21564
21565	  if (g) {
21566	    g.dirty++;
21567	    g.clearDirty++;
21568	  }
21569	},
21570	    _renderAutoAlpha = function _renderAutoAlpha(ratio, data) {
21571	  data.t.visible = !!data.t.alpha;
21572	},
21573	    _addColorTween = function _addColorTween(target, p, value, plugin) {
21574	  var currentValue = target[p],
21575	      startColor = _splitColor(_isFunction(currentValue) ? target[p.indexOf("set") || !_isFunction(target["get" + p.substr(3)]) ? p : "get" + p.substr(3)]() : currentValue),
21576	      endColor = _splitColor(value);
21577
21578	  plugin._pt = new PropTween(plugin._pt, target, p, 0, 0, _renderColor, {
21579	    t: target,
21580	    p: p,
21581	    color: startColor,
21582	    set: _getSetter(target, p)
21583	  });
21584	  plugin.add(startColor, 0, startColor[0], endColor[0]);
21585	  plugin.add(startColor, 1, startColor[1], endColor[1]);
21586	  plugin.add(startColor, 2, startColor[2], endColor[2]);
21587	},
21588	    _colorProps = {
21589	  tint: 1,
21590	  lineColor: 1,
21591	  fillColor: 1
21592	},
21593	    _xyContexts = "position,scale,skew,pivot,anchor,tilePosition,tileScale".split(","),
21594	    _contexts = {
21595	  x: "position",
21596	  y: "position",
21597	  tileX: "tilePosition",
21598	  tileY: "tilePosition"
21599	},
21600	    _colorMatrixFilterProps = {
21601	  colorMatrixFilter: 1,
21602	  saturation: 1,
21603	  contrast: 1,
21604	  hue: 1,
21605	  colorize: 1,
21606	  colorizeAmount: 1,
21607	  brightness: 1,
21608	  combineCMF: 1
21609	},
21610	    _DEG2RAD = Math.PI / 180,
21611	    _isString = function _isString(value) {
21612	  return typeof value === "string";
21613	},
21614	    _degreesToRadians = function _degreesToRadians(value) {
21615	  return _isString(value) && value.charAt(1) === "=" ? value.substr(0, 2) + parseFloat(value.substr(2)) * _DEG2RAD : value * _DEG2RAD;
21616	},
21617	    _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {
21618	  return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 100000) / 100000, data);
21619	},
21620	    _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue, radians) {
21621	  var cap = 360 * (radians ? _DEG2RAD : 1),
21622	      isString = _isString(endValue),
21623	      relative = isString && endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0,
21624	      endNum = parseFloat(relative ? endValue.substr(2) : endValue) * (radians ? _DEG2RAD : 1),
21625	      change = relative ? endNum * relative : endNum - startNum,
21626	      finalValue = startNum + change,
21627	      direction,
21628	      pt;
21629
21630	  if (isString) {
21631	    direction = endValue.split("_")[1];
21632
21633	    if (direction === "short") {
21634	      change %= cap;
21635
21636	      if (change !== change % (cap / 2)) {
21637	        change += change < 0 ? cap : -cap;
21638	      }
21639	    }
21640
21641	    if (direction === "cw" && change < 0) {
21642	      change = (change + cap * 1e10) % cap - ~~(change / cap) * cap;
21643	    } else if (direction === "ccw" && change > 0) {
21644	      change = (change - cap * 1e10) % cap - ~~(change / cap) * cap;
21645	    }
21646	  }
21647
21648	  plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);
21649	  pt.e = finalValue;
21650	  return pt;
21651	},
21652	    _initCore = function _initCore() {
21653	  if (_windowExists()) {
21654	    _win = window;
21655	    gsap = _coreInitted = _getGSAP();
21656	    _PIXI = _PIXI || _win.PIXI;
21657
21658	    _splitColor = function _splitColor(color) {
21659	      return gsap.utils.splitColor((color + "").substr(0, 2) === "0x" ? "#" + color.substr(2) : color);
21660	    };
21661	  }
21662	},
21663	    i,
21664	    p;
21665
21666	for (i = 0; i < _xyContexts.length; i++) {
21667	  p = _xyContexts[i];
21668	  _contexts[p + "X"] = p;
21669	  _contexts[p + "Y"] = p;
21670	}
21671
21672	var PixiPlugin = {
21673	  version: "3.7.0",
21674	  name: "pixi",
21675	  register: function register(core, Plugin, propTween) {
21676	    gsap = core;
21677	    PropTween = propTween;
21678	    _getSetter = Plugin.getSetter;
21679
21680	    _initCore();
21681	  },
21682	  registerPIXI: function registerPIXI(pixi) {
21683	    _PIXI = pixi;
21684	  },
21685	  init: function init(target, values, tween, index, targets) {
21686	    if (!_PIXI) {
21687	      _initCore();
21688	    }
21689
21690	    if (!target instanceof _PIXI.DisplayObject) {
21691	      return false;
21692	    }
21693
21694	    var isV4 = _PIXI.VERSION.charAt(0) === "4",
21695	        context,
21696	        axis,
21697	        value,
21698	        colorMatrix,
21699	        filter,
21700	        p,
21701	        padding,
21702	        i,
21703	        data;
21704
21705	    for (p in values) {
21706	      context = _contexts[p];
21707	      value = values[p];
21708
21709	      if (context) {
21710	        axis = ~p.charAt(p.length - 1).toLowerCase().indexOf("x") ? "x" : "y";
21711	        this.add(target[context], axis, target[context][axis], context === "skew" ? _degreesToRadians(value) : value);
21712	      } else if (p === "scale" || p === "anchor" || p === "pivot" || p === "tileScale") {
21713	        this.add(target[p], "x", target[p].x, value);
21714	        this.add(target[p], "y", target[p].y, value);
21715	      } else if (p === "rotation" || p === "angle") {
21716	        _addRotationalPropTween(this, target, p, target[p], value, p === "rotation");
21717	      } else if (_colorMatrixFilterProps[p]) {
21718	        if (!colorMatrix) {
21719	          _parseColorMatrixFilter(target, values.colorMatrixFilter || values, this);
21720
21721	          colorMatrix = true;
21722	        }
21723	      } else if (p === "blur" || p === "blurX" || p === "blurY" || p === "blurPadding") {
21724	        filter = _getFilter(target, "BlurFilter");
21725	        this.add(filter, p, filter[p], value);
21726
21727	        if (values.blurPadding !== 0) {
21728	          padding = values.blurPadding || Math.max(filter[p], value) * 2;
21729	          i = target.filters.length;
21730
21731	          while (--i > -1) {
21732	            target.filters[i].padding = Math.max(target.filters[i].padding, padding);
21733	          }
21734	        }
21735	      } else if (_colorProps[p]) {
21736	        if ((p === "lineColor" || p === "fillColor") && target instanceof _PIXI.Graphics) {
21737	          data = (target.geometry || target).graphicsData;
21738	          this._pt = new PropTween(this._pt, target, p, 0, 0, _renderDirtyCache, {
21739	            g: target.geometry || target
21740	          });
21741	          i = data.length;
21742
21743	          while (--i > -1) {
21744	            _addColorTween(isV4 ? data[i] : data[i][p.substr(0, 4) + "Style"], isV4 ? p : "color", value, this);
21745	          }
21746	        } else {
21747	          _addColorTween(target, p, value, this);
21748	        }
21749	      } else if (p === "autoAlpha") {
21750	        this._pt = new PropTween(this._pt, target, "visible", 0, 0, _renderAutoAlpha);
21751	        this.add(target, "alpha", target.alpha, value);
21752
vendor: 4,392 bytes, lines 21753-21781
21753	        this._props.push("alpha", "visible");
21754	      } else if (p !== "resolution") {
21755	        this.add(target, p, "get", value);
21756	      }
21757
21758	      this._props.push(p);
21759	    }
21760	  }
21761	};
21762	_getGSAP() && gsap.registerPlugin(PixiPlugin);
21763
21764	exports.PixiPlugin = PixiPlugin;
21765	exports.default = PixiPlugin;
21766
21767	Object.defineProperty(exports, '__esModule', { value: true });
21768
21769})));
21770
21771/*SIGUIENTE LIBRERIA*/
21772/*!
21773 * PixiPlugin 3.7.0
21774 * https://greensock.com
21775 * 
21776 * @license Copyright 2021, GreenSock. All rights reserved.
21777 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
21778 * @author: Jack Doyle, [email protected]
21779 */
21780
21781!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((t=t||self).window=t.window||{})}(this,function(r){"use strict";function k(){return"undefined"!=typeof window}function l(){return o||k()&&(o=window.gsap)&&o.registerPlugin&&o}function m(t){return"function"==typeof t}function s(t,r){var i,o,e=[],n=0,s=0;for(i=0;i<4;i++){for(o=0;o<5;o++)s=4===o?t[n+4]:0,e[n+o]=t[n]*r[o]+t[n+1]*r[o+5]+t[n+2]*r[o+10]+t[n+3]*r[o+15]+s;n+=5}return e}function t(t,r){var i=1-r,o=i*p,e=i*g,n=i*b;return s([o+r,e,n,0,0,o,e+r,n,0,0,o,e,n+r,0,0,0,0,0,1,0],t)}function u(t,r,i){var o=c(r),e=o[0]/255,n=o[1]/255,l=o[2]/255,a=1-i;return s([a+i*e*p,i*e*g,i*e*b,0,0,i*n*p,a+i*n*g,i*n*b,0,0,i*l*p,i*l*g,a+i*l*b,0,0,0,0,0,1,0],t)}function v(t,r){r*=Math.PI/180;var i=Math.cos(r),o=Math.sin(r);return s([p+i*(1-p)+o*-p,g+i*-g+o*-g,b+i*-b+o*(1-b),0,0,p+i*-p+.143*o,g+i*(1-g)+.14*o,b+i*-b+-.283*o,0,0,p+i*-p+o*-(1-p),g+i*-g+o*g,b+i*(1-b)+o*b,0,0,0,0,0,1,0,0,0,0,0,1],t)}function w(t,r){return s([r,0,0,0,.5*(1-r),0,r,0,0,.5*(1-r),0,0,r,0,.5*(1-r),0,0,0,1,0],t)}function x(t,r){var i,o=h.filters[r],e=t.filters||[],n=e.length;for(o||function _warn(t){console.warn(t)}(r+" not found. PixiPlugin.registerPIXI(PIXI)");-1<--n;)if(e[n]instanceof o)return e[n];return i=new o,"BlurFilter"===r&&(i.blur=0),e.push(i),t.filters=e,i}function y(t,r,i,o){r.add(i,t,i[t],o[t]),r._props.push(t)}function z(t,r){var i=new h.filters.ColorMatrixFilter;return i.matrix=r,i.brightness(t,!0),i.matrix}function C(r,i,o){var e,n,s,l=x(r,"ColorMatrixFilter"),a=r._gsColorMatrixFilter=r._gsColorMatrixFilter||function _copy(t){var r,i={};for(r in t)i[r]=t[r];return i}(_),c=i.combineCMF&&!("colorMatrixFilter"in i&&!i.colorMatrixFilter);s=l.matrix,i.resolution&&(l.resolution=i.resolution),i.matrix&&i.matrix.length===s.length?(n=i.matrix,1!==a.contrast&&y("contrast",o,a,_),a.hue&&y("hue",o,a,_),1!==a.brightness&&y("brightness",o,a,_),a.colorizeAmount&&(y("colorize",o,a,_),y("colorizeAmount",o,a,_)),1!==a.saturation&&y("saturation",o,a,_)):(n=f.slice(),null!=i.contrast?(n=w(n,+i.contrast),y("contrast",o,a,i)):1!==a.contrast&&(c?n=w(n,a.contrast):y("contrast",o,a,_)),null!=i.hue?(n=v(n,+i.hue),y("hue",o,a,i)):a.hue&&(c?n=v(n,a.hue):y("hue",o,a,_)),null!=i.brightness?(n=z(+i.brightness,n),y("brightness",o,a,i)):1!==a.brightness&&(c?n=z(a.brightness,n):y("brightness",o,a,_)),null!=i.colorize?(i.colorizeAmount="colorizeAmount"in i?+i.colorizeAmount:1,n=u(n,i.colorize,i.colorizeAmount),y("colorize",o,a,i),y("colorizeAmount",o,a,i)):a.colorizeAmount&&(c?n=u(n,a.colorize,a.colorizeAmount):(y("colorize",o,a,_),y("colorizeAmount",o,a,_))),null!=i.saturation?(n=t(n,+i.saturation),y("saturation",o,a,i)):1!==a.saturation&&(c?n=t(n,a.saturation):y("saturation",o,a,_))),e=n.length;for(;-1<--e;)n[e]!==s[e]&&o.add(s,e,s[e],n[e],"colorMatrixFilter");o._props.push("colorMatrixFilter")}function D(t,r){var i=r.t,o=r.p,e=r.color;(0,r.set)(i,o,e[0]<<16|e[1]<<8|e[2])}function E(t,r){var i=r.g;i&&(i.dirty++,i.clearDirty++)}function F(t,r){r.t.visible=!!r.t.alpha}function G(t,r,i,o){var e=t[r],n=c(m(e)?t[r.indexOf("set")||!m(t["get"+r.substr(3)])?r:"get"+r.substr(3)]():e),s=c(i);o._pt=new d(o._pt,t,r,0,0,D,{t:t,p:r,color:n,set:a(t,r)}),o.add(n,0,n[0],s[0]),o.add(n,1,n[1],s[1]),o.add(n,2,n[2],s[2])}function M(t){return"string"==typeof t}function N(t){return M(t)&&"="===t.charAt(1)?t.substr(0,2)+parseFloat(t.substr(2))*j:t*j}function O(t,r){return r.set(r.t,r.p,1===t?r.e:Math.round(1e5*(r.s+r.c*t))/1e5,r)}function P(t,r,i,o,e,n){var s,l,a=360*(n?j:1),u=M(e),c=u&&"="===e.charAt(1)?+(e.charAt(0)+"1"):0,f=parseFloat(c?e.substr(2):e)*(n?j:1),h=c?f*c:f-o,p=o+
21781h;return u&&("short"===(s=e.split("_")[1])&&(h%=a)!==h%(a/2)&&(h+=h<0?a:-a),"cw"===s&&h<0?h=(h+1e10*a)%a-~~(h/a)*a:"ccw"===s&&0<h&&(h=(h-1e10*a)%a-~~(h/a)*a)),t._pt=l=new d(t._pt,r,i,o,h,O),l.e=p,l}function Q(){k()&&(i=window,o=l(),h=h||i.PIXI,c=function _splitColor(t){return o.utils.splitColor("0x"===(t+"").substr(0,2)?"#"+t.substr(2):t)})}var o,i,c,h,d,a,e,n,f=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],p=.212671,g=.71516,b=.072169,_={contrast:1,saturation:1,colorizeAmount:0,colorize:"rgb(255,255,255)",hue:0,brightness:1},A={tint:1,lineColor:1,fillColor:1},I="position,scale,skew,pivot,anchor,tilePosition,tileScale".split(","),X={x:"position",y:"position",tileX:"tilePosition",tileY:"tilePosition"},S={colorMatrixFilter:1,saturation:1,contrast:1,hue:1,colorize:1,colorizeAmount:1,brightness:1,combineCMF:1},j=Math.PI/180;for(e=0;e<I.length;e++)n=I[e],X[n+"X"]=n,X[n+"Y"]=n;var Y={version:"3.7.0",name:"pixi",register:function register(t,r,i){o=t,d=i,a=r.getSetter,Q()},registerPIXI:function registerPIXI(t){h=t},init:function init(t,r){if(h||Q(),!t instanceof h.DisplayObject)return!1;var i,o,e,n,s,l,a,u,c,f="4"===h.VERSION.charAt(0);for(l in r){if(i=X[l],e=r[l],i)o=~l.charAt(l.length-1).toLowerCase().indexOf("x")?"x":"y",this.add(t[i],o,t[i][o],"skew"===i?N(e):e);else if("scale"===l||"anchor"===l||"pivot"===l||"tileScale"===l)this.add(t[l],"x",t[l].x,e),this.add(t[l],"y",t[l].y,e);else if("rotation"===l||"angle"===l)P(this,t,l,t[l],e,"rotation"===l);else if(S[l])n||(C(t,r.colorMatrixFilter||r,this),n=!0);else if("blur"===l||"blurX"===l||"blurY"===l||"blurPadding"===l){if(s=x(t,"BlurFilter"),this.add(s,l,s[l],e),0!==r.blurPadding)for(a=r.blurPadding||2*Math.max(s[l],e),u=t.filters.length;-1<--u;)t.filters[u].padding=Math.max(t.filters[u].padding,a)}else if(A[l])if(("lineColor"===l||"fillColor"===l)&&t instanceof h.Graphics)for(c=(t.geometry||t).graphicsData,this._pt=new d(this._pt,t,l,0,0,E,{g:t.geometry||t}),u=c.length;-1<--u;)G(f?c[u]:c[u][l.substr(0,4)+"Style"],f?l:"color",e,this);else G(t,l,e,this);else"autoAlpha"===l?(this._pt=new d(this._pt,t,"visible",0,0,F),this.add(t,"alpha",t.alpha,e),this._props.push("alph
vendor: 5,667 bytes, lines 21781-21952
21781a","visible")):"resolution"!==l&&this.add(t,l,"get",e);this._props.push(l)}}};l()&&o.registerPlugin(Y),r.PixiPlugin=Y,r.default=Y;if (typeof(window)==="undefined"||window!==r){Object.defineProperty(r,"__esModule",{value:!0})} else {delete r.default}});
21782
21783
21784/*SIGUIENTE LIBRERIA*/
21785(function (global, factory) {
21786	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
21787	typeof define === 'function' && define.amd ? define(['exports'], factory) :
21788	(global = global || self, factory(global.window = global.window || {}));
21789}(this, (function (exports) { 'use strict';
21790
21791	/*!
21792	 * ScrollToPlugin 3.7.0
21793	 * https://greensock.com
21794	 *
21795	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
21796	 * Subject to the terms at https://greensock.com/standard-license or for
21797	 * Club GreenSock members, the agreement issued with that membership.
21798	 * @author: Jack Doyle, [email protected]
21799	*/
21800	var gsap,
21801	    _coreInitted,
21802	    _window,
21803	    _docEl,
21804	    _body,
21805	    _toArray,
21806	    _config,
21807	    _windowExists = function _windowExists() {
21808	  return typeof window !== "undefined";
21809	},
21810	    _getGSAP = function _getGSAP() {
21811	  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;
21812	},
21813	    _isString = function _isString(value) {
21814	  return typeof value === "string";
21815	},
21816	    _isFunction = function _isFunction(value) {
21817	  return typeof value === "function";
21818	},
21819	    _max = function _max(element, axis) {
21820	  var dim = axis === "x" ? "Width" : "Height",
21821	      scroll = "scroll" + dim,
21822	      client = "client" + dim;
21823	  return element === _window || element === _docEl || element === _body ? Math.max(_docEl[scroll], _body[scroll]) - (_window["inner" + dim] || _docEl[client] || _body[client]) : element[scroll] - element["offset" + dim];
21824	},
21825	    _buildGetter = function _buildGetter(e, axis) {
21826	  var p = "scroll" + (axis === "x" ? "Left" : "Top");
21827
21828	  if (e === _window) {
21829	    if (e.pageXOffset != null) {
21830	      p = "page" + axis.toUpperCase() + "Offset";
21831	    } else {
21832	      e = _docEl[p] != null ? _docEl : _body;
21833	    }
21834	  }
21835
21836	  return function () {
21837	    return e[p];
21838	  };
21839	},
21840	    _clean = function _clean(value, index, target, targets) {
21841	  _isFunction(value) && (value = value(index, target, targets));
21842
21843	  if (typeof value !== "object") {
21844	    return _isString(value) && value !== "max" && value.charAt(1) !== "=" ? {
21845	      x: value,
21846	      y: value
21847	    } : {
21848	      y: value
21849	    };
21850	  } else if (value.nodeType) {
21851	    return {
21852	      y: value,
21853	      x: value
21854	    };
21855	  } else {
21856	    var result = {},
21857	        p;
21858
21859	    for (p in value) {
21860	      result[p] = p !== "onAutoKill" && _isFunction(value[p]) ? value[p](index, target, targets) : value[p];
21861	    }
21862
21863	    return result;
21864	  }
21865	},
21866	    _getOffset = function _getOffset(element, container) {
21867	  element = _toArray(element)[0];
21868
21869	  if (!element || !element.getBoundingClientRect) {
21870	    return console.warn("scrollTo target doesn't exist. Using 0") || {
21871	      x: 0,
21872	      y: 0
21873	    };
21874	  }
21875
21876	  var rect = element.getBoundingClientRect(),
21877	      isRoot = !container || container === _window || container === _body,
21878	      cRect = isRoot ? {
21879	    top: _docEl.clientTop - (_window.pageYOffset || _docEl.scrollTop || _body.scrollTop || 0),
21880	    left: _docEl.clientLeft - (_window.pageXOffset || _docEl.scrollLeft || _body.scrollLeft || 0)
21881	  } : container.getBoundingClientRect(),
21882	      offsets = {
21883	    x: rect.left - cRect.left,
21884	    y: rect.top - cRect.top
21885	  };
21886
21887	  if (!isRoot && container) {
21888	    offsets.x += _buildGetter(container, "x")();
21889	    offsets.y += _buildGetter(container, "y")();
21890	  }
21891
21892	  return offsets;
21893	},
21894	    _parseVal = function _parseVal(value, target, axis, currentVal, offset) {
21895	  return !isNaN(value) && typeof value !== "object" ? parseFloat(value) - offset : _isString(value) && value.charAt(1) === "=" ? parseFloat(value.substr(2)) * (value.charAt(0) === "-" ? -1 : 1) + currentVal - offset : value === "max" ? _max(target, axis) - offset : Math.min(_max(target, axis), _getOffset(value, target)[axis] - offset);
21896	},
21897	    _initCore = function _initCore() {
21898	  gsap = _getGSAP();
21899
21900	  if (_windowExists() && gsap && document.body) {
21901	    _window = window;
21902	    _body = document.body;
21903	    _docEl = document.documentElement;
21904	    _toArray = gsap.utils.toArray;
21905	    gsap.config({
21906	      autoKillThreshold: 7
21907	    });
21908	    _config = gsap.config();
21909	    _coreInitted = 1;
21910	  }
21911	};
21912
21913	var ScrollToPlugin = {
21914	  version: "3.7.0",
21915	  name: "scrollTo",
21916	  rawVars: 1,
21917	  register: function register(core) {
21918	    gsap = core;
21919
21920	    _initCore();
21921	  },
21922	  init: function init(target, value, tween, index, targets) {
21923	    _coreInitted || _initCore();
21924	    var data = this,
21925	        snapType = gsap.getProperty(target, "scrollSnapType");
21926	    data.isWin = target === _window;
21927	    data.target = target;
21928	    data.tween = tween;
21929	    value = _clean(value, index, target, targets);
21930	    data.vars = value;
21931	    data.autoKill = !!value.autoKill;
21932	    data.getX = _buildGetter(target, "x");
21933	    data.getY = _buildGetter(target, "y");
21934	    data.x = data.xPrev = data.getX();
21935	    data.y = data.yPrev = data.getY();
21936
21937	    if (snapType && snapType !== "none") {
21938	      data.snap = 1;
21939	      data.snapInline = target.style.scrollSnapType;
21940	      target.style.scrollSnapType = "none";
21941	    }
21942
21943	    if (value.x != null) {
21944	      data.add(data, "x", data.x, _parseVal(value.x, target, "x", data.x, value.offsetX || 0), index, targets);
21945
21946	      data._props.push("scrollTo_x");
21947	    } else {
21948	      data.skipX = 1;
21949	    }
21950
21951	    if (value.y != null) {
21952	      data.add(data, "y", data.y, _parseVal(value.y, target, "y", data.y, value.offsetY || 0
21952), index, targets);
21953
21954	      data._props.push("scrollTo_y");
21955	    } else {
21956	      data.skipY = 1;
21957	    }
21958	  },
21959	  render: function render(ratio, data) {
21960	    var pt = data._pt,
21961	        target = data.target,
21962	        tween = data.tween,
21963	        autoKill = data.autoKill,
21964	        xPrev = data.xPrev,
21965	        yPrev = data.yPrev,
21966	        isWin = data.isWin,
21967	        snap = data.snap,
21968	        snapInline = data.snapInline,
21969	        x,
21970	        y,
21971	        yDif,
21972	        xDif,
21973	        threshold;
21974
21975	    while (pt) {
21976	      pt.r(ratio, pt.d);
21977	      pt = pt._next;
21978	    }
21979
21980	    x = isWin || !data.skipX ? data.getX() : xPrev;
21981	    y = isWin || !data.skipY ? data.getY() : yPrev;
21982	    yDif = y - yPrev;
21983	    xDif = x - xPrev;
21984	    threshold = _config.autoKillThreshold;
21985
21986	    if (data.x < 0) {
21987	      data.x = 0;
21988	    }
21989
21990	    if (data.y < 0) {
21991	      data.y = 0;
21992	    }
21993
21994	    if (autoKill) {
21995	      if (!data.skipX && (xDif > threshold || xDif < -threshold) && x < _max(target, "x")) {
21996	        data.skipX = 1;
21997	      }
21998
21999	      if (!data.skipY && (yDif > threshold || yDif < -threshold) && y < _max(target, "y")) {
22000	        data.skipY = 1;
22001	      }
22002
22003	      if (data.skipX && data.skipY) {
22004	        tween.kill();
22005	        data.vars.onAutoKill && data.vars.onAutoKill.apply(tween, data.vars.onAutoKillParams || []);
22006	      }
22007	    }
22008
22009	    if (isWin) {
22010	      _window.scrollTo(!data.skipX ? data.x : x, !data.skipY ? data.y : y);
22011	    } else {
22012	      data.skipY || (target.scrollTop = data.y);
22013	      data.skipX || (target.scrollLeft = data.x);
22014	    }
22015
22016	    if (snap && (ratio === 1 || ratio === 0)) {
22017	      y = target.scrollTop;
22018	      x = target.scrollLeft;
22019	      snapInline ? target.style.scrollSnapType = snapInline : target.style.removeProperty("scroll-snap-type");
22020	      target.scrollTop = y + 1;
22021	      target.scrollLeft = x + 1;
22022	      target.scrollTop = y;
22023	      target.scrollLeft = x;
22024	    }
22025
22026	    data.xPrev = data.x;
22027	    data.yPrev = data.y;
22028	  },
22029	  kill: function kill(property) {
22030	    var both = property === "scrollTo";
22031
22032	    if (both || property === "scrollTo_x") {
22033	      this.skipX = 1;
22034	    }
22035
22036	    if (both || property === "scrollTo_y") {
22037	      this.skipY = 1;
22038	    }
22039	  }
22040	};
22041	ScrollToPlugin.max = _max;
22042	ScrollToPlugin.getOffset = _getOffset;
22043	ScrollToPlugin.buildGetter = _buildGetter;
22044	_getGSAP() && gsap.registerPlugin(ScrollToPlugin);
22045
22046	exports.ScrollToPlugin = ScrollToPlugin;
22047	exports.default = ScrollToPlugin;
22048
22049	Object.defineProperty(exports, '__esModule', { value: true });
22050
22051})));
22052
22053/*SIGUIENTE LIBRERIA*/
22054/*!
22055 * ScrollToPlugin 3.7.0
22056 * https://greensock.com
22057 * 
22058 * @license Copyright 2021, GreenSock. All rights reserved.
22059 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
22060 * @author: Jack Doyle, [email protected]
22061 */
22062
22063!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function k(){return"undefined"!=typeof window}function l(){return u||k()&&(u=window.gsap)&&u.registerPlugin&&u}function m(e){return"string"==typeof e}function n(e){return"function"==typeof e}function o(e,t){var o="x"===t?"Width":"Height",n="scroll"+o,r="client"+o;return e===T||e===i||e===c?Math.max(i[n],c[n])-(T["inner"+o]||i[r]||c[r]):e[n]-e["offset"+o]}function p(e,t){var o="scroll"+("x"===t?"Left":"Top");return e===T&&(null!=e.pageXOffset?o="page"+t.toUpperCase()+"Offset":e=null!=i[o]?i:c),function(){return e[o]}}function r(e,t){if(!(e=f(e)[0])||!e.getBoundingClientRect)return console.warn("scrollTo target doesn't exist. Using 0")||{x:0,y:0};var o=e.getBoundingClientRect(),n=!t||t===T||t===c,r=n?{top:i.clientTop-(T.pageYOffset||i.scrollTop||c.scrollTop||0),left:i.clientLeft-(T.pageXOffset||i.scrollLeft||c.scrollLeft||0)}:t.getBoundingClientRect(),l={x:o.left-r.left,y:o.top-r.top};return!n&&t&&(l.x+=p(t,"x")(),l.y+=p(t,"y")()),l}function s(e,t,n,l,i){return isNaN(e)||"object"==typeof e?m(e)&&"="===e.charAt(1)?parseFloat(e.substr(2))*("-"===e.charAt(0)?-1:1)+l-i:"max"===e?o(t,n)-i:Math.min(o(t,n),r(e,t)[n]-i):parseFloat(e)-i}function t(){u=l(),k()&&u&&document.body&&(T=window,c=document.body,i=document.documentElement,f=u.utils.toArray,u.config({autoKillThreshold:7}),v=u.config(),a=1)}var u,a,T,i,c,f,v,y={version:"3.7.0",name:"scrollTo",rawVars:1,register:function register(e){u=e,t()},init:function init(e,o,r,l,i){a||t();var c=this,f=u.getProperty(e,"scrollSnapType");c.isWin=e===T,c.target=e,c.tween=r,o=function _clean(e,t,o,r){if(n(e)&&(e=e(t,o,r)),"object"!=typeof e)return m(e)&&"max"!==e&&"="!==e.charAt(1)?{x:e,y:e}:{y:e};
22063if(e.nodeType)return{y:e,x:e};var l,i={};for(l in e)i[l]="onAutoKill"!==l&&n(e[l])?e[l](t,o,r):e[l];return i}(o,l,e,i),c.vars=o,c.autoKill=!!o.autoKill,c.getX=p(e,"x"),c.getY=p(e,"y"),c.x=c.xPrev=c.getX(),c.y=c.yPrev=c.getY(),f&&"none"!==f&&(c.snap=1,c.snapInline=e.style.scrollSnapType,e.style.scrollSnapType="none"),null!=o.x?(c.add(c,"x",c.x,s(o.x,e,"x",c.x,o.offsetX||0),l,i),c._props.push("scrollTo_x")):c.skipX=1,null!=o.y?(c.add(c,"y",c.y,s(o.y,e,"y",c.y,o.offsetY||0),l,i),c._props.push("scrollTo_y")):c.skipY=1},render:function render(e,t){for(var n,r,l,i,s,p=t._pt,c=t.target,f=t.tween,u=t.autoKill,a=t.xPrev,y=t.yPrev,d=t.isWin,x=t.snap,g=t.snapInline;p;)p.r(e,p.d),p=p._next;n=d||!t.skipX?t.getX():a,l=(r=d||!t.skipY?t.getY():y)-y,i=n-a,s=v.autoKillThreshold,t.x<0&&(t.x=0),t.y<0&&(t.y=0),u&&(!t.skipX&&(s<i||i<-s)&&n<o(c,"x")&&(t.skipX=1),!t.skipY&&(s<l||l<-s)&&r<o(c,"y")&&(t.skipY=1),t.skipX&&t.skipY&&(f.kill(),t.vars.onAutoKill&&t.vars.onAutoKill.apply(f,t.vars.onAutoKillParams||[]))),d?T.scrollTo(t.skipX?n:t.x,t.skipY?r:t.y):(t.skipY||(c.scrollTop=t.y),t.skipX||(c.scrollLeft=t.x)),!x||1!==e&&0!==e||(r=c.scrollTop,n=c.scrollLeft,g?c.style.scrollSnapType=g:c.style.removeProperty("scroll-snap-type"),c.scrollTop=r+1,c.scrollLeft=n+1,c.scrollTop=r,c.scrollLeft=n),t.xPrev=t.x,t.yPrev=t.y},kill:function kill(e){var t="scrollTo"===e;!t&&"scrollTo_x"!==e||(this.skipX=1),!t&&"scrollTo_y"!==e||(this.skipY=1)}};y.max=o,y.getOffset=r,y.buildGetter=p,l()&&u.registerPlugin(y),e.ScrollToPlugin=y,e.default=y;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
22064
22065
22066/*SIGUIENTE LIBRERIA*/
22067(function (global, factory) {
22068	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
22069	typeof define === 'function' && define.amd ? define(['exports'], factory) :
22070	(global = global || self, factory(global.window = global.window || {}));
22071}(this, (function (exports) { 'use strict';
22072
22073	/*!
22074	 * ScrollTrigger 3.7.0
22075	 * https://greensock.com
22076	 *
22077	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
22078	 * Subject to the terms at https://greensock.com/standard-license or for
22079	 * Club GreenSock members, the agreement issued with that membership.
22080	 * @author: Jack Doyle, [email protected]
22081	*/
22082	var gsap,
22083	    _coreInitted,
22084	    _win,
22085	    _doc,
22086	    _docEl,
22087	    _body,
22088	    _root,
22089	    _resizeDelay,
22090	    _raf,
22091	    _request,
22092	    _toArray,
22093	    _clamp,
22094	    _time2,
22095	    _syncInterval,
22096	    _refreshing,
22097	    _pointerIsDown,
22098	    _transformProp,
22099	    _i,
22100	    _prevWidth,
22101	    _prevHeight,
22102	    _autoRefresh,
22103	    _sort,
22104	    _suppressOverwrites,
22105	    _ignoreResize,
22106	    _limitCallbacks,
22107	    _startup = 1,
22108	    _proxies = [],
22109	    _scrollers = [],
22110	    _getTime = Date.now,
22111	    _time1 = _getTime(),
22112	    _lastScrollTime = 0,
22113	    _enabled = 1,
22114	    _passThrough = function _passThrough(v) {
22115	  return v;
22116	},
22117	    _round = function _round(value) {
22118	  return Math.round(value * 100000) / 100000 || 0;
22119	},
22120	    _windowExists = function _windowExists() {
22121	  return typeof window !== "undefined";
22122	},
22123	    _getGSAP = function _getGSAP() {
22124	  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;
22125	},
22126	    _isViewport = function _isViewport(e) {
22127	  return !!~_root.indexOf(e);
22128	},
22129	    _getProxyProp = function _getProxyProp(element, property) {
22130	  return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property];
22131	},
22132	    _getScrollFunc = function _getScrollFunc(element, _ref) {
22133	  var s = _ref.s,
22134	      sc = _ref.sc;
22135
22136	  var i = _scrollers.indexOf(element),
22137	      offset = sc === _vertical.sc ? 1 : 2;
22138
22139	  !~i && (i = _scrollers.push(element) - 1);
22140	  return _scrollers[i + offset] || (_scrollers[i + offset] = _getProxyProp(element, s) || (_isViewport(element) ? sc : function (value) {
22141	    return arguments.length ? element[s] = value : element[s];
22142	  }));
22143	},
22144	    _getBoundsFunc = function _getBoundsFunc(element) {
22145	  return _getProxyProp(element, "getBoundingClientRect") || (_isViewport(element) ? function () {
22146	    _winOffsets.width = _win.innerWidth;
22147	    _winOffsets.height = _win.innerHeight;
22148	    return _winOffsets;
22149	  } : function () {
22150	    return _getBounds(element);
22151	  });
22152	},
22153	    _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref2) {
22154	  var d = _ref2.d,
22155	      d2 = _ref2.d2,
22156	      a = _ref2.a;
22157	  return (a = _getProxyProp(scroller, "getBoundingClientRect")) ? function () {
22158	    return a()[d];
22159	  } : function () {
22160	    return (isViewport ? _win["inner" + d2] : scroller["client" + d2]) || 0;
22161	  };
22162	},
22163	    _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) {
22164	  return !isViewport || ~_proxies.indexOf(element) ? _getBoundsFunc(element) : function () {
22165	    return _winOffsets;
22166	  };
22167	},
22168	    _maxScroll = function _maxScroll(element, _ref3) {
22169	  var s = _ref3.s,
22170	      d2 = _ref3.d2,
22171	      d = _ref3.d,
22172	      a = _ref3.a;
22173	  return (s = "scroll" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? Math.max(_docEl[s], _body[s]) - (_win["inner" + d2] || _docEl["client" + d2] || _body["client" + d2]) : element[s] - element["offset" + d2];
22174	},
22175	    _iterateAutoRefresh = function _iterateAutoRefresh(func, events) {
22176	  for (var i = 0; i < _autoRefresh.length; i += 3) {
22177	    (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);
22178	  }
22179	},
22180	    _isString = function _isString(value) {
22181	  return typeof value === "string";
22182	},
22183	    _isFunction = function _isFunction(value) {
22184	  return typeof value === "function";
22185	},
22186	    _isNumber = function _isNumber(value) {
22187	  return typeof value === "number";
22188	},
22189	    _isObject = function _isObject(value) {
22190	  return typeof value === "object";
22191	},
22192	    _callIfFunc = function _callIfFunc(value) {
22193	  return _isFunction(value) && value();
22194	},
22195	    _combineFunc = function _combineFunc(f1, f2) {
22196	  return function () {
22197	    var result1 = _callIfFunc(f1),
22198	        result2 = _callIfFunc(f2);
22199
22200	    return function () {
22201	      _callIfFunc(result1);
22202
22203	      _callIfFunc(result2);
22204	    };
22205	  };
22206	},
22207	    _abs = Math.abs,
22208	    _scrollLeft = "scrollLeft",
22209	    _scrollTop = "scrollTop",
22210	    _left = "left",
22211	    _top = "top",
22212	    _right = "right",
22213	    _bottom = "bottom",
22214	    _width = "width",
22215	    _height = "height",
22216	    _Right = "Right",
22217	    _Left = "Left",
22218	    _Top = "Top",
22219	    _Bottom = "Bottom",
22220	    _padding = "padding",
22221	    _margin = "margin",
22222	    _Width = "Width",
22223	    _Height = "Height",
22224	    _px = "px",
22225	    _horizontal = {
22226	  s: _scrollLeft,
22227	  p: _left,
22228	  p2: _Left,
22229	  os: _right,
22230	  os2: _Right,
22231	  d: _width,
22232	  d2: _Width,
22233	  a: "x",
22234	  sc: function sc(value) {
22235	    return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0;
22236	  }
22237	},
22238	    _vertical = {
22239	  s: _scrollTop,
22240	  p: _top,
22241	  p2: _Top,
22242	  os: _bottom,
22243	  os2: _Bottom,
22244	  d: _height,
22245	  d2: _Height,
22246	  a: "y",
22247	  op: _horizontal,
22248	  sc: function sc(value) {
22249	    return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0;
22250	  }
22251	},
22252	    _getComputedStyle = function _getComputedStyle(element) {
22253	  return _win.getComputedStyle(element);
22254	},
22255	    _makePositionable = function _makePositionable(element) {
22256	  var position = _getComputedStyle(element).position;
22257
22258	  element.style.position = position === "absolute" || position === "fixed" ? position : "relative";
22259	},
22260	    _setDefaults = function _setDefaults(obj, defaults) {
22261	  for (var p in defaults) {
22262	    p in obj || (obj[p] = defaults[p]);
22263	  }
22264
22265	  return obj;
22266	},
22267	    _getBounds = function _getBounds(element, withoutTransforms) {
22268	  var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== "matrix(1, 0, 0, 1, 0, 0)" && gsap.to(element, {
22269	    x: 0,
22270	    y: 0,
22271	    xPercent: 0,
22272	    yPercent: 0,
22273	    rotation: 0,
22274	    rotationX: 0,
22275	    rotationY: 0,
22276	    scale: 1,
22277	    skewX: 0,
22278	    skewY: 0
22279	  }).progress(1),
22280	      bounds = element.getBoundingClientRect();
22281	  tween && tween.progress(0).kill();
22282	  return bounds;
22283	},
22284	    _getSize = function _getSize(element, _ref4) {
22285	  var d2 = _ref4.d2;
22286	  return element["offset" + d2] || element["client" + d2] || 0;
22287	},
22288	    _getLabelRatioArray = function _getLabelRatioArray(timeline) {
22289	  var a = [],
22290	      labels = timeline.labels,
22291	      duration = timeline.duration(),
22292	      p;
22293
22294	  for (p in labels) {
22295	    a.push(labels[p] / duration);
22296	  }
22297
22298	  return a;
22299	},
22300	    _getClosestLabel = function _getClosestLabel(animation) {
22301	  return function (value) {
22302	    return gsap.utils.snap(_getLabelRatioArray(animation), value);
22303	  };
22304	},
22305	    _getLabelAtDirection = function _getLabelAtDirection(timeline) {
22306	  return function (value, st) {
22307	    var a = _getLabelRatioArray(timeline),
22308	        i;
22309
22310	    a.sort(function (a, b) {
22311	      return a - b;
22312	    });
22313
22314	    if (st.direction > 0) {
22315	      value -= 1e-4;
22316
22317	      for (i = 0; i < a.length; i++) {
22318	        if (a[i] >= value) {
22319	          return a[i];
22320	        }
22321	      }
22322
22323	      return a.pop();
22324	    } else {
22325	      i = a.length;
22326	      value += 1e-4;
22327
22328	      while (i--) {
22329	        if (a[i] <= value) {
22330	          return a[i];
22331	        }
22332	      }
22333	    }
22334
22335	    return a[0];
22336	  };
22337	},
22338	    _multiListener = function _multiListener(func, element, types, callback) {
22339	  return types.split(",").forEach(function (type) {
22340	    return func(element, type, callback);
22341	  });
22342	},
22343	    _addListener = function _addListener(element, type, func) {
22344	  return element.addEventListener(type, func, {
22345	    passive: true
22346	  });
22347	},
22348	    _removeListener = function _removeListener(element, type, func) {
22349	  return element.removeEventListener(type, func);
22350	},
22351	    _markerDefaults = {
22352	  startColor: "green",
22353	  endColor: "red",
22354	  indent: 0,
22355	  fontSize: "16px",
22356	  fontWeight: "normal"
22357	},
22358	    _defaults = {
22359	  toggleActions: "play",
22360	  anticipatePin: 0
22361	},
22362	    _keywords = {
22363	  top: 0,
22364	  left: 0,
22365	  center: 0.5,
22366	  bottom: 1,
22367	  right: 1
22368	},
22369	    _offsetToPx = function _offsetToPx(value, size) {
22370	  if (_isString(value)) {
22371	    var eqIndex = value.indexOf("="),
22372	        relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;
22373
22374	    if (~eqIndex) {
22375	      value.indexOf("%") > eqIndex && (relative *= size / 100);
22376	      value = value.substr(0, eqIndex - 1);
22377	    }
22378
22379	    value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf("%") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);
22380	  }
22381
22382	  return value;
22383	},
22384	    _createMarker = function _createMarker(type, name, container, direction, _ref5, offset, matchWidthEl) {
22385	  var startColor = _ref5.startColor,
22386	      endColor = _ref5.endColor,
22387	      fontSize = _ref5.fontSize,
22388	      indent = _ref5.indent,
22389	      fontWeight = _ref5.fontWeight;
22390
22391	  var e = _doc.createElement("div"),
22392	      useFixedPosition = _isViewport(container) || _getProxyProp(container, "pinType") === "fixed",
22393	      isScroller = type.indexOf("scroller") !== -1,
22394	      parent = useFixedPosition ? _body : container,
22395	      isStart = type.indexOf("start") !== -1,
22396	      color = isStart ? startColor : endColor,
22397	      css = "border-color:" + color + ";font-size:" + fontSize + ";color:" + color + ";font-weight:" + fontWeight + ";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";
22398
22399	  css += "position:" + (isScroller && useFixedPosition ? "fixed;" : "absolute;");
22400	  (isScroller || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + ":" + (offset + parseFloat(indent)) + "px;");
22401	  matchWidthEl && (css += "box-sizing:border-box;text-align:left;width:" + matchWidthEl.offsetWidth + "px;");
22402	  e._isStart = isStart;
22403	  e.setAttribute("class", "gsap-marker-" + type);
22404	  e.style.cssText = css;
22405	  e.innerText = name || name === 0 ? type + "-" + name : type;
22406	  parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);
22407	  e._offset = e["offset" + direction.op.d2];
22408
22409	  _positionMarker(e, 0, direction, isStart);
22410
22411	  return e;
22412	},
22413	    _positionMarker = function _positionMarker(marker, start, direction, flipped) {
22414	  var vars = {
22415	    display: "block"
22416	  },
22417	      side = direction[flipped ? "os2" : "p2"],
22418	      oppositeSide = direction[flipped ? "p2" : "os2"];
22419	  marker._isFlipped = flipped;
22420	  vars[direction.a + "Percent"] = flipped ? -100 : 0;
22421	  vars[direction.a] = flipped ? "1px" : 0;
22422	  vars["border" + side + _Width] = 1;
22423	  vars["border" + oppositeSide + _Width] = 0;
22424	  vars[direction.p] = start + "px";
22425	  gsap.set(marker, vars);
22426	},
22427	    _triggers = [],
22428	    _ids = {},
22429	    _sync = function _sync() {
22430	  return _request || (_request = _raf(_updateAll));
22431	},
22432	    _onScroll = function _onScroll() {
22433	  if (!_request) {
22434	    _request = _raf(_updateAll);
22435	    _lastScrollTime || _dispatch("scrollStart");
22436	    _lastScrollTime = _getTime();
22437	  }
22438	},
22439	    _onResize = function _onResize() {
22440	  return !_refreshing && !_ignoreResize && !_doc.fullscreenElement && _resizeDelay.restart(true);
22441	},
22442	    _listeners = {},
22443	    _emptyArray = [],
22444	    _media = [],
22445	    _creatingMedia,
22446	    _lastMediaTick,
22447	    _onMediaChange = function _onMediaChange(e) {
22448	  var tick = gsap.ticker.frame,
22449	      matches = [],
22450	      i = 0,
22451	      index;
22452
22453	  if (_lastMediaTick !== tick || _startup) {
22454	    _revertAll();
22455
22456	    for (; i < _media.length; i += 4) {
22457	      index = _win.matchMedia(_media[i]).matches;
22458
22459	      if (index !== _media[i + 3]) {
22460	        _media[i + 3] = index;
22461	        index ? matches.push(i) : _revertAll(1, _media[i]) || _isFunction(_media[i + 2]) && _media[i + 2]();
22462	      }
22463	    }
22464
22465	    _revertRecorded();
22466
22467	    for (i = 0; i < matches.length; i++) {
22468	      index = matches[i];
22469	      _creatingMedia = _media[index];
22470	      _media[index + 2] = _media[index + 1](e);
22471	    }
22472
22473	    _creatingMedia = 0;
22474	    _coreInitted && _refreshAll(0, 1);
22475	    _lastMediaTick = tick;
22476
22477	    _dispatch("matchMedia");
22478	  }
22479	},
22480	    _softRefresh = function _softRefresh() {
22481	  return _removeListener(ScrollTrigger, "scrollEnd", _softRefresh) || _refreshAll(true);
22482	},
22483	    _dispatch = function _dispatch(type) {
22484	  return _listeners[type] && _listeners[type].map(function (f) {
22485	    return f();
22486	  }) || _emptyArray;
22487	},
22488	    _savedStyles = [],
22489	    _revertRecorded = function _revertRecorded(media) {
22490	  for (var i = 0; i < _savedStyles.length; i += 5) {
22491	    if (!media || _savedStyles[i + 4] === media) {
22492	      _savedStyles[i].style.cssText = _savedStyles[i + 1];
22493	      _savedStyles[i].getBBox && _savedStyles[i].setAttribute("transform", _savedStyles[i + 2] || "");
22494	      _savedStyles[i + 3].uncache = 1;
22495	    }
22496	  }
22497	},
22498	    _revertAll = function _revertAll(kill, media) {
22499	  var trigger;
22500
22501	  for (_i = 0; _i < _triggers.length; _i++) {
22502	    trigger = _triggers[_i];
22503
22504	    if (!media || trigger.media === media) {
22505	      if (kill) {
22506	        trigger.kill(1);
22507	      } else {
22508	        trigger.revert();
22509	      }
22510	    }
22511	  }
22512
22513	  media && _revertRecorded(media);
22514	  media || _dispatch("revert");
22515	},
22516	    _refreshAll = function _refreshAll(force, skipRevert) {
22517	  if (_lastScrollTime && !force) {
22518	    _addListener(ScrollTrigger, "scrollEnd", _softRefresh);
22519
22520	    return;
22521	  }
22522
22523	  var refreshInits = _dispatch("refreshInit");
22524
22525	  _sort && ScrollTrigger.sort();
22526	  skipRevert || _revertAll();
22527
vendor: 4,170 bytes, lines 22528-22675
22528	  _triggers.forEach(function (t) {
22529	    return t.refresh();
22530	  });
22531
22532	  refreshInits.forEach(function (result) {
22533	    return result && result.render && result.render(-1);
22534	  });
22535
22536	  _scrollers.forEach(function (obj) {
22537	    return typeof obj === "function" && (obj.rec = 0);
22538	  });
22539
22540	  _resizeDelay.pause();
22541
22542	  _dispatch("refresh");
22543	},
22544	    _lastScroll = 0,
22545	    _direction = 1,
22546	    _updateAll = function _updateAll() {
22547	  var l = _triggers.length,
22548	      time = _getTime(),
22549	      recordVelocity = time - _time1 >= 50,
22550	      scroll = l && _triggers[0].scroll();
22551
22552	  _direction = _lastScroll > scroll ? -1 : 1;
22553	  _lastScroll = scroll;
22554
22555	  if (recordVelocity) {
22556	    if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {
22557	      _lastScrollTime = 0;
22558
22559	      _dispatch("scrollEnd");
22560	    }
22561
22562	    _time2 = _time1;
22563	    _time1 = time;
22564	  }
22565
22566	  if (_direction < 0) {
22567	    _i = l;
22568
22569	    while (_i-- > 0) {
22570	      _triggers[_i] && _triggers[_i].update(0, recordVelocity);
22571	    }
22572
22573	    _direction = 1;
22574	  } else {
22575	    for (_i = 0; _i < l; _i++) {
22576	      _triggers[_i] && _triggers[_i].update(0, recordVelocity);
22577	    }
22578	  }
22579
22580	  _request = 0;
22581	},
22582	    _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, "display", "flexShrink", "float", "zIndex", "grid-column-start", "grid-column-end", "grid-row-start", "grid-row-end", "grid-area", "justify-self", "align-self", "place-self"],
22583	    _stateProps = _propNamesToCopy.concat([_width, _height, "boxSizing", "max" + _Width, "max" + _Height, "position", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),
22584	    _swapPinOut = function _swapPinOut(pin, spacer, state) {
22585	  _setState(state);
22586
22587	  if (pin.parentNode === spacer) {
22588	    var parent = spacer.parentNode;
22589
22590	    if (parent) {
22591	      parent.insertBefore(pin, spacer);
22592	      parent.removeChild(spacer);
22593	    }
22594	  }
22595	},
22596	    _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) {
22597	  if (pin.parentNode !== spacer) {
22598	    var i = _propNamesToCopy.length,
22599	        spacerStyle = spacer.style,
22600	        pinStyle = pin.style,
22601	        p;
22602
22603	    while (i--) {
22604	      p = _propNamesToCopy[i];
22605	      spacerStyle[p] = cs[p];
22606	    }
22607
22608	    spacerStyle.position = cs.position === "absolute" ? "absolute" : "relative";
22609	    cs.display === "inline" && (spacerStyle.display = "inline-block");
22610	    pinStyle[_bottom] = pinStyle[_right] = "auto";
22611	    spacerStyle.overflow = "visible";
22612	    spacerStyle.boxSizing = "border-box";
22613	    spacerStyle[_width] = _getSize(pin, _horizontal) + _px;
22614	    spacerStyle[_height] = _getSize(pin, _vertical) + _px;
22615	    spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = "0";
22616
22617	    _setState(spacerState);
22618
22619	    pinStyle[_width] = pinStyle["max" + _Width] = cs[_width];
22620	    pinStyle[_height] = pinStyle["max" + _Height] = cs[_height];
22621	    pinStyle[_padding] = cs[_padding];
22622	    pin.parentNode.insertBefore(spacer, pin);
22623	    spacer.appendChild(pin);
22624	  }
22625	},
22626	    _capsExp = /([A-Z])/g,
22627	    _setState = function _setState(state) {
22628	  if (state) {
22629	    var style = state.t.style,
22630	        l = state.length,
22631	        i = 0,
22632	        p,
22633	        value;
22634	    (state.t._gsap || gsap.core.getCache(state.t)).uncache = 1;
22635
22636	    for (; i < l; i += 2) {
22637	      value = state[i + 1];
22638	      p = state[i];
22639
22640	      if (value) {
22641	        style[p] = value;
22642	      } else if (style[p]) {
22643	        style.removeProperty(p.replace(_capsExp, "-$1").toLowerCase());
22644	      }
22645	    }
22646	  }
22647	},
22648	    _getState = function _getState(element) {
22649	  var l = _stateProps.length,
22650	      style = element.style,
22651	      state = [],
22652	      i = 0;
22653
22654	  for (; i < l; i++) {
22655	    state.push(_stateProps[i], style[_stateProps[i]]);
22656	  }
22657
22658	  state.t = element;
22659	  return state;
22660	},
22661	    _copyState = function _copyState(state, override, omitOffsets) {
22662	  var result = [],
22663	      l = state.length,
22664	      i = omitOffsets ? 8 : 0,
22665	      p;
22666
22667	  for (; i < l; i += 2) {
22668	    p = state[i];
22669	    result.push(p, p in override ? override[p] : state[i + 1]);
22670	  }
22671
22672	  result.t = state.t;
22673	  return result;
22674	},
22675	    _winOffsets = {
22676	  left: 0,
22677	  top: 0
22678	},
22679	    _parsePosition = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax) {
22680	  _isFunction(value) && (value = value(self));
22681
22682	  if (_isString(value) && value.substr(0, 3) === "max") {
22683	    value = scrollerMax + (value.charAt(4) === "=" ? _offsetToPx("0" + value.substr(3), scrollerSize) : 0);
22684	  }
22685
22686	  if (!_isNumber(value)) {
22687	    _isFunction(trigger) && (trigger = trigger(self));
22688
22689	    var element = _toArray(trigger)[0] || _body,
22690	        bounds = _getBounds(element) || {},
22691	        offsets = value.split(" "),
22692	        localOffset,
22693	        globalOffset,
22694	        display;
22695
22696	    if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === "none") {
22697	      display = element.style.display;
22698	      element.style.display = "block";
22699	      bounds = _getBounds(element);
22700	      display ? element.style.display = display : element.style.removeProperty("display");
22701	    }
22702
22703	    localOffset = _offsetToPx(offsets[0], bounds[direction.d]);
22704	    globalOffset = _offsetToPx(offsets[1] || "0", scrollerSize);
22705	    value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;
22706	    markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);
22707	    scrollerSize -= scrollerSize - globalOffset;
22708	  } else if (markerScroller) {
22709	    _positionMarker(markerScroller, scrollerSize, direction, true);
22710	  }
22711
22712	  if (marker) {
22713	    var position = value + scrollerSize,
22714	        isStart = marker._isStart;
22715	    scrollerMax = "scroll" + direction.d2;
22716
22717	    _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body[scrollerMax], _docEl[scrollerMax]) : marker.parentNode[scrollerMax]) <= position + 1);
22718
22719	    if (useFixedPosition) {
22720	      scrollerBounds = _getBounds(markerScroller);
22721	      useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);
22722	    }
22723	  }
22724
22725	  return Math.round(value);
22726	},
22727	    _prefixExp = /(?:webkit|moz|length|cssText|inset)/i,
22728	    _reparent = function _reparent(element, parent, top, left) {
22729	  if (element.parentNode !== parent) {
22730	    var style = element.style,
22731	        p,
22732	        cs;
22733
22734	    if (parent === _body) {
22735	      element._stOrig = style.cssText;
22736	      cs = _getComputedStyle(element);
22737
22738	      for (p in cs) {
22739	        if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === "string" && p !== "0") {
22740	          style[p] = cs[p];
22741	        }
22742	      }
22743
22744	      style.top = top;
22745	      style.left = left;
22746	    } else {
22747	      style.cssText = element._stOrig;
22748	    }
22749
22750	    gsap.core.getCache(element).uncache = 1;
22751	    parent.appendChild(element);
22752	  }
22753	},
22754	    _getTweenCreator = function _getTweenCreator(scroller, direction) {
22755	  var getScroll = _getScrollFunc(scroller, direction),
22756	      prop = "_scroll" + direction.p2,
22757	      lastScroll1,
22758	      lastScroll2,
22759	      getTween = function getTween(scrollTo, vars, initialValue, change1, change2) {
22760	    var tween = getTween.tween,
22761	        onComplete = vars.onComplete,
22762	        modifiers = {};
22763	    tween && tween.kill();
22764	    lastScroll1 = Math.round(initialValue);
22765	    vars[prop] = scrollTo;
22766	    vars.modifiers = modifiers;
22767
22768	    modifiers[prop] = function (value) {
22769	      value = _round(getScroll());
22770
22771	      if (value !== lastScroll1 && value !== lastScroll2 && Math.abs(value - lastScroll1) > 2) {
22772	        tween.kill();
22773	        getTween.tween = 0;
22774	      } else {
22775	        value = initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio;
22776	      }
22777
22778	      lastScroll2 = lastScroll1;
22779	      return lastScroll1 = _round(value);
22780	    };
22781
22782	    vars.onComplete = function () {
22783	      getTween.tween = 0;
22784	      onComplete && onComplete.call(tween);
22785	    };
22786
22787	    tween = getTween.tween = gsap.to(scroller, vars);
22788	    return tween;
22789	  };
22790
22791	  scroller[prop] = getScroll;
22792	  scroller.addEventListener("wheel", function () {
22793	    return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);
22794	  });
22795	  return getTween;
22796	};
22797
22798	_horizontal.op = _vertical;
22799	var ScrollTrigger = function () {
22800	  function ScrollTrigger(vars, animation) {
22801	    _coreInitted || ScrollTrigger.register(gsap) || console.warn("Please gsap.registerPlugin(ScrollTrigger)");
22802	    this.init(vars, animation);
22803	  }
22804
22805	  var _proto = ScrollTrigger.prototype;
22806
22807	  _proto.init = function init(vars, animation) {
22808	    this.progress = this.start = 0;
22809	    this.vars && this.kill(1);
22810
22811	    if (!_enabled) {
22812	      this.update = this.refresh = this.kill = _passThrough;
22813	      return;
22814	    }
22815
22816	    vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? {
22817	      trigger: vars
22818	    } : vars, _defaults);
22819
22820	    var direction = vars.horizontal ? _horizontal : _vertical,
22821	        _vars = vars,
22822	        onUpdate = _vars.onUpdate,
22823	        toggleClass = _vars.toggleClass,
22824	        id = _vars.id,
22825	        onToggle = _vars.onToggle,
22826	        onRefresh = _vars.onRefresh,
22827	        scrub = _vars.scrub,
22828	        trigger = _vars.trigger,
22829	        pin = _vars.pin,
22830	        pinSpacing = _vars.pinSpacing,
22831	        invalidateOnRefresh = _vars.invalidateOnRefresh,
22832	        anticipatePin = _vars.anticipatePin,
22833	        onScrubComplete = _vars.onScrubComplete,
22834	        onSnapComplete = _vars.onSnapComplete,
22835	        once = _vars.once,
22836	        snap = _vars.snap,
22837	        pinReparent = _vars.pinReparent,
22838	        isToggle = !scrub && scrub !== 0,
22839	        scroller = _toArray(vars.scroller || _win)[0],
22840	        scrollerCache = gsap.core.getCache(scroller),
22841	        isViewport = _isViewport(scroller),
22842	        useFixedPosition = "pinType" in vars ? vars.pinType === "fixed" : isViewport || _getProxyProp(scroller, "pinType") === "fixed",
22843	        callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],
22844	        toggleActions = isToggle && vars.toggleActions.split(" "),
22845	        markers = "markers" in vars ? vars.markers : _defaults.markers,
22846	        borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)["border" + direction.p2 + _Width]) || 0,
22847	        self = this,
22848	        onRefreshInit = vars.onRefreshInit && function () {
22849	      return vars.onRefreshInit(self);
22850	    },
22851	        getScrollerSize = _getSizeFunc(scroller, isViewport, direction),
22852	        getScrollerOffsets = _getOffsetsFunc(scroller, isViewport),
22853	        lastSnap = 0,
22854	        tweenTo,
22855	        pinCache,
22856	        snapFunc,
22857	        scroll1,
22858	        scroll2,
22859	        start,
22860	        end,
22861	        markerStart,
22862	        markerEnd,
22863	        markerStartTrigger,
22864	        markerEndTrigger,
22865	        markerVars,
22866	        change,
22867	        pinOriginalState,
22868	        pinActiveState,
22869	        pinState,
22870	        spacer,
22871	        offset,
22872	        pinGetter,
22873	        pinSetter,
22874	        pinStart,
22875	        pinChange,
22876	        spacingStart,
22877	        spacerState,
22878	        markerStartSetter,
22879	        markerEndSetter,
22880	        cs,
22881	        snap1,
22882	        snap2,
22883	        scrubTween,
22884	        scrubSmooth,
22885	        snapDurClamp,
22886	        snapDelayedCall,
22887	        prevProgress,
22888	        prevScroll,
22889	        prevAnimProgress;
22890
22891	    self.media = _creatingMedia;
22892	    anticipatePin *= 45;
22893	    self.scroller = scroller;
22894	    self.scroll = _getScrollFunc(scroller, direction);
22895	    scroll1 = self.scroll();
22896	    self.vars = vars;
22897	    animation = animation || vars.animation;
22898	    "refreshPriority" in vars && (_sort = 1);
22899	    scrollerCache.tweenScroll = scrollerCache.tweenScroll || {
22900	      top: _getTweenCreator(scroller, _vertical),
22901	      left: _getTweenCreator(scroller, _horizontal)
22902	    };
22903	    self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];
22904
22905	    if (animation) {
22906	      animation.vars.lazy = false;
22907	      animation._initted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.render(0, true, true);
22908	      self.animation = animation.pause();
22909	      animation.scrollTrigger = self;
22910	      scrubSmooth = _isNumber(scrub) && scrub;
22911	      scrubSmooth && (scrubTween = gsap.to(animation, {
22912	        ease: "power3",
22913	        duration: scrubSmooth,
22914	        onComplete: function onComplete() {
22915	          return onScrubComplete && onScrubComplete(self);
22916	        }
22917	      }));
22918	      snap1 = 0;
22919	      id || (id = animation.vars.id);
22920	    }
22921
22922	    _triggers.push(self);
22923
22924	    if (snap) {
22925	      _isObject(snap) || (snap = {
22926	        snapTo: snap
22927	      });
22928	      "scrollBehavior" in _body.style && gsap.set(isViewport ? [_body, _docEl] : scroller, {
22929	        scrollBehavior: "auto"
22930	      });
22931	      snapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === "labels" ? _getClosestLabel(animation) : snap.snapTo === "labelsDirectional" ? _getLabelAtDirection(animation) : gsap.utils.snap(snap.snapTo);
22932	      snapDurClamp = snap.duration || {
22933	        min: 0.1,
22934	        max: 2
22935	      };
22936	      snapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);
22937	      snapDelayedCall = gsap.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () {
22938	        if (Math.abs(self.getVelocity()) < 10 && !_pointerIsDown && lastSnap !== self.scroll()) {
22939	          var totalProgress = animation && !isToggle ? animation.totalProgress() : self.progress,
22940	              velocity = (totalProgress - snap2) / (_getTime() - _time2) * 1000 || 0,
22941	              change1 = gsap.utils.clamp(-self.progress, 1 - self.progress, _abs(velocity / 2) * velocity / 0.185),
22942	              naturalEnd = self.progress + (snap.inertia === false ? 0 : change1),
22943	              endValue = _clamp(0, 1, snapFunc(naturalEnd, self)),
22944	              scroll = self.scroll(),
22945	              endScroll = Math.round(start + endValue * change),
22946	              _snap = snap,
22947	              onStart = _snap.onStart,
22948	              _onInterrupt = _snap.onInterrupt,
22949	              _onComplete = _snap.onComplete,
22950	              tween = tweenTo.tween;
22951
22952	          if (scroll <= end && scroll >= start && endScroll !== scroll) {
22953	            if (tween && !tween._initted && tween.data <= Math.abs(endScroll - scroll)) {
22954	              return;
22955	            }
22956
22957	            if (snap.inertia === false) {
22958	              change1 = endValue - self.progress;
22959	            }
22960
22961	            tweenTo(endScroll, {
22962	              duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),
22963	              ease: snap.ease || "power3",
22964	              data: Math.abs(endScroll - scroll),
22965	              onInterrupt: function onInterrupt() {
22966	                return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self);
22967	              },
22968	              onComplete: function onComplete() {
22969	                lastSnap = self.scroll();
22970	                snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;
22971	                onSnapComplete && onSnapComplete(self);
22972	                _onComplete && _onComplete(self);
22973	              }
22974	            }, scroll, change1 * change, endScroll - scroll - change1 * change);
22975	            onStart && onStart(self, tweenTo.tween);
22976	          }
22977	        } else if (self.isActive) {
22978	          snapDelayedCall.restart(true);
22979	        }
22980	      }).pause();
22981	    }
22982
22983	    id && (_ids[id] = self);
22984	    trigger = self.trigger = _toArray(trigger || pin)[0];
22985	    pin = pin === true ? trigger : _toArray(pin)[0];
22986	    _isString(toggleClass) && (toggleClass = {
22987	      targets: trigger,
22988	      className: toggleClass
22989	    });
22990
22991	    if (pin) {
22992	      pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && _getComputedStyle(pin.parentNode).display === "flex" ? false : _padding);
22993	      self.pin = pin;
22994	      vars.force3D !== false && gsap.set(pin, {
22995	        force3D: true
22996	      });
22997	      pinCache = gsap.core.getCache(pin);
22998
22999	      if (!pinCache.spacer) {
23000	        pinCache.spacer = spacer = _doc.createElement("div");
23001	        spacer.setAttribute("class", "pin-spacer" + (id ? " pin-spacer-" + id : ""));
23002	        pinCache.pinState = pinOriginalState = _getState(pin);
23003	      } else {
23004	        pinOriginalState = pinCache.pinState;
23005	      }
23006
23007	      self.spacer = spacer = pinCache.spacer;
23008	      cs = _getComputedStyle(pin);
23009	      spacingStart = cs[pinSpacing + direction.os2];
23010	      pinGetter = gsap.getProperty(pin);
23011	      pinSetter = gsap.quickSetter(pin, direction.a, _px);
23012
23013	      _swapPinIn(pin, spacer, cs);
23014
23015	      pinState = _getState(pin);
23016	    }
23017
23018	    if (markers) {
23019	      markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;
23020	      markerStartTrigger = _createMarker("scroller-start", id, scroller, direction, markerVars, 0);
23021	      markerEndTrigger = _createMarker("scroller-end", id, scroller, direction, markerVars, 0, markerStartTrigger);
23022	      offset = markerStartTrigger["offset" + direction.op.d2];
23023	      markerStart = _createMarker("start", id, scroller, direction, markerVars, offset);
23024	      markerEnd = _createMarker("end", id, scroller, direction, markerVars, offset);
23025
23026	      if (!useFixedPosition && !(_proxies.length && _getProxyProp(scroller, "fixedMarkers") === true)) {
23027	        _makePositionable(isViewport ? _body : scroller);
23028
23029	        gsap.set([markerStartTrigger, markerEndTrigger], {
23030	          force3D: true
23031	        });
23032	        markerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px);
23033	        markerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px);
23034	      }
23035	    }
23036
23037	    self.revert = function (revert) {
23038	      var r = revert !== false || !self.enabled,
23039	          prevRefreshing = _refreshing;
23040
23041	      if (r !== self.isReverted) {
23042	        if (r) {
23043	          self.scroll.rec || (self.scroll.rec = self.scroll());
23044	          prevScroll = Math.max(self.scroll(), self.scroll.rec || 0);
23045	          prevProgress = self.progress;
23046	          prevAnimProgress = animation && animation.progress();
23047	        }
23048
23049	        markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {
23050	          return m.style.display = r ? "none" : "block";
23051	        });
23052	        r && (_refreshing = 1);
23053	        self.update(r);
23054	        _refreshing = prevRefreshing;
23055	        pin && (r ? _swapPinOut(pin, spacer, pinOriginalState) : (!pinReparent || !self.isActive) && _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState));
23056	        self.isReverted = r;
23057	      }
23058	    };
23059
23060	    self.refresh = function (soft, force) {
23061	      if ((_refreshing || !self.enabled) && !force) {
23062	        return;
23063	      }
23064
23065	      if (pin && soft && _lastScrollTime) {
23066	        _addListener(ScrollTrigger, "scrollEnd", _softRefresh);
23067
23068	        return;
23069	      }
23070
23071	      _refreshing = 1;
23072	      scrubTween && scrubTween.pause();
23073	      invalidateOnRefresh && animation && animation.progress(0).invalidate();
23074	      self.isReverted || self.revert();
23075
23076	      var size = getScrollerSize(),
23077	          scrollerBounds = getScrollerOffsets(),
23078	          max = _maxScroll(scroller, direction),
23079	          offset = 0,
23080	          otherPinOffset = 0,
23081	          parsedEnd = vars.end,
23082	          parsedEndTrigger = vars.endTrigger || trigger,
23083	          parsedStart = vars.start || (vars.start === 0 || !trigger ? 0 : pin ? "0 0" : "0 100%"),
23084	          pinnedContainer = vars.pinnedContainer && _toArray(vars.pinnedContainer)[0],
23085	          triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0,
23086	          i = triggerIndex,
23087	          cs,
23088	          bounds,
23089	          scroll,
23090	          isVertical,
23091	          override,
23092	          curTrigger,
23093	          curPin,
23094	          oppositeScroll,
23095	          initted,
23096	          revertedPins;
23097
23098	      while (i--) {
23099	        curTrigger = _triggers[i];
23100	        curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = 1);
23101	        curPin = curTrigger.pin;
23102
23103	        if (curPin && (curPin === trigger || curPin === pin) && !curTrigger.isReverted) {
23104	          revertedPins || (revertedPins = []);
23105	          revertedPins.unshift(curTrigger);
23106	          curTrigger.revert();
23107	        }
23108	      }
23109
23110	      start = _parsePosition(parsedStart, trigger, size, direction, self.scroll(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max) || (pin ? -0.001 : 0);
23111	      _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));
23112
23113	      if (_isString(parsedEnd) && !parsedEnd.indexOf("+=")) {
23114	        if (~parsedEnd.indexOf(" ")) {
23115	          parsedEnd = (_isString(parsedStart) ? parsedStart.split(" ")[0] : "") + parsedEnd;
23116	        } else {
23117	          offset = _offsetToPx(parsedEnd.substr(2), size);
23118	          parsedEnd = _isString(parsedStart) ? parsedStart : start + offset;
23119	          parsedEndTrigger = trigger;
23120	        }
23121	      }
23122
23123	      end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? "100% 0" : max), parsedEndTrigger, size, direction, self.scroll() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max)) || -0.001;
23124	      change = end - start || (start -= 0.01) && 0.001;
23125	      offset = 0;
23126	      i = triggerIndex;
23127
23128	      while (i--) {
23129	        curTrigger = _triggers[i];
23130	        curPin = curTrigger.pin;
23131
23132	        if (curPin && curTrigger.start - curTrigger._pinPush < start) {
23133	          cs = curTrigger.end - curTrigger.start;
23134	          (curPin === trigger || curPin === pinnedContainer) && (offset += cs);
23135	          curPin === pin && (otherPinOffset += cs);
23136	        }
23137	      }
23138
23139	      start += offset;
23140	      end += offset;
23141	      self._pinPush = otherPinOffset;
23142
23143	      if (markerStart && offset) {
23144	        cs = {};
23145	        cs[direction.a] = "+=" + offset;
23146	        pinnedContainer && (cs[direction.p] = "-=" + self.scroll());
23147	        gsap.set([markerStart, markerEnd], cs);
23148	      }
23149
23150	      if (pin) {
23151	        cs = _getComputedStyle(pin);
23152	        isVertical = direction === _vertical;
23153	        scroll = self.scroll();
23154	        pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;
23155	        !max && end > 1 && ((isViewport ? _body : scroller).style["overflow-" + direction.a] = "scroll");
23156
23157	        _swapPinIn(pin, spacer, cs);
23158
23159	        pinState = _getState(pin);
23160	        bounds = _getBounds(pin, true);
23161	        oppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();
23162
23163	        if (pinSpacing) {
23164	          spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];
23165	          spacerState.t = spacer;
23166	          i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;
23167	          i && spacerState.push(direction.d, i + _px);
23168
23169	          _setState(spacerState);
23170
23171	          useFixedPosition && self.scroll(prevScroll);
23172	        }
23173
23174	        if (useFixedPosition) {
23175	          override = {
23176	            top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,
23177	            left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,
23178	            boxSizing: "border-box",
23179	            position: "fixed"
23180	          };
23181	          override[_width] = override["max" + _Width] = Math.ceil(bounds.width) + _px;
23182	          override[_height] = override["max" + _Height] = Math.ceil(bounds.height) + _px;
23183	          override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = "0";
23184	          override[_padding] = cs[_padding];
23185	          override[_padding + _Top] = cs[_padding + _Top];
23186	          override[_padding + _Right] = cs[_padding + _Right];
23187	          override[_padding + _Bottom] = cs[_padding + _Bottom];
23188	          override[_padding + _Left] = cs[_padding + _Left];
23189	          pinActiveState = _copyState(pinOriginalState, override, pinReparent);
23190	        }
23191
23192	        if (animation) {
23193	          initted = animation._initted;
23194
23195	          _suppressOverwrites(1);
23196
23197	          animation.render(animation.duration(), true, true);
23198	          pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;
23199	          change !== pinChange && pinActiveState.splice(pinActiveState.length - 2, 2);
23200	          animation.render(0, true, true);
23201	          initted || animation.invalidate();
23202
23203	          _suppressOverwrites(0);
23204	        } else {
23205	          pinChange = change;
23206	        }
23207	      } else if (trigger && self.scroll()) {
23208	        bounds = trigger.parentNode;
23209
23210	        while (bounds && bounds !== _body) {
23211	          if (bounds._pinOffset) {
23212	            start -= bounds._pinOffset;
23213	            end -= bounds._pinOffset;
23214	          }
23215
23216	          bounds = bounds.parentNode;
23217	        }
23218	      }
23219
23220	      revertedPins && revertedPins.forEach(function (t) {
23221	        return t.revert(false);
23222	      });
23223	      self.start = start;
23224	      self.end = end;
23225	      scroll1 = scroll2 = self.scroll();
23226	      scroll1 < prevScroll && self.scroll(prevScroll);
23227	      self.revert(false);
23228	      _refreshing = 0;
23229	      animation && isToggle && animation._initted && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress, true).render(animation.time(), true, true);
23230
23231	      if (prevProgress !== self.progress) {
23232	        scrubTween && animation.totalProgress(prevProgress, true);
23233	        self.progress = prevProgress;
23234	        self.update();
23235	      }
23236
23237	      pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));
23238	      onRefresh && onRefresh(self);
23239	    };
23240
23241	    self.getVelocity = function () {
23242	      return (self.scroll() - scroll2) / (_getTime() - _time2) * 1000 || 0;
23243	    };
23244
23245	    self.update = function (reset, recordVelocity) {
23246	      var scroll = self.scroll(),
23247	          p = reset ? 0 : (scroll - start) / change,
23248	          clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,
23249	          prevProgress = self.progress,
23250	          isActive,
23251	          wasActive,
23252	          toggleState,
23253	          action,
23254	          stateChanged,
23255	          toggled;
23256
23257	      if (recordVelocity) {
23258	        scroll2 = scroll1;
23259	        scroll1 = scroll;
23260
23261	        if (snap) {
23262	          snap2 = snap1;
23263	          snap1 = animation && !isToggle ? animation.totalProgress() : clipped;
23264	        }
23265	      }
23266
23267	      anticipatePin && !clipped && pin && !_refreshing && !_startup && _lastScrollTime && start < scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin && (clipped = 0.0001);
23268
23269	      if (clipped !== prevProgress && self.enabled) {
23270	        isActive = self.isActive = !!clipped && clipped < 1;
23271	        wasActive = !!prevProgress && prevProgress < 1;
23272	        toggled = isActive !== wasActive;
23273	        stateChanged = toggled || !!clipped !== !!prevProgress;
23274	        self.direction = clipped > prevProgress ? 1 : -1;
23275	        self.progress = clipped;
23276
23277	        if (!isToggle) {
23278	          if (scrubTween && !_refreshing && !_startup) {
23279	            scrubTween.vars.totalProgress = clipped;
23280	            scrubTween.invalidate().restart();
23281	          } else if (animation) {
23282	            animation.totalProgress(clipped, !!_refreshing);
23283	          }
23284	        }
23285
23286	        if (pin) {
23287	          reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);
23288
23289	          if (!useFixedPosition) {
23290	            pinSetter(pinStart + pinChange * clipped);
23291	          } else if (stateChanged) {
23292	            action = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction);
23293
23294	            if (pinReparent) {
23295	              if (!reset && (isActive || action)) {
23296	                var bounds = _getBounds(pin, true),
23297	                    _offset = scroll - start;
23298
23299	                _reparent(pin, _body, bounds.top + (direction === _vertical ? _offset : 0) + _px, bounds.left + (direction === _vertical ? 0 : _offset) + _px);
23300	              } else {
23301	                _reparent(pin, spacer);
23302	              }
23303	            }
23304
23305	            _setState(isActive || action ? pinActiveState : pinState);
23306
23307	            pinChange !== change && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !action ? pinChange : 0));
23308	          }
23309	        }
23310
23311	        snap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);
23312	        toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray(toggleClass.targets).forEach(function (el) {
23313	          return el.classList[isActive || once ? "add" : "remove"](toggleClass.className);
23314	        });
23315	        onUpdate && !isToggle && !reset && onUpdate(self);
23316
23317	        if (stateChanged && !_refreshing) {
23318	          toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3;
23319
23320	          if (isToggle) {
23321	            action = !toggled && toggleActions[toggleState + 1] !== "none" && toggleActions[toggleState + 1] || toggleActions[toggleState];
23322
23323	            if (animation && (action === "complete" || action === "reset" || action in animation)) {
23324	              if (action === "complete") {
23325	                animation.pause().totalProgress(1);
23326	              } else if (action === "reset") {
23327	                animation.restart(true).pause();
23328	              } else if (action === "restart") {
23329	                animation.restart(true);
23330	              } else {
23331	                animation[action]();
23332	              }
23333	            }
23334
23335	            onUpdate && onUpdate(self);
23336	          }
23337
23338	          if (toggled || !_limitCallbacks) {
23339	            onToggle && toggled && onToggle(self);
23340	            callbacks[toggleState] && callbacks[toggleState](self);
23341	            once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0);
23342
23343	            if (!toggled) {
23344	              toggleState = clipped === 1 ? 1 : 3;
23345	              callbacks[toggleState] && callbacks[toggleState](self);
23346	            }
23347	          }
23348	        } else if (isToggle && onUpdate && !_refreshing) {
23349	          onUpdate(self);
23350	        }
23351	      }
23352
23353	      if (markerEndSetter) {
23354	        markerStartSetter(scroll + (markerStartTrigger._isFlipped ? 1 : 0));
23355	        markerEndSetter(scroll);
23356	      }
23357	    };
23358
23359	    self.enable = function (reset, refresh) {
23360	      if (!self.enabled) {
23361	        self.enabled = true;
23362
23363	        _addListener(scroller, "resize", _onResize);
23364
23365	        _addListener(scroller, "scroll", _onScroll);
23366
23367	        onRefreshInit && _addListener(ScrollTrigger, "refreshInit", onRefreshInit);
23368
23369	        if (reset !== false) {
23370	          self.progress = prevProgress = 0;
23371	          scroll1 = scroll2 = lastSnap = self.scroll();
23372	        }
23373
23374	        refresh !== false && self.refresh();
23375	      }
23376	    };
23377
23378	    self.getTween = function (snap) {
23379	      return snap && tweenTo ? tweenTo.tween : scrubTween;
23380	    };
23381
23382	    self.disable = function (reset, allowAnimation) {
23383	      if (self.enabled) {
23384	        reset !== false && self.revert();
23385	        self.enabled = self.isActive = false;
23386	        allowAnimation || scrubTween && scrubTween.pause();
23387	        prevScroll = 0;
23388	        pinCache && (pinCache.uncache = 1);
23389	        onRefreshInit && _removeListener(ScrollTrigger, "refreshInit", onRefreshInit);
23390
23391	        if (snapDelayedCall) {
23392	          snapDelayedCall.pause();
23393	          tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);
23394	        }
23395
23396	        if (!isViewport) {
23397	          var i = _triggers.length;
23398
23399	          while (i--) {
23400	            if (_triggers[i].scroller === scroller && _triggers[i] !== self) {
23401	              return;
23402	            }
23403	          }
23404
23405	          _removeListener(scroller, "resize", _onResize);
23406
23407	          _removeListener(scroller, "scroll", _onScroll);
23408	        }
23409	      }
23410	    };
23411
23412	    self.kill = function (revert, allowAnimation) {
23413	      self.disable(revert, allowAnimation);
23414	      id && delete _ids[id];
23415
23416	      var i = _triggers.indexOf(self);
23417
23418	      _triggers.splice(i, 1);
23419
23420	      i === _i && _direction > 0 && _i--;
23421
23422	      if (animation) {
23423	        animation.scrollTrigger = null;
23424	        revert && animation.render(-1);
23425	        allowAnimation || animation.kill();
23426	      }
23427
23428	      markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {
23429	        return m.parentNode && m.parentNode.removeChild(m);
23430	      });
23431
23432	      if (pin) {
23433	        pinCache && (pinCache.uncache = 1);
23434	        i = 0;
23435
23436	        _triggers.forEach(function (t) {
23437	          return t.pin === pin && i++;
23438	        });
23439
23440	        i || (pinCache.spacer = 0);
23441	      }
23442	    };
23443
23444	    self.enable(false, false);
23445	    !animation || !animation.add || change ? self.refresh() : gsap.delayedCall(0.01, function () {
23446	      return start || end || self.refresh();
23447	    }) && (change = 0.01) && (start = end = 0);
23448	  };
23449
23450	  ScrollTrigger.register = function register(core) {
23451	    if (!_coreInitted) {
23452	      gsap = core || _getGSAP();
23453
23454	      if (_windowExists() && window.document) {
23455	        _win = window;
23456	        _doc = document;
23457	        _docEl = _doc.documentElement;
23458	        _body = _doc.body;
23459	      }
23460
23461	      if (gsap) {
23462	        _toArray = gsap.utils.toArray;
23463	        _clamp = gsap.utils.clamp;
23464	        _suppressOverwrites = gsap.core.suppressOverwrites || _passThrough;
23465	        gsap.core.globals("ScrollTrigger", ScrollTrigger);
23466
23467	        if (_body) {
23468	          _raf = _win.requestAnimationFrame || function (f) {
23469	            return setTimeout(f, 16);
23470	          };
23471
23472	          _addListener(_win, "wheel", _onScroll);
23473
23474	          _root = [_win, _doc, _docEl, _body];
23475
23476	          _addListener(_doc, "scroll", _onScroll);
23477
23478	          var bodyStyle = _body.style,
23479	              border = bodyStyle.borderTop,
23480	              bounds;
23481	          bodyStyle.borderTop = "1px solid #000";
23482	          bounds = _getBounds(_body);
23483	          _vertical.m = Math.round(bounds.top + _vertical.sc()) || 0;
23484	          _horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;
23485	          border ? bodyStyle.borderTop = border : bodyStyle.removeProperty("border-top");
23486	          _syncInterval = setInterval(_sync, 200);
23487	          gsap.delayedCall(0.5, function () {
23488	            return _startup = 0;
23489	          });
23490
23491	          _addListener(_doc, "touchcancel", _passThrough);
23492
23493	          _addListener(_body, "touchstart", _passThrough);
23494
23495	          _multiListener(_addListener, _doc, "pointerdown,touchstart,mousedown", function () {
23496	            return _pointerIsDown = 1;
23497	          });
23498
23499	          _multiListener(_addListener, _doc, "pointerup,touchend,mouseup", function () {
23500	            return _pointerIsDown = 0;
23501	          });
23502
23503	          _transformProp = gsap.utils.checkPrefix("transform");
23504
23505	          _stateProps.push(_transformProp);
23506
23507	          _coreInitted = _getTime();
23508	          _resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause();
23509	          _autoRefresh = [_doc, "visibilitychange", function () {
23510	            var w = _win.innerWidth,
23511	                h = _win.innerHeight;
23512
23513	            if (_doc.hidden) {
23514	              _prevWidth = w;
23515	              _prevHeight = h;
23516	            } else if (_prevWidth !== w || _prevHeight !== h) {
23517	              _onResize();
23518	            }
23519	          }, _doc, "DOMContentLoaded", _refreshAll, _win, "load", function () {
23520	            return _lastScrollTime || _refreshAll();
23521	          }, _win, "resize", _onResize];
23522
23523	          _iterateAutoRefresh(_addListener);
23524	        }
23525	      }
23526	    }
23527
23528	    return _coreInitted;
23529	  };
23530
23531	  ScrollTrigger.defaults = function defaults(config) {
23532	    for (var p in config) {
23533	      _defaults[p] = config[p];
23534	    }
23535	  };
23536
23537	  ScrollTrigger.kill = function kill() {
23538	    _enabled = 0;
23539
23540	    _triggers.slice(0).forEach(function (trigger) {
23541	      return trigger.kill(1);
23542	    });
23543	  };
23544
23545	  ScrollTrigger.config = function config(vars) {
23546	    "limitCallbacks" in vars && (_limitCallbacks = !!vars.limitCallbacks);
23547	    var ms = vars.syncInterval;
23548	    ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);
23549
23550	    if ("autoRefreshEvents" in vars) {
23551	      _iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || "none");
23552	      _ignoreResize = (vars.autoRefreshEvents + "").indexOf("resize") === -1;
23553	    }
23554	  };
23555
23556	  ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) {
23557	    var t = _toArray(target)[0],
23558	        i = _scrollers.indexOf(t),
23559	        isViewport = _isViewport(t);
23560
23561	    if (~i) {
23562	      _scrollers.splice(i, isViewport ? 6 : 2);
23563	    }
23564
23565	    isViewport ? _proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _proxies.unshift(t, vars);
23566	  };
23567
23568	  ScrollTrigger.matchMedia = function matchMedia(vars) {
23569	    var mq, p, i, func, result;
23570
23571	    for (p in vars) {
23572	      i = _media.indexOf(p);
23573	      func = vars[p];
23574	      _creatingMedia = p;
23575
23576	      if (p === "all") {
23577	        func();
23578	      } else {
23579	        mq = _win.matchMedia(p);
23580
23581	        if (mq) {
23582	          mq.matches && (result = func());
23583
23584	          if (~i) {
23585	            _media[i + 1] = _combineFunc(_media[i + 1], func);
23586	            _media[i + 2] = _combineFunc(_media[i + 2], result);
23587	          } else {
23588	            i = _media.length;
23589
23590	            _media.push(p, func, result);
23591
23592	            mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener("change", _onMediaChange);
23593	          }
23594
23595	          _media[i + 3] = mq.matches;
23596	        }
23597	      }
23598
23599	      _creatingMedia = 0;
23600	    }
23601
23602	    return _media;
23603	  };
23604
23605	  ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) {
23606	    query || (_media.length = 0);
23607	    query = _media.indexOf(query);
23608	    query >= 0 && _media.splice(query, 4);
23609	  };
23610
23611	  return ScrollTrigger;
23612	}();
23613	ScrollTrigger.version = "3.7.0";
23614
23615	ScrollTrigger.saveStyles = function (targets) {
23616	  return targets ? _toArray(targets).forEach(function (target) {
23617	    if (target && target.style) {
23618	      var i = _savedStyles.indexOf(target);
23619
23620	      i >= 0 && _savedStyles.splice(i, 5);
23621
23622	      _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute("transform"), gsap.core.getCache(target), _creatingMedia);
23623	    }
23624	  }) : _savedStyles;
23625	};
23626
23627	ScrollTrigger.revert = function (soft, media) {
23628	  return _revertAll(!soft, media);
23629	};
23630
23631	ScrollTrigger.create = function (vars, animation) {
23632	  return new ScrollTrigger(vars, animation);
23633	};
23634
23635	ScrollTrigger.refresh = function (safe) {
23636	  return safe ? _onResize() : _refreshAll(true);
23637	};
23638
23639	ScrollTrigger.update = _updateAll;
23640
23641	ScrollTrigger.maxScroll = function (element, horizontal) {
23642	  return _maxScroll(element, horizontal ? _horizontal : _vertical);
23643	};
23644
23645	ScrollTrigger.getScrollFunc = function (element, horizontal) {
23646	  return _getScrollFunc(_toArray(element)[0], horizontal ? _horizontal : _vertical);
23647	};
23648
23649	ScrollTrigger.getById = function (id) {
23650	  return _ids[id];
23651	};
23652
23653	ScrollTrigger.getAll = function () {
23654	  return _triggers.slice(0);
23655	};
23656
23657	ScrollTrigger.isScrolling = function () {
23658	  return !!_lastScrollTime;
23659	};
23660
23661	ScrollTrigger.addEventListener = function (type, callback) {
23662	  var a = _listeners[type] || (_listeners[type] = []);
23663	  ~a.indexOf(callback) || a.push(callback);
23664	};
23665
23666	ScrollTrigger.removeEventListener = function (type, callback) {
23667	  var a = _listeners[type],
23668	      i = a && a.indexOf(callback);
23669	  i >= 0 && a.splice(i, 1);
23670	};
23671
23672	ScrollTrigger.batch = function (targets, vars) {
23673	  var result = [],
23674	      varsCopy = {},
23675	      interval = vars.interval || 0.016,
23676	      batchMax = vars.batchMax || 1e9,
23677	      proxyCallback = function proxyCallback(type, callback) {
23678	    var elements = [],
23679	        triggers = [],
23680	        delay = gsap.delayedCall(interval, function () {
23681	      callback(elements, triggers);
23682	      elements = [];
23683	      triggers = [];
23684	    }).pause();
23685	    return function (self) {
23686	      elements.length || delay.restart(true);
23687	      elements.push(self.trigger);
23688	      triggers.push(self);
23689	      batchMax <= elements.length && delay.progress(1);
23690	    };
23691	  },
23692	      p;
23693
23694	  for (p in vars) {
23695	    varsCopy[p] = p.substr(0, 2) === "on" && _isFunction(vars[p]) && p !== "onRefreshInit" ? proxyCallback(p, vars[p]) : vars[p];
23696	  }
23697
23698	  if (_isFunction(batchMax)) {
23699	    batchMax = batchMax();
23700
23701	    _addListener(ScrollTrigger, "refresh", function () {
23702	      return batchMax = vars.batchMax();
23703	    });
23704	  }
23705
23706	  _toArray(targets).forEach(function (target) {
23707	    var config = {};
23708
23709	    for (p in varsCopy) {
23710	      config[p] = varsCopy[p];
23711	    }
23712
23713	    config.trigger = target;
23714	    result.push(ScrollTrigger.create(config));
23715	  });
23716
23717	  return result;
23718	};
23719
23720	ScrollTrigger.sort = function (func) {
23721	  return _triggers.sort(func || function (a, b) {
23722	    return (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6);
23723	  });
23724	};
23725
23726	_getGSAP() && gsap.registerPlugin(ScrollTrigger);
23727
23728	exports.ScrollTrigger = ScrollTrigger;
23729	exports.default = ScrollTrigger;
23730
23731	Object.defineProperty(exports, '__esModule', { value: true });
23732
23733})));
23734
23735/*SIGUIENTE LIBRERIA*/
23736/*!
23737 * ScrollTrigger 3.7.0
23738 * https://greensock.com
23739 * 
23740 * @license Copyright 2021, GreenSock. All rights reserved.
23741 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
23742 * @author: Jack Doyle, [email protected]
23743 */
23744
23745!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function J(e){return e}function K(e){return Math.round(1e5*e)/1e5||0}function L(){return"undefined"!=typeof window}function M(){return Se||L()&&(Se=window.gsap)&&Se.registerPlugin&&Se}function N(e){return!!~i.indexOf(e)}function O(e,t){return~Fe.indexOf(e)&&Fe[Fe.indexOf(e)+1][t]}function P(t,e){var r=e.s,n=e.sc,i=h.indexOf(t),o=n===it.sc?1:2;return~i||(i=h.push(t)-1),h[i+o]||(h[i+o]=O(t,r)||(N(t)?n:function(e){return arguments.length?t[r]=e:t[r]}))}function Q(e){return O(e,"getBoundingClientRect")||(N(e)?function(){return dt.width=Me.innerWidth,dt.height=Me.innerHeight,dt}:function(){return ot(e)})}function T(e,t){var r=t.s,n=t.d2,i=t.d,o=t.a;return(r="scroll"+n)&&(o=O(e,r))?o()-Q(e)()[i]:N(e)?Math.max(_e[r],Pe[r])-(Me["inner"+n]||_e["client"+n]||Pe["client"+n]):e[r]-e["offset"+n]}function U(e,t){for(var r=0;r<p.length;r+=3)t&&!~t.indexOf(p[r+1])||e(p[r],p[r+1],p[r+2])}function V(e){return"string"==typeof e}function W(e){return"function"==typeof e}function X(e){return"number"==typeof e}function Y(e){return"object"==typeof e}function Z(e){return W(e)&&e()}function $(r,n){return function(){var e=Z(r),t=Z(n);return function(){Z(e),Z(t)}}}function ta(e){return Me.getComputedStyle(e)}function va(e,t){for(var r in t)r in e||(e[r]=t[r]);return e}function xa(e,t){var r=t.d2;return e["offset"+r]||e["client"+r]||0}function ya(e){var t,r=[],n=e.labels,i=e.duration();for(t in n)r.push(n[t]/i);return r}function Ba(t,r,e,n){return e.split(",").forEach(function(e){return t(r,e,n)})}function Ca(e,t,r){return e.addEventListener(t,r,{passive:!0})}function Da(e,t,r){return e.removeEventListener(t,r)}function Ha(e,t){if(V(e)){var r=e.indexOf("="),n=~r?(e.charAt(r-1)+1)*parseFloat(e.substr(r+1)):0;~r&&(e.indexOf("%")>r&&(n*=t/100),e=e.substr(0,r-1)),e=n+(e in w?w[e]*t:~e.indexOf("%")?parseFloat(e)*t/100:parseFloat(e)||0)}return e}function Ia(e,t,r,n,i,o,a){var s=i.startColor,l=i.endColor,c=i.fontSize,f=i.indent,u=i.fontWeight,d=ke.createElement("div"),p=N(r)||"fixed"===O(r,"pinType"),g=-1!==e.indexOf("scroller"),h=p?Pe:r,v=-1!==e.indexOf("start"),m=v?s:l,b="border-color:"+m+";font-size:"+c+";color:"+m+";font-weight:"+u+";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";return b+="position:"+(g&&p?"fixed;":"absolute;"),!g&&p||(b+=(n===it?x:y)+":"+(o+parseFloat(f))+"px;"),a&&(b+="box-sizing:border-box;text-align:left;width:"+a.offsetWidth+"px;"),d._isStart=v,d.setAttribute("class","gsap-marker-"+e),d.style.cssText=b,d.innerText=t||0===t?e+"-"+t:e,h.children[0]?h.insertBefore(d,h.children[0]):h.appendChild(d),d._offset=d["offset"+n.op.d2],C(d,0,n,v),d}function Ma(){return l=l||s(D)}function Na(){l||(l=s(D),Ue||E("scrollStart"),Ue=He())}function Oa(){return!Be&&!r&&!ke.fullscreenElement&&a.restart(!0)}function Ua(e){var t,r=Se.ticker.frame,n=[],i=0;if(g!==r||De){for(I();i<_.length;
23745i+=4)(t=Me.matchMedia(_[i]).matches)!==_[i+3]&&((_[i+3]=t)?n.push(i):I(1,_[i])||W(_[i+2])&&_[i+2]());for(B(),i=0;i<n.length;i++)t=n[i],Ve=_[t],_[t+2]=_[t+1](e);Ve=0,o&&R(0,1),g=r,E("matchMedia")}}function Va(){return Da(G,"scrollEnd",Va)||R(!0)}function fb(e,t,r,n){if(e.parentNode!==t){for(var i,o=F.length,a=t.style,s=e.style;o--;)a[i=F[o]]=r[i];a.position="absolute"===r.position?"absolute":"relative","inline"===r.display&&(a.display="inline-block"),s[y]=s[x]="auto",a.overflow="visible",a.boxSizing="border-box",a[Je]=xa(e,nt)+rt,a[je]=xa(e,it)+rt,a[Ge]=s[et]=s.top=s[m]="0",ut(n),s[Je]=s.maxWidth=r[Je],s[je]=s.maxHeight=r[je],s[Ge]=r[Ge],e.parentNode.insertBefore(t,e),t.appendChild(e)}}function ib(e){for(var t=H.length,r=e.style,n=[],i=0;i<t;i++)n.push(H[i],r[H[i]]);return n.t=e,n}function lb(e,t,r,n,i,o,a,s,l,c,f,u){if(W(e)&&(e=e(s)),V(e)&&"max"===e.substr(0,3)&&(e=u+("="===e.charAt(4)?Ha("0"+e.substr(3),r):0)),X(e))a&&C(a,r,n,!0);else{W(t)&&(t=t(s));var d,p,g,h=Ee(t)[0]||Pe,v=ot(h)||{},m=e.split(" ");v&&(v.left||v.top)||"none"!==ta(h).display||(g=h.style.display,h.style.display="block",v=ot(h),g?h.style.display=g:h.style.removeProperty("display")),d=Ha(m[0],v[n.d]),p=Ha(m[1]||"0",r),e=v[n.p]-l[n.p]-c+d+i-p,a&&C(a,p,n,r-p<20||a._isStart&&20<p),r-=r-p}if(o){var b=e+r,x=o._isStart;u="scroll"+n.d2,C(o,b,n,x&&20<b||!x&&(f?Math.max(Pe[u],_e[u]):o.parentNode[u])<=b+1),f&&(l=ot(a),f&&(o.style[n.op.p]=l[n.op.p]-n.op.m-o._offset+rt))}return Math.round(e)}function nb(e,t,r,n){if(e.parentNode!==t){var i,o,a=e.style;if(t===Pe){for(i in e._stOrig=a.cssText,o=ta(e))+i||q.test(i)||!o[i]||"string"!=typeof a[i]||"0"===i||(a[i]=o[i]);a.top=r,a.left=n}else a.cssText=e._stOrig;Se.core.getCache(e).uncache=1,t.appendChild(e)}}function ob(l,e){function Xe(e,t,r,n,i){var o=Xe.tween,a=t.onComplete,s={};return o&&o.kill(),c=Math.round(r),t[d]=e,(t.modifiers=s)[d]=function(e){return(e=K(u()))!==c&&e!==f&&2<Math.abs(e-c)?(o.kill(),Xe.tween=0):e=r+n*o.ratio+i*o.ratio*o.ratio,f=c,c=K(e)},t.onComplete=function(){Xe.tween=0,a&&a.call(o)},o=Xe.tween=Se.to(l,t)}var c,f,u=P(l,e),d="_scroll"+e.p2;return l[d]=u,l.addEventListener("wheel",function(){return Xe.tween&&Xe.tween.kill()&&(Xe.tween=0)}),Xe}var Se,o,Me,ke,_e,Pe,i,a,s,l,Ee,Ne,Ae,c,Be,Ie,f,Le,u,d,p,Re,ze,r,We,Ve,g,De=1,Fe=[],h=[],He=Date.now,v=He(),Ue=0,Ye=1,Ze=Math.abs,t="scrollLeft",n="scrollTop",m="left",x="right",y="bottom",Je="width",je="height",qe="Right",$e="Left",Ke="Top",Qe="Bottom",Ge="padding",et="margin",tt="Width",b="Height",rt="px",nt={s:t,p:m,p2:$e,os:x,os2:qe,d:Je,d2:tt,a:"x",sc:function sc(e){return arguments.length?Me.scrollTo(e,it.sc()):Me.pageXOffset||ke[t]||_e[t]||Pe[t]||0}},it={s:n,p:"top",p2:Ke,os:y,os2:Qe,d:je,d2:b,a:"y",op:nt,sc:function sc(e){return arguments.length?Me.scrollTo(nt.sc(),e):Me.pageYOffset||ke[n]||_e[n]||Pe[n]||0}},ot=function _getBounds(e,t){var r=t&&"matrix(1, 0, 0, 1, 0, 0)"!==ta(e)[f]&&Se.to(e,{x:0,y:0,xPercent:0,yPercent:0,rotation:0,rotationX:0,rotationY:0,scale:1,skewX:0,skewY:0}).progress(1),n=e.getBoundingClientRect();return r&&r.progress(0).kill(),n},at={startColor:"green",endColor:"red",indent:0,fontSize:"16px",fontWeight:"normal"},st={toggleActions:"play",anticipatePin:0},w={top:0,left:0,center:.5,bottom:1,right:1},C=function _positionMarker(e,t,r,n){var i={display:"block"},o=r[n?"os2":"p2"],a=r[n?"p2":"os2"];e._isFlipped=n,i[r.a+"Percent"]=n?-100:0,i[r.a]=n?"1px":0,i["border"+o+tt]=1,i["border"+a+tt]=0,i[r.p]=t+"px",Se.set(e,i)},lt=[],ct={},S={},k=[],_=[],E=function _dispatch(e){return S[e]&&S[e].map(function(e){return e()})||k},A=[],B=function _revertRecorded(e){for(var t=0;t<A.length;t+=5)e&&A[t+4]!==e||(A[t].style.cssText=A[t+1],A[t].getBBox&&A[t].setAttribute("transform",A[t+2]||""),A[t+3].uncache=1)},I=function _revertAll(e,t){var r;for(Le=0;Le<lt.length;Le++)r=lt[Le],t&&r.media!==t||(e?r.kill(1):r.revert());t&&B(t),t||E("revert")},R=function _refreshAll(e,t){if(!Ue||e){var r=E("refreshInit");Re&&G.sort(),t||I(),lt.forEach(function(e){return e.refresh()}),r.forEach(function(e){return e&&e.render&&e.render(-1)}),h.forEach(function(e){return"function"==typeof e&&(e.rec=0)}),a.pause(),E("refresh")}else Ca(G,"scrollEnd",Va)}
23745,z=0,ft=1,D=function _updateAll(){var e=lt.length,t=He(),r=50<=t-v,n=e&&lt[0].scroll();if(ft=n<z?-1:1,z=n,r&&(Ue&&!Ie&&200<t-Ue&&(Ue=0,E("scrollEnd")),Ae=v,v=t),ft<0){for(Le=e;0<Le--;)lt[Le]&&lt[Le].update(0,r);ft=1}else for(Le=0;Le<e;Le++)lt[Le]&&lt[Le].update(0,r);l=0},F=[m,"top",y,x,et+Qe,et+qe,et+Ke,et+$e,"display","flexShrink","float","zIndex","grid-column-start","grid-column-end","grid-row-start","grid-row-end","grid-area","justify-self","align-self","place-self"],H=F.concat([Je,je,"boxSizing","max"+tt,"max"+b,"position",et,Ge,Ge+Ke,Ge+qe,Ge+Qe,Ge+$e]),j=/([A-Z])/g,ut=function _setState(e){if(e){var t,r,n=e.t.style,i=e.length,o=0;for((e.t._gsap||Se.core.getCache(e.t)).uncache=1;o<i;o+=2)r=e[o+1],t=e[o],r?n[t]=r:n[t]&&n.removeProperty(t.replace(j,"-$1").toLowerCase())}},dt={left:0,top:0},q=/(?:webkit|moz|length|cssText|inset)/i;nt.op=it;var G=(ScrollTrigger.prototype.init=function init(S,M){if(this.progress=this.start=0,this.vars&&this.kill(1),Ye){var p,n,u,k,_,E,A,B,I,L,R,e,z,D,F,H,U,t,Z,g,j,q,h,$,v,m,r,b,x,K,i,d,y,G,ee,te,re=(S=va(V(S)||X(S)||S.nodeType?{trigger:S}:S,st)).horizontal?nt:it,w=S.onUpdate,C=S.toggleClass,o=S.id,ne=S.onToggle,ie=S.onRefresh,a=S.scrub,oe=S.trigger,ae=S.pin,se=S.pinSpacing,le=S.invalidateOnRefresh,ce=S.anticipatePin,s=S.onScrubComplete,fe=S.onSnapComplete,ue=S.once,de=S.snap,pe=S.pinReparent,ge=!a&&0!==a,he=Ee(S.scroller||Me)[0],l=Se.core.getCache(he),ve=N(he),me="pinType"in S?"fixed"===S.pinType:ve||"fixed"===O(he,"pinType"),be=[S.onEnter,S.onLeave,S.onEnterBack,S.onLeaveBack],xe=ge&&S.toggleActions.split(" "),c="markers"in S?S.markers:st.markers,ye=ve?0:parseFloat(ta(he)["border"+re.p2+tt])||0,we=this,f=S.onRefreshInit&&function(){return S.onRefreshInit(we)},Ce=function _getSizeFunc(e,t,r){var n=r.d,i=r.d2,o=r.a;return(o=O(e,"getBoundingClientRect"))?function(){return o()[n]}:function(){return(t?Me["inner"+i]:e["client"+i])||0}}(he,ve,re),Te=function _getOffsetsFunc(e,t){return!t||~Fe.indexOf(e)?Q(e):function(){return dt}}(he,ve),Oe=0;we.media=Ve,ce*=45,we.scroller=he,we.scroll=P(he,re),k=we.scroll(),we.vars=S,M=M||S.animation,"refreshPriority"in S&&(Re=1),l.tweenScroll=l.tweenScroll||{top:ob(he,it),left:ob(he,nt)},we.tweenTo=p=l.tweenScroll[re.p],M&&(M.vars.lazy=!1,M._initted||!1!==M.vars.immediateRender&&!1!==S.immediateRender&&M.render(0,!0,!0),we.animation=M.pause(),M.scrollTrigger=we,(i=X(a)&&a)&&(K=Se.to(M,{ease:"power3",duration:i,onComplete:function onComplete(){return s&&s(we)}})),b=0,o=o||M.vars.id),lt.push(we),de&&(Y(de)||(de={snapTo:de}),"scrollBehavior"in Pe.style&&Se.set(ve?[Pe,_e]:he,{scrollBehavior:"auto"}),u=W(de.snapTo)?de.snapTo:"labels"===de.snapTo?function _getClosestLabel(t){return function(e){return Se.utils.snap(ya(t),e)}}(M):"labelsDirectional"===de.snapTo?function _getLabelAtDirection(i){return function(e,t){var r,n=ya(i);if(n.sort(function(e,t){return e-t}),0<t.direction){for(e-=1e-4,r=0;r<n.length;r++)if(n[r]>=e)return n[r];return n.pop()}for(r=n.length,e+=1e-4;r--;)if(n[r]<=e)return n[r];return n[0]}}(M):Se.utils.snap(de.snapTo),d=de.duration||{min:.1,max:2},d=Y(d)?Ne(d.min,d.max):Ne(d,d),y=Se.delayedCall(de.delay||i/2||.1,function(){if(Math.abs(we.getVelocity())<10&&!Ie&&Oe!==we.scroll()){var e=M&&!ge?M.totalProgress():we.progress,t=(e-x)/(He()-Ae)*1e3||0,r=Se.utils.clamp(-we.progress,1-we.progress,Ze(t/2)*t/.185),n=we.progress+(!1===de.inertia?0:r),i=Ne(0,1,u(n,we)),o=we.scroll(),a=Math.round(E+i*z),s=de.onStart,l=de.onInterrupt,c=de.onComplete,f=p.tween;if(o<=A&&E<=o&&a!==o){if(f&&!f._initted&&f.data<=Math.abs(a-o))return;!1===de.inertia&&(r=i-we.progress),p(a,{duration:d(Ze(.185*Math.max(Ze(n-e),Ze(i-e))/t/.05||0)),ease:de.ease||"power3",data:Math.abs(a-o),onInterrupt:function onInterrupt(){return y.restart(!0)&&l&&l(we)},onComplete:function onComplete(){Oe=we.scroll(),b=x=M&&!ge?M.totalProgress():we.progress,fe&&fe(we),c&&c(we)}},o,r*z,a-o-r*z),s&&s(we,p.tween)}}else we.isActive&&y.restart(!0)}).pause()),o&&(ct[o]=we),oe=we.trigger=Ee(oe||ae)[0],ae=!0===ae?oe:Ee(ae)[0],V(C)&&(C={targets:oe,className:C}),ae&&(!1===se||se===et||(se=!(!se&&"flex"===ta(ae.parentNode).display)&&Ge),we.pin=ae,!1!==S.force3D&&Se.set(ae,{force3D:!0}),(n=Se.core.getCache(ae)).spacer?D=n.pinState:(n.spacer=U=ke.createElement("div"),U.setAttribute("class","pin-spacer"+(o?" pin-spacer-"+o:"")),n.pinState=D=ib(ae)),we.spacer=U=n.spacer,r=ta(ae),h=r[se+re.os2],Z=Se.getProperty(ae),g=Se.quickSetter(ae,re.a,rt),fb(ae,U,r),H=ib(ae)),c&&(e=Y(c)?va(c,at):at,L=Ia("scroller-start",o,he,re,e,0),R=Ia("scroller-end",o,he,re,e,0,L),t=L["offset"+re.o
23745p.d2],B=Ia("start",o,he,re,e,t),I=Ia("end",o,he,re,e,t),me||Fe.length&&!0===O(he,"fixedMarkers")||(function _makePositionable(e){var t=ta(e).position;e.style.position="absolute"===t||"fixed"===t?t:"relative"}(ve?Pe:he),Se.set([L,R],{force3D:!0}),v=Se.quickSetter(L,re.a,rt),m=Se.quickSetter(R,re.a,rt))),we.revert=function(e){var t=!1!==e||!we.enabled,r=Be;t!==we.isReverted&&(t&&(we.scroll.rec||(we.scroll.rec=we.scroll()),ee=Math.max(we.scroll(),we.scroll.rec||0),G=we.progress,te=M&&M.progress()),B&&[B,I,L,R].forEach(function(e){return e.style.display=t?"none":"block"}),t&&(Be=1),we.update(t),Be=r,ae&&(t?function _swapPinOut(e,t,r){if(ut(r),e.parentNode===t){var n=t.parentNode;n&&(n.insertBefore(e,t),n.removeChild(t))}}(ae,U,D):pe&&we.isActive||fb(ae,U,ta(ae),$)),we.isReverted=t)},we.refresh=function(e,t){if(!Be&&we.enabled||t)if(ae&&e&&Ue)Ca(ScrollTrigger,"scrollEnd",Va);else{Be=1,K&&K.pause(),le&&M&&M.progress(0).invalidate(),we.isReverted||we.revert();for(var r,n,i,o,a,s,l,c,f,u,d=Ce(),p=Te(),g=T(he,re),h=0,v=0,m=S.end,b=S.endTrigger||oe,x=S.start||(0!==S.start&&oe?ae?"0 0":"0 100%":0),y=S.pinnedContainer&&Ee(S.pinnedContainer)[0],w=oe&&Math.max(0,lt.indexOf(we))||0,C=w;C--;)(s=lt[C]).end||s.refresh(0,1)||(Be=1),!(l=s.pin)||l!==oe&&l!==ae||s.isReverted||((u=u||[]).unshift(s),s.revert());for(E=lb(x,oe,d,re,we.scroll(),B,L,we,p,ye,me,g)||(ae?-.001:0),W(m)&&(m=m(we)),V(m)&&!m.indexOf("+=")&&(~m.indexOf(" ")?m=(V(x)?x.split(" ")[0]:"")+m:(h=Ha(m.substr(2),d),m=V(x)?x:E+h,b=oe)),A=Math.max(E,lb(m||(b?"100% 0":g),b,d,re,we.scroll()+h,I,R,we,p,ye,me,g))||-.001,z=A-E||(E-=.01)&&.001,h=0,C=w;C--;)(l=(s=lt[C]).pin)&&s.start-s._pinPush<E&&(r=s.end-s.start,l!==oe&&l!==y||(h+=r),l===ae&&(v+=r));if(E+=h,A+=h,we._pinPush=v,B&&h&&((r={})[re.a]="+="+h,y&&(r[re.p]="-="+we.scroll()),Se.set([B,I],r)),ae)r=ta(ae),o=re===it,i=we.scroll(),j=parseFloat(Z(re.a))+v,!g&&1<A&&((ve?Pe:he).style["overflow-"+re.a]="scroll"),fb(ae,U,r),H=ib(ae),n=ot(ae,!0),c=me&&P(he,o?nt:it)(),se&&(($=[se+re.os2,z+v+rt]).t=U,(C=se===Ge?xa(ae,re)+z+v:0)&&$.push(re.d,C+rt),ut($),me&&we.scroll(ee)),me&&((a={top:n.top+(o?i-E:c)+rt,left:n.left+(o?c:i-E)+rt,boxSizing:"border-box",position:"fixed"})[Je]=a.maxWidth=Math.ceil(n.width)+rt,a[je]=a.maxHeight=Math.ceil(n.height)+rt,a[et]=a[et+Ke]=a[et+qe]=a[et+Qe]=a[et+$e]="0",a[Ge]=r[Ge],a[Ge+Ke]=r[Ge+Ke],a[Ge+qe]=r[Ge+qe],a[Ge+Qe]=r[Ge+Qe],a[Ge+$e]=r[Ge+$e],F=function _copyState(e,t,r){for(var n,i=[],o=e.length,a=r?8:0;a<o;a+=2)n=e[a],i.push(n,n in t?t[n]:e[a+1]);return i.t=e.t,i}(D,a,pe)),M?(f=M._initted,ze(1),M.render(M.duration(),!0,!0),q=Z(re.a)-j+z+v,z!==q&&F.splice(F.length-2,2),M.render(0,!0,!0),f||M.invalidate(),ze(0)):q=z;else if(oe&&we.scroll())for(n=oe.parentNode;n&&n!==Pe;)n._pinOffset&&(E-=n._pinOffset,A-=n._pinOffset),n=n.parentNode;u&&u.forEach(function(e){return e.revert(!1)}),we.start=E,we.end=A,(k=_=we.scroll())<ee&&we.scroll(ee),we.revert(!1),Be=0,M&&ge&&M._initted&&M.progress()!==te&&M.progress(te,!0).render(M.time(),!0,!0),G!==we.progress&&(K&&M.totalProgress(G,!0),we.progress=G,we.update()),ae&&se&&(U._pinOffset=Math.round(we.progress*q)),ie&&ie(we)}},we.getVelocity=function(){return(we.scroll()-_)/(He()-Ae)*1e3||0},we.update=function(e,t){var r,n,i,o,a,s=we.scroll(),l=e?0:(s-E)/z,c=l<0?0:1<l?1:l||0,f=we.progress;if(t&&(_=k,k=s,de&&(x=b,b=M&&!ge?M.totalProgress():c)),ce&&!c&&ae&&!Be&&!De&&Ue&&E<s+(s-_)/(He()-Ae)*ce&&(c=1e-4),c!==f&&we.enabled){if(o=(a=(r=we.isActive=!!c&&c<1)!=(!!f&&f<1))||!!c!=!!f,we.direction=f<c?1:-1,we.progress=c,ge||(!K||Be||De?M&&M.totalProgress(c,!!Be):(K.vars.totalProgress=c,K.invalidate().restart())),ae)if(e&&se&&(U.style[se+re.os2]=h),me){if(o){if(i=!e&&f<c&&s<A+1&&s+1>=T(he,re),pe)if(e||!r&&!i)nb(ae,U);else{var u=ot(ae,!0),d=s-E;nb(ae,Pe,u.top+(re===it?d:0)+rt,u.left+(re===it?0:d)+rt)}ut(r||i?F:H),q!==z&&c<1&&r||g(j+(1!==c||i?0:q))}}else g(j+q*c);!de||p.tween||Be||De||y.restart(!0),C&&(a||ue&&c&&(c<1||!We))&&Ee(C.targets).forEach(function(e){return e.classList[r||ue?"add":"remove"](C.className)}),!w||ge||e||w(we),o&&!Be?(n=c&&!f?0:1===c?1:1===f?2:3,ge&&(i=!a&&"none"!==xe[n+1]&&xe[n+1]||xe[n],M&&("complete"===i||"reset"===i||i in M)&&("complete"===i?M.pause().totalProgress(1):"reset"===i?M.restart(!0).pause():"restart"===i?M.restart(!0):M[i]()),w&&w(we)),!a&&We||(ne&&a&&ne(we),be[n]&&be[n](we),ue&&(1===c?we.kill(!1,1):be[n]=0),a||be[n=1===c?1:3]&&be[n](we))):ge&&w&&!Be&&w(we)}m&&(v(s+(L._isFlipped?1:0)),m(s))},we.enable=function(e,t){we.enabled||(we.enabled=!0,Ca(he,"resize",Oa),Ca(he,"scroll",Na),f&&Ca(ScrollTrigger,"refreshInit",f),!1!==e&&(we.progress=G=0,k=_=Oe=we.scroll()),!1!==t&&we.refresh())},we.getTween=function(e){return e&&p?p.tween:K},we.disable=function(e,t){if(we.enabled&&(!1!==e&&we.revert(),we.enabled=we.isActive=!1,t||K&&K.pause(),ee=0,n&&(n.uncache=1),f&&Da(ScrollTrigger,"refreshInit",f),y&&(y.pause(),p.tween&&p.tween.kill()&&(p.tween=0)),!ve)){for(var r=lt.length;r--;)if(lt[r].scroller===he&&lt[r]!==we)return;Da(he,"resize",Oa),Da(he,"scroll",Na)}},we.kill=function(e,t){we.disable(e,t),o&&delete ct[o];var r=lt.indexOf(we);lt.splice(r,1),r===Le&&0<ft&&Le--,M&&(M.scrollTrigger=null,e&&M.render(-1),t||M.kill()),B&&[B,I,L,R].forEac
23745h(function(e){return e.parentNode&&e.parentNode.removeChild(e)}),ae&&(n&&(n.uncache=1),r=0,lt.forEach(function(e){return e.pin===ae&&r++}),r||(n.spacer=0))},we.enable(!1,!1),M&&M.add&&!z?Se.delayedCall(.01,function(){return E||A||we.refresh()})&&(z=.01)&&(E=A=0):we.refresh()}else this.update=this.refresh=this.kill=J},ScrollTrigger.register=function register(e){if(!o&&(Se=e||M(),L()&&window.document&&(Me=window,ke=document,_e=ke.documentElement,Pe=ke.body),Se&&(Ee=Se.utils.toArray,Ne=Se.utils.clamp,ze=Se.core.suppressOverwrites||J,Se.core.globals("ScrollTrigger",ScrollTrigger),Pe))){s=Me.requestAnimationFrame||function(e){return setTimeout(e,16)},Ca(Me,"wheel",Na),i=[Me,ke,_e,Pe],Ca(ke,"scroll",Na);var t,r=Pe.style,n=r.borderTop;r.borderTop="1px solid #000",t=ot(Pe),it.m=Math.round(t.top+it.sc())||0,nt.m=Math.round(t.left+nt.sc())||0,n?r.borderTop=n:r.removeProperty("border-top"),c=setInterval(Ma,200),Se.delayedCall(.5,function(){return De=0}),Ca(ke,"touchcancel",J),Ca(Pe,"touchstart",J),Ba(Ca,ke,"pointerdown,touchstart,mousedown",function(){return Ie=1}),Ba(Ca,ke,"pointerup,touchend,mouseup",function(){return Ie=0}),f=Se.utils.checkPrefix("transform"),H.push(f),o=He(),a=Se.delayedCall(.2,R).pause(),p=[ke,"visibilitychange",function(){var e=Me.innerWidth,t=Me.innerHeight;ke.hidden?(u=e,d=t):u===e&&d===t||Oa()},ke,"DOMContentLoaded",R,Me,"load",function(){return Ue||R()},Me,"resize",Oa],U(Ca)}return o},ScrollTrigger.defaults=function defaults(e){for(var t in e)st[t]=e[t]},ScrollTrigger.kill=function kill(){Ye=0,lt.slice(0).forEach(function(e){return e.kill(1)})},ScrollTrigger.config=function config(e){"limitCallbacks"in e&&(We=!!e.limitCallbacks);var t=e.syncInterval;t&&clearInterval(c)||(c=t)&&setInterval(Ma,t),"autoRefreshEvents"in e&&(U(Da)||U(Ca,e.autoRefreshEvents||"none"),r=-1===(e.autoRefreshEvents+"").indexOf("resize"))},ScrollTrigger.scrollerProxy=function scrollerProxy(e,t){var r=Ee(e)[0],n=h.indexOf(r),i=N(r);~n&&h.splice(n,i?6:2),i?Fe.unshift(Me,t,Pe,t,_e,t):Fe.unshift(r,t)},ScrollTrigger.matchMedia=function matchMedia(e){var t,r,n,i,o;for(r in e)n=_.indexOf(r),i=e[r],"all"===(Ve=r)?i():(t=Me.matchMedia(r))&&(t.matches&&(o=i()),~n?(_[n+1]=$(_[n+1],i),_[n+2]=$(_[n+2],o)):(n=_.length,_.push(r,i,o),t.addListener?t.addListener(Ua):t.addEventListener("change",Ua)),_[n+3]=t.matches),Ve=0;return _},ScrollTrigger.clearMatchMedia=function clearMatchMedia(e){e||(_.length=0),0<=(e=_.indexOf(e))&&_.splice(e,4)},ScrollTrigger);function ScrollTrigger(e,t){o||ScrollTrigger.register(Se)||console.warn("Please gsap.registerPlugin(ScrollTrigger)"),this.init(e,t)}G.version="3.7.0",G.saveStyles=function(e){return e?Ee(e).forEach(function(e){if(e&&e.style){var t=A.indexOf(e);0<=t&&A.splice(t,5),A.push(e,e.style.cssText,e.getBBox&&e.getAttribute("transform"),Se.core.getCache(e),Ve)}}):A},G.revert=function(e,t){return I(!e,t)},G.create=function(e,t){return new G(e,t)},G.refresh=function(e){return e?Oa():R(!0)},G.update=D,G.maxScroll=function(e,t){return T(e,t?nt:it)},G.getScrollFunc=function(e,t){return P(Ee(e)[0],t?nt:it)},G.getById=function(e){return ct[e]},G.getAll=function(){return lt.slice(0)},G.isScrolling=function(){return!!Ue},G.addEventListener=function(e,t){var r=S[e]||(S[e]=[]);~r.indexOf(t)||r.push(t)},G.removeEventListener=function(e,t){var r=S[e],n=r&&r.indexOf(t);0<=n&&r.splice(n,1)},G.batch=function(e,t){function Hi(e,t){var r=[],n=[],i=Se.delayedCall(o,function(){t(r,n),r=[],n=[]}).pause();return function(e){r.length||i.restart(!0),r.push(e.trigger),n.push(e),a<=r.length&&i.progress(1)}}var r,n=[],i={},o=t.interval||.016,a=t.batchMax||1e9;for(r in t)i[r]="on"===r.substr(0,2)&&W(t[r])&&"onRefreshInit"!==r?Hi(0,t[r]):t[r];return W(a)&&(a=a(),Ca(G,"refresh",function(){return a=t.batchMax()})),Ee(e).forEach(function(e){var t={};for(r in i)t[r]=i[r];t.trigger=e,n.push(G.create(t))}),n},G.sort=function(e){return lt.sort(e||function(e,t){return-1e6*(e.vars.refreshPriority||0)+e.start-(t.start+-1e6*(t.vars.refreshPriority||0))})},M()&&Se.registerPlugin(G),e.ScrollTrigger=G,e.default=G;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esMo
23745dule",{value:!0})} else {delete e.default}});
23746
23747
23748/*SIGUIENTE LIBRERIA*/
23749(function (global, factory) {
23750	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
23751	typeof define === 'function' && define.amd ? define(['exports'], factory) :
23752	(global = global || self, factory(global.window = global.window || {}));
23753}(this, (function (exports) { 'use strict';
23754
23755	var _trimExp = /(^\s+|\s+$)/g;
23756	var emojiExp = /([\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}|\uD83D\uDC69(?:\u200D(?:(?:\uD83D\uDC69\u200D)?\uD83D\uDC67|(?:\uD83D\uDC69\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]\uFE0F|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC6F\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3C-\uDD3E\uDDD6-\uDDDF])\u200D[\u2640\u2642]\uFE0F|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F\u200D[\u2640\u2642]|(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642])\uFE0F|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC69\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708]))\uFE0F|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83D\uDC69\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]))|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\u200D(?:(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uD
23756FC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDD1-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])?|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])\uFE0F)/;
23757	function getText(e) {
23758	  var type = e.nodeType,
23759	      result = "";
23760
23761	  if (type === 1 || type === 9 || type === 11) {
23762	    if (typeof e.textContent === "string") {
23763	      return e.textContent;
23764	    } else {
23765	      for (e = e.firstChild; e; e = e.nextSibling) {
23766	        result += getText(e);
23767	      }
23768	    }
23769	  } else if (type === 3 || type === 4) {
23770	    return e.nodeValue;
23771	  }
23772
23773	  return result;
23774	}
23775	function splitInnerHTML(element, delimiter, trim) {
23776	  var node = element.firstChild,
23777	      result = [];
23778
23779	  while (node) {
23780	    if (node.nodeType === 3) {
23781	      result.push.apply(result, emojiSafeSplit((node.nodeValue + "").replace(/^\n+/g, "").replace(/\s+/g, " "), delimiter, trim));
23782	    } else if ((node.nodeName + "").toLowerCase() === "br") {
23783	      result[result.length - 1] += "<br>";
23784	    } else {
23785	      result.push(node.outerHTML);
23786	    }
23787
23788	    node = node.nextSibling;
23789	  }
23790
23791	  return result;
23792	}
23793	function emojiSafeSplit(text, delimiter, trim) {
23794	  text += "";
23795
23796	  if (trim) {
23797	    text = text.replace(_trimExp, "");
23798	  }
23799
23800	  if (delimiter && delimiter !== "") {
23801	    return text.replace(/>/g, "&gt;").replace(/</g, "&lt;").split(delimiter);
23802	  }
23803
23804	  var result = [],
23805	      l = text.length,
23806	      i = 0,
23807	      j,
23808	      character;
23809
23810	  for (; i < l; i++) {
23811	    character = text.charAt(i);
23812
23813	    if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {
23814	      j = ((text.substr(i, 12).split(emojiExp) || [])[1] || "").length || 2;
23815	      character = text.substr(i, j);
23816	      result.emoji = 1;
23817	      i += j - 1;
23818	    }
23819
23820	    result.push(character === ">" ? "&gt;" : character === "<" ? "&lt;" : character);
23821	  }
23822
23823	  return result;
23824	}
23825
23826	/*!
23827	 * TextPlugin 3.7.0
23828	 * https://greensock.com
23829	 *
23830	 * @license Copyright 2008-2021, GreenSock. All rights reserved.
23831	 * Subject to the terms at https://greensock.com/standard-license or for
23832	 * Club GreenSock members, the agreement issued with that membership.
23833	 * @author: Jack Doyle, [email protected]
23834	*/
23835
23836	var gsap,
23837	    _tempDiv,
23838	    _getGSAP = function _getGSAP() {
23839	  return gsap || typeof window !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap;
23840	};
23841
23842	var TextPlugin = {
23843	  version: "3.7.0",
23844	  name: "text",
23845	  init: function init(target, value, tween) {
23846	    var i = target.nodeName.toUpperCase(),
23847	        data = this,
23848	        _short,
23849	        text,
23850	        original,
23851	        j,
23852	        condensedText,
23853	        condensedOriginal,
23854	        aggregate,
23855	        s;
23856
23857	    data.svg = target.getBBox && (i === "TEXT" || i === "TSPAN");
23858
23859	    if (!("innerHTML" in target) && !data.svg) {
23860	      return false;
23861	    }
23862
23863	    data.target = target;
23864
23865	    if (typeof value !== "object") {
23866	      value = {
23867	        value: value
23868	      };
23869	    }
23870
23871	    if (!("value" in value)) {
23872	      data.text = data.original = [""];
23873	      return;
23874	    }
23875
23876	    data.delimiter = value.delimiter || "";
23877	    original = splitInnerHTML(target, data.delimiter);
23878
23879	    if (!_tempDiv) {
23880	      _tempDiv = document.createElement("div");
23881	    }
23882
23883	    _tempDiv.innerHTML = value.value;
23884	    text = splitInnerHTML(_tempDiv, data.delimiter);
23885	    data.from = tween._from;
23886
23887	    if (data.from) {
23888	      i = original;
23889	      original = text;
23890	      text = i;
23891	    }
23892
23893	    data.hasClass = !!(value.newClass || value.oldClass);
23894	    data.newClass = value.newClass;
23895	    data.oldClass = value.oldClass;
23896	    i = original.length - text.length;
23897	    _short = i < 0 ? original : text;
23898	    data.fillChar = value.fillChar || (value.padSpace ? "&nbsp;" : "");
23899
23900	    if (i < 0) {
23901	      i = -i;
23902	    }
23903
23904	    while (--i > -1) {
23905	      _short.push(data.fillChar);
23906	    }
23907
23908	    if (value.type === "diff") {
23909	      j = 0;
23910	      condensedText = [];
23911	      condensedOriginal = [];
23912	      aggregate = "";
23913
23914	      for (i = 0; i < text.length; i++) {
23915	        s = text[i];
23916
23917	        if (s === original[i]) {
23918	          aggregate += s;
23919	        } else {
23920	          condensedText[j] = aggregate + s;
23921	          condensedOriginal[j++] = aggregate + original[i];
23922	          aggregate = "";
23923	        }
23924	      }
23925
23926	      text = condensedText;
23927	      original = condensedOriginal;
23928
23929	      if (aggregate) {
23930	        text.push(aggregate);
23931	        original.push(aggregate);
23932	      }
23933	    }
23934
23935	    if (value.speed) {
23936	      tween.duration(Math.min(0.05 / value.speed * _short.length, value.maxDuration || 9999));
23937	    }
23938
23939	    this.original = original;
23940	    this.text = text;
23941
23942	    this._props.push("text");
23943	  },
23944	  render: function render(ratio, data) {
23945	    if (ratio > 1) {
23946	      ratio = 1;
23947	    } else if (ratio < 0) {
23948	      ratio = 0;
23949	    }
23950
23951	    if (data.from) {
23952	      ratio = 1 - ratio;
23953	    }
23954
23955	    var text = data.text,
23956	        hasClass = data.hasClass,
23957	        newClass = data.newClass,
23958	        oldClass = data.oldClass,
23959	        delimiter = data.delimiter,
23960	        target = data.target,
23961	        fillChar = data.fillChar,
23962	        original = data.original,
23963	        l = text.length,
23964	        i = ratio * l + 0.5 | 0,
23965	        applyNew,
23966	        applyOld,
23967	        str;
23968
23969	    if (hasClass) {
23970	      applyNew = newClass && i;
23971	      applyOld = oldClass && i !== l;
23972	      str = (applyNew ? "<span class='" + newClass + "'>" : "") + text.slice(0, i).join(delimiter) + (applyNew ? "</span>" : "") + (applyOld ? "<span class='" + oldClass + "'>" : "") + delimiter + original.slice(i).join(delimiter) + (applyOld ? "</span>" : "");
23973	    } else {
23974	      str = text.slice(0, i).join(delimiter) + delimiter + original.slice(i).join(delimiter);
23975	    }
23976
23977	    if (data.svg) {
23978	      target.textContent = str;
23979	    } else {
23980	      target.innerHTML = fillChar === "&nbsp;" && ~str.indexOf("  ") ? str.split("  ").join("&nbsp;&nbsp;") : str;
23981	    }
23982	  }
23983	};
23984	TextPlugin.splitInnerHTML = splitInnerHTML;
23985	TextPlugin.emojiSafeSplit = emojiSafeSplit;
23986	TextPlugin.getText = getText;
23987	_getGSAP() && gsap.registerPlugin(TextPlugin);
23988
23989	exports.TextPlugin = TextPlugin;
23990	exports.default = TextPlugin;
23991
23992	Object.defineProperty(exports, '__esModule', { value: true });
23993
23994})));
23995
23996/*SIGUIENTE LIBRERIA*/
23997/*!
23998 * TextPlugin 3.7.0
23999 * https://greensock.com
24000 * 
24001 * @license Copyright 2021, GreenSock. All rights reserved.
24002 * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
24003 * @author: Jack Doyle, [email protected]
24004 */
24005
24006!function(D,u){"object"==typeof exports&&"undefined"!=typeof module?u(exports):"function"==typeof define&&define.amd?define(["exports"],u):u((D=D||self).window=D.window||{})}(this,function(D){"use strict";var B=/(^\s+|\s+$)/g,i=/([\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}|\uD83D\uDC69(?:\u200D(?:(?:\uD83D\uDC69\u200D)?\uD83D\uDC67|(?:\uD83D\uDC69\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]\uFE0F|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC6F\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3C-\uDD3E\uDDD6-\uDDDF])\u200D[\u2640\u2642]\uFE0F|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F\u200D[\u2640\u2642]|(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642])\uFE0F|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC69\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708]))\uFE0F|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83D\uDC69\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]))|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\u200D(?:(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uD
24006FC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDD1-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])?|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])\uFE0F)/;function splitInnerHTML(D,u,F){for(var C=D.firstChild,E=[];C;)3===C.nodeType?E.push.apply(E,emojiSafeSplit((C.nodeValue+"").replace(/^\n+/g,"").replace(/\s+/g," "),u,F)):"br"===(C.nodeName+"").toLowerCase()?E[E.length-1]+="<br>":E.push(C.outerHTML),C=C.nextSibling;return E}function emojiSafeSplit(D,u,F){if(D+="",F&&(D=D.replace(B,"")),u&&""!==u)return D.replace(/>/g,"&gt;").replace(/</g,"&lt;").split(u);for(var C,E,e=[],t=D.length,n=0;n<t;n++)(55296<=(E=D.charAt(n)).charCodeAt(0)&&E.charCodeAt(0)<=56319||65024<=D.charCodeAt(n+1)&&D.charCodeAt(n+1)<=65039)&&(C=((D.substr(n,12).split(i)||[])[1]||"").length||2,E=D.substr(n,C),n+=C-(e.emoji=1)),e.push(">"===E?"&gt;":"<"===E?"&lt;":E);return e}var u,l,F={version:"3.7.0",name:"text",init:function init(D,u,F){var C,E,e,t,n,B,i,A,r=D.nodeName.toUpperCase(),s=this;if(s.svg=D.getBBox&&("TEXT"===r||"TSPAN"===r),!("innerHTML"in D||s.svg))return!1;if(s.target=D,"object"!=typeof u&&(u={value:u}),"value"in u){for(s.delimiter=u.delimiter||"",e=splitInnerHTML(D,s.delimiter),(l=l||document.createElement("div")).innerHTML=u.value,E=splitInnerHTML(l,s.delimiter),s.from=F._from,s.from&&(r=e,e=E,E=r),s.hasClass=!(!u.newClass&&!u.oldClass),s.newClass=u.newClass,s.oldClass=u.oldClass,C=(r=e.length-E.length)<0?e:E,s.fillChar=u.fillChar||(u.padSpace?"&nbsp;":""),r<0&&(r=-r);-1<--r;)C.push(s.fillChar);if("diff"===u.type){for(n=[],B=[],i="",r=t=0;r<E.length;r++)(A=E[r])===e[r]?i+=A:(n[t]=i+A,B[t++]=i+e[r],i="");E=n,e=B,i&&(E.push(i),e.push(i))}u.speed&&F.duration(Math.min(.05/u.speed*C.length,u.maxDuration||9999)),this.original=e,this.text=E,this._props.push("text")}else s.text=s.original=[""]},render:function render(D,u){1<D?D=1:D<0&&(D=0),u.from&&(D=1-D);var F,C,E,e=u.text,t=u.hasClass,n=u.newClass,B=u.oldClass,i=u.delimiter,A=u.target,r=u.fillChar,s=u.original,l=e.length,o=D*l+.5|0;E=t?(C=B&&o!==l,((F=n&&o)?"<span class='"+n+"'>":"")+e.slice(0,o).join(i)+(F?"</span>":"")+(C?"<span class='"+B+"'>":"")+i+s.slice(o).join(i)+(C?"</span>":"")):e.slice(0,o).join(i)+i+s.slice(o).join(i),u.svg?A.textContent=E:A.innerHTML="&nbsp;"===r&&~E.indexOf("  ")?E.split("  ").join("&nbsp;&nbsp;"):E}};F.splitInnerHTML=splitInnerHTML,F.emojiSafeSplit=emojiSafeSplit,F.getText=function getText(D){var u=D.nodeType,F="";if(1===u||9===u||11===u){if("string"==typeof D.textContent)return D.textContent;for(D=D.firstChild;D;D=D.nextSibling)F+=getText(D)}else if(3===u||4===u)return D.nodeValue;return F},function _getGSAP(){return u||"undefined"!=typeof window&&(u=window.gsap)&&u.registerPlugin&&u}()&&u.registerPlugin(F),D.TextPlugin=F,D.default=F;if (typeof(window)==="undefined"||window!==D){Object.defineProperty(D,"__esModule",{value:!0})} else {delete D.default}});
24007

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.