(function(){var aa=window,ca=Object,da=Infinity,ea=chartsOfflineJS,fa=Function,ga=chartsOfflineCSS,h=document,ia=isNaN,l=Math,ja=Array,ka=NaN,la=JSON,m=Error,ma=parseInt,na=parseFloat,oa=String;function pa(a,b){return a.width=b}function qa(a,b){return a.floor=b}function ra(a,b){return a.toString=b}function sa(a,b){return a.altKey=b}function ta(a,b){return a.selectedIndex=b}function ua(a,b){return a.clone=b}function va(a,b){return a.bottom=b}function wa(a,b){return a.contains=b}
function n(a,b){return a.display=b}function xa(a,b){return a.height=b}function ya(a,b){return a.right=b}function za(a,b){return a.round=b}function p(a,b){return a.innerHTML=b}function Aa(a,b){return a.value=b}function Ba(a,b){return a.left=b}function Ca(a,b){return a.type=b}function Ea(a,b){return a.tabIndex=b}function Fa(a,b){return a.clientX=b}function Ga(a,b){return a.clientY=b}function Ha(a,b){return a.visibility=b}function Ia(a,b){return a.length=b}function r(a,b){return a.className=b}
function Ja(a,b){return a.target=b}function Ka(a,b){return a.colSpan=b}function La(a,b){return a.onclick=b}
var s="appendChild",Ma="activeElement",Na="getBoundingClientRect",Oa="shift",Pa="classList",t="width",v="replace",Qa="floor",Ra="responseText",Sa="concat",Ta="getDate",w="preventDefault",Ua="insertBefore",Va="match",Wa="getBoxObjectFor",Xa="focus",Ya="createElement",Za="scrollHeight",$a="keyCode",ab="firstChild",bb="forEach",cb="clientLeft",x="setAttribute",db="clientTop",fb="handleEvent",gb="childNodes",hb="bind",ib="getHours",jb="nextSibling",kb="getTime",lb="getElementsByTagName",mb="documentElement",
pb="toString",qb="altKey",rb="propertyIsEnumerable",sb="getDay",tb="selectedIndex",ub="split",y="style",vb="clone",wb="isEnabled",xb="options",yb="scrollWidth",zb="random",Ab="getFullYear",Bb="scrollLeft",A="bottom",Cb="hide",Db="contains",Eb="apply",Fb="tagName",Gb="removeAttribute",Hb="display",Ib="offsetTop",B="height",Jb="nodeValue",Kb="right",D="push",Lb="valueOf",Mb="stringify",Nb="round",Ob="slice",Pb="nodeType",E="getElementById",Qb="innerHTML",Rb="removed",Sb="value",Tb="indexOf",Vb="metaKey",
Wb="nodeName",F="left",Xb="setFullYear",Yb="play",G="type",H="listen",Zb="defaultView",$b="name",ac="parse",bc="clientX",cc="clientY",dc="setDate",ec="scrollTop",fc="stop",I="getMonth",J="length",gc="title",L="prototype",hc="className",ic="clientWidth",jc="document",kc="ctrlKey",lc="visualization",mc="disabled",nc="offsetLeft",M="body",oc="removeChild",N="target",pc="setEnabled",O="call",qc="removeAll",rc="getAttribute",sc="clientHeight",tc="compatMode",uc="currentStyle",vc="substring",wc="shiftKey",
xc="addColumn",Q="parentNode",yc="splice",R="join",zc="getTimezoneOffset",S,Ac=this,Bc=function(a){return void 0!==a},Cc=function(){},Dc=function(a){a.ca=function(){return a.yc?a.yc:a.yc=new a}},Ec=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof ja)return"array";if(a instanceof ca)return b;var c=ca[L][pb][O](a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a[J]&&"undefined"!=typeof a[yc]&&"undefined"!=typeof a[rb]&&!a[rb]("splice"))return"array";if("[object Function]"==
c||"undefined"!=typeof a[O]&&"undefined"!=typeof a[rb]&&!a[rb]("call"))return"function"}else return"null";else if("function"==b&&"undefined"==typeof a[O])return"object";return b},Fc=function(a){return"array"==Ec(a)},Gc=function(a){var b=Ec(a);return"array"==b||"object"==b&&"number"==typeof a[J]},Hc=function(a){return"string"==typeof a},Ic=function(a){return"number"==typeof a},Jc=function(a){return"function"==Ec(a)},Kc=function(a){var b=typeof a;return"object"==b&&null!=a||"function"==b},Nc=function(a){return a[Lc]||
(a[Lc]=++Mc)},Lc="closure_uid_"+(1E9*l[zb]()>>>0),Mc=0,Oc=function(a,b,c){return a[O][Eb](a[hb],arguments)},Pc=function(a,b,c){if(!a)throw m();if(2<arguments[J]){var d=ja[L][Ob][O](arguments,2);return function(){var c=ja[L][Ob][O](arguments);ja[L].unshift[Eb](c,d);return a[Eb](b,c)}}return function(){return a[Eb](b,arguments)}},Qc=function(a,b,c){Qc=fa[L][hb]&&-1!=fa[L][hb][pb]()[Tb]("native code")?Oc:Pc;return Qc[Eb](null,arguments)},Rc=function(a,b){var c=ja[L][Ob][O](arguments,1);return function(){var b=
c[Ob]();b[D][Eb](b,arguments);return a[Eb](this,b)}},Sc=Date.now||function(){return+new Date},T=function(a,b){function c(){}c.prototype=b[L];a.f=b[L];a.prototype=new c;a[L].constructor=a;a.wd=function(a,c,f){return b[L][c][Eb](a,ja[L][Ob][O](arguments,2))}};fa[L].bind=fa[L][hb]||function(a,b){if(1<arguments[J]){var c=ja[L][Ob][O](arguments,1);c.unshift(this,a);return Qc[Eb](null,c)}return Qc(this,a)};var Tc=function(a){if(m.captureStackTrace)m.captureStackTrace(this,Tc);else{var b=m().stack;b&&(this.stack=b)}a&&(this.message=oa(a))};T(Tc,m);Tc[L].name="CustomError";var Uc;var Vc=function(a,b){for(var c=a[ub]("%s"),d="",e=ja[L][Ob][O](arguments,1);e[J]&&1<c[J];)d+=c[Oa]()+e[Oa]();return d+c[R]("%s")},Wc=function(a){return a[v](/^[\s\xa0]+|[\s\xa0]+$/g,"")},dd=function(a){if(!Xc.test(a))return a;-1!=a[Tb]("&")&&(a=a[v](Yc,"&amp;"));-1!=a[Tb]("<")&&(a=a[v](Zc,"&lt;"));-1!=a[Tb](">")&&(a=a[v]($c,"&gt;"));-1!=a[Tb]('"')&&(a=a[v](ad,"&quot;"));-1!=a[Tb]("'")&&(a=a[v](bd,"&#39;"));-1!=a[Tb]("\x00")&&(a=a[v](cd,"&#0;"));return a},Yc=/&/g,Zc=/</g,$c=/>/g,ad=/"/g,bd=/'/g,cd=
/\x00/g,Xc=/[\x00&<>"']/,ed=function(a,b){var c=Bc(void 0)?a.toFixed(void 0):oa(a),d=c[Tb](".");-1==d&&(d=c[J]);d=l.max(0,b-d);return ja(d+1)[R]("0")+c},fd=function(a,b){return a<b?-1:a>b?1:0},gd=function(){return"transform"[v](/\-([a-z])/g,function(a,b){return b.toUpperCase()})},hd=function(a){var b=Hc(void 0)?"undefined"[v](/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1")[v](/\x08/g,"\\x08"):"\\s";return a[v](new RegExp("(^"+(b?"|["+b+"]+":"")+")([a-z])","g"),function(a,b,e){return b+e.toUpperCase()})};var id=function(a,b){b.unshift(a);Tc[O](this,Vc[Eb](null,b));b[Oa]()};T(id,Tc);id[L].name="AssertionError";
var jd=function(a,b,c,d){var e="Assertion failed";if(c)var e=e+(": "+c),f=d;else a&&(e+=": "+a,f=b);throw new id(""+e,f||[]);},U=function(a,b,c){a||jd("",null,b,ja[L][Ob][O](arguments,2));return a},kd=function(a,b){throw new id("Failure"+(a?": "+a:""),ja[L][Ob][O](arguments,1));},ld=function(a,b,c){Kc(a)||jd("Expected object but got %s: %s.",[Ec(a),a],b,ja[L][Ob][O](arguments,2))},md=function(a,b,c,d){a instanceof b||jd("instanceof check failed.",null,c,ja[L][Ob][O](arguments,3))};var nd=ja[L],od=nd[Tb]?function(a,b,c){U(null!=a[J]);return nd[Tb][O](a,b,c)}:function(a,b,c){c=null==c?0:0>c?l.max(0,a[J]+c):c;if(Hc(a))return Hc(b)&&1==b[J]?a[Tb](b,c):-1;for(;c<a[J];c++)if(c in a&&a[c]===b)return c;return-1},pd=nd[bb]?function(a,b,c){U(null!=a[J]);nd[bb][O](a,b,c)}:function(a,b,c){for(var d=a[J],e=Hc(a)?a[ub](""):a,f=0;f<d;f++)f in e&&b[O](c,e[f],f,a)},qd=nd.filter?function(a,b,c){U(null!=a[J]);return nd.filter[O](a,b,c)}:function(a,b,c){for(var d=a[J],e=[],f=0,g=Hc(a)?a[ub](""):
a,k=0;k<d;k++)if(k in g){var q=g[k];b[O](c,q,k,a)&&(e[f++]=q)}return e},rd=nd.some?function(a,b,c){U(null!=a[J]);return nd.some[O](a,b,c)}:function(a,b,c){for(var d=a[J],e=Hc(a)?a[ub](""):a,f=0;f<d;f++)if(f in e&&b[O](c,e[f],f,a))return!0;return!1},sd=nd.every?function(a,b,c){U(null!=a[J]);return nd.every[O](a,b,c)}:function(a,b,c){for(var d=a[J],e=Hc(a)?a[ub](""):a,f=0;f<d;f++)if(f in e&&!b[O](c,e[f],f,a))return!1;return!0},td=function(a,b){return 0<=od(a,b)},ud=function(a,b){var c=od(a,b),d;if(d=
0<=c)U(null!=a[J]),nd[yc][O](a,c,1);return d},vd=function(a){var b=a[J];if(0<b){for(var c=ja(b),d=0;d<b;d++)c[d]=a[d];return c}return[]},xd=function(a,b,c,d){U(null!=a[J]);nd[yc][Eb](a,wd(arguments,1))},wd=function(a,b,c){U(null!=a[J]);return 2>=arguments[J]?nd[Ob][O](a,b):nd[Ob][O](a,b,c)};var yd="StopIteration"in Ac?Ac.StopIteration:m("StopIteration"),zd=function(){};zd[L].a=function(){throw yd;};zd[L].Ib=function(){return this};
var Ad=function(a){if(a instanceof zd)return a;if("function"==typeof a.Ib)return a.Ib(!1);if(Gc(a)){var b=0,c=new zd;c.a=function(){for(;;){if(b>=a[J])throw yd;if(b in a)return a[b++];b++}};return c}throw m("Not implemented");},Bd=function(a,b){if(Gc(a))try{pd(a,b,void 0)}catch(c){if(c!==yd)throw c;}else{a=Ad(a);try{for(;;)b[O](void 0,a.a(),void 0,a)}catch(d){if(d!==yd)throw d;}}};var Cd=function(a,b){for(var c in a)b[O](void 0,a[c],c,a)},Dd=function(a,b){for(var c in a)if(a[c]==b)return!0;return!1},Ed=function(a,b,c){if(b in a)throw m('The object already contains the key "'+b+'"');a[b]=c},Fd="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),Gd=function(a,b){for(var c,d,e=1;e<arguments[J];e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<Fd[J];f++)c=Fd[f],ca[L].hasOwnProperty[O](d,c)&&(a[c]=d[c])}},Hd=function(a){var b=
arguments[J];if(1==b&&Fc(arguments[0]))return Hd[Eb](null,arguments[0]);for(var c={},d=0;d<b;d++)c[arguments[d]]=!0;return c};var Id=function(a,b){this.T={};this.B=[];this.b=this.a=0;var c=arguments[J];if(1<c){if(c%2)throw m("Uneven number of arguments");for(var d=0;d<c;d+=2)this.set(arguments[d],arguments[d+1])}else if(a){var e;if(a instanceof Id)for(d=Jd(a),Kd(a),e=[],c=0;c<a.B[J];c++)e[D](a.T[a.B[c]]);else{var c=[],f=0;for(d in a)c[f++]=d;d=c;c=[];f=0;for(e in a)c[f++]=a[e];e=c}for(c=0;c<d[J];c++)this.set(d[c],e[c])}},Jd=function(a){Kd(a);return a.B[Sa]()};Id[L].clear=function(){this.T={};Ia(this.B,0);this.b=this.a=0};
Id[L].remove=function(a){return Ld(this.T,a)?(delete this.T[a],this.a--,this.b++,this.B[J]>2*this.a&&Kd(this),!0):!1};var Kd=function(a){if(a.a!=a.B[J]){for(var b=0,c=0;b<a.B[J];){var d=a.B[b];Ld(a.T,d)&&(a.B[c++]=d);b++}Ia(a.B,c)}if(a.a!=a.B[J]){for(var e={},c=b=0;b<a.B[J];)d=a.B[b],Ld(e,d)||(a.B[c++]=d,e[d]=1),b++;Ia(a.B,c)}};S=Id[L];S.get=function(a,b){return Ld(this.T,a)?this.T[a]:b};S.set=function(a,b){Ld(this.T,a)||(this.a++,this.B[D](a),this.b++);this.T[a]=b};
S.forEach=function(a,b){for(var c=Jd(this),d=0;d<c[J];d++){var e=c[d],f=this.get(e);a[O](b,f,e,this)}};ua(S,function(){return new Id(this)});S.Ib=function(a){Kd(this);var b=0,c=this.B,d=this.T,e=this.b,f=this,g=new zd;g.a=function(){for(;;){if(e!=f.b)throw m("The map has changed since the iterator was created");if(b>=c[J])throw yd;var g=c[b++];return a?g:d[g]}};return g};var Ld=function(a,b){return ca[L].hasOwnProperty[O](a,b)};var Md;t:{var Nd=Ac.navigator;if(Nd){var Od=Nd.userAgent;if(Od){Md=Od;break t}}Md=""}var Pd=function(a){return-1!=Md[Tb](a)};var Qd,Rd=function(){return Ac.navigator||null},Sd=Pd("Opera")||Pd("OPR"),V=Pd("Trident")||Pd("MSIE"),Td=Pd("Gecko")&&-1==Md.toLowerCase()[Tb]("webkit")&&!(Pd("Trident")||Pd("MSIE")),Ud=-1!=Md.toLowerCase()[Tb]("webkit"),Vd=Rd();Qd=-1!=(Vd&&Vd.platform||"")[Tb]("Mac");
var Wd=!!Rd()&&-1!=(Rd().appVersion||"")[Tb]("X11"),Xd=function(){var a=Ac[jc];return a?a.documentMode:void 0},Yd=function(){var a="",b;if(Sd&&Ac.opera)return a=Ac.opera.version,Jc(a)?a():a;Td?b=/rv\:([^\);]+)(\)|;)/:V?b=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:Ud&&(b=/WebKit\/(\S+)/);b&&(a=(a=b.exec(Md))?a[1]:"");return V&&(b=Xd(),b>na(a))?oa(b):a}(),Zd={},$d=function(a){var b;if(!(b=Zd[a])){b=0;for(var c=Wc(oa(Yd))[ub]("."),d=Wc(oa(a))[ub]("."),e=l.max(c[J],d[J]),f=0;0==b&&f<e;f++){var g=c[f]||"",k=d[f]||
"",q=RegExp("(\\d*)(\\D*)","g"),z=RegExp("(\\d*)(\\D*)","g");do{var u=q.exec(g)||["","",""],C=z.exec(k)||["","",""];if(0==u[0][J]&&0==C[0][J])break;b=fd(0==u[1][J]?0:ma(u[1],10),0==C[1][J]?0:ma(C[1],10))||fd(0==u[2][J],0==C[2][J])||fd(u[2],C[2])}while(0==b)}b=Zd[a]=0<=b}return b},ae=Ac[jc],be=ae&&V?Xd()||("CSS1Compat"==ae[tc]?ma(Yd,10):5):void 0;var ce=function(){this.a=null};ce[L].getChildren=function(){this.a||(this.a={});return this.a};var de={},ee=null,fe=function(a){ee||(ee=new ce,de[""]=ee);var b;if(!(b=de[a])){b=new ce;var c=a.lastIndexOf("."),d=a.substr(c+1);fe(a.substr(0,c)).getChildren()[d]=b;de[a]=b}return b};var ge=function(){};ge[L].ib=!1;ge[L].G=function(){this.ib||(this.ib=!0,this.m())};ge[L].m=function(){if(this.Fa)for(;this.Fa[J];)this.Fa[Oa]()()};var he=function(a){a&&"function"==typeof a.G&&a.G()};var ie=function(a,b){this.e=b;this.b=[];if(a>this.e)throw m("[goog.structs.SimplePool] Initial cannot be greater than max");for(var c=0;c<a;c++)this.b[D](this.a())};T(ie,ge);ie[L].a=function(){return{}};ie[L].c=function(a){if(Kc(a))if(Jc(a.G))a.G();else for(var b in a)delete a[b]};ie[L].m=function(){ie.f.m[O](this);for(var a=this.b;a[J];)this.c(a.pop());delete this.b};var le=function(){this.a=[];this.c=new Id;this.e=new Id;this.i=1;this.h=new ie(0,4E3);this.h.a=function(){return new je};this.l=new ie(0,50);this.l.a=function(){return new ke};var a=this;this.b=new ie(0,2E3);this.b.a=function(){return oa(a.i++)};this.b.c=function(){}};fe("goog.debug.Trace");var ke=function(){this.time=this.count=0};ra(ke[L],function(){var a=[];a[D](this[G]," ",this.count," (",l[Nb](10*this.time)/10," ms)");return a[R]("")});
var je=function(){},oe=function(a,b,c){var d=[];-1==b?d[D]("    "):d[D](me(a.eventTime-b));d[D](" ",ne(a.eventTime-0));if(0==a.a)d[D](" Start        ");else if(1==a.a)d[D](" Done "),d[D](me(a.c-a.startTime)," ms ");else d[D](" Comment      ");d[D](c,a);0<a.b&&d[D]("[VarAlloc ",a.b,"] ");return d[R]("")};ra(je[L],function(){return null==this[G]?this.comment:"["+this[G]+"] "+this.comment});
ra(le[L],function(){for(var a=[],b=-1,c=[],d=0;d<this.a[J];d++){var e=this.a[d];1==e.a&&c.pop();a[D](" ",oe(e,b,c[R]("")));b=e.eventTime;a[D]("\n");0==e.a&&c[D]("|  ")}if(0!=this.c.a){var f=Sc();a[D](" Unstopped timers:\n");Bd(this.c,function(b){a[D]("  ",b," (",f-b.startTime," ms, started at ",ne(b.startTime),")\n")})}b=Jd(this.e);for(d=0;d<b[J];d++)c=this.e.get(b[d]),1<c.count&&a[D](" TOTAL ",c,"\n");a[D]("Total tracers created ",0,"\n","Total comments created ",0,"\n","Overhead start: ",0," ms\n",
"Overhead end: ",0," ms\n","Overhead comment: ",0," ms\n");return a[R]("")});var me=function(a){a=l[Nb](a);var b="";1E3>a&&(b=" ");100>a&&(b="  ");10>a&&(b="   ");return b+a},ne=function(a){a=l[Nb](a);return oa(100+a/1E3%60)[vc](1,3)+"."+oa(1E3+a%1E3)[vc](1,4)};new le;var pe=function(a){pe[" "](a);return a};pe[" "]=Cc;var qe=!V||V&&9<=be,re=!V||V&&9<=be,se=V&&!$d("9");!Ud||$d("528");Td&&$d("1.9b")||V&&$d("8")||Sd&&$d("9.5")||Ud&&$d("528");Td&&!$d("8")||V&&$d("9");var te=function(a,b){Ca(this,a);Ja(this,b);this.b=this[N];this.h=!1;this.pc=!0};te[L].G=function(){};te[L].e=function(){this.h=!0};te[L].preventDefault=function(){this.pc=!1};var ve=function(a,b){te[O](this,a?a[G]:"");Ja(this,null);this.i=this.b=null;Fa(this,0);Ga(this,0);this.a=0;this.ctrlKey=!1;sa(this,!1);this.l=this.metaKey=this.shiftKey=!1;this.c=null;a&&ue(this,a,b)};T(ve,te);
var we=[1,4,2],ue=function(a,b,c){var d=Ca(a,b[G]);Ja(a,b[N]||b.srcElement);a.b=c;if(c=b.relatedTarget){if(Td){var e;t:{try{pe(c[Wb]);e=!0;break t}catch(f){}e=!1}e||(c=null)}}else"mouseover"==d?c=b.fromElement:"mouseout"==d&&(c=b.toElement);a.i=c;Fa(a,void 0!==b[bc]?b[bc]:b.pageX);Ga(a,void 0!==b[cc]?b[cc]:b.pageY);a.a=b[$a]||0;a.ctrlKey=b[kc];sa(a,b[qb]);a.shiftKey=b[wc];a.metaKey=b[Vb];a.l=Qd?b[Vb]:b[kc];a.c=b;b.defaultPrevented&&a[w]()},xe=function(a){return(qe?0==a.c.button:"click"==a[G]?!0:!!(a.c.button&
we[0]))&&!(Ud&&Qd&&a[kc])};ve[L].e=function(){ve.f.e[O](this);this.c.stopPropagation?this.c.stopPropagation():this.c.cancelBubble=!0};ve[L].preventDefault=function(){ve.f[w][O](this);var a=this.c;if(a[w])a[w]();else if(a.returnValue=!1,se)try{if(a[kc]||112<=a[$a]&&123>=a[$a])a.keyCode=-1}catch(b){}};var ye="closure_listenable_"+(1E6*l[zb]()|0),ze=function(a){return!(!a||!a[ye])},Ae=0;var Be=function(a,b,c,d,e){this.pa=a;this.proxy=null;this.src=b;Ca(this,c);this.bb=!!d;this.gb=e;this.key=++Ae;this.removed=this.cb=!1},Ce=function(a){a.removed=!0;a.pa=null;a.proxy=null;a.src=null;a.gb=null};var De=function(a){this.src=a;this.a={};this.b=0};De[L].add=function(a,b,c,d,e){var f=a[pb]();a=this.a[f];a||(a=this.a[f]=[],this.b++);var g=Ee(a,b,d,e);-1<g?(b=a[g],c||(b.cb=!1)):(b=new Be(b,this.src,f,!!d,e),b.cb=c,a[D](b));return b};De[L].remove=function(a,b,c,d){a=a[pb]();if(!(a in this.a))return!1;var e=this.a[a];b=Ee(e,b,c,d);return-1<b?(Ce(e[b]),U(null!=e[J]),nd[yc][O](e,b,1),0==e[J]&&(delete this.a[a],this.b--),!0):!1};
var Fe=function(a,b){var c=b[G];if(!(c in a.a))return!1;var d=ud(a.a[c],b);d&&(Ce(b),0==a.a[c][J]&&(delete a.a[c],a.b--));return d};De[L].removeAll=function(a){a=a&&a[pb]();var b=0,c;for(c in this.a)if(!a||c==a){for(var d=this.a[c],e=0;e<d[J];e++)++b,Ce(d[e]);delete this.a[c];this.b--}return b};var Ge=function(a,b,c,d,e){a=a.a[b[pb]()];b=-1;a&&(b=Ee(a,c,d,e));return-1<b?a[b]:null},Ee=function(a,b,c,d){for(var e=0;e<a[J];++e){var f=a[e];if(!f[Rb]&&f.pa==b&&f.bb==!!c&&f.gb==d)return e}return-1};var He="closure_lm_"+(1E6*l[zb]()|0),Ie={},Je=0,Ke=function(a,b,c,d,e){if(Fc(b)){for(var f=0;f<b[J];f++)Ke(a,b[f],c,d,e);return null}c=Le(c);return ze(a)?a[H](b,c,d,e):Me(a,b,c,!1,d,e)},Me=function(a,b,c,d,e,f){if(!b)throw m("Invalid event type");var g=!!e,k=Ne(a);k||(a[He]=k=new De(a));c=k.add(b,c,d,e,f);if(c.proxy)return c;d=Oe();c.proxy=d;d.src=a;d.pa=c;a.addEventListener?a.addEventListener(b[pb](),d,g):a.attachEvent(Pe(b[pb]()),d);Je++;return c},Oe=function(){var a=Qe,b=re?function(c){return a[O](b.src,
b.pa,c)}:function(c){c=a[O](b.src,b.pa,c);if(!c)return c};return b},Re=function(a,b,c,d,e){if(Fc(b))for(var f=0;f<b[J];f++)Re(a,b[f],c,d,e);else c=Le(c),ze(a)?a.Y.add(oa(b),c,!0,d,e):Me(a,b,c,!0,d,e)},Se=function(a,b,c,d,e){if(Fc(b))for(var f=0;f<b[J];f++)Se(a,b[f],c,d,e);else c=Le(c),ze(a)?a.A(b,c,d,e):a&&(a=Ne(a))&&(b=Ge(a,b,c,!!d,e))&&Te(b)},Te=function(a){if(Ic(a)||!a||a[Rb])return!1;var b=a.src;if(ze(b))return Fe(b.Y,a);var c=a[G],d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.bb):
b.detachEvent&&b.detachEvent(Pe(c),d);Je--;(c=Ne(b))?(Fe(c,a),0==c.b&&(c.src=null,b[He]=null)):Ce(a);return!0},Pe=function(a){return a in Ie?Ie[a]:Ie[a]="on"+a},Ve=function(a,b,c,d){var e=1;if(a=Ne(a))if(b=a.a[b[pb]()])for(b=b[Sa](),a=0;a<b[J];a++){var f=b[a];f&&f.bb==c&&!f[Rb]&&(e&=!1!==Ue(f,d))}return Boolean(e)},Ue=function(a,b){var c=a.pa,d=a.gb||a.src;a.cb&&Te(a);return c[O](d,b)},Qe=function(a,b){if(a[Rb])return!0;if(!re){var c;if(!(c=b))t:{c=["window","event"];for(var d=Ac,e;e=c[Oa]();)if(null!=
d[e])d=d[e];else{c=null;break t}c=d}e=c;c=new ve(e,this);d=!0;if(!(0>e[$a]||void 0!=e.returnValue)){t:{var f=!1;if(0==e[$a])try{e.keyCode=-1;break t}catch(g){f=!0}if(f||void 0==e.returnValue)e.returnValue=!0}e=[];for(f=c.b;f;f=f[Q])e[D](f);for(var f=a[G],k=e[J]-1;!c.h&&0<=k;k--)c.b=e[k],d&=Ve(e[k],f,!0,c);for(k=0;!c.h&&k<e[J];k++)c.b=e[k],d&=Ve(e[k],f,!1,c)}return d}return Ue(a,new ve(b,this))},Ne=function(a){a=a[He];return a instanceof De?a:null},We="__closure_events_fn_"+(1E9*l[zb]()>>>0),Le=function(a){U(a,
"Listener can not be null.");if(Jc(a))return a;U(a[fb],"An object listener must have handleEvent method.");a[We]||(a[We]=function(b){return a[fb](b)});return a[We]};var W=function(a,b){this.x=Bc(a)?a:0;this.y=Bc(b)?b:0};ua(W[L],function(){return new W(this.x,this.y)});ra(W[L],function(){return"("+this.x+", "+this.y+")"});var Xe=function(a,b){return new W(a.x-b.x,a.y-b.y)};qa(W[L],function(){this.x=l[Qa](this.x);this.y=l[Qa](this.y);return this});za(W[L],function(){this.x=l[Nb](this.x);this.y=l[Nb](this.y);return this});var Ye=function(a,b){pa(this,a);xa(this,b)};ua(Ye[L],function(){return new Ye(this[t],this[B])});ra(Ye[L],function(){return"("+this[t]+" x "+this[B]+")"});qa(Ye[L],function(){pa(this,l[Qa](this[t]));xa(this,l[Qa](this[B]));return this});za(Ye[L],function(){pa(this,l[Nb](this[t]));xa(this,l[Nb](this[B]));return this});var Ze=!V||V&&9<=be,$e=!Td&&!V||V&&V&&9<=be||Td&&$d("1.9.1"),af=V&&!$d("9");var df=function(a){return a?new bf(cf(a)):Uc||(Uc=new bf)},ff=function(a,b){var c=b||h,d=null;c.querySelectorAll&&c.querySelector?d=c.querySelector("."+a):d=ef(h,"*",a,b)[0];return d||null},ef=function(a,b,c,d){a=d||a;b=b&&"*"!=b?b.toUpperCase():"";if(a.querySelectorAll&&a.querySelector&&(b||c))return a.querySelectorAll(b+(c?"."+c:""));if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};for(var e=0,f=0,g;g=a[f];f++)b==g[Wb]&&(d[e++]=g);Ia(d,e);return d}return a}a=a[lb](b||"*");
if(c){d={};for(f=e=0;g=a[f];f++)b=g[hc],"function"==typeof b[ub]&&td(b[ub](/\s+/),c)&&(d[e++]=g);Ia(d,e);return d}return a},hf=function(a,b){Cd(b,function(b,d){"style"==d?a[y].cssText=b:"class"==d?r(a,b):"for"==d?a.htmlFor=b:d in gf?a[x](gf[d],b):0==d.lastIndexOf("aria-",0)||0==d.lastIndexOf("data-",0)?a[x](d,b):a[d]=b})},gf={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",role:"role",rowspan:"rowSpan",type:"type",
usemap:"useMap",valign:"vAlign",width:"width"},jf=function(a){a=(a||aa)[jc];a="CSS1Compat"==a[tc]?a[mb]:a[M];return new Ye(a[ic],a[sc])},kf=function(a){return Ud||"CSS1Compat"!=a[tc]?a[M]||a[mb]:a[mb]},mf=function(a){return a?lf(a):aa},lf=function(a){return a.parentWindow||a[Zb]},of=function(a,b,c){return nf(h,arguments)},nf=function(a,b){var c=b[0],d=b[1];if(!Ze&&d&&(d[$b]||d[G])){c=["<",c];d[$b]&&c[D](' name="',dd(d[$b]),'"');if(d[G]){c[D](' type="',dd(d[G]),'"');var e={};Gd(e,d);delete e[G];d=
e}c[D](">");c=c[R]("")}c=a[Ya](c);d&&(Hc(d)?r(c,d):Fc(d)?r(c,d[R](" ")):hf(c,d));2<b[J]&&pf(a,c,b,2);return c},pf=function(a,b,c,d){function e(c){c&&b[s](Hc(c)?a.createTextNode(c):c)}for(;d<c[J];d++){var f=c[d];!Gc(f)||Kc(f)&&0<f[Pb]?e(f):pd(qf(f)?vd(f):f,e)}},rf=function(a,b){pf(cf(a),a,arguments,1)},sf=function(a){for(var b;b=a[ab];)a[oc](b)},tf=function(a){return a&&a[Q]?a[Q][oc](a):null},uf=function(a,b){if(a[Db]&&1==b[Pb])return a==b||a[Db](b);if("undefined"!=typeof a.compareDocumentPosition)return a==
b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b[Q];return b==a},cf=function(a){U(a,"Node cannot be null or undefined.");return 9==a[Pb]?a:a.ownerDocument||a[jc]},vf=function(a,b){U(null!=a,"goog.dom.setTextContent expects a non-null value for node");if("textContent"in a)a.textContent=b;else if(3==a[Pb])a.data=b;else if(a[ab]&&3==a[ab][Pb]){for(;a.lastChild!=a[ab];)a[oc](a.lastChild);a[ab].data=b}else{sf(a);var c=cf(a);a[s](c.createTextNode(oa(b)))}},wf={SCRIPT:1,STYLE:1,HEAD:1,IFRAME:1,
OBJECT:1},xf={IMG:" ",BR:"\n"},yf=function(a,b){b?Ea(a,0):(Ea(a,-1),a[Gb]("tabIndex"))},zf=function(a){a=a.getAttributeNode("tabindex");return null!=a&&a.specified},Af=function(a){a=a.tabIndex;return Ic(a)&&0<=a&&32768>a},Cf=function(a){if(af&&"innerText"in a)a=a.innerText[v](/(\r\n|\r|\n)/g,"\n");else{var b=[];Bf(a,b,!0);a=b[R]("")}a=a[v](/ \xAD /g," ")[v](/\xAD/g,"");a=a[v](/\u200B/g,"");af||(a=a[v](/ +/g," "));" "!=a&&(a=a[v](/^\s*/,""));return a},Bf=function(a,b,c){if(!(a[Wb]in wf))if(3==a[Pb])c?
b[D](oa(a[Jb])[v](/(\r\n|\r|\n)/g,"")):b[D](a[Jb]);else if(a[Wb]in xf)b[D](xf[a[Wb]]);else for(a=a[ab];a;)Bf(a,b,c),a=a[jb]},qf=function(a){if(a&&"number"==typeof a[J]){if(Kc(a))return"function"==typeof a.item||"string"==typeof a.item;if(Jc(a))return"function"==typeof a.item}return!1},bf=function(a){this.a=a||Ac[jc]||h};bf[L].d=function(a){return Hc(a)?this.a[E](a):a};bf[L].b=function(a,b,c){return nf(this.a,arguments)};
var Df=function(a,b){return a.a[Ya](b)},Ef=function(a){return"CSS1Compat"==a.a[tc]},Ff=function(a){var b=a.a;a=kf(b);b=lf(b);return V&&$d("10")&&b.pageYOffset!=a[ec]?new W(a[Bb],a[ec]):new W(b.pageXOffset||a[Bb],b.pageYOffset||a[ec])};bf[L].appendChild=function(a,b){a[s](b)};bf[L].c=tf;bf[L].getChildren=function(a){return $e&&void 0!=a.children?a.children:qd(a[gb],function(a){return 1==a[Pb]})};wa(bf[L],uf);var Gf=function(a,b,c,d){this.top=a;ya(this,b);va(this,c);Ba(this,d)};S=Gf[L];ua(S,function(){return new Gf(this.top,this[Kb],this[A],this[F])});ra(S,function(){return"("+this.top+"t, "+this[Kb]+"r, "+this[A]+"b, "+this[F]+"l)"});wa(S,function(a){return this&&a?a instanceof Gf?a[F]>=this[F]&&a[Kb]<=this[Kb]&&a.top>=this.top&&a[A]<=this[A]:a.x>=this[F]&&a.x<=this[Kb]&&a.y>=this.top&&a.y<=this[A]:!1});
qa(S,function(){this.top=l[Qa](this.top);ya(this,l[Qa](this[Kb]));va(this,l[Qa](this[A]));Ba(this,l[Qa](this[F]));return this});za(S,function(){this.top=l[Nb](this.top);ya(this,l[Nb](this[Kb]));va(this,l[Nb](this[A]));Ba(this,l[Nb](this[F]));return this});var Hf=function(a,b,c,d){Ba(this,a);this.top=b;pa(this,c);xa(this,d)};S=Hf[L];ua(S,function(){return new Hf(this[F],this.top,this[t],this[B])});ra(S,function(){return"("+this[F]+", "+this.top+" - "+this[t]+"w x "+this[B]+"h)"});wa(S,function(a){return a instanceof Hf?this[F]<=a[F]&&this[F]+this[t]>=a[F]+a[t]&&this.top<=a.top&&this.top+this[B]>=a.top+a[B]:a.x>=this[F]&&a.x<=this[F]+this[t]&&a.y>=this.top&&a.y<=this.top+this[B]});
qa(S,function(){Ba(this,l[Qa](this[F]));this.top=l[Qa](this.top);pa(this,l[Qa](this[t]));xa(this,l[Qa](this[B]));return this});za(S,function(){Ba(this,l[Nb](this[F]));this.top=l[Nb](this.top);pa(this,l[Nb](this[t]));xa(this,l[Nb](this[B]));return this});var If=function(a,b){var c=cf(a);return c[Zb]&&c[Zb].getComputedStyle&&(c=c[Zb].getComputedStyle(a,null))?c[b]||c.getPropertyValue(b)||"":""},Jf=function(a,b){return If(a,b)||(a[uc]?a[uc][b]:null)||a[y]&&a[y][b]},Kf=function(a){return Jf(a,"position")},Mf=function(a,b,c){var d,e=Td&&(Qd||Wd)&&$d("1.9");b instanceof W?(d=b.x,b=b.y):(d=b,b=c);Ba(a[y],Lf(d,e));a[y].top=Lf(b,e)},Nf=function(a){a=a?cf(a):h;return!V||V&&9<=be||Ef(df(a))?a[mb]:a[M]},Of=function(a){var b;try{b=a[Na]()}catch(c){return{left:0,
top:0,right:0,bottom:0}}V&&a.ownerDocument[M]&&(a=a.ownerDocument,Ba(b,b[F]-(a[mb][cb]+a[M][cb])),b.top-=a[mb][db]+a[M][db]);return b},Pf=function(a){if(V&&!(V&&8<=be))return a.offsetParent;var b=cf(a),c=Jf(a,"position"),d="fixed"==c||"absolute"==c;for(a=a[Q];a&&a!=b;a=a[Q])if(c=Jf(a,"position"),d=d&&"static"==c&&a!=b[mb]&&a!=b[M],!d&&(a[yb]>a[ic]||a[Za]>a[sc]||"fixed"==c||"absolute"==c||"relative"==c))return a;return null},Sf=function(a){for(var b=new Gf(0,da,da,0),c=df(a),d=c.a[M],e=c.a[mb],f=kf(c.a);a=
Pf(a);)if(!(V&&0==a[ic]||Ud&&0==a[sc]&&a==d)&&a!=d&&a!=e&&"visible"!=Jf(a,"overflow")){var g=Qf(a),k;k=a;if(Td&&!$d("1.9")){var q=na(If(k,"borderLeftWidth"));if(Rf(k))var z=k.offsetWidth-k[ic]-q-na(If(k,"borderRightWidth")),q=q+z;k=new W(q,na(If(k,"borderTopWidth")))}else k=new W(k[cb],k[db]);g.x+=k.x;g.y+=k.y;b.top=l.max(b.top,g.y);ya(b,l.min(b[Kb],g.x+a[ic]));va(b,l.min(b[A],g.y+a[sc]));Ba(b,l.max(b[F],g.x))}d=f[Bb];f=f[ec];Ba(b,l.max(b[F],d));b.top=l.max(b.top,f);c=jf(lf(c.a));ya(b,l.min(b[Kb],
d+c[t]));va(b,l.min(b[A],f+c[B]));return 0<=b.top&&0<=b[F]&&b[A]>b.top&&b[Kb]>b[F]?b:null},Qf=function(a){var b,c=cf(a),d=Jf(a,"position");ld(a,"Parameter is required");var e=Td&&c[Wa]&&!a[Na]&&"absolute"==d&&(b=c[Wa](a))&&(0>b.screenX||0>b.screenY),f=new W(0,0),g=Nf(c);if(a==g)return f;if(a[Na])b=Of(a),a=Ff(df(c)),f.x=b[F]+a.x,f.y=b.top+a.y;else if(c[Wa]&&!e)b=c[Wa](a),a=c[Wa](g),f.x=b.screenX-a.screenX,f.y=b.screenY-a.screenY;else{b=a;do{f.x+=b[nc];f.y+=b[Ib];b!=a&&(f.x+=b[cb]||0,f.y+=b[db]||0);
if(Ud&&"fixed"==Kf(b)){f.x+=c[M][Bb];f.y+=c[M][ec];break}b=b.offsetParent}while(b&&b!=a);if(Sd||Ud&&"absolute"==d)f.y-=c[M][Ib];for(b=a;(b=Pf(b))&&b!=c[M]&&b!=g;)f.x-=b[Bb],Sd&&"TR"==b[Fb]||(f.y-=b[ec])}return f},Tf=function(a,b,c){if(b instanceof Ye)c=b[B],b=b[t];else if(void 0==c)throw m("missing height argument");pa(a[y],Lf(b,!0));xa(a[y],Lf(c,!0))},Lf=function(a,b){"number"==typeof a&&(a=(b?l[Nb](a):a)+"px");return a},Vf=function(a){var b=Uf;if("none"!=Jf(a,"display"))return b(a);var c=a[y],d=
c[Hb],e=c.visibility,f=c.position;Ha(c,"hidden");c.position="absolute";n(c,"inline");a=b(a);n(c,d);c.position=f;Ha(c,e);return a},Uf=function(a){var b=a.offsetWidth,c=a.offsetHeight,d=Ud&&!b&&!c;return Bc(b)&&!d||!a[Na]?new Ye(b,c):(a=Of(a),new Ye(a[Kb]-a[F],a[A]-a.top))},Wf=function(a,b){var c=a[y];"opacity"in c?c.opacity=b:"MozOpacity"in c?c.MozOpacity=b:"filter"in c&&(c.filter=""===b?"":"alpha(opacity="+100*b+")")},X=function(a,b){n(a[y],b?"":"none")},Rf=function(a){return"rtl"==Jf(a,"direction")},
Xf=Td?"MozUserSelect":Ud?"WebkitUserSelect":null,Yf=function(a,b){var c=b?null:a[lb]("*");if(Xf){var d="none";a[y][Xf]=d;if(c)for(var e=0,f;f=c[e];e++)f[y][Xf]=d}else if(V||Sd)if(d="on",a[x]("unselectable",d),c)for(e=0;f=c[e];e++)f[x]("unselectable",d)},Zf=function(a,b){if(/^\d+px?$/.test(b))return ma(b,10);var c=a[y][F],d=a.runtimeStyle[F];Ba(a.runtimeStyle,a[uc][F]);Ba(a[y],b);var e=a[y].pixelLeft;Ba(a[y],c);Ba(a.runtimeStyle,d);return e},$f=function(a,b){var c=a[uc]?a[uc][b]:null;return c?Zf(a,
c):0},ag={thin:2,medium:4,thick:6},bg=function(a,b){if("none"==(a[uc]?a[uc][b+"Style"]:null))return 0;var c=a[uc]?a[uc][b+"Width"]:null;return c in ag?ag[c]:Zf(a,c)},cg=function(a){if(V&&!(V&&9<=be)){var b=bg(a,"borderLeft"),c=bg(a,"borderRight"),d=bg(a,"borderTop");a=bg(a,"borderBottom");return new Gf(d,c,a,b)}b=If(a,"borderLeftWidth");c=If(a,"borderRightWidth");d=If(a,"borderTopWidth");a=If(a,"borderBottomWidth");return new Gf(na(d),na(c),na(a),na(b))},dg=/matrix\([0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, ([0-9\.\-]+)p?x?, ([0-9\.\-]+)p?x?\)/;var hg=function(a,b,c,d,e,f,g,k,q){U(c);var z=eg(c),u;u=Qf(a);var C=Vf(a);u=new Hf(u.x,u.y,C[t],C[B]);if(C=Sf(a)){var P=new Hf(C[F],C.top,C[Kb]-C[F],C[A]-C.top),C=l.max(u[F],P[F]),K=l.min(u[F]+u[t],P[F]+P[t]);if(C<=K){var ha=l.max(u.top,P.top),P=l.min(u.top+u[B],P.top+P[B]);ha<=P&&(Ba(u,C),u.top=ha,pa(u,K-C),xa(u,P-ha))}}C=df(a);ha=df(c);if(C.a!=ha.a){var K=C.a[M],ha=lf(ha.a),P=new W(0,0),eb=mf(cf(K)),Ub=K;do{var Da;if(eb==ha)Da=Qf(Ub);else{Da=U(Ub);var nb=void 0;if(Da[Na])nb=Of(Da),nb=new W(nb[F],
nb.top);else var nb=Ff(df(Da)),ba=Qf(Da),nb=new W(ba.x-nb.x,ba.y-nb.y);ba=void 0;if(Td&&!$d(12)){ba=void 0;ba=ba=void 0;i:{ba=gd();if(void 0===Da[y][ba]&&(ba=(Ud?"Webkit":Td?"Moz":V?"ms":Sd?"O":null)+hd(ba),void 0!==Da[y][ba])){ba=(Ud?"-webkit":Td?"-moz":V?"-ms":Sd?"-o":null)+"-transform";break i}ba="transform"}ba=(ba=Jf(Da,ba)||Jf(Da,"transform"))?(Da=ba[Va](dg))?new W(na(Da[1]),na(Da[2])):new W(0,0):new W(0,0);ba=new W(nb.x+ba.x,nb.y+ba.y)}else ba=nb;Da=ba}P.x+=Da.x;P.y+=Da.y}while(eb&&eb!=ha&&
(Ub=eb.frameElement)&&(eb=eb.parent));K=Xe(P,Qf(K));!V||V&&9<=be||Ef(C)||(K=Xe(K,Ff(C)));Ba(u,u[F]+K.x);u.top+=K.y}a=fg(a,b);b=new W(a&2?u[F]+u[t]:u[F],a&1?u.top+u[B]:u.top);b=Xe(b,z);e&&(b.x+=(a&2?-1:1)*e.x,b.y+=(a&1?-1:1)*e.y);var ob;if(g)if(q)ob=q;else if(ob=Sf(c))ob.top-=z.y,ya(ob,ob[Kb]-z.x),va(ob,ob[A]-z.y),Ba(ob,ob[F]-z.x);return gg(b,c,d,f,ob,g,k)},eg=function(a){var b;if(a=a.offsetParent){var c="HTML"==a[Fb]||"BODY"==a[Fb];c&&"static"==Kf(a)||(b=Qf(a),c||(c=(c=Rf(a))&&Td?-a[Bb]:!c||V&&$d("8")||
"visible"==Jf(a,"overflowX")?a[Bb]:a[yb]-a[ic]-a[Bb],b=Xe(b,new W(c,a[ec]))))}return b||new W},gg=function(a,b,c,d,e,f,g){a=a[vb]();var k=0,q=fg(b,c);c=Vf(b);g=g?g[vb]():c[vb]();if(d||0!=q)q&2?a.x-=g[t]+(d?d[Kb]:0):d&&(a.x+=d[F]),q&1?a.y-=g[B]+(d?d[A]:0):d&&(a.y+=d.top);if(f&&(e?(k=a,d=0,65==(f&65)&&(k.x<e[F]||k.x>=e[Kb])&&(f&=-2),132==(f&132)&&(k.y<e.top||k.y>=e[A])&&(f&=-5),k.x<e[F]&&f&1&&(k.x=e[F],d|=1),k.x<e[F]&&k.x+g[t]>e[Kb]&&f&16&&(pa(g,l.max(g[t]-(k.x+g[t]-e[Kb]),0)),d|=4),k.x+g[t]>e[Kb]&&
f&1&&(k.x=l.max(e[Kb]-g[t],e[F]),d|=1),f&2&&(d=d|(k.x<e[F]?16:0)|(k.x+g[t]>e[Kb]?32:0)),k.y<e.top&&f&4&&(k.y=e.top,d|=2),k.y<=e.top&&k.y+g[B]<e[A]&&f&32&&(xa(g,l.max(g[B]-(e.top-k.y),0)),k.y=e.top,d|=8),k.y>=e.top&&k.y+g[B]>e[A]&&f&32&&(xa(g,l.max(g[B]-(k.y+g[B]-e[A]),0)),d|=8),k.y+g[B]>e[A]&&f&4&&(k.y=l.max(e[A]-g[B],e.top),d|=2),f&8&&(d=d|(k.y<e.top?64:0)|(k.y+g[B]>e[A]?128:0)),k=d):k=256,k&496))return k;Mf(b,a);c==g||c&&g&&c[t]==g[t]&&c[B]==g[B]||(a=cf(b),e=Ef(df(a)),!V||$d("10")||e&&$d("8")?(b=
b[y],Td?b.MozBoxSizing="border-box":Ud?b.WebkitBoxSizing="border-box":b.boxSizing="border-box",pa(b,l.max(g[t],0)+"px"),xa(b,l.max(g[B],0)+"px")):(a=b[y],e?(V?(e=$f(b,"paddingLeft"),c=$f(b,"paddingRight"),f=$f(b,"paddingTop"),d=$f(b,"paddingBottom"),e=new Gf(f,c,d,e)):(e=If(b,"paddingLeft"),c=If(b,"paddingRight"),f=If(b,"paddingTop"),d=If(b,"paddingBottom"),e=new Gf(na(f),na(c),na(d),na(e))),b=cg(b),a.pixelWidth=g[t]-b[F]-e[F]-e[Kb]-b[Kb],a.pixelHeight=g[B]-b.top-e.top-e[A]-b[A]):(a.pixelWidth=g[t],
a.pixelHeight=g[B])));return k},fg=function(a,b){return(b&4&&Rf(a)?b^2:b)&-5};var ig,jg={xd:"activedescendant",Cd:"atomic",Dd:"autocomplete",Fd:"busy",Id:"checked",Nd:"controls",Qd:"describedby",Td:"disabled",Vd:"dropeffect",Wd:"expanded",Xd:"flowto",Zd:"grabbed",ce:"haspopup",ee:"hidden",ge:"invalid",he:"label",ie:"labelledby",je:"level",oe:"live",De:"multiline",Ee:"multiselectable",Ie:"orientation",Je:"owns",Ke:"posinset",Me:"pressed",Qe:"readonly",Se:"relevant",Te:"required",Ze:"selected",af:"setsize",cf:"sort",qf:"valuemax",rf:"valuemin",sf:"valuenow",tf:"valuetext"};var kg={yd:"alert",zd:"alertdialog",Ad:"application",Bd:"article",Ed:"banner",Gd:"button",Hd:"checkbox",Jd:"columnheader",Kd:"combobox",Ld:"complementary",Md:"contentinfo",Pd:"definition",Rd:"dialog",Sd:"directory",Ud:"document",Yd:"form",$d:"grid",ae:"gridcell",be:"group",de:"heading",fe:"img",ke:"link",le:"list",me:"listbox",ne:"listitem",pe:"log",qe:"main",re:"marquee",se:"math",te:"menu",ue:"menubar",ve:"menuitem",we:"menuitemcheckbox",xe:"menuitemradio",Fe:"navigation",Ge:"note",He:"option",
Le:"presentation",Ne:"progressbar",Oe:"radio",Pe:"radiogroup",Re:"region",Ue:"row",Ve:"rowgroup",We:"rowheader",Xe:"scrollbar",Ye:"search",$e:"separator",bf:"slider",df:"spinbutton",ef:"status",ff:"tab",gf:"tablist",hf:"tabpanel",jf:"textbox",kf:"timer",lf:"toolbar",mf:"tooltip",nf:"tree",of:"treegrid",pf:"treeitem"};var lg=function(a,b){if(b)U(Dd(kg,b),"No such ARIA role "+b),a[x]("role",b);else a[Gb]("role")},ng=function(a,b,c){Gc(c)&&(c=c[R](" "));var d=mg(b);if(""===c||void 0==c)ig||(ig={atomic:!1,autocomplete:"none",dropeffect:"none",haspopup:!1,live:"off",multiline:!1,multiselectable:!1,orientation:"vertical",readonly:!1,relevant:"additions text",required:!1,sort:"none",busy:!1,disabled:!1,hidden:!1,invalid:"false"}),c=ig,b in c?a[x](d,c[b]):a[Gb](d);else a[x](d,c)},mg=function(a){U(a,"ARIA attribute cannot be empty.");
U(Dd(jg,a),"No such ARIA attribute "+a);return"aria-"+a};var og=function(a){if(a[Pa])return a[Pa];a=a[hc];return Hc(a)&&a[Va](/\S+/g)||[]},pg=function(a,b){return a[Pa]?a[Pa][Db](b):td(og(a),b)},qg=function(a,b){a[Pa]?a[Pa].add(b):pg(a,b)||r(a,a[hc]+(0<a[hc][J]?" "+b:b))},rg=function(a,b){if(a[Pa])pd(b,function(b){qg(a,b)});else{var c={};pd(og(a),function(a){c[a]=!0});pd(b,function(a){c[a]=!0});r(a,"");for(var d in c)r(a,a[hc]+(0<a[hc][J]?" "+d:d))}},sg=function(a,b){a[Pa]?a[Pa].remove(b):pg(a,b)&&r(a,qd(og(a),function(a){return a!=b})[R](" "))},tg=function(a,
b){a[Pa]?pd(b,function(b){sg(a,b)}):r(a,qd(og(a),function(a){return!td(b,a)})[R](" "))};Hd("area base br col command embed hr img input keygen link meta param source track wbr".split(" "));var vg=function(){this.a="";this.b=ug;this.c=null};ra(vg[L],function(){return"SafeHtml{"+this.a+"}"});var wg=function(a){if(a instanceof vg&&a.constructor===vg&&a.b===ug)return a.a;kd("expected object of type SafeHtml, got '"+a+"'");return"type_error:SafeHtml"};Hd("action","cite","data","formaction","href","manifest","poster","src");Hd("link","script","style");var ug={},xg=function(a,b){var c=new vg;c.a=a;c.c=b;return c},yg=xg("",0);var Bg=function(a,b,c,d,e){if(!(V||Ud&&$d("525")))return!0;if(Qd&&e)return zg(a);if(e&&!d)return!1;Ic(b)&&(b=Ag(b));if(!c&&(17==b||18==b||Qd&&91==b))return!1;if(Ud&&d&&c)switch(a){case 220:case 219:case 221:case 192:case 186:case 189:case 187:case 188:case 190:case 191:case 192:case 222:return!1}if(V&&d&&b==a)return!1;switch(a){case 13:return!0;case 27:return!Ud}return zg(a)},zg=function(a){if(48<=a&&57>=a||96<=a&&106>=a||65<=a&&90>=a||Ud&&0==a)return!0;switch(a){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return!0;
default:return!1}},Ag=function(a){if(Td)a=Cg(a);else if(Qd&&Ud)t:switch(a){case 93:a=91;break t}return a},Cg=function(a){switch(a){case 61:return 187;case 59:return 186;case 173:return 189;case 224:return 91;case 0:return 224;default:return a}};var Dg=function(a){this.a=a;this.b={}};T(Dg,ge);var Eg=[];S=Dg[L];S.listen=function(a,b,c,d){Fc(b)||(b&&(Eg[0]=b[pb]()),b=Eg);for(var e=0;e<b[J];e++){var f=Ke(a,b[e],c||this[fb],d||!1,this.a||this);if(!f)break;this.b[f.key]=f}return this};S.A=function(a,b,c,d,e){if(Fc(b))for(var f=0;f<b[J];f++)this.A(a,b[f],c,d,e);else c=c||this[fb],e=e||this.a||this,c=Le(c),d=!!d,b=ze(a)?Ge(a.Y,oa(b),c,d,e):a?(a=Ne(a))?Ge(a,b,c,d,e):null:null,b&&(Te(b),delete this.b[b.key]);return this};
S.removeAll=function(){Cd(this.b,Te);this.b={}};S.m=function(){Dg.f.m[O](this);this[qc]()};S.handleEvent=function(){throw m("EventHandler.handleEvent not implemented");};var Fg=function(){this.Y=new De(this);this.kd=this;this.fb=null};T(Fg,ge);Fg[L][ye]=!0;Fg[L].eb=function(a){this.fb=a};Fg[L].removeEventListener=function(a,b,c,d){Se(this,a,b,c,d)};
var Y=function(a,b){Gg(a);var c,d=a.fb;if(d){c=[];for(var e=1;d;d=d.fb)c[D](d),U(1E3>++e,"infinite loop")}var d=a.kd,e=b,f=e[G]||e;if(Hc(e))e=new te(e,d);else if(e instanceof te)Ja(e,e[N]||d);else{var g=e,e=new te(f,d);Gd(e,g)}var g=!0,k;if(c)for(var q=c[J]-1;!e.h&&0<=q;q--)k=e.b=c[q],g=Hg(k,f,!0,e)&&g;e.h||(k=e.b=d,g=Hg(k,f,!0,e)&&g,e.h||(g=Hg(k,f,!1,e)&&g));if(c)for(q=0;!e.h&&q<c[J];q++)k=e.b=c[q],g=Hg(k,f,!1,e)&&g;return g};
Fg[L].m=function(){Fg.f.m[O](this);this.Y&&this.Y[qc](void 0);this.fb=null};Fg[L].listen=function(a,b,c,d){Gg(this);return this.Y.add(oa(a),b,!1,c,d)};Fg[L].A=function(a,b,c,d){return this.Y.remove(oa(a),b,c,d)};var Hg=function(a,b,c,d){b=a.Y.a[oa(b)];if(!b)return!0;b=b[Sa]();for(var e=!0,f=0;f<b[J];++f){var g=b[f];if(g&&!g[Rb]&&g.bb==c){var k=g.pa,q=g.gb||g.src;g.cb&&Fe(a.Y,g);e=!1!==k[O](q,d)&&e}}return e&&!1!=d.pc},Gg=function(a){U(a.Y,"Event target is not initialized. Did you call the superclass (goog.events.EventTarget) constructor?")};var Ig=function(a,b,c){Fg[O](this);Ja(this,a);this.e=b||a;this.c=c||new Hf(ka,ka,ka,ka);this.b=cf(a);this.a=new Dg(this);a=Rc(he,this.a);this.Fa||(this.Fa=[]);this.Fa[D](Bc(void 0)?Qc(a,void 0):a);Ke(this.e,["touchstart","mousedown"],this.bc,!1,this)};T(Ig,Fg);var Jg=V||Td&&$d("1.9.3");S=Ig[L];Fa(S,0);Ga(S,0);S.ic=0;S.jc=0;S.ya=0;S.za=0;S.vb=!0;S.na=!1;S.setEnabled=function(a){this.vb=a};
S.m=function(){Ig.f.m[O](this);Se(this.e,["touchstart","mousedown"],this.bc,!1,this);this.a[qc]();Jg&&this.b.releaseCapture();Ja(this,null);this.e=null};
S.bc=function(a){var b="mousedown"==a[G];if(!this.vb||this.na||b&&!xe(a))Y(this,"earlycancel");else if(Kg(a),Y(this,new Lg("start",this,a[bc],a[cc]))){this.na=!0;a[w]();var b=this.b,c=b[mb],d=!Jg;this.a[H](b,["touchmove","mousemove"],this.i,d);this.a[H](b,["touchend","mouseup"],this.Wa,d);if(Jg)c.setCapture(!1),this.a[H](c,"losecapture",this.Wa);else this.a[H](mf(b),"blur",this.Wa);this.j&&this.a[H](this.j,"scroll",this.l,d);Fa(this,this.ic=a[bc]);Ga(this,this.jc=a[cc]);this.ya=this[N][nc];this.za=
this[N][Ib];this.h=Ff(df(this.b));Sc()}};S.Wa=function(a){this.a[qc]();Jg&&this.b.releaseCapture();if(this.na){Kg(a);this.na=!1;var b=Mg(this,this.ya),c=Ng(this,this.za);Y(this,new Lg("end",this,a[bc],a[cc],0,b,c))}else Y(this,"earlycancel")};var Kg=function(a){var b=a[G];"touchstart"==b||"touchmove"==b?ue(a,a.c.targetTouches[0],a.b):"touchend"!=b&&"touchcancel"!=b||ue(a,a.c.changedTouches[0],a.b)};
Ig[L].i=function(a){if(this.vb){Kg(a);var b=1*(a[bc]-this[bc]),c=a[cc]-this[cc];Fa(this,a[bc]);Ga(this,a[cc]);if(!this.na){var d=this.ic-this[bc],e=this.jc-this[cc];if(0<d*d+e*e)if(Y(this,new Lg("start",this,a[bc],a[cc])))this.na=!0;else{this.ib||this.Wa(a);return}}c=Og(this,b,c);b=c.x;c=c.y;this.na&&Y(this,new Lg("beforedrag",this,a[bc],a[cc],0,b,c))&&(Pg(this,a,b,c),a[w]())}};
var Og=function(a,b,c){var d=Ff(df(a.b));b+=d.x-a.h.x;c+=d.y-a.h.y;a.h=d;a.ya+=b;a.za+=c;b=Mg(a,a.ya);a=Ng(a,a.za);return new W(b,a)};Ig[L].l=function(a){var b=Og(this,0,0);Fa(a,this[bc]);Ga(a,this[cc]);Pg(this,a,b.x,b.y)};
var Pg=function(a,b,c,d){Ba(a[N][y],c+"px");a[N][y].top=d+"px";Y(a,new Lg("drag",a,b[bc],b[cc],0,c,d))},Mg=function(a,b){var c=a.c,d=ia(c[F])?null:c[F],c=ia(c[t])?0:c[t];return l.min(null!=d?d+c:da,l.max(null!=d?d:-da,b))},Ng=function(a,b){var c=a.c,d=ia(c.top)?null:c.top,c=ia(c[B])?0:c[B];return l.min(null!=d?d+c:da,l.max(null!=d?d:-da,b))},Lg=function(a,b,c,d,e,f,g){te[O](this,a);Fa(this,c);Ga(this,d);Ba(this,Bc(f)?f:b.ya);this.top=Bc(g)?g:b.za};T(Lg,te);var Qg=function(a){Fg[O](this);this.g=a;a=V?"focusout":"blur";this.a=Ke(this.g,V?"focusin":"focus",this,!V);this.b=Ke(this.g,a,this,!V)};T(Qg,Fg);Qg[L].handleEvent=function(a){var b=new ve(a.c);Ca(b,"focusin"==a[G]||"focus"==a[G]?"focusin":"focusout");Y(this,b)};Qg[L].m=function(){Qg.f.m[O](this);Te(this.a);Te(this.b);delete this.g};var Rg=function(a,b){if(Jc(a))b&&(a=Qc(a,b));else if(a&&"function"==typeof a[fb])a=Qc(a[fb],a);else throw m("Invalid listener argument");Ac.setTimeout(a,0)};var Sg=function(){};Dc(Sg);Sg[L].a=0;var Ug=function(a){Fg[O](this);this.a=a||df();this.Bb=Tg;this.ea=null;this.n=!1;this.g=null;this.ga=void 0;this.l=this.h=this.e=null;this.gc=!1};T(Ug,Fg);Ug[L].ed=Sg.ca();
var Tg=null,Vg=function(a,b){switch(a){case 1:return b?"disable":"enable";case 2:return b?"highlight":"unhighlight";case 4:return b?"activate":"deactivate";case 8:return b?"select":"unselect";case 16:return b?"check":"uncheck";case 32:return b?"focus":"blur";case 64:return b?"open":"close"}throw m("Invalid component state");},Wg=function(a){return a.ea||(a.ea=":"+(a.ed.a++)[pb](36))},Xg=function(a,b){if(a.e&&a.e.l){var c=a.e.l,d=a.ea;d in c&&delete c[d];Ed(a.e.l,b,a)}a.ea=b};Ug[L].d=function(){return this.g};
var Yg=function(a){a.ga||(a.ga=new Dg(a));return a.ga};Ug[L].eb=function(a){if(this.e&&this.e!=a)throw m("Method not supported");Ug.f.eb[O](this,a)};Ug[L].O=function(){this.g=Df(this.a,"div")};
var Zg=function(a,b,c){if(a.n)throw m("Component already rendered");a.g||a.O();b?b[Ua](a.g,c||null):a.a.a[M][s](a.g);a.e&&!a.e.n||a.s()},$g=function(a,b){if(a.n)throw m("Component already rendered");if(b&&a.Ha(b)){a.gc=!0;var c=cf(b);a.a&&a.a.a==c||(a.a=df(b));a.H(b);a.s()}else throw m("Invalid element to decorate");};S=Ug[L];S.Ha=function(){return!0};S.H=function(a){this.g=a};S.s=function(){this.n=!0;ah(this,function(a){!a.n&&a.d()&&a.s()})};
S.P=function(){ah(this,function(a){a.n&&a.P()});this.ga&&this.ga[qc]();this.n=!1};S.m=function(){this.n&&this.P();this.ga&&(this.ga.G(),delete this.ga);ah(this,function(a){a.G()});!this.gc&&this.g&&tf(this.g);this.e=this.g=this.l=this.h=null;Ug.f.m[O](this)};S.Pb=function(a,b){this.Lb(a,bh(this),b)};
S.Lb=function(a,b,c){U(!!a,"Provided element must not be null.");if(a.n&&(c||!this.n))throw m("Component already rendered");if(0>b||b>bh(this))throw m("Child component index out of bounds");this.l&&this.h||(this.l={},this.h=[]);if(a.e==this){var d=Wg(a);this.l[d]=a;ud(this.h,a)}else Ed(this.l,Wg(a),a);if(a==this)throw m("Unable to set parent component");if(d=this&&a.e&&a.ea){var e=a.e,d=a.ea;e.l&&d?(e=e.l,d=(d in e?e[d]:void 0)||null):d=null}if(d&&a.e!=this)throw m("Unable to set parent component");
a.e=this;Ug.f.eb[O](a,this);xd(this.h,b,0,a);a.n&&this.n&&a.e==this?(c=this.Ga(),c[Ua](a.d(),c[gb][b]||null)):c?(this.g||this.O(),b=ch(this,b+1),Zg(a,this.Ga(),b?b.g:null)):this.n&&!a.n&&a.g&&a.g[Q]&&1==a.g[Q][Pb]&&a.s()};S.Ga=function(){return this.g};var dh=function(a){null==a.Bb&&(a.Bb=Rf(a.n?a.g:a.a.a[M]));return a.Bb},bh=function(a){return a.h?a.h[J]:0},ch=function(a,b){return a.h?a.h[b]||null:null},ah=function(a,b,c){a.h&&pd(a.h,b,c)},eh=function(a,b){return a.h&&b?od(a.h,b):-1};var fh=function(a,b){Fg[O](this);this.a=new Dg(this);if(this.ka)throw m("Can not change this state of the popup while showing.");this.g=a||null;b&&(this.wa=b)};T(fh,Fg);S=fh[L];S.g=null;S.cc=null;S.ka=!1;S.tb=-1;S.wa="toggle_display";S.d=function(){return this.g};
var hh=function(a,b){a.c&&a.c[fc]();a.b&&a.b[fc]();if(b){if(!a.ka&&Y(a,"beforeshow")){if(!a.g)throw m("Caller must call setElement before trying to show the popup");a.e();var c=cf(a.g);a.a[H](c,"mousedown",a.ec,!0);if(V){var d;try{d=c[Ma]}catch(e){}for(;d&&"IFRAME"==d[Wb];){try{var f=d.contentDocument||d.contentWindow[jc]}catch(g){break}c=f;d=c[Ma]}a.a[H](c,"mousedown",a.ec,!0);a.a[H](c,"deactivate",a.dc)}else a.a[H](c,"blur",a.dc);"toggle_display"==a.wa?(Ha(a.g[y],"visible"),X(a.g,!0)):"move_offscreen"==
a.wa&&a.e();a.ka=!0;a.tb=Sc();a.c?(Re(a.c,"end",a.fc,!1,a),a.c[Yb]()):a.fc()}}else gh(a)};fh[L].e=Cc;var gh=function(a,b){a.ka&&Y(a,{type:"beforehide",target:b})&&(a.a&&a.a[qc](),a.ka=!1,Sc(),a.b?(Re(a.b,"end",Rc(a.rc,b),!1,a),a.b[Yb]()):a.rc(b))};S=fh[L];S.rc=function(a){"toggle_display"==this.wa?this.ud():"move_offscreen"==this.wa&&(this.g[y].top="-10000px");Y(this,{type:"hide",target:a})};S.ud=function(){Ha(this.g[y],"hidden");X(this.g,!1)};S.fc=function(){Y(this,"show")};
S.ec=function(a){a=a[N];uf(this.g,a)||ih(this,a)||150>Sc()-this.tb||gh(this,a)};S.dc=function(a){var b=cf(this.g);if("undefined"!=typeof h[Ma]){if(a=b[Ma],!a||uf(this.g,a)||"BODY"==a[Fb])return}else if(a[N]!=b)return;150>Sc()-this.tb||gh(this)};var ih=function(a,b){return rd(a.cc||[],function(a){return b===a||uf(a,b)})};fh[L].m=function(){fh.f.m[O](this);this.a.G();he(this.c);he(this.b);delete this.g;delete this.a;delete this.cc};var jh=function(a,b){Ug[O](this,b);this.ja=!!a;this.k=null};T(jh,Ug);S=jh[L];S.Db=null;S.ma=!1;S.L=null;S.C=null;S.R=null;S.wb=!1;S.o=function(){return"goog-modalpopup"};S.Va=function(){return this.L};S.O=function(){jh.f.O[O](this);var a=this.d();U(a);var b=Wc(this.o())[ub](" ");rg(a,b);yf(a,!0);X(a,!1);kh(this);lh(this)};
var kh=function(a){if(a.ja&&!a.C){var b;b=a.a.b("iframe",{frameborder:0,style:"border:0;vertical-align:bottom;",src:'javascript:""'});a.C=b;r(a.C,a.o()+"-bg");X(a.C,!1);Wf(a.C,0)}a.L||(a.L=a.a.b("div",a.o()+"-bg"),X(a.L,!1))},lh=function(a){a.R||(a.R=Df(a.a,"span"),X(a.R,!1),yf(a.R,!0),a.R[y].position="absolute")};S=jh[L];S.mc=function(){this.wb=!1};S.Ha=function(a){return!!a&&"DIV"==a[Fb]};S.H=function(a){jh.f.H[O](this,a);a=Wc(this.o())[ub](" ");rg(U(this.d()),a);kh(this);lh(this);X(this.d(),!1)};
S.s=function(){U(!!this.L,"Background element must not be null.");if(this.C){var a=this.d();a[Q]&&a[Q][Ua](this.C,a)}a=this.d();a[Q]&&a[Q][Ua](this.L,a);jh.f.s[O](this);a=this.d();a[Q]&&a[Q][Ua](this.R,a[jb]);this.Db=new Qg(this.a.a);Yg(this)[H](this.Db,"focusin",this.onFocus);mh(this,!1)};S.P=function(){this.ma&&this.W(!1);he(this.Db);jh.f.P[O](this);tf(this.C);tf(this.L);tf(this.R)};
S.W=function(a){U(this.n,"ModalPopup must be rendered first.");if(a!=this.ma)if(this.u&&this.u[fc](),this.D&&this.D[fc](),this.p&&this.p[fc](),this.w&&this.w[fc](),this.n&&mh(this,a),a){if(Y(this,"beforeshow")){try{this.k=this.a.a[Ma]}catch(b){}this.Cb();var c=mf(this.a.a)||aa;if("fixed"==Kf(this.d()))var d=a=0;else d=Ff(this.a),a=d.x,d=d.y;var e=Vf(this.d()),c=jf(c);a=l.max(a+c[t]/2-e[t]/2,0);d=l.max(d+c[B]/2-e[B]/2,0);Mf(this.d(),a,d);Mf(this.R,a,d);Yg(this)[H](lf(this.a.a),"resize",this.Cb);nh(this,
!0);this[Xa]();this.ma=!0;this.u&&this.D?(Re(this.u,"end",this.Ya,!1,this),this.D[Yb](),this.u[Yb]()):this.Ya()}}else if(Y(this,"beforehide")){Yg(this).A(lf(this.a.a),"resize",this.Cb);this.ma=!1;this.p&&this.w?(Re(this.p,"end",this.Xa,!1,this),this.w[Yb](),this.p[Yb]()):this.Xa();t:{try{d=this.a;e=d.a[M];c=d.a[Ma]||e;if(!this.k||this.k==e){this.k=null;break t}(c==e||d[Db](this.d(),c))&&this.k[Xa]()}catch(f){}this.k=null}}};
var mh=function(a,b){if(b){a.j||(a.j=[]);for(var c=a.a,c=c.getChildren(c.a[M]),d=0;d<c[J];d++){var e=c[d],f;f=e;var g=a.g;U(g,"Can not call getElementStrict before rendering/decorating.");if(f=f!=g)f=e[rc](mg("hidden")),f=!(null==f||void 0==f?0:oa(f));f&&(ng(e,"hidden",!0),a.j[D](e))}}else if(a.j){for(d=0;d<a.j[J];d++)a.j[d][Gb](mg("hidden"));a.j=null}},nh=function(a,b){a.C&&X(a.C,b);a.L&&X(a.L,b);X(a.d(),b);X(a.R,b)};S=jh[L];S.Ya=function(){Y(this,"show")};S.Xa=function(){nh(this,!1);Y(this,"hide")};
S.focus=function(){this.xc()};S.Cb=function(){this.C&&X(this.C,!1);this.L&&X(this.L,!1);var a=this.a.a,b=jf(mf(a)||aa),c=l.max(b[t],l.max(a[M][yb],a[mb][yb])),a=l.max(b[B],l.max(a[M][Za],a[mb][Za]));this.C&&(X(this.C,!0),Tf(this.C,c,a));this.L&&(X(this.L,!0),Tf(this.L,c,a))};S.onFocus=function(a){this.wb?this.mc():a[N]==this.R&&Rg(this.xc,this)};S.xc=function(){try{V&&this.a.a[M][Xa](),this.d()[Xa]()}catch(a){}};
S.m=function(){he(this.u);this.u=null;he(this.p);this.p=null;he(this.D);this.D=null;he(this.w);this.w=null;jh.f.m[O](this)};var sh=function(a,b,c){jh[O](this,b,c);this.b=a||"modal-dialog";this.c=oh(oh(new ph,qh,!0),rh,!1,!0)};T(sh,jh);S=sh[L];S.kc=!0;S.Qa=.5;S.nb="";S.Da=null;S.fa=null;S.K=null;S.F=null;S.Ra=null;S.I=null;S.S=null;S.M=null;S.o=function(){return this.b};S.setTitle=function(a){this.nb=a;this.F&&vf(this.F,a)};var th=function(a,b){a.Da=b;a.S&&p(a.S,wg(b))};sh[L].Ga=function(){this.d()||Zg(this,void 0);return this.S};sh[L].Va=function(){this.d()||Zg(this,void 0);return sh.f.Va[O](this)};
var uh=function(a,b){a.Qa=b;if(a.d()){var c=a.Va();c&&Wf(c,a.Qa)}},vh=function(a,b){var c=Wc(a.b+"-title-draggable")[ub](" ");a.d()&&(b?rg(U(a.K),c):tg(U(a.K),c));b&&!a.fa?(a.fa=new Ig(a.d(),a.K),rg(U(a.K),c),Ke(a.fa,"start",a.jd,!1,a)):!b&&a.fa&&(a.fa.G(),a.fa=null)};S=sh[L];
S.O=function(){sh.f.O[O](this);var a=this.d();U(a,"getElement() returns null");var b=this.a;this.K=b.b("div",this.b+"-title",this.F=b.b("span",{className:this.b+"-title-text",id:Wg(this)},this.nb),this.I=b.b("span",this.b+"-title-close"));rf(a,this.K,this.S=b.b("div",this.b+"-content"),this.M=b.b("div",this.b+"-buttons"));lg(this.F,"heading");lg(this.I,"button");yf(this.I,!0);ng(this.I,"label","Close");this.Ra=this.F.id;lg(a,"dialog");ng(a,"labelledby",this.Ra||"");this.Da&&p(this.S,wg(this.Da));
X(this.I,!0);this.c&&(a=this.c,a.g=this.M,wh(a));X(this.M,!!this.c);uh(this,this.Qa)};
S.H=function(a){sh.f.H[O](this,a);a=this.d();U(a,"The DOM element for dialog cannot be null.");var b=this.b+"-content";this.S=ef(h,null,b,a)[0];this.S||(this.S=this.a.b("div",b),this.Da&&p(this.S,wg(this.Da)),a[s](this.S));var b=this.b+"-title",c=this.b+"-title-text",d=this.b+"-title-close";(this.K=ef(h,null,b,a)[0])?(this.F=ef(h,null,c,this.K)[0],this.I=ef(h,null,d,this.K)[0]):(this.K=this.a.b("div",b),a[Ua](this.K,this.S));this.F?(this.nb=Cf(this.F),this.F.id||(this.F.id=Wg(this))):(this.F=of("span",
{className:c,id:Wg(this)}),this.K[s](this.F));this.Ra=this.F.id;ng(a,"labelledby",this.Ra||"");this.I||(this.I=this.a.b("span",d),this.K[s](this.I));X(this.I,!0);b=this.b+"-buttons";if(this.M=ef(h,null,b,a)[0]){if(a=this.c=new ph(this.a),(b=this.M)&&1==b[Pb]){a.g=b;for(var b=a.g[lb]("button"),c=0,e,f;d=b[c];c++)if(e=d[$b]||d.id,f=Cf(d)||d[Sb],e){var g=0==c;a.set(e,f,g,"cancel"==d[$b]);g&&qg(d,"goog-buttonset-default")}}}else this.M=this.a.b("div",b),a[s](this.M),this.c&&(a=this.c,a.g=this.M,wh(a)),
X(this.M,!!this.c);uh(this,this.Qa)};S.s=function(){sh.f.s[O](this);Yg(this)[H](this.d(),"keydown",this.$)[H](this.d(),"keypress",this.$);Yg(this)[H](this.M,"click",this.da);vh(this,!0);Yg(this)[H](this.I,"click",this.ad);var a=this.d();U(a,"The DOM element for dialog cannot be null");lg(a,"dialog");""!==this.F.id&&ng(a,"labelledby",this.F.id);if(!this.kc){this.kc=!1;if(this.n){var a=this.a,b=this.Va();a.c(this.C);a.c(b)}this.ma&&mh(this,!1)}};S.P=function(){this.ma&&this.W(!1);vh(this,!1);sh.f.P[O](this)};
S.W=function(a){a!=this.ma&&(this.n||Zg(this,void 0),sh.f.W[O](this,a))};S.Ya=function(){sh.f.Ya[O](this);Y(this,"aftershow")};S.Xa=function(){sh.f.Xa[O](this);Y(this,"afterhide")};S.jd=function(){var a=this.a.a,b=jf(mf(a)||aa),c=l.max(a[M][yb],b[t]),a=l.max(a[M][Za],b[B]),d=Vf(this.d());"fixed"==Kf(this.d())?(b=new Hf(0,0,l.max(0,b[t]-d[t]),l.max(0,b[B]-d[B])),this.fa.c=b||new Hf(ka,ka,ka,ka)):this.fa.c=new Hf(0,0,c-d[t],a-d[B])||new Hf(ka,ka,ka,ka)};S.ad=function(){xh(this)};
var xh=function(a){var b=a.c,c=b&&b.c;c?(b=b.get(c),Y(a,new yh(c,b))&&a.W(!1)):a.W(!1)};sh[L].m=function(){this.M=this.I=null;sh.f.m[O](this)};sh[L].da=function(a){t:{for(a=a[N];null!=a&&a!=this.M;){if("BUTTON"==a[Fb])break t;a=a[Q]}a=null}if(a&&!a[mc]){a=a[$b];var b=this.c.get(a);Y(this,new yh(a,b))&&this.W(!1)}};
sh[L].$=function(a){var b=!1,c=!1,d=this.c,e=a[N];if("keydown"==a[G])if(27==a.a){var f=d&&d.c,e="SELECT"==e[Fb]&&!e[mc];f&&!e?(c=!0,b=d.get(f),b=Y(this,new yh(f,b))):e||(b=!0)}else{if(9==a.a&&a[wc]&&e==this.d()){this.wb=!0;try{this.R[Xa]()}catch(g){}Rg(this.mc,this)}}else if(13==a.a){if("BUTTON"==e[Fb]&&!e[mc])f=e[$b];else if(e==this.I)xh(this);else if(d){var k=d.e,q;if(q=k)t:{q=d.g[lb]("BUTTON");for(var z=0,u;u=q[z];z++)if(u[$b]==k||u.id==k){q=u;break t}q=null}e=("TEXTAREA"==e[Fb]||"SELECT"==e[Fb]||
"A"==e[Fb])&&!e[mc];!q||q[mc]||e||(f=k)}f&&d&&(c=!0,b=Y(this,new yh(f,oa(d.get(f)))))}else e==this.I&&32==a.a&&xh(this);if(b||c)a.e(),a[w]();b&&this.W(!1)};var yh=function(a,b){Ca(this,"dialogselect");this.key=a;this.caption=b};T(yh,te);var ph=function(a){a||df();Id[O](this)};T(ph,Id);ph[L].e=null;ph[L].g=null;ph[L].c=null;ph[L].set=function(a,b,c,d){Id[L].set[O](this,a,b);c&&(this.e=a);d&&(this.c=a);return this};
var oh=function(a,b,c,d){return a.set(b.key,b.caption,c,d)},wh=function(a){if(a.g){p(a.g,wg(yg));var b=df(a.g);a[bb](function(a,d){var e=b.b("button",{name:d},a);d==this.e&&r(e,"goog-buttonset-default");this.g[s](e)},a)}};ph[L].d=function(){return this.g};var qh={key:"ok",caption:"OK"},rh={key:"cancel",caption:"Cancel"},zh={key:"yes",caption:"Yes"},Ah={key:"no",caption:"No"},Bh={key:"save",caption:"Save"},Ch={key:"continue",caption:"Continue"};
"undefined"!=typeof h&&(oh(new ph,qh,!0,!0),oh(oh(new ph,qh,!0),rh,!1,!0),oh(oh(new ph,zh,!0),Ah,!1,!0),oh(oh(oh(new ph,zh),Ah,!0),rh,!1,!0),oh(oh(oh(new ph,Ch),Bh),rh,!0,!0));var Eh=function(a,b){Fg[O](this);a&&Dh(this,a,b)};T(Eh,Fg);S=Eh[L];S.g=null;S.Za=null;S.Ab=null;S.$a=null;S.Q=-1;S.ia=-1;S.Fb=!1;
var Fh={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},Gh={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},Hh=V||Ud&&$d("525"),Ih=Qd&&Td;
Eh[L].a=function(a){Ud&&(17==this.Q&&!a[kc]||18==this.Q&&!a[qb]||Qd&&91==this.Q&&!a[Vb])&&(this.ia=this.Q=-1);-1==this.Q&&(a[kc]&&17!=a.a?this.Q=17:a[qb]&&18!=a.a?this.Q=18:a[Vb]&&91!=a.a&&(this.Q=91));if(Hh&&!Bg(a.a,this.Q,a[wc],a[kc],a[qb]))this[fb](a);else this.ia=Ag(a.a),Ih&&(this.Fb=a[qb])};Eh[L].b=function(a){this.ia=this.Q=-1;this.Fb=a[qb]};
Eh[L].handleEvent=function(a){var b=a.c,c,d,e=b[qb];V&&"keypress"==a[G]?c=this.ia:Ud&&"keypress"==a[G]?c=this.ia:Sd?c=this.ia:(c=b[$a]||this.ia,d=b.charCode||0,Ih&&(e=this.Fb),Qd&&63==d&&224==c&&(c=191));d=c=Ag(c);var f=b.keyIdentifier;c?63232<=c&&c in Fh?d=Fh[c]:25==c&&a[wc]&&(d=9):f&&f in Gh&&(d=Gh[f]);this.Q=d;a=new Jh(d,0,0,b);sa(a,e);Y(this,a)};Eh[L].d=function(){return this.g};
var Dh=function(a,b,c){a.$a&&Kh(a);a.g=b;a.Za=Ke(a.g,"keypress",a,c);a.Ab=Ke(a.g,"keydown",a.a,c,a);a.$a=Ke(a.g,"keyup",a.b,c,a)},Kh=function(a){a.Za&&(Te(a.Za),Te(a.Ab),Te(a.$a),a.Za=null,a.Ab=null,a.$a=null);a.g=null;a.Q=-1;a.ia=-1};Eh[L].m=function(){Eh.f.m[O](this);Kh(this)};var Jh=function(a,b,c,d){ve[O](this,d);Ca(this,"key");this.a=a};T(Jh,ve);var Lh=function(){},Mh;Dc(Lh);var Nh={button:"pressed",checkbox:"checked",menuitem:"selected",menuitemcheckbox:"checked",menuitemradio:"checked",radio:"checked",tab:"selected",treeitem:"selected"};Lh[L].j=function(){};Lh[L].e=function(a){var b=a.a.b("div",Oh(this,a)[R](" "),a.xa);Ph(a,b);return b};Lh[L].a=function(a){return a};var Rh=function(a,b,c){if(a=a.d?a.d():a){var d=[b];V&&!$d("7")&&(d=Qh(og(a),b),d[D](b));(c?rg:tg)(a,d)}};
Lh[L].h=function(a,b){b.id&&Xg(a,b.id);var c=this.a(b);c&&c[ab]?Sh(a,c[ab][jb]?vd(c[gb]):c[ab]):a.xa=null;var d=0,e=this.o(),f=this.o(),g=!1,k=!1,c=!1,q=vd(og(b));pd(q,function(a){g||a!=e?k||a!=f?d|=this.i(a):k=!0:(g=!0,f==e&&(k=!0))},this);a.r=d;g||(q[D](e),f==e&&(k=!0));k||q[D](f);var z=a.pb;z&&q[D][Eb](q,z);if(V&&!$d("7")){var u=Qh(q);0<u[J]&&(q[D][Eb](q,u),c=!0)}g&&k&&!z&&!c||r(b,q[R](" "));Ph(a,b);return b};
var Th=function(a,b,c){if(a=c||a.j())U(b,"The element passed as a first parameter cannot be null."),c=b[rc]("role")||null,a!=c&&lg(b,a)},Ph=function(a,b){U(a);U(b);a.X||ng(b,"hidden",!a.X);a[wb]()||Uh(b,1,!a[wb]());a.t&8&&Uh(b,8,!!(a.r&8));a.t&16&&Uh(b,16,!!(a.r&16));a.t&64&&Uh(b,64,!!(a.r&64))},Vh=function(a,b){var c;if(a.t&32&&(c=a.d())){if(!b&&a.r&32){try{c.blur()}catch(d){}a.r&32&&a.p()}(zf(c)&&Af(c))!=b&&yf(c,b)}},Uh=function(a,b,c){Mh||(Mh={1:"disabled",8:"selected",16:"checked",64:"expanded"});
U(a,"The element passed as a first parameter cannot be null.");b=Mh[b];var d=a[rc]("role")||null;d&&(d=Nh[d]||b,b="checked"==b||"selected"==b?d:b);b&&ng(a,b,c)};Lh[L].o=function(){return"goog-control"};
var Oh=function(a,b){var c=a.o(),d=[c],e=a.o();e!=c&&d[D](e);c=b.r;for(e=[];c;){var f=c&-c;e[D](a.c(f));c&=~f}d[D][Eb](d,e);(c=b.pb)&&d[D][Eb](d,c);V&&!$d("7")&&d[D][Eb](d,Qh(d));return d},Qh=function(a,b){var c=[];b&&(a=a[Sa]([b]));pd([],function(d){!sd(d,Rc(td,a))||b&&!td(d,b)||c[D](d[R]("_"))});return c};Lh[L].c=function(a){this.b||Wh(this);return this.b[a]};Lh[L].i=function(a){if(!this.k){this.b||Wh(this);var b=this.b,c={},d;for(d in b)c[b[d]]=d;this.k=c}a=ma(this.k[a],10);return ia(a)?0:a};
var Wh=function(a){var b=a.o(),c=b[v](/\xa0|\s/g," ");U(-1==c[Tb](" "),"ControlRenderer has an invalid css class: '"+b+"'");a.b={1:b+"-disabled",2:b+"-hover",4:b+"-active",8:b+"-selected",16:b+"-checked",32:b+"-focused",64:b+"-open"}};var Yh=function(a,b){if(!a)throw m("Invalid class name "+a);if(!Jc(b))throw m("Invalid decorator function "+b);Xh[a]=b},Zh={},Xh={};var Z=function(a,b,c){Ug[O](this,c);if(!b){b=this.constructor;for(var d;b;){d=Nc(b);if(d=Zh[d])break;b=b.f?b.f.constructor:null}b=d?Jc(d.ca)?d.ca():new d:null}this.b=b;this.xa=Bc(a)?a:null};T(Z,Ug);S=Z[L];S.xa=null;S.r=0;S.t=39;S.Ja=0;S.X=!0;S.pb=null;S.yb=!0;S.O=function(){var a=this.b.e(this);this.g=a;Th(this.b,a,this.Ea());Yf(a,!V&&!Sd);this.X||(X(a,!1),a&&ng(a,"hidden",!0))};S.Ea=function(){return null};S.Ga=function(){return this.b.a(this.d())};S.Ha=function(){return!0};
S.H=function(a){this.g=a=this.b.h(this,a);Th(this.b,a,this.Ea());Yf(a,!V&&!Sd);this.X="none"!=a[y][Hb]};S.s=function(){Z.f.s[O](this);var a=this.b;dh(this)&&Rh(this.d(),a.o()+"-rtl",!0);this[wb]()&&Vh(this,this.X);if(this.t&-2&&(this.yb&&$h(this,!0),this.t&32&&(a=this.d()))){var b=this.j||(this.j=new Eh);Dh(b,a);Yg(this)[H](b,"key",this.aa)[H](a,"focus",this.u)[H](a,"blur",this.p)}};
var $h=function(a,b){var c=Yg(a),d=a.d();b?(c[H](d,"mouseover",a.Ob)[H](d,"mousedown",a.Mb)[H](d,"mouseup",a.Ia)[H](d,"mouseout",a.Nb),a.Ka!=Cc&&c[H](d,"contextmenu",a.Ka),V&&c[H](d,"dblclick",a.tc)):(c.A(d,"mouseover",a.Ob).A(d,"mousedown",a.Mb).A(d,"mouseup",a.Ia).A(d,"mouseout",a.Nb),a.Ka!=Cc&&c.A(d,"contextmenu",a.Ka),V&&c.A(d,"dblclick",a.tc))};Z[L].P=function(){Z.f.P[O](this);this.j&&Kh(this.j);this.X&&this[wb]()&&Vh(this,!1)};
Z[L].m=function(){Z.f.m[O](this);this.j&&(this.j.G(),delete this.j);delete this.b;this.pb=this.xa=null};var Sh=function(a,b){a.xa=b};Z[L].isEnabled=function(){return!(this.r&1)};Z[L].setEnabled=function(a){var b=this.e;b&&"function"==typeof b[wb]&&!b[wb]()||!ai(this,1,!a)||(a||(bi(this,!1),this.c(!1)),this.X&&Vh(this,a),ci(this,1,!a))};Z[L].c=function(a){ai(this,2,a)&&ci(this,2,a)};
var bi=function(a,b){ai(a,4,b)&&ci(a,4,b)},di=function(a,b){ai(a,64,b)&&ci(a,64,b)},ci=function(a,b,c){if(a.t&b&&c!=!!(a.r&b)){var d=a.b,e=a.d();e&&((d=d.c(b))&&Rh(a,d,c),Uh(e,b,c));a.r=c?a.r|b:a.r&~b}};Z[L].i=function(a,b){if(this.n&&this.r&a&&!b)throw m("Component already rendered");!b&&this.r&a&&ci(this,a,!1);this.t=b?this.t|a:this.t&~a};var ei=function(a,b){return!!(255&b)&&!!(a.t&b)},ai=function(a,b,c){return!!(a.t&b)&&!!(a.r&b)!=c&&(!(a.Ja&b)||Y(a,Vg(b,c)))&&!a.ib};S=Z[L];
S.Ob=function(a){(!a.i||!uf(this.d(),a.i))&&Y(this,"enter")&&this[wb]()&&ei(this,2)&&this.c(!0)};S.Nb=function(a){a.i&&uf(this.d(),a.i)||!Y(this,"leave")||(ei(this,4)&&bi(this,!1),ei(this,2)&&this.c(!1))};S.Ka=Cc;S.Mb=function(a){if(this[wb]()&&(ei(this,2)&&this.c(!0),xe(a))){ei(this,4)&&bi(this,!0);var b;this.t&32&&(b=this.d())&&zf(b)&&Af(b)&&this.d()[Xa]()}xe(a)&&a[w]()};S.Ia=function(a){this[wb]()&&(ei(this,2)&&this.c(!0),this.r&4&&fi(this,a)&&ei(this,4)&&bi(this,!1))};
S.tc=function(a){this[wb]()&&fi(this,a)};var fi=function(a,b){if(ei(a,16)){var c=!(a.r&16);ai(a,16,c)&&ci(a,16,c)}ei(a,8)&&ai(a,8,!0)&&ci(a,8,!0);ei(a,64)&&di(a,!(a.r&64));c=new te("action",a);b&&(sa(c,b[qb]),c.ctrlKey=b[kc],c.metaKey=b[Vb],c.shiftKey=b[wc],c.l=b.l);return Y(a,c)};Z[L].u=function(){ei(this,32)&&ai(this,32,!0)&&ci(this,32,!0)};Z[L].p=function(){ei(this,4)&&bi(this,!1);ei(this,32)&&ai(this,32,!1)&&ci(this,32,!1)};
Z[L].aa=function(a){return this.X&&this[wb]()&&this.k(a)?(a[w](),a.e(),!0):!1};Z[L].k=function(a){return 13==a.a&&fi(this,a)};if(!Jc(Z))throw m("Invalid component class "+Z);if(!Jc(Lh))throw m("Invalid renderer class "+Lh);var gi=Nc(Z);Zh[gi]=Lh;Yh("goog-control",function(){return new Z(null)});var hi=function(){this.l=[]};T(hi,Lh);Dc(hi);var ii=function(a,b){var c=a.l[b];if(!c){switch(b){case 0:c=a.o()+"-highlight";break;case 1:c=a.o()+"-checkbox";break;case 2:c=a.o()+"-content"}a.l[b]=c}return c};hi[L].j=function(){return"menuitem"};hi[L].e=function(a){var b=a.a.b("div",Oh(this,a)[R](" "),ji(this,a.xa,a.a));ki(this,a,b,!!(a.t&8)||!!(a.t&16));return b};hi[L].a=function(a){return a&&a[ab]};
hi[L].h=function(a,b){U(b);var c;if(void 0!=b.firstElementChild)c=b.firstElementChild;else for(c=b[ab];c&&1!=c[Pb];)c=c[jb];var d=ii(this,2);c&&pg(c,d)||b[s](ji(this,b[gb],a.a));pg(b,"goog-option")&&(a.i(16,!0),a&&b&&ki(this,a,b,!0));return hi.f.h[O](this,a,b)};
var ji=function(a,b,c){a=ii(a,2);return c.b("div",a,b)},ki=function(a,b,c,d){Th(a,c,b.Ea());Ph(b,c);var e;if(e=a.a(c)){e=e[ab];var f=ii(a,1);e=!!e&&Kc(e)&&1==e[Pb]&&pg(e,f)}else e=!1;if(d!=e)if(d?qg(c,"goog-option"):sg(c,"goog-option"),c=a.a(c),d)a=ii(a,1),c[Ua](b.a.b("div",a),c[ab]||null);else c[oc](c[ab])};hi[L].c=function(a){switch(a){case 2:return ii(this,0);case 16:case 8:return"goog-option-selected";default:return hi.f.c[O](this,a)}};
hi[L].i=function(a){var b=ii(this,0);switch(a){case "goog-option-selected":return 16;case b:return 2;default:return hi.f.i[O](this,a)}};hi[L].o=function(){return"goog-menuitem"};var li=function(a,b,c,d){Z[O](this,a,d||hi.ca(),c)};T(li,Z);li[L].i=function(a,b){li.f.i[O](this,a,b);switch(a){case 8:this.r&16&&!b&&ai(this,16,!1)&&ci(this,16,!1);var c=this.d();c&&this&&c&&ki(this.b,this,c,b);break;case 16:(c=this.d())&&this&&c&&ki(this.b,this,c,b)}};li[L].Ia=function(a){var b=this.e;if(b){var c=b.j;b.j=null;if(b=c&&Ic(a[bc]))b=new W(a[bc],a[cc]),b=c==b?!0:c&&b?c.x==b.x&&c.y==b.y:!1;if(b)return}li.f.Ia[O](this,a)};
li[L].k=function(a){return a.a==this.Eb()&&fi(this,a)?!0:li.f.k[O](this,a)};li[L].Eb=function(){return this.w};Yh("goog-menuitem",function(){return new li(null)});li[L].Ea=function(){return this.t&16?"menuitemcheckbox":this.t&8?"menuitemradio":li.f.Ea[O](this)};var mi=function(){};mi[L].a=function(){};var ni=function(a,b,c){this.b=a;this.c=b;this.l=c};T(ni,mi);ni[L].a=function(a,b,c){hg(this.b,this.c,a,b,void 0,c,this.l)};var oi;
oi={Nc:["BC","AD"],Mc:["Before Christ","Anno Domini"],Pc:"JFMAMJJASOND".split(""),Uc:"JFMAMJJASOND".split(""),Oc:"January February March April May June July August September October November December".split(" "),Pa:"January February March April May June July August September October November December".split(" "),Rc:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),Wc:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),Yc:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),Xc:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
Tc:"Sun Mon Tue Wed Thu Fri Sat".split(" "),ac:"Sun Mon Tue Wed Thu Fri Sat".split(" "),a:"SMTWTFS".split(""),Vc:"SMTWTFS".split(""),Sc:["Q1","Q2","Q3","Q4"],Qc:["1st quarter","2nd quarter","3rd quarter","4th quarter"],Lc:["AM","PM"],sb:["EEEE, MMMM d, y","MMMM d, y","MMM d, y","M/d/yy"],sc:["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],fd:["{1} 'at' {0}","{1} 'at' {0}","{1}, {0}","{1}, {0}"],qb:6,hc:[5,6],rb:5};var pi=function(a,b){switch(b){case 1:return 0!=a%4||0==a%100&&0!=a%400?28:29;case 5:case 8:case 10:case 3:return 30}return 31},qi=function(a,b,c,d,e,f){Hc(a)?(this.c="y"==a?b:0,this.b="m"==a?b:0,this.a="d"==a?b:0,this.e="h"==a?b:0,this.h="n"==a?b:0,this.i="s"==a?b:0):(this.c=a||0,this.b=b||0,this.a=c||0,this.e=d||0,this.h=e||0,this.i=f||0)};ua(qi[L],function(){return new qi(this.c,this.b,this.a,this.e,this.h,this.i)});
qi[L].add=function(a){this.c+=a.c;this.b+=a.b;this.a+=a.a;this.e+=a.e;this.h+=a.h;this.i+=a.i};var ti=function(a,b,c){Ic(a)?(this.a=ri(a,b||0,c||1),si(this,c||1)):Kc(a)?(this.a=ri(a[Ab](),a[I](),a[Ta]()),si(this,a[Ta]())):(this.a=new Date(Sc()),this.a.setHours(0),this.a.setMinutes(0),this.a.setSeconds(0),this.a.setMilliseconds(0))},ri=function(a,b,c){b=new Date(a,b,c);0<=a&&100>a&&b[Xb](b[Ab]()-1900);return b};S=ti[L];S.va=oi.qb;S.ub=oi.rb;
ua(S,function(){var a=new ti(this.a);a.va=this.va;a.ub=this.ub;return a});S.getFullYear=function(){return this.a[Ab]()};S.getMonth=function(){return this.a[I]()};S.getDate=function(){return this.a[Ta]()};S.getTime=function(){return this.a[kb]()};S.getDay=function(){return this.a[sb]()};S.getUTCFullYear=function(){return this.a.getUTCFullYear()};S.getUTCMonth=function(){return this.a.getUTCMonth()};S.getUTCDate=function(){return this.a.getUTCDate()};S.getUTCHours=function(){return this.a.getUTCHours()};
S.getUTCMinutes=function(){return this.a.getUTCMinutes()};S.getTimezoneOffset=function(){return this.a[zc]()};S.set=function(a){this.a=new Date(a[Ab](),a[I](),a[Ta]())};
S.add=function(a){if(a.c||a.b){var b=this[I]()+a.b+12*a.c,c=this[Ab]()+l[Qa](b/12),b=b%12;0>b&&(b+=12);var d=l.min(pi(c,b),this[Ta]());this.a[dc](1);this.a[Xb](c);this.a.setMonth(b);this.a[dc](d)}a.a&&(b=new Date(this[Ab](),this[I](),this[Ta](),12),a=new Date(b[kb]()+864E5*a.a),this.a[dc](1),this.a[Xb](a[Ab]()),this.a.setMonth(a[I]()),b=a[Ta](),this.a[dc](b),si(this,a[Ta]()))};ra(S,function(){return[this[Ab](),ed(this[I]()+1,2),ed(this[Ta](),2)][R]("")+""});
var si=function(a,b){if(a[Ta]()!=b){var c=a[Ta]()<b?1:-1;a.a.setUTCHours(a.a.getUTCHours()+c)}};ti[L].valueOf=function(){return this.a[Lb]()};var ui=function(a,b){this.b=a;this.a=b},vi=new ti(0,0,1),wi=new ti(9999,11,31);wa(ui[L],function(a){return a[Lb]()>=this.b[Lb]()&&a[Lb]()<=this.a[Lb]()});var xi=function(){},yi=function(a){if("number"==typeof a){var b=new xi;b.b=a;var c;c=a;if(0==c)c="Etc/GMT";else{var d=["Etc/GMT",0>c?"-":"+"];c=l.abs(c);d[D](l[Qa](c/60)%100);c%=60;0!=c&&d[D](":",ed(c,2));c=d[R]("")}b.e=c;0==a?a="UTC":(c=["UTC",0>a?"+":"-"],a=l.abs(a),c[D](l[Qa](a/60)%100),a%=60,0!=a&&c[D](":",a),a=c[R](""));b.c=[a,a];b.a=[];return b}b=new xi;b.e=a.id;b.b=-a.std_offset;b.c=a.names;b.a=a.transitions;return b},zi=function(a,b){for(var c=Date.UTC(b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate(),
b.getUTCHours(),b.getUTCMinutes())/36E5,d=0;d<a.a[J]&&c>=a.a[d];)d+=2;return 0==d?0:a.a[d-1]};var Ci=function(a){U(Bc(a),"Pattern must be defined");U(Bc(void 0)||Bc(oi),"goog.i18n.DateTimeSymbols or explicit symbols must be defined");this.b=[];this.a=oi;"number"==typeof a?Ai(this,a):Bi(this,a)},Di=[/^\'(?:[^\']|\'\')*\'/,/^(?:G+|y+|M+|k+|S+|E+|a+|h+|K+|H+|c+|L+|Q+|d+|m+|s+|v+|w+|z+|Z+)/,/^[^\'GyMkSEahKHcLQdmsvwzZ]+/],Bi=function(a,b){for(;b;)for(var c=0;c<Di[J];++c){var d=b[Va](Di[c]);if(d){d=d[0];b=b[vc](d[J]);0==c&&("''"==d?d="'":(d=d[vc](1,d[J]-1),d=d[v](/\'\'/,"'")));a.b[D]({text:d,type:c});
break}}},Fi=function(a,b){if(!b)throw m("The date to format must be non-null.");for(var c=[],d=0;d<a.b[J];++d){var e=a.b[d].text;1==a.b[d][G]?c[D](Ei(a,e,b,b,b)):c[D](e)}return c[R]("")},Ai=function(a,b){var c;if(4>b)c=a.a.sb[b];else if(8>b)c=a.a.sc[b-4];else if(12>b)c=a.a.fd[b-8],c=c[v]("{1}",a.a.sb[b-8]),c=c[v]("{0}",a.a.sc[b-8]);else{Ai(a,10);return}Bi(a,c)},Gi=function(a,b){var c;c=oa(b);var d=a.a||oi;if(void 0!==d.hd){for(var e=[],f=0;f<c[J];f++){var g=c.charCodeAt(f);e[D](48<=g&&57>=g?oa.fromCharCode(d.hd+
g-48):c.charAt(f))}c=e[R]("")}return c},Hi=function(a){if(!(a[ib]&&a.getSeconds&&a.getMinutes))throw m("The date to format has no time (probably a goog.date.Date). Use Date or goog.date.DateTime, or use a pattern without time fields.");},Ei=function(a,b,c,d,e){var f=b[J];switch(b.charAt(0)){case "G":return c=0<d[Ab]()?1:0,4<=f?a.a.Mc[c]:a.a.Nc[c];case "y":return c=d[Ab](),0>c&&(c=-c),2==f&&(c%=100),Gi(a,ed(c,f));case "M":t:switch(c=d[I](),f){case 5:a=a.a.Pc[c];break t;case 4:a=a.a.Oc[c];break t;case 3:a=
a.a.Rc[c];break t;default:a=Gi(a,ed(c+1,f))}return a;case "k":return Hi(e),Gi(a,ed(e[ib]()||24,f));case "S":return Gi(a,(e[kb]()%1E3/1E3).toFixed(l.min(3,f)).substr(2)+(3<f?ed(0,f-3):""));case "E":return c=d[sb](),4<=f?a.a.Yc[c]:a.a.Tc[c];case "a":return Hi(e),f=e[ib](),a.a.Lc[12<=f&&24>f?1:0];case "h":return Hi(e),Gi(a,ed(e[ib]()%12||12,f));case "K":return Hi(e),Gi(a,ed(e[ib]()%12,f));case "H":return Hi(e),Gi(a,ed(e[ib](),f));case "c":t:switch(c=d[sb](),f){case 5:a=a.a.Vc[c];break t;case 4:a=a.a.Xc[c];
break t;case 3:a=a.a.ac[c];break t;default:a=Gi(a,ed(c,1))}return a;case "L":t:switch(c=d[I](),f){case 5:a=a.a.Uc[c];break t;case 4:a=a.a.Pa[c];break t;case 3:a=a.a.Wc[c];break t;default:a=Gi(a,ed(c+1,f))}return a;case "Q":return c=l[Qa](d[I]()/3),4>f?a.a.Sc[c]:a.a.Qc[c];case "d":return Gi(a,ed(d[Ta](),f));case "m":return Hi(e),Gi(a,ed(e.getMinutes(),f));case "s":return Hi(e),Gi(a,ed(e.getSeconds(),f));case "v":return a=yi(c[zc]()),a.e;case "w":return c=e[Ta](),c=new Date(e[Ab](),e[I](),c),e=a.a.qb||
0,c=c[Lb]()+864E5*(((a.a.rb||3)-e+7)%7-((c[sb]()+6)%7-e+7)%7),c=l[Qa](l[Nb]((c-(new Date((new Date(c))[Ab](),0,1))[Lb]())/864E5)/7)+1,Gi(a,ed(c,f));case "z":return a=yi(c[zc]()),4>f?a.c[0<zi(a,c)?2:0]:a.c[0<zi(a,c)?3:1];case "Z":return e=yi(c[zc]()),4>f?(a=-(e.b-zi(e,c)),f=[0>a?"-":"+"],a=l.abs(a),f[D](ed(l[Qa](a/60)%100,2),ed(a%60,2)),a=f[R]("")):(f=e.b-zi(e,c),c=["GMT"],c[D](0>=f?"+":"-"),f=l.abs(f),c[D](ed(l[Qa](f/60)%100,2),":",ed(f%60,2)),a=Gi(a,c[R](""))),a;default:return""}};var Ii={Zc:"y",wf:"y G",xf:"MMM y",$c:"MMMM y",ye:"MMM d",ze:"MMMM dd",Be:"M/d",Ae:"MMMM d",Ce:"MMM d, y",uf:"EEE, MMM d",vf:"EEE, MMM d, y",Od:"d"},Ji=Ii,Ji=Ii;var Ki=function(a){this.a=$();this.b=a||df()},Li=function(a,b,c,d){var e=[a.a+"-btn"];d&&e[D](d);d=Df(a.b,"BUTTON");r(d,e[R](" "));d[s](a.b.a.createTextNode(oa(c)));b[s](d)};var Mi=function(a,b,c,d){Ug[O](this,c);this.j=b||oi;this.zc=this.j.ac;b=oi;oi=this.j;this.Ac=new Ci("d");new Ci("dd");this.Cc=new Ci("w");this.lb=new Ci(Ji.Zc||"y");this.Bc=new Ci(Ji.$c||"MMMM y");oi=b;this.Tb=d||new Ki(this.a);this.c=new ti(a);this.c.ub=this.j.rb;this.c.va=this.j.qb;this.b=this.c[vb]();this.b.a[dc](1);this.Sa="      ".split(" ");this.Sa[this.j.hc[0]]=$()+"-wkend-start";this.Sa[this.j.hc[1]]=$()+"-wkend-end";this.$={};this.u=[]};T(Mi,Ug);S=Mi[L];S.ob=new ui(vi,wi);S.Ua=null;
S.mb=null;S.Ta=null;S.Ec=Sg.ca();var $=function(){return"goog-date-picker"};S=Mi[L];S.Hc=function(){this.b.add(new qi("m",-1));Ni(this);Oi(this)};S.Fc=function(){this.b.add(new qi("m",1));Ni(this);Oi(this)};S.Ic=function(){this.b.add(new qi("y",-1));Ni(this);Oi(this)};S.Gc=function(){this.b.add(new qi("y",1));Ni(this);Oi(this)};S.Vb=function(){Pi(this,new ti)};S.Ub=function(){Pi(this,null)};S.getDate=function(){return this.c&&this.c[vb]()};
var Pi=function(a,b){var c=b==a.c||b&&a.c&&b[Ab]()==a.c[Ab]()&&b[I]()==a.c[I](),d=b==a.c||c&&b[Ta]()==a.c[Ta]();a.c=b&&new ti(b);b&&(a.b.set(a.c),a.b.a[dc](1));Ni(a);Y(a,new Qi("select",a));d||Y(a,new Qi("change",a));c||Oi(a)},Ri=function(a,b,c,d){b=ff(c,b);Yg(a)[H](b,"click",function(a){a[w]();d[O](this,a)})};S=Mi[L];
S.H=function(a){Mi.f.H[O](this,a);U(a);qg(a,$());var b=Df(this.a,"table"),c=Df(this.a,"thead"),d=Df(this.a,"tbody"),e=Df(this.a,"tfoot");lg(d,"grid");Ea(d,"0");this.Ma=d;this.$b=e;var f=Df(this.a,"tr");r(f,$()+"-head");if(this.Ua=f){for(var g=this.Ua;g[ab];)g[oc](g[ab]);var k=this.Tb,q=this.j.sb[0].toLowerCase(),z,u;z=Df(k.b,"TD");Ka(z,5);Li(k,z,"\u00ab",k.a+"-previousMonth");Li(k,z,"",k.a+"-month");Li(k,z,"\u00bb",k.a+"-nextMonth");u=Df(k.b,"TD");Ka(u,3);Li(k,u,"\u00ab",k.a+"-previousYear");Li(k,
u,"",k.a+"-year");Li(k,u,"\u00bb",k.a+"-nextYear");q[Tb]("y")<q[Tb]("m")?(g[s](u),g[s](z)):(g[s](z),g[s](u));Ri(this,g,$()+"-previousMonth",this.Hc);Ri(this,g,$()+"-nextMonth",this.Fc);Ri(this,g,$()+"-month",this.Jc);Ri(this,g,$()+"-previousYear",this.Ic);Ri(this,g,$()+"-nextYear",this.Gc);Ri(this,g,$()+"-year",this.Kc);this.p=ff($()+"-month",g);k=df();this.ja=ff($()+"-year",g||k.a)}c[s](f);this.k=[];for(k=0;7>k;k++){f=Df(this.a,"tr");this.k[k]=[];for(q=0;8>q;q++)g=Df(this.a,0==q||0==k?"th":"td"),
0!=q&&0!=k||q==k||(r(g,0==q?$()+"-week":$()+"-wday"),lg(g,0==q?"rowheader":"columnheader")),f[s](g),this.k[k][q]=g;d[s](f)}f=Df(this.a,"tr");r(f,$()+"-foot");if(this.Ta=f)g=this.Ta,sf(g),k=this.Tb,q=Df(k.b,"TD"),Ka(q,2),r(q,k.a+"-today-cont"),Li(k,q,"Today",k.a+"-today-btn"),g[s](q),q=Df(k.b,"TD"),Ka(q,4),g[s](q),q=Df(k.b,"TD"),Ka(q,2),r(q,k.a+"-none-cont"),Li(k,q,"None",k.a+"-none-btn"),g[s](q),Ri(this,g,$()+"-today-btn",this.Vb),Ri(this,g,$()+"-none-btn",this.Ub),this.Zb=ff($()+"-today-btn",g),
this.Yb=ff($()+"-none-btn",g),X(this.Zb,!0),X(this.Yb,!0),X(this.$b,!0);e[s](f);b.cellSpacing="0";b.cellPadding="0";b[s](c);b[s](d);b[s](e);a[s](b);if(this.d()){for(b=0;7>b;b++)vf(this.k[0][b+1],this.zc[((b+this.b.va+7)%7+1)%7]);X(this.k[0][0][Q],!0)}Ni(this);Ea(a,0)};S.O=function(){Mi.f.O[O](this);this.H(this.d())};S.s=function(){Mi.f.s[O](this);var a=Yg(this);a[H](this.Ma,"click",this.sd);a[H](Si(this,this.d()),"key",this.td)};
S.P=function(){Mi.f.P[O](this);this.D();for(var a in this.$)this.$[a].G();this.$={}};S.m=function(){Mi.f.m[O](this);this.Yb=this.Zb=this.ja=this.mb=this.p=this.Ta=this.Ua=this.$b=this.Ma=this.k=null};S.sd=function(a){if("TD"==a[N][Fb]){var b,c=-2,d=-2;for(b=a[N];b;b=b.previousSibling,c++);for(b=a[N][Q];b;b=b.previousSibling,d++);a=this.u[d][c];this.ob[Db](a)&&Pi(this,a[vb]())}};
S.td=function(a){var b,c;switch(a.a){case 33:a[w]();b=-1;break;case 34:a[w]();b=1;break;case 37:a[w]();c=-1;break;case 39:a[w]();c=1;break;case 38:a[w]();c=-7;break;case 40:a[w]();c=7;break;case 36:a[w](),this.Vb();case 46:a[w](),this.Ub();default:return}this.c?(a=this.c[vb](),a.add(new qi(0,b,c))):(a=this.b[vb](),a.a[dc](1));this.ob[Db](a)&&Pi(this,a)};S.Jc=function(a){a.e();a=[];for(var b=0;12>b;b++)a[D](this.j.Pa[b]);Ti(this,this.p,a,this.dd,this.j.Pa[this.b[I]()])};
S.Kc=function(a){a.e();a=[];for(var b=this.b[Ab](),c=this.b[vb](),d=-5;5>=d;d++)c.a[Xb](b+d),a[D](Fi(this.lb,c));Ti(this,this.ja,a,this.cd,Fi(this.lb,this.b))};S.dd=function(a){a=Number(a[rc]("itemIndex"));this.b.a.setMonth(a);Ni(this);this.p[Xa]&&this.p[Xa]()};S.cd=function(a){3==a[ab][Pb]&&(a=Number(a[rc]("itemIndex")),this.b.a[Xb](this.b[Ab]()+a-5),Ni(this));this.ja[Xa]()};
var Ti=function(a,b,c,d,e){a.D();var f=Df(a.a,"div");r(f,$()+"-menu");a.da=null;for(var g=Df(a.a,"ul"),k=0;k<c[J];k++){var q=a.a.b("li",null,c[k]);q[x]("itemIndex",k);c[k]==e&&(a.da=q);g[s](q)}f[s](g);Ba(f[y],b[nc]+b[Q][nc]+"px");f[y].top=b[Ib]+"px";pa(f[y],b[ic]+"px");a.p[Q][s](f);a.w=f;a.da||(a.da=g[ab]);r(a.da,$()+"-menu-selected");a.xb=d;b=Yg(a);b[H](a.w,"click",a.nc);b[H](Si(a,a.w),"key",a.oc);b[H](a.a.a,"click",a.D);Ea(f,0);f[Xa]()};Mi[L].nc=function(a){a.e();this.D();this.xb&&this.xb(a[N])};
Mi[L].oc=function(a){a.e();var b,c=this.da;switch(a.a){case 35:a[w]();b=c[Q].lastChild;break;case 36:a[w]();b=c[Q][ab];break;case 38:a[w]();b=c.previousSibling;break;case 40:a[w]();b=c[jb];break;case 13:case 9:case 0:a[w](),this.D(),this.xb(c)}b&&b!=c&&(r(c,""),r(b,$()+"-menu-selected"),this.da=b)};Mi[L].D=function(){if(this.w){var a=Yg(this);a.A(this.w,"click",this.nc);a.A(Si(this,this.w),"key",this.oc);a.A(this.a.a,"click",this.D);tf(this.w);delete this.w}};
var Ni=function(a){if(a.d()){var b=a.b[vb]();b.a[dc](1);a.mb&&vf(a.mb,Fi(a.Bc,b));a.p&&vf(a.p,a.j.Pa[b[I]()]);a.ja&&vf(a.ja,Fi(a.lb,b));var c=((b[sb]()+6)%7-b.va+7)%7;b.add(new qi("m",-1));b.a[dc](pi(b[Ab](),b[I]())-(c-1));c=new qi("d",1);a.u=[];for(var d=0;6>d;d++){a.u[d]=[];for(var e=0;7>e;e++)a.u[d][e]=b[vb](),b.add(c)}if(a.d())for(var b=a.b[I](),e=new ti,c=e[Ab](),d=e[I](),e=e[Ta](),f=0;6>f;f++){vf(a.k[f+1][0],Fi(a.Cc,a.u[f][0]));r(a.k[f+1][0],$()+"-week");for(var g=0;7>g;g++){var k=a.u[f][g],
q=a.k[f+1][g+1];q.id||(q.id=":"+(a.Ec.a++)[pb](36));U(q,"The table DOM element cannot be null.");lg(q,"gridcell");var z=[$()+"-date"];a.ob[Db](k)||z[D]($()+"-unavailable-date");k[I]()!=b&&z[D]($()+"-other-month");var u=(g+a.b.va+7)%7;a.Sa[u]&&z[D](a.Sa[u]);k[Ta]()==e&&k[I]()==d&&k[Ab]()==c&&z[D]($()+"-today");a.c&&k[Ta]()==a.c[Ta]()&&k[I]()==a.c[I]()&&k[Ab]()==a.c[Ab]()&&(z[D]($()+"-selected"),U(a.Ma,"The table body DOM element cannot be null"),ng(a.Ma,"activedescendant",q.id));k=Fi(a.Ac,k);vf(q,
k);r(q,z[R](" "))}4<=f&&X(a.k[f+1][0][Q],a.u[f][0][I]()==b||!0)}}},Oi=function(a){var b=new Qi("changeActiveMonth",a,a.b[vb]());Y(a,b)},Si=function(a,b){var c=Nc(b);c in a.$||(a.$[c]=new Eh(b));return a.$[c]},Qi=function(a,b){te[O](this,a,b)};T(Qi,te);var Ui=function(a,b,c,d){ni[O](this,a,b);this.i=c?5:0;this.e=d||void 0};T(Ui,ni);Ui[L].h=function(a){this.i=a};Ui[L].a=function(a,b,c,d){var e=hg(this.b,this.c,a,b,null,c,10,d,this.e);if(e&496){var f=Vi(e,this.c);b=Vi(e,b);e=hg(this.b,f,a,b,null,c,10,d,this.e);e&496&&(f=Vi(e,f),b=Vi(e,b),hg(this.b,f,a,b,null,c,this.i,d,this.e))}};var Vi=function(a,b){a&48&&(b^=2);a&192&&(b^=1);return b};var Wi=function(a,b){this.b=a instanceof W?a:new W(a,b)};T(Wi,mi);Wi[L].a=function(a,b,c,d){U(a);var e;e=cf(a);var f=e[M];e=e[mb];e=new W(f[Bb]||e[Bb],f[ec]||e[ec]);f=this.b.x+e.x;e=this.b.y+e.y;var g=eg(a),f=f-g.x;e-=g.y;gg(new W(f,e),a,b,c,null,null,d)};var Xi=function(a,b){Wi[O](this,a,b)};T(Xi,Wi);Xi[L].c=0;Xi[L].h=function(a){this.c=a};Xi[L].a=function(a,b,c,d){var e=Nf(a),e=Sf(e),f;f=df(a);f=kf(f.a);f=new W(this.b.x+f[Bb],this.b.y+f[ec]);var g=b,k=gg(f,a,g,c,e,10,d);if(0!=(k&496)){if(k&16||k&32)g^=2;if(k&64||k&128)g^=1;k=gg(f,a,g,c,e,10,d);0!=(k&496)&&gg(f,a,b,c,e,this.c,d)}};var Yi=function(a,b){this.h=b||void 0;fh[O](this,a)};T(Yi,fh);Yi[L].e=function(){if(this.h){var a=!this.ka&&"move_offscreen"!=this.wa,b=this.d();a&&(Ha(b[y],"hidden"),X(b,!0));this.h.a(b,4,this.Wb);a&&X(b,!1)}};var Zi=function(a,b){Ug[O](this,b);this.Z=a||new Mi};T(Zi,Ug);S=Zi[L];S.Z=null;S.ha=null;S.ab=null;S.O=function(){Zi.f.O[O](this);r(this.d(),"goog-popupdatepicker");this.ha=new Yi(this.d());this.ha.eb(this)};S.s=function(){Zi.f.s[O](this);if(!this.Z.n){var a=this.d();Ha(a[y],"hidden");X(a,!1);$g(this.Z,a)}Yg(this)[H](this.Z,"change",this.b)};S.m=function(){Zi.f.m[O](this);this.ha&&(this.ha.G(),this.ha=null);this.Z.G();this.ab=this.Z=null};S.Ha=function(){return!1};S.getDate=function(){return this.Z[Ta]()};
var $i=function(a,b){Yg(a)[H](b,"mousedown",a.c)};Zi[L].c=function(a){this.ab=a=a.b;var b=this.ha;b.h=new ni(a,5,197)||void 0;b.ka&&b.e();Yg(this).A(this.Z,"change",this.b);Pi(this.Z,null);Y(this,"show");Yg(this)[H](this.Z,"change",this.b);hh(this.ha,!0);this.d()[Xa]()};Zi[L].b=function(a){hh(this.ha,!1);this.ab&&this.ab[Xa]();Y(this,a)};var aj=function(a){this.a=a};Dc(aj);var bj=function(a,b){a&&Ea(a,b?0:-1)};aj[L].Rb=function(a){return"DIV"==a[Fb]};
var ej=function(a,b,c){c.id&&Xg(b,c.id);var d=a.o(),e=!1,f=og(c);f&&pd(f,function(a){a==d?e=!0:a&&(a==d+"-disabled"?b[pc](!1):a==d+"-horizontal"?cj(b,"horizontal"):a==d+"-vertical"&&cj(b,"vertical"))},a);e||qg(c,d);dj(a,b,c);return c},dj=function(a,b,c){if(c)for(var d=c[ab],e;d&&d[Q]==c;){e=d[jb];if(1==d[Pb]){var f=a.Qb(d);f&&(f.g=d,b[wb]()||f[pc](!1),b.Pb(f),$g(f,d))}else d[Jb]&&""!=Wc(d[Jb])||c[oc](d);d=e}};
aj[L].Qb=function(a){t:{var b;U(a);a=og(a);for(var c=0,d=a[J];c<d;c++)if(b=a[c],b=b in Xh?Xh[b]():null){a=b;break t}a=null}return a};aj[L].Kb=function(a){a=a.d();U(a,"The container DOM element cannot be null.");Yf(a,Td);V&&(a.hideFocus=!0);var b=this.a;b&&lg(a,b)};aj[L].o=function(){return"goog-container"};var fj=function(a,b){var c=a.o(),d=[c,"horizontal"==b.oa?c+"-horizontal":c+"-vertical"];b[wb]()||d[D](c+"-disabled");return d};var gj=function(a,b,c){Ug[O](this,c);this.ba=b||aj.ca();this.oa=a||"vertical"};T(gj,Ug);S=gj[L];S.Hb=null;S.ra=null;S.ba=null;S.oa=null;S.J=!0;S.sa=!0;S.Aa=!0;S.N=-1;S.v=null;S.Ba=!1;S.qa=null;var hj=function(a){return a.Hb||a.d()};S=gj[L];S.O=function(){this.g=this.a.b("div",fj(this.ba,this)[R](" "))};S.Ga=function(){return this.d()};S.Ha=function(a){return this.ba.Rb(a)};S.H=function(a){this.g=ej(this.ba,this,a);"none"==a[y][Hb]&&(this.J=!1)};
S.s=function(){gj.f.s[O](this);ah(this,function(a){a.n&&ij(this,a)},this);var a=this.d();this.ba.Kb(this);this.ua(this.J,!0);Yg(this)[H](this,"enter",this.Jb)[H](this,"highlight",this.pd)[H](this,"unhighlight",this.rd)[H](this,"open",this.qd)[H](this,"close",this.nd)[H](a,"mousedown",this.ld)[H](cf(a),"mouseup",this.od)[H](a,["mousedown","mouseup","mouseover","mouseout","contextmenu"],this.md);this.Aa&&jj(this,!0)};
var jj=function(a,b){var c=Yg(a),d=hj(a);b?c[H](d,"focus",a.uc)[H](d,"blur",a.jb)[H](a.ra||(a.ra=new Eh(hj(a))),"key",a.aa):c.A(d,"focus",a.uc).A(d,"blur",a.jb).A(a.ra||(a.ra=new Eh(hj(a))),"key",a.aa)};S=gj[L];S.P=function(){this.la(-1);this.v&&di(this.v,!1);this.Ba=!1;gj.f.P[O](this)};S.m=function(){gj.f.m[O](this);this.ra&&(this.ra.G(),this.ra=null);this.ba=this.v=this.qa=this.Hb=null};S.Jb=function(){return!0};
S.pd=function(a){var b=eh(this,a[N]);if(-1<b&&b!=this.N){var c=ch(this,this.N);c&&c.c(!1);this.N=b;c=ch(this,this.N);this.Ba&&bi(c,!0);this.v&&c!=this.v&&(c.t&64?di(c,!0):di(this.v,!1))}b=this.d();U(b,"The DOM element for the container cannot be null.");null!=a[N].d()&&ng(b,"activedescendant",a[N].d().id)};S.rd=function(a){a[N]==ch(this,this.N)&&(this.N=-1);a=this.d();U(a,"The DOM element for the container cannot be null.");a[Gb](mg("activedescendant"))};
S.qd=function(a){(a=a[N])&&a!=this.v&&a.e==this&&(this.v&&di(this.v,!1),this.v=a)};S.nd=function(a){a[N]==this.v&&(this.v=null)};S.ld=function(a){this.sa&&(this.Ba=!0);var b=hj(this);b&&zf(b)&&Af(b)?b[Xa]():a[w]()};S.od=function(){this.Ba=!1};
S.md=function(a){var b;t:{b=a[N];if(this.qa)for(var c=this.d();b&&b!==c;){var d=b.id;if(d in this.qa){b=this.qa[d];break t}b=b[Q]}b=null}if(b)switch(a[G]){case "mousedown":b.Mb(a);break;case "mouseup":b.Ia(a);break;case "mouseover":b.Ob(a);break;case "mouseout":b.Nb(a);break;case "contextmenu":b.Ka(a)}};S.uc=function(){};S.jb=function(){this.la(-1);this.Ba=!1;this.v&&di(this.v,!1)};S.aa=function(a){return this[wb]()&&this.J&&(0!=bh(this)||this.Hb)&&this.zb(a)?(a[w](),a.e(),!0):!1};
S.zb=function(a){var b=ch(this,this.N);if(b&&"function"==typeof b.aa&&b.aa(a)||this.v&&this.v!=b&&"function"==typeof this.v.aa&&this.v.aa(a))return!0;if(a[wc]||a[kc]||a[Vb]||a[qb])return!1;switch(a.a){case 27:if(this.Aa)hj(this).blur();else return!1;break;case 36:kj(this);break;case 35:lj(this);break;case 38:if("vertical"==this.oa)mj(this);else return!1;break;case 37:if("horizontal"==this.oa)dh(this)?nj(this):mj(this);else return!1;break;case 40:if("vertical"==this.oa)nj(this);else return!1;break;
case 39:if("horizontal"==this.oa)dh(this)?mj(this):nj(this);else return!1;break;default:return!1}return!0};var ij=function(a,b){var c=b.d(),c=c.id||(c.id=Wg(b));a.qa||(a.qa={});a.qa[c]=b};gj[L].Pb=function(a,b){md(a,Z,"The child of a container must be a control");gj.f.Pb[O](this,a,b)};gj[L].Lb=function(a,b,c){a.Ja|=2;a.Ja|=64;a.i(32,!1);a.n&&!1!=a.yb&&$h(a,!1);a.yb=!1;gj.f.Lb[O](this,a,b,c);a.n&&this.n&&ij(this,a);b<=this.N&&this.N++};
var cj=function(a,b){if(a.d())throw m("Component already rendered");a.oa=b};gj[L].ua=function(a,b){if(b||this.J!=a&&Y(this,a?"show":"hide")){this.J=a;var c=this.d();c&&(X(c,a),this.Aa&&bj(hj(this),this.sa&&this.J),b||Y(this,this.J?"aftershow":"afterhide"));return!0}return!1};gj[L].isEnabled=function(){return this.sa};
gj[L].setEnabled=function(a){this.sa!=a&&Y(this,a?"enable":"disable")&&(a?(this.sa=!0,ah(this,function(a){a.vc?delete a.vc:a[pc](!0)})):(ah(this,function(a){a[wb]()?a[pc](!1):a.vc=!0}),this.Ba=this.sa=!1),this.Aa&&bj(hj(this),a&&this.J))};var oj=function(a,b){b!=a.Aa&&a.n&&jj(a,b);a.Aa=b;a.sa&&a.J&&bj(hj(a),b)};gj[L].la=function(a){(a=ch(this,a))?a.c(!0):-1<this.N&&ch(this,this.N).c(!1)};gj[L].c=function(a){this.la(eh(this,a))};
var kj=function(a){pj(a,function(a,c){return(a+1)%c},bh(a)-1)},lj=function(a){pj(a,function(a,c){a--;return 0>a?c-1:a},0)},nj=function(a){pj(a,function(a,c){return(a+1)%c},a.N)},mj=function(a){pj(a,function(a,c){a--;return 0>a?c-1:a},a.N)},pj=function(a,b,c){c=0>c?eh(a,a.v):c;var d=bh(a);c=b[O](a,c,d);for(var e=0;e<=d;){var f=ch(a,c);if(f&&a.wc(f)){a.la(c);break}e++;c=b[O](a,c,d)}};gj[L].wc=function(a){return a.X&&a[wb]()&&!!(a.t&2)};var qj=function(){};T(qj,Lh);Dc(qj);qj[L].o=function(){return"goog-menuheader"};var rj=function(a,b,c){Z[O](this,a,c||qj.ca(),b);this.i(1,!1);this.i(2,!1);this.i(4,!1);this.i(32,!1);this.r=1};T(rj,Z);Yh("goog-menuheader",function(){return new rj(null)});var sj=function(){};T(sj,Lh);Dc(sj);sj[L].e=function(a){return a.a.b("div",this.o())};sj[L].h=function(a,b){b.id&&Xg(a,b.id);if("HR"==b[Fb]){var c=b;b=this.e(a);c[Q]&&c[Q][Ua](b,c);tf(c)}else qg(b,this.o());return b};sj[L].o=function(){return"goog-menuseparator"};var tj=function(a,b){Z[O](this,null,a||sj.ca(),b);this.i(1,!1);this.i(2,!1);this.i(4,!1);this.i(32,!1);this.r=1};T(tj,Z);tj[L].s=function(){tj.f.s[O](this);var a=this.d();U(a,"The DOM element for the separator cannot be null.");lg(a,"separator")};Yh("goog-menuseparator",function(){return new tj});var uj=function(a){this.a=a||"menu"};T(uj,aj);Dc(uj);S=uj[L];S.Rb=function(a){return"UL"==a[Fb]||uj.f.Rb[O](this,a)};S.Qb=function(a){return"HR"==a[Fb]?new tj:uj.f.Qb[O](this,a)};S.La=function(a,b){return uf(a.d(),b)};S.o=function(){return"goog-menu"};S.Kb=function(a){uj.f.Kb[O](this,a);a=a.d();U(a,"The menu DOM element cannot be null.");ng(a,"haspopup","true")};Yh("goog-menuseparator",function(){return new tj});var vj=function(a,b){gj[O](this,"vertical",b||uj.ca(),a);oj(this,!1)};T(vj,gj);S=vj[L];S.Gb=!0;S.o=function(){return this.ba.o()};S.La=function(a){if(this.ba.La(this,a))return!0;for(var b=0,c=bh(this);b<c;b++){var d=ch(this,b);if("function"==typeof d.La&&d.La(a))return!0}return!1};S.ua=function(a,b,c){(b=vj.f.ua[O](this,a,b))&&a&&this.n&&this.Gb&&hj(this)[Xa]();a&&c&&Ic(c[bc])?this.j=new W(c[bc],c[cc]):this.j=null;return b};S.Jb=function(a){this.Gb&&hj(this)[Xa]();return vj.f.Jb[O](this,a)};
S.wc=function(a){return a[wb]()&&a.X&&!!(a.t&2)};S.H=function(a){for(var b=this.ba,c=ef(this.a.a,"div",b.o()+"-content",a),d=c[J],e=0;e<d;e++)dj(b,this,c[e]);vj.f.H[O](this,a)};S.zb=function(a){var b=vj.f.zb[O](this,a);b||ah(this,function(c){!b&&c.Eb&&c.Eb()==a.a&&(this[wb]()&&this.c(c),b=c.aa(a))},this);return b};
S.la=function(a){vj.f.la[O](this,a);var b=ch(this,a);if(b){a=this.d();var b=b.d(),c=Qf(b),d=Qf(a),e=cg(a),f=c.x-d.x-e[F],c=c.y-d.y-e.top,d=a[sc]-b.offsetHeight,e=a[Bb],g=a[ec],e=e+l.min(f,l.max(f-(a[ic]-b.offsetWidth),0)),g=g+l.min(c,l.max(c-d,0)),b=new W(e,g);a.scrollLeft=b.x;a.scrollTop=b.y}};var wj=function(a,b){vj[O](this,a,b);this.Gb=!0;oj(this,!0);this.ua(!1,!0);this.b=new Id};T(wj,vj);wj[L].p=!1;wj[L].k=0;wj[L].H=function(a){wj.f.H[O](this,a);(a=a[rc]("for")||a.htmlFor)&&xj(this,this.a.d(a))};wj[L].s=function(){wj.f.s[O](this);this.b[bb](this.lc,this);var a=Yg(this);a[H](this,"action",this.bd);a[H](this.a.a,"mousedown",this.qc,!0);Ud&&a[H](this.a.a,"contextmenu",this.qc,!0)};
var xj=function(a,b,c){var d;(d=!b)||(d=Nc(b),d=!Ld(a.b.T,d));d&&(b?(c={g:b,Xb:1,Dc:c,gd:"mousedown",Wb:void 0},a.b.set(Nc(b),c),b=c):b=null,a.n&&a.lc(b))};S=wj[L];S.lc=function(a){Yg(this)[H](a.g,a.gd,this.vd)};S.hide=function(){this.J&&(this.ua(!1),this.J||(this.k=Sc()))};S.bd=function(){this[Cb]()};
S.vd=function(a){for(var b=Jd(this.b),c=0;c<b[J];c++){var d=this.b.get(b[c]);if(d.g==a.b){b=Bc(d.Xb)?new Ui(d.g,d.Xb,!0):new Xi(a[bc],a[cc]);b.h&&b.h(5);var c=d.Dc,d=d.Wb,e=this.J,f=void 0;(f=this.J)||(f=150>Sc()-this.k);if(f&&this.p)this[Cb]();else Y(this,"beforeshow")&&(c="undefined"!=typeof c?c:4,e||Ha(this.d()[y],"hidden"),X(this.d(),!0),b.a(this.d(),c,d),e||Ha(this.d()[y],"visible"),this.la(-1),this.ua(!0));a[w]();a.e();break}}};S.qc=function(a){this.J&&!this.La(a[N])&&this[Cb]()};
S.jb=function(a){wj.f.jb[O](this,a);this[Cb]()};S.m=function(){wj.f.m[O](this);this.b&&(this.b.clear(),delete this.b)};var yj=function(){this.a={Oa:"ratio_over_sum",Na:"ratio",V:"rate",Sb:"raw_value",Ca:"multiple_raw_values",ta:"multiple_rate"};this.b=[{title:"Percent Cache Hits",type:this.a.Oa,q:["cache_hits","cache_misses"]},{title:"Serf Bytes Fetched per Request",type:this.a.Na,q:["serf_fetch_request_count","serf_fetch_bytes_count"]},{title:"Average Load Time (ms)",type:this.a.Na,q:["total_page_load_ms","page_load_count"]},{title:"Queries per Second",type:this.a.V,q:["page_load_count"]},{title:"Flushes per Page",
type:this.a.Na,q:["num_flushes","page_load_count"]},{title:"Fallback Responses Served per Second",type:this.a.V,q:["num_fallback_responses_served"]},{title:"Rewrites Executed per Second",type:this.a.V,q:["num_rewrites_executed"]},{title:"Rewrites Dropped per Second",type:this.a.V,q:["num_rewrites_dropped"]},{title:"Percent Rewrites Succeeded",type:this.a.Oa,q:["num_rewrites_executed","num_rewrites_dropped"]},{title:"Resource 404s per Second",type:this.a.V,q:["resource_404_count"]},{title:"Slurp 404s per Second",
type:this.a.V,q:["slurp_404_count"]},{title:"Ongoing Image Rewrites",type:this.a.Sb,q:["image_ongoing_rewrites"]},{title:"Total Bytes Saved",type:this.a.Ca,q:["javascript_total_bytes_saved","css_filter_total_bytes_saved","image_rewrite_total_bytes_saved"],kb:["JavaScript","CSS","Images","Total"]},{title:"Percent Memcached Hits",type:this.a.Oa,q:["memcached_hits","memcached_misses"]},{title:"Dropped Image Rewrites per Second",type:this.a.ta,q:["image_norewrites_high_resolution","image_rewrites_dropped_due_to_load",
"image_rewrites_dropped_intentionally"],kb:["High resolution","Load","Intentional","Total"]},{title:"CSS Flatten Imports Errors per Second",type:this.a.ta,q:["flatten_imports_charset_mismatch","flatten_imports_invalid_url","flatten_imports_limit_exceeded","flatten_imports_minify_failed","flatten_imports_recursion"],kb:"Character set mismatch;Invalid URL;Limit exceeded;Minify failed;Recursion;Total".split(";")},{title:"CSS Parse Errors per Second",type:this.a.V,q:["css_filter_parse_failures"]},{title:"JS Minification Errors per Second",
type:this.a.V,q:["javascript_minification_failures"]},{title:"Meta Tags Converted per Second",type:this.a.V,q:["converted_meta_tags"]}];this.h=[{title:"Html Time (microseconds)",U:"Html Time us Histogram"},{title:"Rewrite Latency",U:"Rewrite Latency Histogram"},{title:"Pagespeed Resource Latency",U:"Pagespeed Resource Latency Histogram"},{title:"Backend Fetch First Byte Latency",U:"Backend Fetch First Byte Latency Histogram"},{title:"Memcached Get Count",U:"memcached_get_count"},{title:"Memcached Hit Latency",
U:"memcached_hit_latency_us"},{title:"Memcached Insert Latency",U:"memcached_insert_latency_us"},{title:"Memcached Insert Size",U:"memcached_insert_size_bytes"},{title:"Memcached Lookup Size",U:"memcached_lookup_size_bytes"}];this.u=0;this.i=[];this.c=[];this.e=[];this.l=[];this.j=null;this.k=!1;this.w=null;this.D={width:900,height:255,colors:["#4ECDC4","#556270","#C7F464"],legend:{position:"bottom"},hAxis:{format:"MMM d, y hh:mma",gridlines:{color:"#F2F2F2"},baselineColor:"#E5E5E5"},vAxis:{minValue:0,
viewWindowMode:"explicit",viewWindow:{min:0},gridlines:{color:"#F2F2F2"},baselineColor:"#E5E5E5"},chartArea:{left:60,top:20,width:800},pointSize:2};this.p={width:900,colors:["#556270"],legend:{position:"none"},hAxis:{gridlines:{color:"#F2F2F2"}},vAxis:{textStyle:{fontSize:8}},chartArea:{left:200,top:10,width:900}}},Dj=function(){var a=new yj;zj(a);var b=(new Date)[kb]();Aj(a)||(Bj(a,a.b[4][gc],[4],!1,0,b,5E3),Bj(a,a.h[0][gc],[0],!0,0,b,5E3),Bj(a,a.b[5][gc]+" and "+a.b[6][gc],[5,6],!1,0,b,5E3),Bj(a,
a.b[11][gc],[11],!1,0,b,5E3));aa.onunload=function(){if(Cj()){for(var b=aa.localStorage,d=[],e=0;e<a.c[J];++e)a.c[e]&&d[D](h[E]("mod-title"+e)[Qb]);for(var f=[],g=[],k=[],e=0;e<a.i[J];++e)a.i[e]&&(f[D](a.i[e].toJSON()),g[D](a.e[e]),k[D](a.l[e]));try{b["mps-autoUpdate"]=la[Mb](a.j?!0:!1),b["mps-graphTitles"]=la[Mb](d),b["mps-dataTables"]=la[Mb](f),b["mps-graphMetrics"]=la[Mb](g),b["mps-histograms"]=la[Mb](k)}catch(q){}}}},zj=function(a){La(h[E]("toggle-messages"),a.ea);Ej(a);Fj(a);La(h[E]("auto-update"),
function(){a.j?Gj(a):Hj(a)})},Ej=function(a){var b=new sh,c=h[E]("add-widget");Ij(a);Jj(a,"add-graph-compare-list");th(b,xg(c[Qb],null));b.setTitle("Add a new Widget");c[Q][oc](c);Ke(b,"dialogselect",function(b){if("ok"==b.key){b=h[E]("add-graph-list");var c=b[xb][b[tb]];b=Kj(a,c[Qb]);var f=h[E]("start-date")[Qb],g=h[E]("end-date")[Qb],f=f?(new Date(f))[kb]():0,g=g?(new Date(g))[kb]()+864E5:(new Date)[kb](),k=1E3*h[E]("granularity")[Sb];if(""==k||0==k)k=3E3;var q=h[E]("widget-title")[Sb],z=h[E]("add-graph-compare-list"),
c=[ma(c[Sb],10)],z=ma(z[xb][z[tb]][Sb],10);0<=z&&c[D](z);Bj(a,q,c,b,f,g,k);a.hb()}a.hb();b=["add-graph-list","add-graph-compare-list"];for(var u in b)u=b[u],h[E](u)&&ta(h[E](u),0);n(h[E]("mod-compare-with")[y],"block")});La(h[E]("modal-launcher"),function(){a.j&&(Gj(a),a.k=!0);b.W(!0);Lj(a)})},Ij=function(a){Mj("add-graph-list","Add a Metric",-1);for(var b=0;b<a.b[J];b++)Mj("add-graph-list",a.b[b][gc],b);for(b=0;b<a.h[J];b++)Mj("add-graph-list",a.h[b][gc],b)},Fj=function(a){var b=new sh,c=h[E]("edit-widget");
Jj(a,"edit-graph-list");Jj(a,"edit-graph-compare-list");th(b,xg(c[Qb],null));b.setTitle("Edit Widget");c[Q][oc](c);Ke(b,"dialogselect",function(b){if("ok"==b.key){b=h[E]("edit-graph-list");b=[ma(b[xb][b[tb]][Sb],10)];if(0>b[0])return;var c=h[E]("edit-graph-compare-list");b[D](ma(c[xb][c[tb]][Sb],10));0>b[1]&&b[yc](1);var c=h[E]("start-date-edit")[Qb],f=h[E]("end-date-edit")[Qb],c=c?(new Date(c))[kb]():(new Date(0))[kb](),f=f?(new Date(f))[kb]():(new Date)[kb]();c==f&&(f+=864E5);var g=Aa(h[E]("granularity-edit"),
1E3*h[E]("granularity-edit")[Sb]);if(""==g||0==g)g=5E3;Nj(a,a.u,h[E]("widget-title-edit")[Sb],b,c,f,g,!1)}n(h[E]("add-filter-edit")[y],"block");n(h[E]("date-filter-edit")[y],"none");n(h[E]("hide-filter-edit")[y],"none");p(h[E]("start-date-edit"),"");p(h[E]("end-date-edit"),"");Aa(h[E]("granularity-edit"),"");Aa(h[E]("widget-title-edit"),"");b=["edit-graph-list","edit-graph-compare-list"];for(var k in b)k=b[k],h[E](k)&&ta(h[E](k),0)});a.w=b},Nj=function(a,b,c,d,e,f,g,k){var q=new XMLHttpRequest;e=
Oj(a,!1,d,e,f,g);q.onreadystatechange=function(){if(4==this.readyState)if(200!=this.status||"{"!=this[Ra][0])n(h[E]("mod-error")[y],"block");else{var e=la[ac](this[Ra]);n(h[E]("mod-error")[y],"none");var f;if(!(f=!k))t:if(f=a.e[b],f[J]!=d[J])f=!1;else{for(var g=0;g<f[J];++g)if(f[g]!=d[g]){f=!1;break t}f=!0}if(f){f=[];for(g=0;g<d[J];++g)a.b[d[g]][G]==a.a.Ca||a.b[d[g]][G]==a.a.ta?f=f[Sa](Pj(a,e.variables,e.timestamps,d[g])):f[D](Qj(a,e.variables,e.timestamps,d[g]));Rj(a,f,e.timestamps,d,c,b);p(h[E]("mod-title"+
b),c)}}};q.open("GET",e);q.send()},Jj=function(a,b){Mj(b,"None",-1);for(var c=0;c<a.b[J];c++)Mj(b,a.b[c][gc],c)},Mj=function(a,b,c){var d=h[Ya]("option");Aa(d,c);d.text=b;h[E](a).add(d,null)},Lj=function(a){var b=h[E]("hide-filter"),c=h[E]("add-filter");La(c,function(){n(h[E]("date-filter")[y],"block");n(c[y],"none");n(b[y],"inline")});La(b,a.hb);var d=h[E]("add-graph-list");d.onchange=function(){var b=d[xb][d[tb]][Qb];if("Add a Metric"===b)Aa(h[E]("widget-title"),"");else{Aa(h[E]("widget-title"),
b);var c=h[E]("mod-compare-with");Kj(a,b)?(n(h[E]("start-date-filter")[y],"none"),p(h[E]("end-date-label"),"Date"),n(c[y],"none"),ta(c.children[1],0)):(n(h[E]("start-date-filter")[y],"block"),p(h[E]("end-date-label"),"End Date: "),n(c[y],"block"))}};Sj("start-date-calendar-button","start-date");Sj("end-date-calendar-button","end-date")},Sj=function(a,b){var c=new Zi;Zg(c,void 0);$i(c,h[E](a));Ke(c,"change",function(){var a=c[Ta](),a=a?""+a[Ab]()+"-"+(a[I]()+1)+"-"+a[Ta]():"";p(h[E](b),a)})};
yj[L].hb=function(){n(h[E]("add-filter")[y],"block");n(h[E]("date-filter")[y],"none");n(h[E]("hide-filter")[y],"none");p(h[E]("start-date"),"");p(h[E]("end-date"),"");Aa(h[E]("granularity"),"");Aa(h[E]("widget-title"),"")};
var Gj=function(a){clearInterval(a.j);a.j=null;p(h[E]("auto-update"),"Auto-update off")},Hj=function(a){Tj(a);a.j=setInterval(function(){Tj(a)},7E3);p(h[E]("auto-update"),"Auto-update on")},Tj=function(a){var b=(new Date)[kb]();if(!a.k)for(var c=0;c<a.c[J];++c)a.c[c]&&(a.l[c]||Nj(a,c,h[E]("mod-title"+c)[Qb],a.e[c],b-12E4,b,7E3,!0))},Bj=function(a,b,c,d,e,f,g){var k=new XMLHttpRequest;e=Oj(a,d,c,e,f,g);k.onreadystatechange=function(){if(4==this.readyState)if(200!=this.status||1>this[Ra][J]||"{"!=this[Ra][0])n(h[E]("mod-error")[y],
"block");else{n(h[E]("mod-error")[y],"none");var e=la[ac](this[Ra]);if(d){var g=e.histograms,e=c[0],k=a.h[e].U,C=a.h[e][gc],P=new Date(f),P=P.toDateString()+", "+P.toLocaleTimeString(),K=new google[lc].DataTable;K[xc]("string","Bounds");K[xc]("number",k);if(g=g[k]){for(k=0;k<g[J];k++){var ha=l[Nb](g[k[pb]()].lowerBound),eb=l[Nb](g[k[pb]()].upperBound);eb||(eb="\u221e");ha||(ha=0);K.addRow(["["+ha+", "+eb+")",g[k[pb]()].count])}K.getNumberOfRows()&&(k=a.p,xa(k,255<20*(g[J]+1)?557:255),xa(k.chartArea,
k[B]-30),C=new google[lc].BarChart(Uj(a,C,P)),C.draw(K,k),a.i[D](K),a.c[D](C),a.e[D]([e]),a.l[D](!0))}else Vj(C)}else{K=[];for(C=0;C<c[J];++C)P=c[C],0>P||(a.b[P][G]!=a.a.Ca&&a.b[P][G]!=a.a.ta?K[D](Qj(a,e.variables,e.timestamps,P)):K=K[Sa](Pj(a,e.variables,e.timestamps,P)));Rj(a,K,e.timestamps,c,b,-1)}}};k.open("GET",e);k.send()},Oj=function(a,b,c,d,e,f){d="/mod_pagespeed_statistics?json&start_time="+d+("&end_time="+e);d+="&granularity="+f;if(b)for(d+="&hist_titles=",b=0;b<c[J];b++)0>c[b]||(d+=a.h[c[b]].U+
",");else for(d+="&var_titles=",b=0;b<c[J];b++)if(!(0>c[b]))for(f=a.b[c[b]].q,e=0;e<f[J];e++)d+=f[e]+",";return d};
yj[L].ea=function(){var a=h[E]("messages-div"),b=h[E]("toggle-messages");if("none"==a[y][Hb]){var c=new XMLHttpRequest;c.onreadystatechange=function(){if(4==this.readyState)if(200!=this.status)n(h[E]("mod-error")[y],"block");else{n(h[E]("mod-error")[y],"none");var c=this[Ra],e=h[Ya]("table");e[x]("id","mod-table");e[x]("cellspacing","0");var f,g,k;k=h[Ya]("thead");f=h[Ya]("tr");for(var q=/\[([A-Z][a-z]+)\]/,z=/\[[0-9]+\] (.*)$/,u=[q,/\[([a-zA-Z]{3} [a-zA-Z]{3} [0-9]{1,2} [0-9]{1,2}:[0-9]{2}:[0-9]{2} [0-9]{4})\]/,
z,/\[([0-9]+)\]/],C=["Code","Time","Message","PID"],P=["code","time","message","pid"],K=0;K<C[J];++K)g=h[Ya]("th"),p(g,C[K]),g[x]("class",P[K]),g[x]("scope","col"),f[s](g);k[s](f);e[s](k);k=h[Ya]("tbody");c=c[v](/\n?<\/?pre>/g,"")[ub]("\n");for(K=0;K<c[J];++K){f=h[Ya]("tr");for(C=0;C<u[J];++C){g=h[Ya]("td");var ha=c[K][Va](u[C]);if(ha){var eb=g,Ub;u[C]===z?(Ub=ha[1],Ub=Ub[v](RegExp("\\b(http:\\/\\/[-A-Za-z0-9+&@#\\/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#\\/%=~_()|])","g"),'<a href="$1">$1</a>')):Ub=ha[1];
p(eb,Ub);"Info"===ha[1]?g[x]("class","code info"):"Warning"===ha[1]?g[x]("class","code warning"):"Error"===ha[1]?g[x]("class","code error"):"Fatal"===ha[1]&&g[x]("class","code fatal")}u[C]!==q&&g[x]("class",P[C]);f[s](g)}k[s](f)}e[s](k);p(h[E]("messages"),"");h[E]("messages")[s](e);n(a[y],"block");p(b,"Hide recent messages")}};c.open("GET","/mod_pagespeed_message");c.send()}else n(a[y],"none"),p(b,"Show recent messages")};
var Kj=function(a,b){for(var c=0;c<a.h[J];c++)if(a.h[c][gc]==b)return!0;return!1},Qj=function(a,b,c,d){var e=[],f=a.b[d].q;d=a.b[d][G];for(var g=1;g<c[J];g++){var k=g-1,q=g;if(d==a.a.Oa)e[g-1]=Wj(b,q,k,f[0],b[f[0]][q]+b[f[1]][q]-b[f[0]][k]-b[f[1]][k]);else if(d==a.a.Na){var z=f[1];e[g-1]=Wj(b,q,k,f[0],b[z][q]-b[z][k])}else d==a.a.V?e[g-1]=Wj(b,q,k,f[0],(c[q]-c[k])/1E3):d==a.a.Sb&&(e[g-1]=b[f[0]][q])}return e},Pj=function(a,b,c,d){var e=a.b[d].q,f=ja(e[J]);if(a.b[d][G]==a.a.Ca){for(a=0;a<e[J];a++)f[a]=
[];for(a=1;a<c[J];a++)for(d=0;d<e[J];d++)f[d][a-1]=b[e[d]][a]}else if(a.b[d][G]==a.a.ta){for(a=0;a<e[J];a++)f[a]=[];for(a=1;a<c[J];a++)for(d=0;d<e[J];d++){var g=a-1;f[d][a-1]=Wj(b,a,g,e[d],(c[a]-c[g])/1E3)}}f[D]([]);b=f[J]-1;for(a=0;a<f[0][J];++a){for(d=c=0;d<b;++d)c+=f[d][a];f[b][D](c)}return f},Wj=function(a,b,c,d,e){return 0==e?0:(a[d][b]-a[d][c])/e},Rj=function(a,b,c,d,e,f){for(var g=[],k=0;k<d[J];++k)a.b[d[k]][G]!=a.a.Ca&&a.b[d[k]][G]!=a.a.ta?g[D](a.b[d[k]][gc]):g=g[Sa](a.b[d[k]].kb);var k=g[0],
q=new google[lc].DataTable;q[xc]("datetime","Time");q[xc]("number",k);for(k=0;k<c[J];k++)q.addRow([new Date(ma(c[k],10)),b[0][k]]);for(k=1;k<b[J];k++)if(!(0>d[k])){c=b[k];var z=g[k],u=q,C=u.getNumberOfColumns();u[xc]("number",z);for(z=0;z<c[J];z++)u.setCell(z,C,c[z])}q.getNumberOfRows()?(0>f?(b=new google[lc].LineChart(Uj(a,e,null)),a.c[D](b),a.i[D](q),a.e[D](d),a.l[D](!1)):(a.i[f]=q,a.e[f]=d,b=a.c[f]),b.draw(q,a.D)):Vj(e);a.k&&(a.k=!1,Hj(a))},Vj=function(a){var b=h[Ya]("div");b[x]("class","mod-no-match");
p(b,"No data matches your query for "+a);h[E]("container")[s](b);setTimeout(function(){b[Q][oc](b)},1E4)},Uj=function(a,b,c){var d=h[Ya]("div");d[x]("class","mod-widgets");var e=h[Ya]("div");e[x]("class","mod-widgets-topbar");var f=h[Ya]("span");f[x]("class","title");f[x]("id","mod-title"+a.c[J]);var g="",k=h[E]("widget-title");k&&(g=dd(k[Sb]));""==g&&(g+=b);c&&(g+=" on "+c);p(f,g);e[s](f);c=h[Ya]("button");c[x]("class","graphselector menuButton");c[x]("id","mod-menu-button"+a.c[J]);f=h[Ya]("div");
f[x]("class","goog-menu");f[x]("for",c.id);n(f[y],"none");Kj(a,b)||f[s](Xj(a,a.c[J]));f[s](Yj(a,d,a.c[J]));e[s](f);b=new wj;b.p=!0;$g(b,f);xj(b,c,0);e[s](c);d[s](e);e=h[Ya]("div");e.a=a.c[J];e[x]("class","graph");d[s](e);h[E]("container")[s](d);return e},Yj=function(a,b,c){var d=h[Ya]("div");d[x]("class","removeButton goog-menuitem");p(d,"Remove ");La(d,function(){b[Q][oc](b);d[Q][oc](d);delete a.i[c];delete a.c[c];delete a.e[c];delete a.l[c]});return d},Xj=function(a,b){var c=h[Ya]("div");c[x]("class",
"editButton goog-menuitem unimplemented");p(c,"Edit");La(c,function(){a.j&&(Gj(a),a.k=!0);a.u=b;a.w.W(!0);ta(h[E]("edit-graph-list"),a.e[b][0]+1);a.e[b][1]&&ta(h[E]("edit-graph-compare-list"),a.e[b][1]+1);Aa(h[E]("widget-title-edit"),h[E]("mod-title"+b)[Qb]);Sj("start-date-calendar-button-edit","start-date-edit");Sj("end-date-calendar-button-edit","end-date-edit");var c=h[E]("hide-filter-edit"),e=h[E]("add-filter-edit");La(e,function(){n(h[E]("date-filter-edit")[y],"block");n(e[y],"none");n(c[y],
"inline")});La(c,this.hb)});return c},Cj=function(){try{return"localStorage"in aa&&null!==aa.localStorage}catch(a){return!1}},Aj=function(a){if(!Cj())return!1;var b=aa.localStorage;if(!(b["mps-autoUpdate"]&&b["mps-graphTitles"]&&b["mps-dataTables"]&&b["mps-graphMetrics"]&&b["mps-histograms"]))return!1;a.e=la[ac](b["mps-graphMetrics"]);a.l=la[ac](b["mps-histograms"]);for(var c=la[ac](b["mps-dataTables"]),d=la[ac](b["mps-graphTitles"]),e=0;e<d[J];++e){var f,g,k=d[e][ub](" on ");a.l[e]&&k[1]?(f=k[0],
g=k[1]):(f=d[e],g=null);k=new google[lc].DataTable(c[e]);g?(f=new google[lc].BarChart(Uj(a,f,g)),g=a.p,xa(g,255<20*(k.getNumberOfRows()+1)?557:255),xa(g.chartArea,g[B]-30)):(f=new google[lc].LineChart(Uj(a,f,null)),g=a.D);f.draw(k,g);a.i[D](k);a.c[D](f)}la[ac](b["mps-autoUpdate"])&&Hj(a);return!0};if(ga&&ea){var Zj=0,ak=function(){Zj++;2==Zj&&Dj()},bk=h[Ya]("script");bk[x]("src",ea);bk.onload=ak;h[lb]("head")[0][s](bk);var ck=h[Ya]("link");ck[x]("href",ga);ck[x]("rel","stylesheet");ck.onload=ak;h[lb]("head")[0][s](ck)}else google.load("visualization","1.0",{packages:["corechart"]}),google.setOnLoadCallback(function(){Dj()});h[E]("start-date-calendar")[x]("src","data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAgLS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiIFsNCgk8IUVOVElUWSBuc19mbG93cyAiaHR0cDovL25zLmFkb2JlLmNvbS9GbG93cy8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSINCgkgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6YT0iaHR0cDovL25zLmFkb2JlLmNvbS9BZG9iZVNWR1ZpZXdlckV4dGVuc2lvbnMvMy4wLyINCgkgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMXB4IiBoZWlnaHQ9IjIxcHgiIHZpZXdCb3g9IjAgMCAyMSAyMSIgb3ZlcmZsb3c9InZpc2libGUiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIxIDIxIg0KCSB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxkZWZzPg0KPC9kZWZzPg0KPHBhdGggZD0iTTEyLDE0aDFWOWgtMnYxaDFWMTR6IE0xNSw1QzE0Ljk5OCw1LDUsNSw1LDVDNC40NDksNSw0LjAwMiw1LjQ0OSw0LDZ2MTBjMCwwLjU1MywwLjQ0NywxLDEsMWgxMGMwLjU1MywwLDEtMC40NDcsMS0xVjYNCglDMTUuOTk4LDUuNDQ5LDE1LjU1MSw1LDE1LDV6IE0xNSwxNkg1VjdoMTBWMTZ6IE0xMCwxM3YtMC43NWMwLTAuNDE0LTAuMzM2LTAuNzUtMC43NS0wLjc1YzAuNDE0LDAsMC43NS0wLjMzNiwwLjc1LTAuNzVWMTANCgljMC0wLjU1My0wLjQ0Ny0xLTEtMUg3djFoMnYxSDh2MWgxdjFIN3YxaDJDOS41NTMsMTQsMTAsMTMuNTUzLDEwLDEzeiIvPg0KPHJlY3Qgb3BhY2l0eT0iMCIgZmlsbD0iIzQzODdGRCIgd2lkdGg9IjIxIiBoZWlnaHQ9IjIxIi8+DQo8L3N2Zz4NCg==");
h[E]("end-date-calendar")[x]("src","data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAgLS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiIFsNCgk8IUVOVElUWSBuc19mbG93cyAiaHR0cDovL25zLmFkb2JlLmNvbS9GbG93cy8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSINCgkgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6YT0iaHR0cDovL25zLmFkb2JlLmNvbS9BZG9iZVNWR1ZpZXdlckV4dGVuc2lvbnMvMy4wLyINCgkgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMXB4IiBoZWlnaHQ9IjIxcHgiIHZpZXdCb3g9IjAgMCAyMSAyMSIgb3ZlcmZsb3c9InZpc2libGUiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIxIDIxIg0KCSB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxkZWZzPg0KPC9kZWZzPg0KPHBhdGggZD0iTTEyLDE0aDFWOWgtMnYxaDFWMTR6IE0xNSw1QzE0Ljk5OCw1LDUsNSw1LDVDNC40NDksNSw0LjAwMiw1LjQ0OSw0LDZ2MTBjMCwwLjU1MywwLjQ0NywxLDEsMWgxMGMwLjU1MywwLDEtMC40NDcsMS0xVjYNCglDMTUuOTk4LDUuNDQ5LDE1LjU1MSw1LDE1LDV6IE0xNSwxNkg1VjdoMTBWMTZ6IE0xMCwxM3YtMC43NWMwLTAuNDE0LTAuMzM2LTAuNzUtMC43NS0wLjc1YzAuNDE0LDAsMC43NS0wLjMzNiwwLjc1LTAuNzVWMTANCgljMC0wLjU1My0wLjQ0Ny0xLTEtMUg3djFoMnYxSDh2MWgxdjFIN3YxaDJDOS41NTMsMTQsMTAsMTMuNTUzLDEwLDEzeiIvPg0KPHJlY3Qgb3BhY2l0eT0iMCIgZmlsbD0iIzQzODdGRCIgd2lkdGg9IjIxIiBoZWlnaHQ9IjIxIi8+DQo8L3N2Zz4NCg==");
h[E]("start-date-calendar-edit")[x]("src","data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAgLS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiIFsNCgk8IUVOVElUWSBuc19mbG93cyAiaHR0cDovL25zLmFkb2JlLmNvbS9GbG93cy8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSINCgkgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6YT0iaHR0cDovL25zLmFkb2JlLmNvbS9BZG9iZVNWR1ZpZXdlckV4dGVuc2lvbnMvMy4wLyINCgkgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMXB4IiBoZWlnaHQ9IjIxcHgiIHZpZXdCb3g9IjAgMCAyMSAyMSIgb3ZlcmZsb3c9InZpc2libGUiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIxIDIxIg0KCSB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxkZWZzPg0KPC9kZWZzPg0KPHBhdGggZD0iTTEyLDE0aDFWOWgtMnYxaDFWMTR6IE0xNSw1QzE0Ljk5OCw1LDUsNSw1LDVDNC40NDksNSw0LjAwMiw1LjQ0OSw0LDZ2MTBjMCwwLjU1MywwLjQ0NywxLDEsMWgxMGMwLjU1MywwLDEtMC40NDcsMS0xVjYNCglDMTUuOTk4LDUuNDQ5LDE1LjU1MSw1LDE1LDV6IE0xNSwxNkg1VjdoMTBWMTZ6IE0xMCwxM3YtMC43NWMwLTAuNDE0LTAuMzM2LTAuNzUtMC43NS0wLjc1YzAuNDE0LDAsMC43NS0wLjMzNiwwLjc1LTAuNzVWMTANCgljMC0wLjU1My0wLjQ0Ny0xLTEtMUg3djFoMnYxSDh2MWgxdjFIN3YxaDJDOS41NTMsMTQsMTAsMTMuNTUzLDEwLDEzeiIvPg0KPHJlY3Qgb3BhY2l0eT0iMCIgZmlsbD0iIzQzODdGRCIgd2lkdGg9IjIxIiBoZWlnaHQ9IjIxIi8+DQo8L3N2Zz4NCg==");
h[E]("end-date-calendar-edit")[x]("src","data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAgLS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiIFsNCgk8IUVOVElUWSBuc19mbG93cyAiaHR0cDovL25zLmFkb2JlLmNvbS9GbG93cy8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSINCgkgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6YT0iaHR0cDovL25zLmFkb2JlLmNvbS9BZG9iZVNWR1ZpZXdlckV4dGVuc2lvbnMvMy4wLyINCgkgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMXB4IiBoZWlnaHQ9IjIxcHgiIHZpZXdCb3g9IjAgMCAyMSAyMSIgb3ZlcmZsb3c9InZpc2libGUiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIxIDIxIg0KCSB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxkZWZzPg0KPC9kZWZzPg0KPHBhdGggZD0iTTEyLDE0aDFWOWgtMnYxaDFWMTR6IE0xNSw1QzE0Ljk5OCw1LDUsNSw1LDVDNC40NDksNSw0LjAwMiw1LjQ0OSw0LDZ2MTBjMCwwLjU1MywwLjQ0NywxLDEsMWgxMGMwLjU1MywwLDEtMC40NDcsMS0xVjYNCglDMTUuOTk4LDUuNDQ5LDE1LjU1MSw1LDE1LDV6IE0xNSwxNkg1VjdoMTBWMTZ6IE0xMCwxM3YtMC43NWMwLTAuNDE0LTAuMzM2LTAuNzUtMC43NS0wLjc1YzAuNDE0LDAsMC43NS0wLjMzNiwwLjc1LTAuNzVWMTANCgljMC0wLjU1My0wLjQ0Ny0xLTEtMUg3djFoMnYxSDh2MWgxdjFIN3YxaDJDOS41NTMsMTQsMTAsMTMuNTUzLDEwLDEzeiIvPg0KPHJlY3Qgb3BhY2l0eT0iMCIgZmlsbD0iIzQzODdGRCIgd2lkdGg9IjIxIiBoZWlnaHQ9IjIxIi8+DQo8L3N2Zz4NCg==");})();
