function nn(i){return i>>>0}function Gt(i){return i|0}let si="warn",M=()=>{},$=()=>{},se=()=>{},O=()=>{};function rn(i){if(typeof i>"u"?i=si:si=i,M=$=se=O=()=>{},typeof window.console<"u")switch(i){case"debug":M=console.debug.bind(window.console);case"info":$=console.info.bind(window.console);case"warn":se=console.warn.bind(window.console);case"error":O=console.error.bind(window.console);case"none":break;default:throw new window.Error("invalid logging type '"+i+"'")}}rn();function St(i,t=!1){try{return decodeURIComponent(escape(i))}catch(e){if(e instanceof URIError&&t)return i;throw e}}function ce(i){return unescape(encodeURIComponent(i))}let Es="ontouchstart"in document.documentElement||document.ontouchstart!==void 0||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;window.addEventListener("touchstart",function i(){Es=!0,window.removeEventListener("touchstart",i,!1)},!1);let ni=10*(window.devicePixelRatio||1),As=!1;try{const i=document.createElement("canvas");i.style.cursor='url("data:image/x-icon;base64,AAACAAEACAgAAAIAAgA4AQAAFgAAACgAAAAIAAAAEAAAAAEAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAA==") 2 2, default',i.style.cursor.indexOf("url")===0?($("Data URI scheme cursor supported"),As=!0):se("Data URI scheme cursor not supported")}catch(i){O("Data URI scheme cursor test exception: "+i)}const an=As;let on=!0;try{const i=document.createElement("div");i.style.visibility="hidden",i.style.overflow="scroll",document.body.appendChild(i);const t=document.createElement("div");i.appendChild(t);const e=i.offsetWidth-t.offsetWidth;i.parentNode.removeChild(i),on=e!=0}catch(i){O("Scrollbar test exception: "+i)}function Pe(){return!!/mac/i.exec(navigator.platform)}function ft(){return!!/win/i.exec(navigator.platform)}function tt(){return!!/ipad/i.exec(navigator.platform)||!!/iphone/i.exec(navigator.platform)||!!/ipod/i.exec(navigator.platform)}function Le(i,t,e){const s=e.getBoundingClientRect();let n={x:0,y:0};return i=s.right?n.x=s.width-1:n.x=i-s.left,t=s.bottom?n.y=s.height-1:n.y=t-s.top,n}function Se(i){i.stopPropagation(),i.preventDefault()}let Ct=!1,Ks=null;document.captureElement=null;function ve(i){if(Ct)return;const t=new i.constructor(i.type,i);Ct=!0,document.captureElement?document.captureElement.dispatchEvent(t):Ks.dispatchEvent(t),Ct=!1,i.stopPropagation(),t.defaultPrevented&&i.preventDefault(),i.type==="mouseup"&&Ts()}function Xs(){const i=document.getElementById("noVNC_mouse_capture_elem");i.style.cursor=window.getComputedStyle(document.captureElement).cursor}const Fs=new MutationObserver(Xs);function hn(i){if(i.setCapture)i.setCapture(),document.captureElement=i;else{Ts();let t=document.getElementById("noVNC_mouse_capture_elem");t===null&&(t=document.createElement("div"),t.id="noVNC_mouse_capture_elem",t.style.position="fixed",t.style.top="0px",t.style.left="0px",t.style.width="100%",t.style.height="100%",t.style.zIndex=1e4,t.style.display="none",document.body.appendChild(t),t.addEventListener("contextmenu",ve),t.addEventListener("mousemove",ve),t.addEventListener("mouseup",ve)),document.captureElement=i,Fs.observe(i,{attributes:!0}),Xs(),t.style.display="",window.addEventListener("mousemove",ve),window.addEventListener("mouseup",ve)}}function Ts(){if(document.releaseCapture)document.releaseCapture(),document.captureElement=null;else{if(!document.captureElement)return;Ks=document.captureElement,document.captureElement=null,Fs.disconnect();const i=document.getElementById("noVNC_mouse_capture_elem");i.style.display="none",window.removeEventListener("mousemove",ve),window.removeEventListener("mouseup",ve)}}class Ms{constructor(){this._listeners=new Map}addEventListener(t,e){this._listeners.has(t)||this._listeners.set(t,new Set),this._listeners.get(t).add(e)}removeEventListener(t,e){this._listeners.has(t)&&this._listeners.get(t).delete(e)}dispatchEvent(t){return this._listeners.has(t.type)?(this._listeners.get(t.type).forEach(e=>e.call(this,t)),!t.defaultPrevented):!0}}const Ls={toBase64Table:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split(""),base64Pad:"=",encode(i){let t="";const e=i.length,s=e%3;for(let r=0;r>2],t+=this.toBase64Table[((i[r]&3)<<4)+(i[r+1]>>4)],t+=this.toBase64Table[((i[r+1]&15)<<2)+(i[r+2]>>6)],t+=this.toBase64Table[i[r+2]&63];const n=e-s;return s===2?(t+=this.toBase64Table[i[n]>>2],t+=this.toBase64Table[((i[n]&3)<<4)+(i[n+1]>>4)],t+=this.toBase64Table[(i[n+1]&15)<<2],t+=this.toBase64Table[64]):s===1&&(t+=this.toBase64Table[i[n]>>2],t+=this.toBase64Table[(i[n]&3)<<4],t+=this.toBase64Table[64],t+=this.toBase64Table[64]),t},toBinaryTable:[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,0,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1],decode(i,t=0){let e=i.indexOf("=")-t;e<0&&(e=i.length-t);const s=(e>>2)*3+Math.floor(e%4/1.5),n=new Array(s);let r=0,a=0;for(let h=0,c=t;c=8&&(r-=8,l||(n[h++]=a>>r&255),a&=(1<> Display.constructor"),this._target=t,!this._target)throw new Error("Target must be set");if(typeof this._target=="string")throw new Error("target must be a DOM element");if(!this._target.getContext)throw new Error("no getContext method");this._targetCtx=this._target.getContext("2d"),this._viewportLoc={x:0,y:0,w:this._target.width,h:this._target.height},this._backbuffer=document.createElement("canvas"),this._drawCtx=this._backbuffer.getContext("2d"),this._damageBounds={left:0,top:0,right:this._backbuffer.width,bottom:this._backbuffer.height},M("User Agent: "+navigator.userAgent),M("<< Display.constructor"),this._scale=1,this._clipViewport=!1,this.onflush=()=>{}}get scale(){return this._scale}set scale(t){this._rescale(t)}get clipViewport(){return this._clipViewport}set clipViewport(t){this._clipViewport=t;const e=this._viewportLoc;this.viewportChangeSize(e.w,e.h),this.viewportChangePos(0,0)}get width(){return this._fbWidth}get height(){return this._fbHeight}viewportChangePos(t,e){const s=this._viewportLoc;t=Math.floor(t),e=Math.floor(e),this._clipViewport||(t=-s.w,e=-s.h);const n=s.x+s.w-1,r=s.y+s.h-1;t<0&&s.x+t<0&&(t=-s.x),n+t>=this._fbWidth&&(t-=n+t-this._fbWidth+1),s.y+e<0&&(e=-s.y),r+e>=this._fbHeight&&(e-=r+e-this._fbHeight+1),!(t===0&&e===0)&&(M("viewportChange deltaX: "+t+", deltaY: "+e),s.x+=t,s.y+=e,this._damage(s.x,s.y,s.w,s.h),this.flip())}viewportChangeSize(t,e){(!this._clipViewport||typeof t>"u"||typeof e>"u")&&(M("Setting viewport to full display region"),t=this._fbWidth,e=this._fbHeight),t=Math.floor(t),e=Math.floor(e),t>this._fbWidth&&(t=this._fbWidth),e>this._fbHeight&&(e=this._fbHeight);const s=this._viewportLoc;if(s.w!==t||s.h!==e){s.w=t,s.h=e;const n=this._target;n.width=t,n.height=e,this.viewportChangePos(0,0),this._damage(s.x,s.y,s.w,s.h),this.flip(),this._rescale(this._scale)}}absX(t){return this._scale===0?0:Gt(t/this._scale+this._viewportLoc.x)}absY(t){return this._scale===0?0:Gt(t/this._scale+this._viewportLoc.y)}resize(t,e){this._prevDrawStyle="",this._fbWidth=t,this._fbHeight=e;const s=this._backbuffer;if(s.width!==t||s.height!==e){let r=null;s.width>0&&s.height>0&&(r=this._drawCtx.getImageData(0,0,s.width,s.height)),s.width!==t&&(s.width=t),s.height!==e&&(s.height=e),r&&this._drawCtx.putImageData(r,0,0)}const n=this._viewportLoc;this.viewportChangeSize(n.w,n.h),this.viewportChangePos(0,0)}getImageData(){return this._drawCtx.getImageData(0,0,this.width,this.height)}toDataURL(t,e){return this._backbuffer.toDataURL(t,e)}toBlob(t,e,s){return this._backbuffer.toBlob(t,e,s)}_damage(t,e,s,n){tthis._damageBounds.right&&(this._damageBounds.right=t+s),e+n>this._damageBounds.bottom&&(this._damageBounds.bottom=e+n)}flip(t){if(this._renderQ.length!==0&&!t)this._renderQPush({type:"flip"});else{let e=this._damageBounds.left,s=this._damageBounds.top,n=this._damageBounds.right-e,r=this._damageBounds.bottom-s,a=e-this._viewportLoc.x,h=s-this._viewportLoc.y;a<0&&(n+=a,e-=a,a=0),h<0&&(r+=h,s-=h,h=0),a+n>this._viewportLoc.w&&(n=this._viewportLoc.w-a),h+r>this._viewportLoc.h&&(r=this._viewportLoc.h-h),n>0&&r>0&&this._targetCtx.drawImage(this._backbuffer,e,s,n,r,a,h,n,r),this._damageBounds.left=this._damageBounds.top=65535,this._damageBounds.right=this._damageBounds.bottom=0}}pending(){return this._renderQ.length>0}flush(){this._renderQ.length===0?this.onflush():this._flushing=!0}fillRect(t,e,s,n,r,a){this._renderQ.length!==0&&!a?this._renderQPush({type:"fill",x:t,y:e,width:s,height:n,color:r}):(this._setFillColor(r),this._drawCtx.fillRect(t,e,s,n),this._damage(t,e,s,n))}copyImage(t,e,s,n,r,a,h){this._renderQ.length!==0&&!h?this._renderQPush({type:"copy",oldX:t,oldY:e,x:s,y:n,width:r,height:a}):(this._drawCtx.mozImageSmoothingEnabled=!1,this._drawCtx.webkitImageSmoothingEnabled=!1,this._drawCtx.msImageSmoothingEnabled=!1,this._drawCtx.imageSmoothingEnabled=!1,this._drawCtx.drawImage(this._backbuffer,t,e,r,a,s,n,r,a),this._damage(s,n,r,a))}imageRect(t,e,s,n,r,a){if(s===0||n===0)return;const h=new Image;h.src="data: "+r+";base64,"+Ls.encode(a),this._renderQPush({type:"img",img:h,x:t,y:e,width:s,height:n})}blitImage(t,e,s,n,r,a,h){if(this._renderQ.length!==0&&!h){const c=new Uint8Array(s*n*4);c.set(new Uint8Array(r.buffer,0,c.length)),this._renderQPush({type:"blit",data:c,x:t,y:e,width:s,height:n})}else{let c=new Uint8ClampedArray(r.buffer,r.byteOffset+a,s*n*4),o=new ImageData(c,s,n);this._drawCtx.putImageData(o,t,e),this._damage(t,e,s,n)}}drawImage(t,e,s){this._drawCtx.drawImage(t,e,s),this._damage(e,s,t.width,t.height)}autoscale(t,e){let s;if(t===0||e===0)s=0;else{const n=this._viewportLoc,r=t/e;n.w/n.h>=r?s=t/n.w:s=e/n.h}this._rescale(s)}_rescale(t){this._scale=t;const e=this._viewportLoc,s=t*e.w+"px",n=t*e.h+"px";(this._target.style.width!==s||this._target.style.height!==n)&&(this._target.style.width=s,this._target.style.height=n)}_setFillColor(t){const e="rgb("+t[0]+","+t[1]+","+t[2]+")";e!==this._prevDrawStyle&&(this._drawCtx.fillStyle=e,this._prevDrawStyle=e)}_renderQPush(t){this._renderQ.push(t),this._renderQ.length===1&&this._scanRenderQ()}_resumeRenderQ(){this.removeEventListener("load",this._noVNCDisplay._resumeRenderQ),this._noVNCDisplay._scanRenderQ()}_scanRenderQ(){let t=!0;for(;t&&this._renderQ.length>0;){const e=this._renderQ[0];switch(e.type){case"flip":this.flip(!0);break;case"copy":this.copyImage(e.oldX,e.oldY,e.x,e.y,e.width,e.height,!0);break;case"fill":this.fillRect(e.x,e.y,e.width,e.height,e.color,!0);break;case"blit":this.blitImage(e.x,e.y,e.width,e.height,e.data,0,!0);break;case"img":if(e.img.complete){if(e.img.width!==e.width||e.img.height!==e.height){O("Decoded image has incorrect dimensions. Got "+e.img.width+"x"+e.img.height+". Expected "+e.width+"x"+e.height+".");return}this.drawImage(e.img,e.x,e.y)}else e.img._noVNCDisplay=this,e.img.addEventListener("load",this._resumeRenderQ),t=!1;break}t&&this._renderQ.shift()}this._renderQ.length===0&&this._flushing&&(this._flushing=!1,this.onflush())}}function fe(i,t,e,s,n){if(t.subarray&&i.subarray){i.set(t.subarray(e,e+s),n);return}for(var r=0;r>>16&65535|0,a=0;e!==0;){a=e>2e3?2e3:e,e-=a;do n=n+t[s++]|0,r=r+n|0;while(--a);n%=65521,r%=65521}return n|r<<16|0}function V(){for(var i,t=[],e=0;e<256;e++){i=e;for(var s=0;s<8;s++)i=i&1?3988292384^i>>>1:i>>>1;t[e]=i}return t}V();var it=30,cn=12;function _n(i,t){var e,s,n,r,a,h,c,o,l,u,x,d,k,C,A,K,T,X,S,L,N,E,R,B,F;e=i.state,s=i.next_in,B=i.input,n=s+(i.avail_in-5),r=i.next_out,F=i.output,a=r-(t-i.avail_out),h=r+(i.avail_out-257),c=e.dmax,o=e.wsize,l=e.whave,u=e.wnext,x=e.window,d=e.hold,k=e.bits,C=e.lencode,A=e.distcode,K=(1<>>24,d>>>=S,k-=S,S=X>>>16&255,S===0)F[r++]=X&65535;else if(S&16){L=X&65535,S&=15,S&&(k>>=S,k-=S),k<15&&(d+=B[s++]<>>24,d>>>=S,k-=S,S=X>>>16&255,S&16){if(N=X&65535,S&=15,kc){i.msg="invalid distance too far back",e.mode=it;break e}if(d>>>=S,k-=S,S=r-a,N>S){if(S=N-S,S>l&&e.sane){i.msg="invalid distance too far back",e.mode=it;break e}if(E=0,R=x,u===0){if(E+=o-S,S2;)F[r++]=R[E++],F[r++]=R[E++],F[r++]=R[E++],L-=3;L&&(F[r++]=R[E++],L>1&&(F[r++]=R[E++]))}else{E=r-N;do F[r++]=F[E++],F[r++]=F[E++],F[r++]=F[E++],L-=3;while(L>2);L&&(F[r++]=F[E++],L>1&&(F[r++]=F[E++]))}}else if((S&64)===0){X=A[(X&65535)+(d&(1<>3,s-=L,k-=L<<3,d&=(1<=1&&P[x]===0;x--);if(d>x&&(d=x),x===0)return n[r++]=1<<24|64<<16|0,n[r++]=1<<24|64<<16|0,h.bits=1,0;for(u=1;u0&&(i===oi||x!==1))return-1;for(te[1]=0,o=1;ori||i===hi&&K>ai)return 1;for(;;){ii=o-C,a[l]F?(Je=re[G+a[l]],et=R[B+a[l]]):(Je=96,et=0),X=1<>C)+S]=ii<<24|Je<<16|et|0;while(S!==0);for(X=1<>=1;if(X!==0?(T&=X-1,T+=X):T=0,l++,--P[o]===0){if(o===x)break;o=t[e+a[l]]}if(o>d&&(T&N)!==L){for(C===0&&(C=d),E+=u,k=o-C,A=1<ri||i===hi&&K>ai)return 1;L=T&N,n[L]=d<<24|k<<16|E-r|0}}return T!==0&&(n[E+T]=o-C<<24|64<<16|0),h.bits=d,0}var pn=0,Rs=1,Ds=2;const li=4,bt=0,gn=1,bn=2,ke=-2,wn=-3,vn=-4,mn=-5,ci=8;var Qs=1,_i=2,fi=3,di=4,ui=5,xi=6,pi=7,gi=8,bi=9,wi=10,vi=11,le=12,At=13,mi=14,Kt=15,yi=16,ki=17,Si=18,Ci=19,st=20,nt=21,Ei=22,Ai=23,Ki=24,Xi=25,Fi=26,Xt=27,Ti=28,Mi=29,H=30,yn=31,kn=32,Sn=852,Cn=592,En=15,An=En;function Li(i){return(i>>>24&255)+(i>>>8&65280)+((i&65280)<<8)+((i&255)<<24)}function Kn(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new ie(320),this.work=new ie(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Xn(i){var t;return!i||!i.state?ke:(t=i.state,i.total_in=i.total_out=t.total=0,i.msg="",t.wrap&&(i.adler=t.wrap&1),t.mode=Qs,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new gt(Sn),t.distcode=t.distdyn=new gt(Cn),t.sane=1,t.back=-1,bt)}function Bs(i){var t;return!i||!i.state?ke:(t=i.state,t.wsize=0,t.whave=0,t.wnext=0,Xn(i))}function Fn(i,t){var e,s;return!i||!i.state||(s=i.state,t<0?(e=0,t=-t):(e=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?ke:(s.window!==null&&s.wbits!==t&&(s.window=null),s.wrap=e,s.wbits=t,Bs(i))}function Tn(i,t){var e,s;return i?(s=new Kn,i.state=s,s.window=null,e=Fn(i,t),e!==bt&&(i.state=null),e):ke}function Mn(i){return Tn(i,An)}var Ri=!0,Ft,Tt;function Ln(i){if(Ri){var t;for(Ft=new gt(512),Tt=new gt(32),t=0;t<144;)i.lens[t++]=8;for(;t<256;)i.lens[t++]=9;for(;t<280;)i.lens[t++]=7;for(;t<288;)i.lens[t++]=8;for(Ne(Rs,i.lens,0,288,Ft,0,i.work,{bits:9}),t=0;t<32;)i.lens[t++]=5;Ne(Ds,i.lens,0,32,Tt,0,i.work,{bits:5}),Ri=!1}i.lencode=Ft,i.lenbits=9,i.distcode=Tt,i.distbits=5}function Rn(i,t,e,s){var n,r=i.state;return r.window===null&&(r.wsize=1<=r.wsize?(fe(r.window,t,e-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n=r.wsize-r.wnext,n>s&&(n=s),fe(r.window,t,e-s,n,r.wnext),s-=n,s?(fe(r.window,t,e-s,s,0),r.wnext=s,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,e.check=V(e.check),o=0,l=0,e.mode=_i;break}if(e.flags=0,e.head&&(e.head.done=!1),!(e.wrap&1)||(((o&255)<<8)+(o>>8))%31){i.msg="incorrect header check",e.mode=H;break}if((o&15)!==ci){i.msg="unknown compression method",e.mode=H;break}if(o>>>=4,l-=4,E=(o&15)+8,e.wbits===0)e.wbits=E;else if(E>e.wbits){i.msg="invalid window size",e.mode=H;break}e.dmax=1<>8&1),e.flags&512&&(B[0]=o&255,B[1]=o>>>8&255,e.check=V(e.check)),o=0,l=0,e.mode=fi;case fi:for(;l<32;){if(h===0)break e;h--,o+=s[r++]<>>8&255,B[2]=o>>>16&255,B[3]=o>>>24&255,e.check=V(e.check)),o=0,l=0,e.mode=di;case di:for(;l<16;){if(h===0)break e;h--,o+=s[r++]<>8),e.flags&512&&(B[0]=o&255,B[1]=o>>>8&255,e.check=V(e.check)),o=0,l=0,e.mode=ui;case ui:if(e.flags&1024){for(;l<16;){if(h===0)break e;h--,o+=s[r++]<>>8&255,e.check=V(e.check)),o=0,l=0}else e.head&&(e.head.extra=null);e.mode=xi;case xi:if(e.flags&1024&&(d=e.length,d>h&&(d=h),d&&(e.head&&(E=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),fe(e.head.extra,s,r,d,E)),e.flags&512&&(e.check=V(e.check)),h-=d,r+=d,e.length-=d),e.length))break e;e.length=0,e.mode=pi;case pi:if(e.flags&2048){if(h===0)break e;d=0;do E=s[r+d++],e.head&&E&&e.length<65536&&(e.head.name+=String.fromCharCode(E));while(E&&d>9&1,e.head.done=!0),i.adler=e.check=0,e.mode=le;break;case wi:for(;l<32;){if(h===0)break e;h--,o+=s[r++]<>>=l&7,l-=l&7,e.mode=Xt;break}for(;l<3;){if(h===0)break e;h--,o+=s[r++]<>>=1,l-=1,o&3){case 0:e.mode=mi;break;case 1:Ln(e),e.mode=st;break;case 2:e.mode=ki;break;case 3:i.msg="invalid block type",e.mode=H}o>>>=2,l-=2;break;case mi:for(o>>>=l&7,l-=l&7;l<32;){if(h===0)break e;h--,o+=s[r++]<>>16^65535)){i.msg="invalid stored block lengths",e.mode=H;break}e.length=o&65535,o=0,l=0,e.mode=Kt;case Kt:e.mode=yi;case yi:if(d=e.length,d){if(d>h&&(d=h),d>c&&(d=c),d===0)break e;fe(n,s,r,d,a),h-=d,r+=d,c-=d,a+=d,e.length-=d;break}e.mode=le;break;case ki:for(;l<14;){if(h===0)break e;h--,o+=s[r++]<>>=5,l-=5,e.ndist=(o&31)+1,o>>>=5,l-=5,e.ncode=(o&15)+4,o>>>=4,l-=4,e.nlen>286||e.ndist>30){i.msg="too many length or distance symbols",e.mode=H;break}e.have=0,e.mode=Si;case Si:for(;e.have>>=3,l-=3}for(;e.have<19;)e.lens[te[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,F={bits:e.lenbits},R=Ne(pn,e.lens,0,19,e.lencode,0,e.work,F),e.lenbits=F.bits,R){i.msg="invalid code lengths set",e.mode=H;break}e.have=0,e.mode=Ci;case Ci:for(;e.have>>24,T=A>>>16&255,X=A&65535,!(K<=l);){if(h===0)break e;h--,o+=s[r++]<>>=K,l-=K,e.lens[e.have++]=X;else{if(X===16){for(P=K+2;l>>=K,l-=K,e.have===0){i.msg="invalid bit length repeat",e.mode=H;break}E=e.lens[e.have-1],d=3+(o&3),o>>>=2,l-=2}else if(X===17){for(P=K+3;l>>=K,l-=K,E=0,d=3+(o&7),o>>>=3,l-=3}else{for(P=K+7;l>>=K,l-=K,E=0,d=11+(o&127),o>>>=7,l-=7}if(e.have+d>e.nlen+e.ndist){i.msg="invalid bit length repeat",e.mode=H;break}for(;d--;)e.lens[e.have++]=E}}if(e.mode===H)break;if(e.lens[256]===0){i.msg="invalid code -- missing end-of-block",e.mode=H;break}if(e.lenbits=9,F={bits:e.lenbits},R=Ne(Rs,e.lens,0,e.nlen,e.lencode,0,e.work,F),e.lenbits=F.bits,R){i.msg="invalid literal/lengths set",e.mode=H;break}if(e.distbits=6,e.distcode=e.distdyn,F={bits:e.distbits},R=Ne(Ds,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,F),e.distbits=F.bits,R){i.msg="invalid distances set",e.mode=H;break}e.mode=st;case st:e.mode=nt;case nt:if(h>=6&&c>=258){i.next_out=a,i.avail_out=c,i.next_in=r,i.avail_in=h,e.hold=o,e.bits=l,_n(i,x),a=i.next_out,n=i.output,c=i.avail_out,r=i.next_in,s=i.input,h=i.avail_in,o=e.hold,l=e.bits,e.mode===le&&(e.back=-1);break}for(e.back=0;A=e.lencode[o&(1<>>24,T=A>>>16&255,X=A&65535,!(K<=l);){if(h===0)break e;h--,o+=s[r++]<>S)],K=A>>>24,T=A>>>16&255,X=A&65535,!(S+K<=l);){if(h===0)break e;h--,o+=s[r++]<>>=S,l-=S,e.back+=S}if(o>>>=K,l-=K,e.back+=K,e.length=X,T===0){e.mode=Fi;break}if(T&32){e.back=-1,e.mode=le;break}if(T&64){i.msg="invalid literal/length code",e.mode=H;break}e.extra=T&15,e.mode=Ei;case Ei:if(e.extra){for(P=e.extra;l>>=e.extra,l-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=Ai;case Ai:for(;A=e.distcode[o&(1<>>24,T=A>>>16&255,X=A&65535,!(K<=l);){if(h===0)break e;h--,o+=s[r++]<>S)],K=A>>>24,T=A>>>16&255,X=A&65535,!(S+K<=l);){if(h===0)break e;h--,o+=s[r++]<>>=S,l-=S,e.back+=S}if(o>>>=K,l-=K,e.back+=K,T&64){i.msg="invalid distance code",e.mode=H;break}e.offset=X,e.extra=T&15,e.mode=Ki;case Ki:if(e.extra){for(P=e.extra;l>>=e.extra,l-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){i.msg="invalid distance too far back",e.mode=H;break}e.mode=Xi;case Xi:if(c===0)break e;if(d=x-c,e.offset>d){if(d=e.offset-d,d>e.whave&&e.sane){i.msg="invalid distance too far back",e.mode=H;break}d>e.wnext?(d-=e.wnext,k=e.wsize-d):k=e.wnext-d,d>e.length&&(d=e.length),C=e.window}else C=n,k=a-e.offset,d=e.length;d>c&&(d=c),c-=d,e.length-=d;do n[a++]=C[k++];while(--d);e.length===0&&(e.mode=nt);break;case Fi:if(c===0)break e;n[a++]=e.length,c--,e.mode=nt;break;case Xt:if(e.wrap){for(;l<32;){if(h===0)break e;h--,o|=s[r++]<this.chunkSize&&(this.chunkSize=t,this.strm.output=new Uint8Array(this.chunkSize)),this.strm.next_out=0,this.strm.avail_out=t,Dn(this.strm,0)<0)throw new Error("zlib inflate failed");if(this.strm.next_out!=t)throw new Error("Incomplete zlib block");return new Uint8Array(this.strm.output.buffer,0,this.strm.next_out)}reset(){Bs(this.strm)}}var Qn=4,Di=0,Qi=1,Bn=2;function Me(i){for(var t=i.length;--t>=0;)i[t]=0}var Pn=0,In=1,Un=2,Nn=3,Hn=258,$t=29,Ye=256,Oe=Ye+1+$t,Fe=30,Jt=19,Is=2*Oe+1,ye=15,Mt=16,zn=7,Us=256,Ns=16,Hs=17,zs=18,jt=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],dt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],On=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Os=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Vn=512,ue=new Array((Oe+2)*2);Me(ue);var He=new Array(Fe*2);Me(He);var Ve=new Array(Vn);Me(Ve);var Ge=new Array(Hn-Nn+1);Me(Ge);var ei=new Array($t);Me(ei);var wt=new Array(Fe);Me(wt);function Lt(i,t,e,s,n){this.static_tree=i,this.extra_bits=t,this.extra_base=e,this.elems=s,this.max_length=n,this.has_stree=i&&i.length}var Vs,Gs,Ws;function Rt(i,t){this.dyn_tree=i,this.max_code=0,this.stat_desc=t}function js(i){return i<256?Ve[i]:Ve[256+(i>>>7)]}function vt(i,t){i.pending_buf[i.pending++]=t&255,i.pending_buf[i.pending++]=t>>>8&255}function ee(i,t,e){i.bi_valid>Mt-e?(i.bi_buf|=t<>Mt-i.bi_valid,i.bi_valid+=e-Mt):(i.bi_buf|=t<>>=1,e<<=1;while(--t>0);return e>>>1}function Gn(i,t){var e=t.dyn_tree,s=t.max_code,n=t.stat_desc.static_tree,r=t.stat_desc.has_stree,a=t.stat_desc.extra_bits,h=t.stat_desc.extra_base,c=t.stat_desc.max_length,o,l,u,x,d,k,C=0;for(x=0;x<=ye;x++)i.bl_count[x]=0;for(e[i.heap[i.heap_max]*2+1]=0,o=i.heap_max+1;oc&&(x=c,C++),e[l*2+1]=x,!(l>s)&&(i.bl_count[x]++,d=0,l>=h&&(d=a[l-h]),k=e[l*2],i.opt_len+=k*(x+d),r&&(i.static_len+=k*(n[l*2+1]+d)));if(C!==0){do{for(x=c-1;i.bl_count[x]===0;)x--;i.bl_count[x]--,i.bl_count[x+1]+=2,i.bl_count[c]--,C-=2}while(C>0);for(x=c;x!==0;x--)for(l=i.bl_count[x];l!==0;)u=i.heap[--o],!(u>s)&&(e[u*2+1]!==x&&(i.opt_len+=(x-e[u*2+1])*e[u*2],e[u*2+1]=x),l--)}}function Zs(i,t,e){var s=new Array(ye+1),n=0,r,a;for(r=1;r<=ye;r++)s[r]=n=n+e[r-1]<<1;for(a=0;a<=t;a++){var h=i[a*2+1];h!==0&&(i[a*2]=Ys(s[h]++,h))}}function Wn(){var i,t,e,s,n,r=new Array(ye+1);for(e=0,s=0;s<$t-1;s++)for(ei[s]=e,i=0;i<1<>=7;s8?vt(i,i.bi_buf):i.bi_valid>0&&(i.pending_buf[i.pending++]=i.bi_buf),i.bi_buf=0,i.bi_valid=0}function jn(i,t,e,s){$s(i),vt(i,e),vt(i,~e),fe(i.pending_buf,i.window,t,e,i.pending),i.pending+=e}function Bi(i,t,e,s){var n=t*2,r=e*2;return i[n]>1;a>=1;a--)Dt(i,e,a);o=r;do a=i.heap[1],i.heap[1]=i.heap[i.heap_len--],Dt(i,e,1),h=i.heap[1],i.heap[--i.heap_max]=a,i.heap[--i.heap_max]=h,e[o*2]=e[a*2]+e[h*2],i.depth[o]=(i.depth[a]>=i.depth[h]?i.depth[a]:i.depth[h])+1,e[a*2+1]=e[h*2+1]=o,i.heap[1]=o++,Dt(i,e,1);while(i.heap_len>=2);i.heap[--i.heap_max]=i.heap[1],Gn(i,t),Zs(e,c,i.bl_count)}function Ii(i,t,e){var s,n=-1,r,a=t[1],h=0,c=7,o=4;for(a===0&&(c=138,o=3),t[(e+1)*2+1]=65535,s=0;s<=e;s++)r=a,a=t[(s+1)*2+1],!(++h=3&&i.bl_tree[Os[t]*2+1]===0;t--);return i.opt_len+=3*(t+1)+5+5+4,t}function Zn(i,t,e,s){var n;for(ee(i,t-257,5),ee(i,e-1,5),ee(i,s-4,4),n=0;n>>=1)if(t&1&&i.dyn_ltree[e*2]!==0)return Di;if(i.dyn_ltree[18]!==0||i.dyn_ltree[20]!==0||i.dyn_ltree[26]!==0)return Qi;for(e=32;e0?(i.strm.data_type===Bn&&(i.strm.data_type=qn(i)),Yt(i,i.l_desc),Yt(i,i.d_desc),a=Yn(i),n=i.opt_len+3+7>>>3,r=i.static_len+3+7>>>3,r<=n&&(n=r)):n=r=e+5,e+4<=n&&t!==-1?Js(i,t,e,s):i.strategy===Qn||r===n?(ee(i,(In<<1)+(s?1:0),3),Pi(i,ue,He)):(ee(i,(Un<<1)+(s?1:0),3),Zn(i,i.l_desc.max_code+1,i.d_desc.max_code+1,a+1),Pi(i,i.dyn_ltree,i.dyn_dtree)),qs(i),s&&$s(i)}function ge(i,t,e){return i.pending_buf[i.d_buf+i.last_lit*2]=t>>>8&255,i.pending_buf[i.d_buf+i.last_lit*2+1]=t&255,i.pending_buf[i.l_buf+i.last_lit]=e&255,i.last_lit++,t===0?i.dyn_ltree[e*2]++:(i.matches++,t--,i.dyn_ltree[(Ge[e]+Ye+1)*2]++,i.dyn_dtree[js(t)*2]++),i.last_lit===i.lit_bufsize-1}const er={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Ze=0,Hi=3,We=4,tr=5,Ae=0,Te=-2,Qt=-5,ir=-1,sr=1,rt=2,nr=3,rr=4,ar=0,or=2,ti=8;var hr=15,lr=8,cr=29,_r=256,Zt=_r+1+cr,fr=30,dr=19,ur=2*Zt+1,xr=15,I=3,xe=258,ne=xe+I+1,pr=32,en=42,zi=69,Bt=73,Pt=91,It=103,Ie=113,at=666,W=1,qe=2,je=3,mt=4,gr=3;function Ke(i,t){return i.msg=er[t],t}function Oi(i){return(i<<1)-(i>4?9:0)}function me(i){for(var t=i.length;--t>=0;)i[t]=0}function we(i){var t=i.state,e=t.pending;e>i.avail_out&&(e=i.avail_out),e!==0&&(fe(i.output,t.pending_buf,t.pending_out,e,i.next_out),i.next_out+=e,t.pending_out+=e,i.total_out+=e,i.avail_out-=e,t.pending-=e,t.pending===0&&(t.pending_out=0))}function J(i,t){Jn(i,i.block_start>=0?i.block_start:-1,i.strstart-i.block_start,t),i.block_start=i.strstart,we(i.strm)}function z(i,t){i.pending_buf[i.pending++]=t}function Ut(i,t){i.pending_buf[i.pending++]=t>>>8&255,i.pending_buf[i.pending++]=t&255}function br(i,t,e,s){var n=i.avail_in;return n>s&&(n=s),n===0?0:(i.avail_in-=n,fe(t,i.input,i.next_in,n,e),i.state.wrap===1?i.adler=Wt(i.adler,t,n,e):i.state.wrap===2&&(i.adler=V(i.adler)),i.next_in+=n,i.total_in+=n,n)}function tn(i,t){var e=i.max_chain_length,s=i.strstart,n,r,a=i.prev_length,h=i.nice_match,c=i.strstart>i.w_size-ne?i.strstart-(i.w_size-ne):0,o=i.window,l=i.w_mask,u=i.prev,x=i.strstart+xe,d=o[s+a-1],k=o[s+a];i.prev_length>=i.good_match&&(e>>=2),h>i.lookahead&&(h=i.lookahead);do if(n=t,!(o[n+a]!==k||o[n+a-1]!==d||o[n]!==o[s]||o[++n]!==o[s+1])){s+=2,n++;do;while(o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&o[++s]===o[++n]&&sa){if(i.match_start=t,a=r,r>=h)break;d=o[s+a-1],k=o[s+a]}}while((t=u[t&l])>c&&--e!==0);return a<=i.lookahead?a:i.lookahead}function $e(i){var t=i.w_size,e,s,n,r,a;do{if(r=i.window_size-i.lookahead-i.strstart,i.strstart>=t+(t-ne)){fe(i.window,i.window,t,t,0),i.match_start-=t,i.strstart-=t,i.block_start-=t,s=i.hash_size,e=s;do n=i.head[--e],i.head[e]=n>=t?n-t:0;while(--s);s=t,e=s;do n=i.prev[--e],i.prev[e]=n>=t?n-t:0;while(--s);r+=t}if(i.strm.avail_in===0)break;if(s=br(i.strm,i.window,i.strstart+i.lookahead,r),i.lookahead+=s,i.lookahead+i.insert>=I)for(a=i.strstart-i.insert,i.ins_h=i.window[a],i.ins_h=(i.ins_h<i.pending_buf_size-5&&(e=i.pending_buf_size-5);;){if(i.lookahead<=1){if($e(i),i.lookahead===0&&t===Ze)return W;if(i.lookahead===0)break}i.strstart+=i.lookahead,i.lookahead=0;var s=i.block_start+e;if((i.strstart===0||i.strstart>=s)&&(i.lookahead=i.strstart-s,i.strstart=s,J(i,!1),i.strm.avail_out===0)||i.strstart-i.block_start>=i.w_size-ne&&(J(i,!1),i.strm.avail_out===0))return W}return i.insert=0,t===We?(J(i,!0),i.strm.avail_out===0?je:mt):(i.strstart>i.block_start&&(J(i,!1),i.strm.avail_out===0),W)}function Nt(i,t){for(var e,s;;){if(i.lookahead=I&&(i.ins_h=(i.ins_h<=I)if(s=ge(i,i.strstart-i.match_start,i.match_length-I),i.lookahead-=i.match_length,i.match_length<=i.max_lazy_match&&i.lookahead>=I){i.match_length--;do i.strstart++,i.ins_h=(i.ins_h<=I&&(i.ins_h=(i.ins_h<4096)&&(i.match_length=I-1)),i.prev_length>=I&&i.match_length<=i.prev_length){n=i.strstart+i.lookahead-I,s=ge(i,i.strstart-1-i.prev_match,i.prev_length-I),i.lookahead-=i.prev_length-1,i.prev_length-=2;do++i.strstart<=n&&(i.ins_h=(i.ins_h<=I&&i.strstart>0&&(n=i.strstart-1,s=a[n],s===a[++n]&&s===a[++n]&&s===a[++n])){r=i.strstart+xe;do;while(s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&s===a[++n]&&ni.lookahead&&(i.match_length=i.lookahead)}if(i.match_length>=I?(e=ge(i,1,i.match_length-I),i.lookahead-=i.match_length,i.strstart+=i.match_length,i.match_length=0):(e=ge(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++),e&&(J(i,!1),i.strm.avail_out===0))return W}return i.insert=0,i.last_lit&&(J(i,!1),i.strm.avail_out===0)?W:qe}function mr(i,t){for(var e;!(i.lookahead===0&&($e(i),i.lookahead===0));)if(i.match_length=0,e=ge(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++,e&&(J(i,!1),i.strm.avail_out===0))return W;return i.insert=0,i.last_lit&&(J(i,!1),i.strm.avail_out===0)?W:qe}function ae(i,t,e,s,n){this.good_length=i,this.max_lazy=t,this.nice_length=e,this.max_chain=s,this.func=n}var Xe;Xe=[new ae(0,0,0,0,wr),new ae(4,4,8,4,Nt),new ae(4,5,16,8,Nt),new ae(4,6,32,32,Nt),new ae(4,4,16,16,Ee),new ae(8,16,32,32,Ee),new ae(8,16,128,128,Ee),new ae(8,32,128,256,Ee),new ae(32,128,258,1024,Ee),new ae(32,258,258,4096,Ee)];function yr(i){i.window_size=2*i.w_size,me(i.head),i.max_lazy_match=Xe[i.level].max_lazy,i.good_match=Xe[i.level].good_length,i.nice_match=Xe[i.level].nice_length,i.max_chain_length=Xe[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=I-1,i.match_available=0,i.ins_h=0}function kr(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ti,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new ie(ur*2),this.dyn_dtree=new ie((2*fr+1)*2),this.bl_tree=new ie((2*dr+1)*2),me(this.dyn_ltree),me(this.dyn_dtree),me(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new ie(xr+1),this.heap=new ie(2*Zt+1),me(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new ie(2*Zt+1),me(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function Sr(i){var t;return!i||!i.state?Ke(i,Te):(i.total_in=i.total_out=0,i.data_type=or,t=i.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?en:Ie,i.adler=t.wrap===2?0:1,t.last_flush=Ze,$n(t),Ae)}function Cr(i){var t=Sr(i);return t===Ae&&yr(i.state),t}function Er(i,t,e,s,n,r){if(!i)return Te;var a=1;if(t===ir&&(t=6),t<0||t>9||r<0||r>rr)return Ke(i,Te);var h=new kr;return i.state=h,h.strm=i,h.wrap=a,h.gzhead=null,h.w_bits=s,h.w_size=1<tr||t<0)return i?Ke(i,Te):Te;if(s=i.state,!i.output||!i.input&&i.avail_in!==0||s.status===at&&t!==We)return Ke(i,i.avail_out===0?Qt:Te);if(s.strm=i,e=s.last_flush,s.last_flush=t,s.status===en)if(s.wrap===2)i.adler=0,z(s,31),z(s,139),z(s,8),s.gzhead?(z(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(s.gzhead.extra?4:0)+(s.gzhead.name?8:0)+(s.gzhead.comment?16:0)),z(s,s.gzhead.time&255),z(s,s.gzhead.time>>8&255),z(s,s.gzhead.time>>16&255),z(s,s.gzhead.time>>24&255),z(s,s.level===9?2:s.strategy>=rt||s.level<2?4:0),z(s,s.gzhead.os&255),s.gzhead.extra&&s.gzhead.extra.length&&(z(s,s.gzhead.extra.length&255),z(s,s.gzhead.extra.length>>8&255)),s.gzhead.hcrc&&(i.adler=V(i.adler,s.pending_buf,s.pending)),s.gzindex=0,s.status=zi):(z(s,0),z(s,0),z(s,0),z(s,0),z(s,0),z(s,s.level===9?2:s.strategy>=rt||s.level<2?4:0),z(s,gr),s.status=Ie);else{var a=ti+(s.w_bits-8<<4)<<8,h=-1;s.strategy>=rt||s.level<2?h=0:s.level<6?h=1:s.level===6?h=2:h=3,a|=h<<6,s.strstart!==0&&(a|=pr),a+=31-a%31,s.status=Ie,Ut(s,a),s.strstart!==0&&(Ut(s,i.adler>>>16),Ut(s,i.adler&65535)),i.adler=1}if(s.status===zi)if(s.gzhead.extra){for(n=s.pending;s.gzindex<(s.gzhead.extra.length&65535)&&!(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>n&&(i.adler=V(i.adler,s.pending_buf,s.pending-n)),we(i),n=s.pending,s.pending===s.pending_buf_size));)z(s,s.gzhead.extra[s.gzindex]&255),s.gzindex++;s.gzhead.hcrc&&s.pending>n&&(i.adler=V(i.adler,s.pending_buf,s.pending-n)),s.gzindex===s.gzhead.extra.length&&(s.gzindex=0,s.status=Bt)}else s.status=Bt;if(s.status===Bt)if(s.gzhead.name){n=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>n&&(i.adler=V(i.adler,s.pending_buf,s.pending-n)),we(i),n=s.pending,s.pending===s.pending_buf_size)){r=1;break}s.gzindexn&&(i.adler=V(i.adler,s.pending_buf,s.pending-n)),r===0&&(s.gzindex=0,s.status=Pt)}else s.status=Pt;if(s.status===Pt)if(s.gzhead.comment){n=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>n&&(i.adler=V(i.adler,s.pending_buf,s.pending-n)),we(i),n=s.pending,s.pending===s.pending_buf_size)){r=1;break}s.gzindexn&&(i.adler=V(i.adler,s.pending_buf,s.pending-n)),r===0&&(s.status=It)}else s.status=It;if(s.status===It&&(s.gzhead.hcrc?(s.pending+2>s.pending_buf_size&&we(i),s.pending+2<=s.pending_buf_size&&(z(s,i.adler&255),z(s,i.adler>>8&255),i.adler=0,s.status=Ie)):s.status=Ie),s.pending!==0){if(we(i),i.avail_out===0)return s.last_flush=-1,Ae}else if(i.avail_in===0&&Oi(t)<=Oi(e)&&t!==We)return Ke(i,Qt);if(s.status===at&&i.avail_in!==0)return Ke(i,Qt);if(i.avail_in!==0||s.lookahead!==0||s.status!==at){var c=s.strategy===rt?mr(s):s.strategy===nr?vr(s,t):Xe[s.level].func(s,t);if((c===je||c===mt)&&(s.status=at),c===W||c===je)return i.avail_out===0&&(s.last_flush=-1),Ae;if(c===qe&&(Js(s,0,0,!1),me(s.head),s.lookahead===0&&(s.strstart=0,s.block_start=0,s.insert=0),we(i),i.avail_out===0))return s.last_flush=-1,Ae}return Ae}class Kr{constructor(){this.strm=new Ps,this.chunkSize=1024*10*10,this.outputBuffer=new Uint8Array(this.chunkSize),this.windowBits=5,Ar(this.strm,this.windowBits)}deflate(t){this.strm.input=t,this.strm.avail_in=this.strm.input.length,this.strm.next_in=0,this.strm.output=this.outputBuffer,this.strm.avail_out=this.chunkSize,this.strm.next_out=0;let e=Vi(this.strm,Hi),s=new Uint8Array(this.strm.output.buffer,0,this.strm.next_out);if(e<0)throw new Error("zlib deflate failed");if(this.strm.avail_in>0){let n=[s],r=s.length;do{if(this.strm.output=new Uint8Array(this.chunkSize),this.strm.next_out=0,this.strm.avail_out=this.chunkSize,e=Vi(this.strm,Hi),e<0)throw new Error("zlib deflate failed");let c=new Uint8Array(this.strm.output.buffer,0,this.strm.next_out);r+=c.length,n.push(c)}while(this.strm.avail_in>0);let a=new Uint8Array(r),h=0;for(let c=0;c=32&&i<=255)return i;const t=Xr[i];return t!==void 0?t:16777216|i}},Gi={8:"Backspace",9:"Tab",10:"NumpadClear",13:"Enter",16:"ShiftLeft",17:"ControlLeft",18:"AltLeft",19:"Pause",20:"CapsLock",21:"Lang1",25:"Lang2",27:"Escape",28:"Convert",29:"NonConvert",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",41:"Select",44:"PrintScreen",45:"Insert",46:"Delete",47:"Help",48:"Digit0",49:"Digit1",50:"Digit2",51:"Digit3",52:"Digit4",53:"Digit5",54:"Digit6",55:"Digit7",56:"Digit8",57:"Digit9",91:"MetaLeft",92:"MetaRight",93:"ContextMenu",95:"Sleep",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9",106:"NumpadMultiply",107:"NumpadAdd",108:"NumpadDecimal",109:"NumpadSubtract",110:"NumpadDecimal",111:"NumpadDivide",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",124:"F13",125:"F14",126:"F15",127:"F16",128:"F17",129:"F18",130:"F19",131:"F20",132:"F21",133:"F22",134:"F23",135:"F24",144:"NumLock",145:"ScrollLock",166:"BrowserBack",167:"BrowserForward",168:"BrowserRefresh",169:"BrowserStop",170:"BrowserSearch",171:"BrowserFavorites",172:"BrowserHome",173:"AudioVolumeMute",174:"AudioVolumeDown",175:"AudioVolumeUp",176:"MediaTrackNext",177:"MediaTrackPrevious",178:"MediaStop",179:"MediaPlayPause",180:"LaunchMail",181:"MediaSelect",182:"LaunchApp1",183:"LaunchApp2",225:"AltRight"},Wi={Backspace:"Backspace",AltLeft:"Alt",AltRight:"Alt",CapsLock:"CapsLock",ContextMenu:"ContextMenu",ControlLeft:"Control",ControlRight:"Control",Enter:"Enter",MetaLeft:"Meta",MetaRight:"Meta",ShiftLeft:"Shift",ShiftRight:"Shift",Tab:"Tab",Delete:"Delete",End:"End",Help:"Help",Home:"Home",Insert:"Insert",PageDown:"PageDown",PageUp:"PageUp",ArrowDown:"ArrowDown",ArrowLeft:"ArrowLeft",ArrowRight:"ArrowRight",ArrowUp:"ArrowUp",NumLock:"NumLock",NumpadBackspace:"Backspace",NumpadClear:"Clear",Escape:"Escape",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",F13:"F13",F14:"F14",F15:"F15",F16:"F16",F17:"F17",F18:"F18",F19:"F19",F20:"F20",F21:"F21",F22:"F22",F23:"F23",F24:"F24",F25:"F25",F26:"F26",F27:"F27",F28:"F28",F29:"F29",F30:"F30",F31:"F31",F32:"F32",F33:"F33",F34:"F34",F35:"F35",PrintScreen:"PrintScreen",ScrollLock:"ScrollLock",Pause:"Pause",BrowserBack:"BrowserBack",BrowserFavorites:"BrowserFavorites",BrowserForward:"BrowserForward",BrowserHome:"BrowserHome",BrowserRefresh:"BrowserRefresh",BrowserSearch:"BrowserSearch",BrowserStop:"BrowserStop",Eject:"Eject",LaunchApp1:"LaunchMyComputer",LaunchApp2:"LaunchCalendar",LaunchMail:"LaunchMail",MediaPlayPause:"MediaPlay",MediaStop:"MediaStop",MediaTrackNext:"MediaTrackNext",MediaTrackPrevious:"MediaTrackPrevious",Power:"Power",Sleep:"Sleep",AudioVolumeDown:"AudioVolumeDown",AudioVolumeMute:"AudioVolumeMute",AudioVolumeUp:"AudioVolumeUp",WakeUp:"WakeUp"},be={};function v(i,t){if(t===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(i in be)throw new Error('Duplicate entry for key "'+i+'"');be[i]=[t,t,t,t]}function yt(i,t,e){if(t===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(e===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(i in be)throw new Error('Duplicate entry for key "'+i+'"');be[i]=[t,t,e,t]}function U(i,t,e){if(t===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(e===void 0)throw new Error('Undefined keysym for key "'+i+'"');if(i in be)throw new Error('Duplicate entry for key "'+i+'"');be[i]=[t,t,t,e]}yt("Alt",f.XK_Alt_L,f.XK_Alt_R);v("AltGraph",f.XK_ISO_Level3_Shift);v("CapsLock",f.XK_Caps_Lock);yt("Control",f.XK_Control_L,f.XK_Control_R);yt("Meta",f.XK_Super_L,f.XK_Super_R);v("NumLock",f.XK_Num_Lock);v("ScrollLock",f.XK_Scroll_Lock);yt("Shift",f.XK_Shift_L,f.XK_Shift_R);U("Enter",f.XK_Return,f.XK_KP_Enter);v("Tab",f.XK_Tab);U(" ",f.XK_space,f.XK_KP_Space);U("ArrowDown",f.XK_Down,f.XK_KP_Down);U("ArrowLeft",f.XK_Left,f.XK_KP_Left);U("ArrowRight",f.XK_Right,f.XK_KP_Right);U("ArrowUp",f.XK_Up,f.XK_KP_Up);U("End",f.XK_End,f.XK_KP_End);U("Home",f.XK_Home,f.XK_KP_Home);U("PageDown",f.XK_Next,f.XK_KP_Next);U("PageUp",f.XK_Prior,f.XK_KP_Prior);v("Backspace",f.XK_BackSpace);U("Clear",f.XK_Clear,f.XK_KP_Begin);v("Copy",f.XF86XK_Copy);v("Cut",f.XF86XK_Cut);U("Delete",f.XK_Delete,f.XK_KP_Delete);U("Insert",f.XK_Insert,f.XK_KP_Insert);v("Paste",f.XF86XK_Paste);v("Redo",f.XK_Redo);v("Undo",f.XK_Undo);v("Cancel",f.XK_Cancel);v("ContextMenu",f.XK_Menu);v("Escape",f.XK_Escape);v("Execute",f.XK_Execute);v("Find",f.XK_Find);v("Help",f.XK_Help);v("Pause",f.XK_Pause);v("Select",f.XK_Select);v("ZoomIn",f.XF86XK_ZoomIn);v("ZoomOut",f.XF86XK_ZoomOut);v("BrightnessDown",f.XF86XK_MonBrightnessDown);v("BrightnessUp",f.XF86XK_MonBrightnessUp);v("Eject",f.XF86XK_Eject);v("LogOff",f.XF86XK_LogOff);v("Power",f.XF86XK_PowerOff);v("PowerOff",f.XF86XK_PowerDown);v("PrintScreen",f.XK_Print);v("Hibernate",f.XF86XK_Hibernate);v("Standby",f.XF86XK_Standby);v("WakeUp",f.XF86XK_WakeUp);v("AllCandidates",f.XK_MultipleCandidate);v("Alphanumeric",f.XK_Eisu_toggle);v("CodeInput",f.XK_Codeinput);v("Compose",f.XK_Multi_key);v("Convert",f.XK_Henkan);v("GroupFirst",f.XK_ISO_First_Group);v("GroupLast",f.XK_ISO_Last_Group);v("GroupNext",f.XK_ISO_Next_Group);v("GroupPrevious",f.XK_ISO_Prev_Group);v("NonConvert",f.XK_Muhenkan);v("PreviousCandidate",f.XK_PreviousCandidate);v("SingleCandidate",f.XK_SingleCandidate);v("HangulMode",f.XK_Hangul);v("HanjaMode",f.XK_Hangul_Hanja);v("JunjaMode",f.XK_Hangul_Jeonja);v("Eisu",f.XK_Eisu_toggle);v("Hankaku",f.XK_Hankaku);v("Hiragana",f.XK_Hiragana);v("HiraganaKatakana",f.XK_Hiragana_Katakana);v("KanaMode",f.XK_Kana_Shift);v("KanjiMode",f.XK_Kanji);v("Katakana",f.XK_Katakana);v("Romaji",f.XK_Romaji);v("Zenkaku",f.XK_Zenkaku);v("ZenkakuHankaku",f.XK_Zenkaku_Hankaku);v("F1",f.XK_F1);v("F2",f.XK_F2);v("F3",f.XK_F3);v("F4",f.XK_F4);v("F5",f.XK_F5);v("F6",f.XK_F6);v("F7",f.XK_F7);v("F8",f.XK_F8);v("F9",f.XK_F9);v("F10",f.XK_F10);v("F11",f.XK_F11);v("F12",f.XK_F12);v("F13",f.XK_F13);v("F14",f.XK_F14);v("F15",f.XK_F15);v("F16",f.XK_F16);v("F17",f.XK_F17);v("F18",f.XK_F18);v("F19",f.XK_F19);v("F20",f.XK_F20);v("F21",f.XK_F21);v("F22",f.XK_F22);v("F23",f.XK_F23);v("F24",f.XK_F24);v("F25",f.XK_F25);v("F26",f.XK_F26);v("F27",f.XK_F27);v("F28",f.XK_F28);v("F29",f.XK_F29);v("F30",f.XK_F30);v("F31",f.XK_F31);v("F32",f.XK_F32);v("F33",f.XK_F33);v("F34",f.XK_F34);v("F35",f.XK_F35);v("Close",f.XF86XK_Close);v("MailForward",f.XF86XK_MailForward);v("MailReply",f.XF86XK_Reply);v("MailSend",f.XF86XK_Send);v("MediaFastForward",f.XF86XK_AudioForward);v("MediaPause",f.XF86XK_AudioPause);v("MediaPlay",f.XF86XK_AudioPlay);v("MediaRecord",f.XF86XK_AudioRecord);v("MediaRewind",f.XF86XK_AudioRewind);v("MediaStop",f.XF86XK_AudioStop);v("MediaTrackNext",f.XF86XK_AudioNext);v("MediaTrackPrevious",f.XF86XK_AudioPrev);v("New",f.XF86XK_New);v("Open",f.XF86XK_Open);v("Print",f.XK_Print);v("Save",f.XF86XK_Save);v("SpellCheck",f.XF86XK_Spell);v("AudioVolumeDown",f.XF86XK_AudioLowerVolume);v("AudioVolumeUp",f.XF86XK_AudioRaiseVolume);v("AudioVolumeMute",f.XF86XK_AudioMute);v("MicrophoneVolumeMute",f.XF86XK_AudioMicMute);v("LaunchApplication1",f.XF86XK_MyComputer);v("LaunchApplication2",f.XF86XK_Calculator);v("LaunchCalendar",f.XF86XK_Calendar);v("LaunchMail",f.XF86XK_Mail);v("LaunchMediaPlayer",f.XF86XK_AudioMedia);v("LaunchMusicPlayer",f.XF86XK_Music);v("LaunchPhone",f.XF86XK_Phone);v("LaunchScreenSaver",f.XF86XK_ScreenSaver);v("LaunchSpreadsheet",f.XF86XK_Excel);v("LaunchWebBrowser",f.XF86XK_WWW);v("LaunchWebCam",f.XF86XK_WebCam);v("LaunchWordProcessor",f.XF86XK_Word);v("BrowserBack",f.XF86XK_Back);v("BrowserFavorites",f.XF86XK_Favorites);v("BrowserForward",f.XF86XK_Forward);v("BrowserHome",f.XF86XK_HomePage);v("BrowserRefresh",f.XF86XK_Refresh);v("BrowserSearch",f.XF86XK_Search);v("BrowserStop",f.XF86XK_Stop);v("Dimmer",f.XF86XK_BrightnessAdjust);v("MediaAudioTrack",f.XF86XK_AudioCycleTrack);v("RandomToggle",f.XF86XK_AudioRandomPlay);v("SplitScreenToggle",f.XF86XK_SplitScreen);v("Subtitle",f.XF86XK_Subtitle);v("VideoModeNext",f.XF86XK_Next_VMode);U("=",f.XK_equal,f.XK_KP_Equal);U("+",f.XK_plus,f.XK_KP_Add);U("-",f.XK_minus,f.XK_KP_Subtract);U("*",f.XK_asterisk,f.XK_KP_Multiply);U("/",f.XK_slash,f.XK_KP_Divide);U(".",f.XK_period,f.XK_KP_Decimal);U(",",f.XK_comma,f.XK_KP_Separator);U("0",f.XK_0,f.XK_KP_0);U("1",f.XK_1,f.XK_KP_1);U("2",f.XK_2,f.XK_KP_2);U("3",f.XK_3,f.XK_KP_3);U("4",f.XK_4,f.XK_KP_4);U("5",f.XK_5,f.XK_KP_5);U("6",f.XK_6,f.XK_KP_6);U("7",f.XK_7,f.XK_KP_7);U("8",f.XK_8,f.XK_KP_8);U("9",f.XK_9,f.XK_KP_9);function ze(i){if(i.code){switch(i.code){case"OSLeft":return"MetaLeft";case"OSRight":return"MetaRight"}return i.code}if(i.keyCode in Gi){let t=Gi[i.keyCode];if(Pe()&&t==="ContextMenu"&&(t="MetaRight"),i.location===2)switch(t){case"ShiftLeft":return"ShiftRight";case"ControlLeft":return"ControlRight";case"AltLeft":return"AltRight"}if(i.location===3)switch(t){case"Delete":return"NumpadDecimal";case"Insert":return"Numpad0";case"End":return"Numpad1";case"ArrowDown":return"Numpad2";case"PageDown":return"Numpad3";case"ArrowLeft":return"Numpad4";case"ArrowRight":return"Numpad6";case"Home":return"Numpad7";case"ArrowUp":return"Numpad8";case"PageUp":return"Numpad9";case"Enter":return"NumpadEnter"}return t}return"Unidentified"}function Tr(i){if(i.key!==void 0){switch(i.key){case"OS":return"Meta";case"LaunchMyComputer":return"LaunchApplication1";case"LaunchCalculator":return"LaunchApplication2"}switch(i.key){case"UIKeyInputUpArrow":return"ArrowUp";case"UIKeyInputDownArrow":return"ArrowDown";case"UIKeyInputLeftArrow":return"ArrowLeft";case"UIKeyInputRightArrow":return"ArrowRight";case"UIKeyInputEscape":return"Escape"}return i.key==="\0"&&i.code==="NumpadDecimal"?"Delete":i.key}const t=ze(i);return t in Wi?Wi[t]:i.charCode?String.fromCharCode(i.charCode):"Unidentified"}function Mr(i){const t=Tr(i);if(t==="Unidentified")return null;if(t in be){let s=i.location;if(t==="Meta"&&s===0&&(s=2),t==="Clear"&&s===3&&ze(i)==="NumLock"&&(s=0),(s===void 0||s>3)&&(s=0),t==="Meta"){let n=ze(i);if(n==="AltLeft")return f.XK_Meta_L;if(n==="AltRight")return f.XK_Meta_R}if(t==="Clear"&&ze(i)==="NumLock")return f.XK_Num_Lock;if(ft())switch(t){case"Zenkaku":case"Hankaku":return f.XK_Zenkaku_Hankaku;case"Romaji":case"KanaMode":return f.XK_Romaji}return be[t][s]}if(t.length!==1)return null;const e=t.charCodeAt();return e?Fr.lookup(e):null}class Lr{constructor(t){this._target=t||null,this._keyDownList={},this._altGrArmed=!1,this._eventHandlers={keyup:this._handleKeyUp.bind(this),keydown:this._handleKeyDown.bind(this),blur:this._allKeysUp.bind(this)},this.onkeyevent=()=>{}}_sendKeyEvent(t,e,s){if(s)this._keyDownList[e]=t;else{if(!(e in this._keyDownList))return;delete this._keyDownList[e]}M("onkeyevent "+(s?"down":"up")+", keysym: "+t,", code: "+e),this.onkeyevent(t,e,s)}_getKeyCode(t){const e=ze(t);if(e!=="Unidentified")return e;if(t.keyCode&&t.keyCode!==229)return"Platform"+t.keyCode;if(t.keyIdentifier){if(t.keyIdentifier.substr(0,2)!=="U+")return t.keyIdentifier;const s=parseInt(t.keyIdentifier.substr(2),16);return"Platform"+String.fromCharCode(s).toUpperCase().charCodeAt()}return"Unidentified"}_handleKeyDown(t){const e=this._getKeyCode(t);let s=Mr(t);if(this._altGrArmed&&(this._altGrArmed=!1,clearTimeout(this._altGrTimeout),e==="AltRight"&&t.timeStamp-this._altGrCtrlTime<50?s=f.XK_ISO_Level3_Shift:this._sendKeyEvent(f.XK_Control_L,"ControlLeft",!0)),e==="Unidentified"){s&&(this._sendKeyEvent(s,e,!0),this._sendKeyEvent(s,e,!1)),Se(t);return}if(Pe()||tt())switch(s){case f.XK_Super_L:s=f.XK_Alt_L;break;case f.XK_Super_R:s=f.XK_Super_L;break;case f.XK_Alt_L:s=f.XK_Mode_switch;break;case f.XK_Alt_R:s=f.XK_ISO_Level3_Shift;break}if(e in this._keyDownList&&(s=this._keyDownList[e]),(Pe()||tt())&&t.metaKey&&e!=="MetaLeft"&&e!=="MetaRight"){this._sendKeyEvent(s,e,!0),this._sendKeyEvent(s,e,!1),Se(t);return}if((Pe()||tt())&&e==="CapsLock"){this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!0),this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!1),Se(t);return}const n=[f.XK_Zenkaku_Hankaku,f.XK_Eisu_toggle,f.XK_Katakana,f.XK_Hiragana,f.XK_Romaji];if(ft()&&n.includes(s)){this._sendKeyEvent(s,e,!0),this._sendKeyEvent(s,e,!1),Se(t);return}if(Se(t),e==="ControlLeft"&&ft()&&!("ControlLeft"in this._keyDownList)){this._altGrArmed=!0,this._altGrTimeout=setTimeout(this._handleAltGrTimeout.bind(this),100),this._altGrCtrlTime=t.timeStamp;return}this._sendKeyEvent(s,e,!0)}_handleKeyUp(t){Se(t);const e=this._getKeyCode(t);if(this._altGrArmed&&(this._altGrArmed=!1,clearTimeout(this._altGrTimeout),this._sendKeyEvent(f.XK_Control_L,"ControlLeft",!0)),(Pe()||tt())&&e==="CapsLock"){this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!0),this._sendKeyEvent(f.XK_Caps_Lock,"CapsLock",!1);return}this._sendKeyEvent(this._keyDownList[e],e,!1),ft()&&(e==="ShiftLeft"||e==="ShiftRight")&&("ShiftRight"in this._keyDownList&&this._sendKeyEvent(this._keyDownList.ShiftRight,"ShiftRight",!1),"ShiftLeft"in this._keyDownList&&this._sendKeyEvent(this._keyDownList.ShiftLeft,"ShiftLeft",!1))}_handleAltGrTimeout(){this._altGrArmed=!1,clearTimeout(this._altGrTimeout),this._sendKeyEvent(f.XK_Control_L,"ControlLeft",!0)}_allKeysUp(){M(">> Keyboard.allKeysUp");for(let t in this._keyDownList)this._sendKeyEvent(this._keyDownList[t],t,!1);M("<< Keyboard.allKeysUp")}grab(){this._target.addEventListener("keydown",this._eventHandlers.keydown),this._target.addEventListener("keyup",this._eventHandlers.keyup),window.addEventListener("blur",this._eventHandlers.blur)}ungrab(){this._target.removeEventListener("keydown",this._eventHandlers.keydown),this._target.removeEventListener("keyup",this._eventHandlers.keyup),window.removeEventListener("blur",this._eventHandlers.blur),this._allKeysUp()}}const oe=0,ji=1,Yi=2,Zi=4,qi=8,Ht=16,Re=32,De=64,zt=127,$i=50,Rr=90,Ji=250,Dr=1e3,Qr=1e3,Br=50;class Pr{constructor(){this._target=null,this._state=zt,this._tracked=[],this._ignored=[],this._waitingRelease=!1,this._releaseStart=0,this._longpressTimeoutId=null,this._twoTouchTimeoutId=null,this._boundEventHandler=this._eventHandler.bind(this)}attach(t){this.detach(),this._target=t,this._target.addEventListener("touchstart",this._boundEventHandler),this._target.addEventListener("touchmove",this._boundEventHandler),this._target.addEventListener("touchend",this._boundEventHandler),this._target.addEventListener("touchcancel",this._boundEventHandler)}detach(){this._target&&(this._stopLongpressTimeout(),this._stopTwoTouchTimeout(),this._target.removeEventListener("touchstart",this._boundEventHandler),this._target.removeEventListener("touchmove",this._boundEventHandler),this._target.removeEventListener("touchend",this._boundEventHandler),this._target.removeEventListener("touchcancel",this._boundEventHandler),this._target=null)}_eventHandler(t){let e;switch(t.stopPropagation(),t.preventDefault(),t.type){case"touchstart":e=this._touchStart;break;case"touchmove":e=this._touchMove;break;case"touchend":case"touchcancel":e=this._touchEnd;break}for(let s=0;s0&&Date.now()-this._tracked[0].started>Ji){this._state=oe,this._ignored.push(t);return}if(this._waitingRelease){this._state=oe,this._ignored.push(t);return}switch(this._tracked.push({id:t,started:Date.now(),active:!0,firstX:e,firstY:s,lastX:e,lastY:s,angle:0}),this._tracked.length){case 1:this._startLongpressTimeout();break;case 2:this._state&=-26,this._stopLongpressTimeout();break;case 3:this._state&=-99;break;default:this._state=oe}}_touchMove(t,e,s){let n=this._tracked.find(h=>h.id===t);if(n===void 0)return;n.lastX=e,n.lastY=s;let r=e-n.firstX,a=s-n.firstY;if((n.firstX!==n.lastX||n.firstY!==n.lastY)&&(n.angle=Math.atan2(a,r)*180/Math.PI),!this._hasDetectedGesture()){if(Math.hypot(r,a)<$i)return;if(this._state&=-24,this._stopLongpressTimeout(),this._tracked.length!==1&&(this._state&=~qi),this._tracked.length!==2&&(this._state&=-97),this._tracked.length===2){let h=this._tracked.find(o=>o.id!==t);if(Math.hypot(h.firstX-h.lastX,h.firstY-h.lastY)>$i){let o=Math.abs(n.angle-h.angle);o=Math.abs((o+180)%360-180),o>Rr?this._state&=~Re:this._state&=~De,this._isTwoTouchTimeoutRunning()&&this._stopTwoTouchTimeout()}else this._isTwoTouchTimeoutRunning()||this._startTwoTouchTimeout()}if(!this._hasDetectedGesture())return;this._pushEvent("gesturestart")}this._pushEvent("gesturemove")}_touchEnd(t,e,s){if(this._ignored.indexOf(t)!==-1){this._ignored.splice(this._ignored.indexOf(t),1),this._ignored.length===0&&this._tracked.length===0&&(this._state=zt,this._waitingRelease=!1);return}if(!this._hasDetectedGesture()&&this._isTwoTouchTimeoutRunning()&&(this._stopTwoTouchTimeout(),this._state=oe),!this._hasDetectedGesture()&&(this._state&=-105,this._state&=~Ht,this._stopLongpressTimeout(),!this._waitingRelease))switch(this._releaseStart=Date.now(),this._waitingRelease=!0,this._tracked.length){case 1:this._state&=-7;break;case 2:this._state&=-6;break}if(this._waitingRelease){Date.now()-this._releaseStart>Ji&&(this._state=oe),this._tracked.some(r=>Date.now()-r.started>Dr)&&(this._state=oe);let n=this._tracked.find(r=>r.id===t);if(n.active=!1,this._hasDetectedGesture())this._pushEvent("gesturestart");else if(this._state!==oe)return}this._hasDetectedGesture()&&this._pushEvent("gestureend");for(let n=0;nt.active))}_startLongpressTimeout(){this._stopLongpressTimeout(),this._longpressTimeoutId=setTimeout(()=>this._longpressTimeout(),Qr)}_stopLongpressTimeout(){clearTimeout(this._longpressTimeoutId),this._longpressTimeoutId=null}_longpressTimeout(){if(this._hasDetectedGesture())throw new Error("A longpress gesture failed, conflict with a different gesture");this._state=Ht,this._pushEvent("gesturestart")}_startTwoTouchTimeout(){this._stopTwoTouchTimeout(),this._twoTouchTimeoutId=setTimeout(()=>this._twoTouchTimeout(),Br)}_stopTwoTouchTimeout(){clearTimeout(this._twoTouchTimeoutId),this._twoTouchTimeoutId=null}_isTwoTouchTimeoutRunning(){return this._twoTouchTimeoutId!==null}_twoTouchTimeout(){if(this._tracked.length===0)throw new Error("A pinch or two drag gesture failed, no tracked touches");let t=this._getAverageMovement(),e=Math.abs(t.x),s=Math.abs(t.y),n=this._getAverageDistance(),r=Math.abs(Math.hypot(n.first.x,n.first.y)-Math.hypot(n.last.x,n.last.y));s{this._target&&(e=document.elementFromPoint(t.clientX,t.clientY),this._updateVisibility(e))},0)}_showCursor(){this._canvas.style.visibility==="hidden"&&(this._canvas.style.visibility="")}_hideCursor(){this._canvas.style.visibility!=="hidden"&&(this._canvas.style.visibility="hidden")}_shouldShowCursor(t){return t?t===this._target?!0:!(!this._target.contains(t)||window.getComputedStyle(t).cursor!=="none"):!1}_updateVisibility(t){this._captureIsActive()&&(t=document.captureElement),this._shouldShowCursor(t)?this._showCursor():this._hideCursor()}_updatePosition(){this._canvas.style.left=this._position.x+"px",this._canvas.style.top=this._position.y+"px"}_captureIsActive(){return document.captureElement&&document.documentElement.contains(document.captureElement)}}const Ot=40*1024*1024,ot={CONNECTING:"connecting",OPEN:"open",CLOSING:"closing",CLOSED:"closed"},ht={CONNECTING:[WebSocket.CONNECTING,ot.CONNECTING],OPEN:[WebSocket.OPEN,ot.OPEN],CLOSING:[WebSocket.CLOSING,ot.CLOSING],CLOSED:[WebSocket.CLOSED,ot.CLOSED]},es=["send","close","binaryType","onerror","onmessage","onopen","protocol","readyState"];class Ur{constructor(){this._websocket=null,this._rQi=0,this._rQlen=0,this._rQbufferSize=1024*1024*4,this._rQ=null,this._sQbufferSize=1024*10,this._sQlen=0,this._sQ=null,this._eventHandlers={message:()=>{},open:()=>{},close:()=>{},error:()=>{}}}get readyState(){let t;return this._websocket===null?"unused":(t=this._websocket.readyState,ht.CONNECTING.includes(t)?"connecting":ht.OPEN.includes(t)?"open":ht.CLOSING.includes(t)?"closing":ht.CLOSED.includes(t)?"closed":"unknown")}get sQ(){return this._sQ}get rQ(){return this._rQ}get rQi(){return this._rQi}set rQi(t){this._rQi=t}get rQlen(){return this._rQlen-this._rQi}rQpeek8(){return this._rQ[this._rQi]}rQskipBytes(t){this._rQi+=t}rQshift8(){return this._rQshift(1)}rQshift16(){return this._rQshift(2)}rQshift32(){return this._rQshift(4)}_rQshift(t){let e=0;for(let s=t-1;s>=0;s--)e+=this._rQ[this._rQi++]<"u"&&(t=this.rQlen);let e="";for(let s=0;s"u"&&(t=this.rQlen),this._rQi+=t,new Uint8Array(this._rQ.buffer,this._rQi-t,t)}rQshiftTo(t,e){e===void 0&&(e=this.rQlen),t.set(new Uint8Array(this._rQ.buffer,this._rQi,e)),this._rQi+=e}rQslice(t,e=this.rQlen){return new Uint8Array(this._rQ.buffer,this._rQi+t,e-t)}rQwait(t,e,s){if(this.rQlen0&&this.readyState==="open"&&(this._websocket.send(this._encodeMessage()),this._sQlen=0)}send(t){this._sQ.set(t,this._sQlen),this._sQlen+=t.length,this.flush()}sendString(t){this.send(t.split("").map(e=>e.charCodeAt(0)))}off(t){this._eventHandlers[t]=()=>{}}on(t,e){this._eventHandlers[t]=e}_allocateBuffers(){this._rQ=new Uint8Array(this._rQbufferSize),this._sQ=new Uint8Array(this._sQbufferSize)}init(){this._allocateBuffers(),this._rQi=0,this._websocket=null}open(t,e){this.attach(new WebSocket(t,e))}attach(t){this.init();const e=[...Object.keys(t),...Object.getOwnPropertyNames(Object.getPrototypeOf(t))];for(let s=0;s{M(">> WebSock.onopen"),this._websocket.protocol&&$("Server choose sub-protocol: "+this._websocket.protocol),this._eventHandlers.open(),M("<< WebSock.onopen")},this._websocket.onclose=s=>{M(">> WebSock.onclose"),this._eventHandlers.close(s),M("<< WebSock.onclose")},this._websocket.onerror=s=>{M(">> WebSock.onerror: "+s),this._eventHandlers.error(s),M("<< WebSock.onerror: "+s)}}close(){this._websocket&&((this.readyState==="connecting"||this.readyState==="open")&&($("Closing WebSocket connection"),this._websocket.close()),this._websocket.onmessage=()=>{})}_encodeMessage(){return new Uint8Array(this._sQ.buffer,0,this._sQlen)}_expandCompactRQ(t){const e=(this._rQlen-this._rQi+t)*8,s=this._rQbufferSizeOt&&(this._rQbufferSize=Ot,this._rQbufferSize-this.rQlenthis._rQbufferSize-this._rQlen&&this._expandCompactRQ(e.length),this._rQ.set(e,this._rQlen),this._rQlen+=e.length}_recvMessage(t){this._DecodeMessage(t.data),this.rQlen>0?(this._eventHandlers.message(),this._rQlen==this._rQi&&(this._rQlen=0,this._rQi=0)):M("Ignoring empty message")}}const ts=[13,16,10,23,0,4,2,27,14,5,20,9,22,18,11,3,25,7,15,6,26,19,12,1,40,51,30,36,46,54,29,39,50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31],Nr=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],_=0;let p,g,m,b,w,y;p=65536;g=1<<24;m=p|g;b=4;w=1024;y=b|w;const is=[m|w,_|_,p|_,m|y,m|b,p|y,_|b,p|_,_|w,m|w,m|y,_|w,g|y,m|b,g|_,_|b,_|y,g|w,g|w,p|w,p|w,m|_,m|_,g|y,p|b,g|b,g|b,p|b,_|_,_|y,p|y,g|_,p|_,m|y,_|b,m|_,m|w,g|_,g|_,_|w,m|b,p|_,p|w,g|b,_|w,_|b,g|y,p|y,m|y,p|b,m|_,g|y,g|b,_|y,p|y,m|w,_|y,g|w,g|w,_|_,p|b,p|w,_|_,m|b];p=1<<20;g=1<<31;m=p|g;b=32;w=32768;y=b|w;const ss=[m|y,g|w,_|w,p|y,p|_,_|b,m|b,g|y,g|b,m|y,m|w,g|_,g|w,p|_,_|b,m|b,p|w,p|b,g|y,_|_,g|_,_|w,p|y,m|_,p|b,g|b,_|_,p|w,_|y,m|w,m|_,_|y,_|_,p|y,m|b,p|_,g|y,m|_,m|w,_|w,m|_,g|w,_|b,m|y,p|y,_|b,_|w,g|_,_|y,m|w,p|_,g|b,p|b,g|y,g|b,p|b,p|w,_|_,g|w,_|y,g|_,m|b,m|y,p|w];p=1<<17;g=1<<27;m=p|g;b=8;w=512;y=b|w;const ns=[_|y,m|w,_|_,m|b,g|w,_|_,p|y,g|w,p|b,g|b,g|b,p|_,m|y,p|b,m|_,_|y,g|_,_|b,m|w,_|w,p|w,m|_,m|b,p|y,g|y,p|w,p|_,g|y,_|b,m|y,_|w,g|_,m|w,g|_,p|b,_|y,p|_,m|w,g|w,_|_,_|w,p|b,m|y,g|w,g|b,_|w,_|_,m|b,g|y,p|_,g|_,m|y,_|b,p|y,p|w,g|b,m|_,g|y,_|y,m|_,p|y,_|b,m|b,p|w];p=8192;g=1<<23;m=p|g;b=1;w=128;y=b|w;const rs=[m|b,p|y,p|y,_|w,m|w,g|y,g|b,p|b,_|_,m|_,m|_,m|y,_|y,_|_,g|w,g|b,_|b,p|_,g|_,m|b,_|w,g|_,p|b,p|w,g|y,_|b,p|w,g|w,p|_,m|w,m|y,_|y,g|w,g|b,m|_,m|y,_|y,_|_,_|_,m|_,p|w,g|w,g|y,_|b,m|b,p|y,p|y,_|w,m|y,_|y,_|b,p|_,g|b,p|b,m|w,g|y,p|b,p|w,g|_,m|b,_|w,g|_,p|_,m|w];p=1<<25;g=1<<30;m=p|g;b=256;w=1<<19;y=b|w;const as=[_|b,p|y,p|w,m|b,_|w,_|b,g|_,p|w,g|y,_|w,p|b,g|y,m|b,m|w,_|y,g|_,p|_,g|w,g|w,_|_,g|b,m|y,m|y,p|b,m|w,g|b,_|_,m|_,p|y,p|_,m|_,_|y,_|w,m|b,_|b,p|_,g|_,p|w,m|b,g|y,p|b,g|_,m|w,p|y,g|y,_|b,p|_,m|w,m|y,_|y,m|_,m|y,p|w,_|_,g|w,m|_,_|y,p|b,g|b,_|w,_|_,g|w,p|y,g|b];p=1<<22;g=1<<29;m=p|g;b=16;w=16384;y=b|w;const os=[g|b,m|_,_|w,m|y,m|_,_|b,m|y,p|_,g|w,p|y,p|_,g|b,p|b,g|w,g|_,_|y,_|_,p|b,g|y,_|w,p|w,g|y,_|b,m|b,m|b,_|_,p|y,m|w,_|y,p|w,m|w,g|_,g|w,_|b,m|b,p|w,m|y,p|_,_|y,g|b,p|_,g|w,g|_,_|y,g|b,m|y,p|w,m|_,p|y,m|w,_|_,m|b,_|b,_|w,m|_,p|y,_|w,p|b,g|y,_|_,m|w,g|_,p|b,g|y];p=1<<21;g=1<<26;m=p|g;b=2;w=2048;y=b|w;const hs=[p|_,m|b,g|y,_|_,_|w,g|y,p|y,m|w,m|y,p|_,_|_,g|b,_|b,g|_,m|b,_|y,g|w,p|y,p|b,g|w,g|b,m|_,m|w,p|b,m|_,_|w,_|y,m|y,p|w,_|b,g|_,p|w,g|_,p|w,p|_,g|y,g|y,m|b,m|b,_|b,p|b,g|_,g|w,p|_,m|w,_|y,p|y,m|w,_|y,g|b,m|y,m|_,p|w,_|_,_|b,m|y,_|_,p|y,m|_,_|w,g|b,g|w,_|w,p|b];p=1<<18;g=1<<28;m=p|g;b=64;w=4096;y=b|w;const ls=[g|y,_|w,p|_,m|y,g|_,g|y,_|b,g|_,p|b,m|_,m|y,p|w,m|w,p|y,_|w,_|b,m|_,g|b,g|w,_|y,p|w,p|b,m|b,m|w,_|y,_|_,_|_,m|b,g|b,g|w,p|y,p|_,p|y,p|_,m|w,_|w,_|b,m|b,_|w,p|y,g|w,_|b,g|b,m|_,m|b,g|_,p|_,g|y,_|_,m|y,p|b,g|b,m|_,g|w,g|y,_|_,m|y,p|w,p|w,_|y,_|y,p|b,g|_,m|w];class cs{constructor(t){this.keys=[];const e=[],s=[],n=[];for(let r=0,a=56;r<56;++r,a-=8){a+=a<-5?65:a<-3?31:a<-1?63:a===27?35:0;const h=a&7;e[r]=(t[a>>>3]&1<>>10,this.keys[h]|=(o&4032)>>>6,++h,this.keys[h]=(c&258048)<<12,this.keys[h]|=(c&63)<<16,this.keys[h]|=(o&258048)>>>4,this.keys[h]|=o&63,++h}}enc8(t){const e=t.slice();let s=0,n,r,a;n=e[s++]<<24|e[s++]<<16|e[s++]<<8|e[s++],r=e[s++]<<24|e[s++]<<16|e[s++]<<8|e[s++],a=(n>>>4^r)&252645135,r^=a,n^=a<<4,a=(n>>>16^r)&65535,r^=a,n^=a<<16,a=(r>>>2^n)&858993459,n^=a,r^=a<<2,a=(r>>>8^n)&16711935,n^=a,r^=a<<8,r=r<<1|r>>>31&1,a=(n^r)&2863311530,n^=a,r^=a,n=n<<1|n>>>31&1;for(let h=0,c=0;h<8;++h){a=r<<28|r>>>4,a^=this.keys[c++];let o=hs[a&63];o|=as[a>>>8&63],o|=ns[a>>>16&63],o|=is[a>>>24&63],a=r^this.keys[c++],o|=ls[a&63],o|=os[a>>>8&63],o|=rs[a>>>16&63],o|=ss[a>>>24&63],n^=o,a=n<<28|n>>>4,a^=this.keys[c++],o=hs[a&63],o|=as[a>>>8&63],o|=ns[a>>>16&63],o|=is[a>>>24&63],a=n^this.keys[c++],o|=ls[a&63],o|=os[a>>>8&63],o|=rs[a>>>16&63],o|=ss[a>>>24&63],r^=o}for(r=r<<31|r>>>1,a=(n^r)&2863311530,n^=a,r^=a,n=n<<31|n>>>1,a=(n>>>8^r)&16711935,r^=a,n^=a<<8,a=(n>>>2^r)&858993459,r^=a,n^=a<<2,a=(r>>>16^n)&65535,n^=a,r^=a<<16,a=(r>>>4^n)&252645135,n^=a,r^=a<<4,a=[r,n],s=0;s<8;s++)e[s]=(a[s>>>2]>>>8*(3-s%4))%256,e[s]<0&&(e[s]+=256);return e}encrypt(t){return this.enc8(t.slice(0,8)).concat(this.enc8(t.slice(8,16)))}}const Hr={Again:57349,AltLeft:56,AltRight:57400,ArrowDown:57424,ArrowLeft:57419,ArrowRight:57421,ArrowUp:57416,AudioVolumeDown:57390,AudioVolumeMute:57376,AudioVolumeUp:57392,Backquote:41,Backslash:43,Backspace:14,BracketLeft:26,BracketRight:27,BrowserBack:57450,BrowserFavorites:57446,BrowserForward:57449,BrowserHome:57394,BrowserRefresh:57447,BrowserSearch:57445,BrowserStop:57448,CapsLock:58,Comma:51,ContextMenu:57437,ControlLeft:29,ControlRight:57373,Convert:121,Copy:57464,Cut:57404,Delete:57427,Digit0:11,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Eject:57469,End:57423,Enter:28,Equal:13,Escape:1,F1:59,F10:68,F11:87,F12:88,F13:93,F14:94,F15:95,F16:85,F17:57347,F18:57463,F19:57348,F2:60,F20:90,F21:116,F22:57465,F23:109,F24:111,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,Find:57409,Help:57461,Hiragana:119,Home:57415,Insert:57426,IntlBackslash:86,IntlRo:115,IntlYen:125,KanaMode:112,Katakana:120,KeyA:30,KeyB:48,KeyC:46,KeyD:32,KeyE:18,KeyF:33,KeyG:34,KeyH:35,KeyI:23,KeyJ:36,KeyK:37,KeyL:38,KeyM:50,KeyN:49,KeyO:24,KeyP:25,KeyQ:16,KeyR:19,KeyS:31,KeyT:20,KeyU:22,KeyV:47,KeyW:17,KeyX:45,KeyY:21,KeyZ:44,Lang1:114,Lang2:113,Lang3:120,Lang4:119,Lang5:118,LaunchApp1:57451,LaunchApp2:57377,LaunchMail:57452,MediaPlayPause:57378,MediaSelect:57453,MediaStop:57380,MediaTrackNext:57369,MediaTrackPrevious:57360,MetaLeft:57435,MetaRight:57436,Minus:12,NonConvert:123,NumLock:69,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadAdd:78,NumpadComma:126,NumpadDecimal:83,NumpadDivide:57397,NumpadEnter:57372,NumpadEqual:89,NumpadMultiply:55,NumpadParenLeft:57462,NumpadParenRight:57467,NumpadSubtract:74,Open:100,PageDown:57425,PageUp:57417,Paste:101,Pause:57414,Period:52,Power:57438,PrintScreen:84,Props:57350,Quote:40,ScrollLock:70,Semicolon:39,ShiftLeft:42,ShiftRight:54,Slash:53,Sleep:57439,Space:57,Suspend:57381,Tab:15,Undo:57351,WakeUp:57443},D={encodingRaw:0,encodingCopyRect:1,encodingRRE:2,encodingHextile:5,encodingTight:7,encodingZRLE:16,encodingTightPNG:-260,encodingJPEG:21,pseudoEncodingQualityLevel0:-32,pseudoEncodingDesktopSize:-223,pseudoEncodingLastRect:-224,pseudoEncodingCursor:-239,pseudoEncodingQEMUExtendedKeyEvent:-258,pseudoEncodingDesktopName:-307,pseudoEncodingExtendedDesktopSize:-308,pseudoEncodingXvp:-309,pseudoEncodingFence:-312,pseudoEncodingContinuousUpdates:-313,pseudoEncodingCompressLevel0:-256,pseudoEncodingVMwareCursor:1464686180,pseudoEncodingExtendedClipboard:3231835598};class zr{constructor(){this._rawKey=null,this._ctrKey=null,this._cbcKey=null,this._zeroBlock=new Uint8Array(16),this._prefixBlock0=this._zeroBlock,this._prefixBlock1=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]),this._prefixBlock2=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2])}async _encryptBlock(t){const e=await window.crypto.subtle.encrypt({name:"AES-CBC",iv:this._zeroBlock},this._cbcKey,t);return new Uint8Array(e).slice(0,16)}async _initCMAC(){const t=await this._encryptBlock(this._zeroBlock),e=new Uint8Array(16),s=t[0]>>>6;for(let r=0;r<15;r++)e[r]=t[r+1]>>6|t[r]<<2,t[r]=t[r+1]>>7|t[r]<<1;const n=[0,135,14,137];e[14]^=s>>>1,e[15]=t[15]<<2^n[s],t[15]=t[15]<<1^n[s>>1],this._k1=t,this._k2=e}async _encryptCTR(t,e){const s=await window.crypto.subtle.encrypt({name:"AES-CTR",counter:e,length:128},this._ctrKey,t);return new Uint8Array(s)}async _decryptCTR(t,e){const s=await window.crypto.subtle.decrypt({name:"AES-CTR",counter:e,length:128},this._ctrKey,t);return new Uint8Array(s)}async _computeCMAC(t,e){if(e.length!==16)return null;const s=Math.floor(t.length/16),n=Math.ceil(t.length/16),r=t.length-s*16,a=new Uint8Array((n+1)*16);if(a.set(e),a.set(t,16),r===0)for(let o=0;o<16;o++)a[s*16+o]^=this._k1[o];else{a[(s+1)*16+r]=128;for(let o=0;o<16;o++)a[(s+1)*16+o]^=this._k2[o]}let h=await window.crypto.subtle.encrypt({name:"AES-CBC",iv:this._zeroBlock},this._cbcKey,a);return h=new Uint8Array(h),h.slice(h.length-32,h.length-16)}async setKey(t){this._rawKey=t,this._ctrKey=await window.crypto.subtle.importKey("raw",t,{name:"AES-CTR"},!1,["encrypt","decrypt"]),this._cbcKey=await window.crypto.subtle.importKey("raw",t,{name:"AES-CBC"},!1,["encrypt","decrypt"]),await this._initCMAC()}async encrypt(t,e,s){const n=await this._computeCMAC(s,this._prefixBlock0),r=await this._encryptCTR(t,n),a=await this._computeCMAC(e,this._prefixBlock1),h=await this._computeCMAC(r,this._prefixBlock2);for(let o=0;o<16;o++)h[o]^=n[o]^a[o];const c=new Uint8Array(16+r.length);return c.set(r),c.set(h,r.length),c}async decrypt(t,e,s,n){const r=await this._computeCMAC(s,this._prefixBlock0),a=await this._computeCMAC(e,this._prefixBlock1),h=await this._computeCMAC(t,this._prefixBlock2);for(let o=0;o<16;o++)h[o]^=r[o]^a[o];if(h.length!==n.length)return null;for(let o=0;o>>8,t.length&255]),s=await this._cipher.encrypt(t,e,this._counter);for(let r=0;r<16&&this._counter[r]++===255;r++);const n=new Uint8Array(t.length+2+16);return n.set(e),n.set(s,2),n}async receiveMessage(t,e,s){const n=new Uint8Array([(t&65280)>>>8,t&255]),r=await this._cipher.decrypt(e,n,this._counter,s);for(let a=0;a<16&&this._counter[a]++===255;a++);return r}}class fs{constructor(t){this._key=null,this._keyLength=t,this._keyBytes=Math.ceil(t/8),this._n=null,this._e=null,this._d=null,this._nBigInt=null,this._eBigInt=null,this._dBigInt=null}_base64urlDecode(t){return t=t.replace(/-/g,"+").replace(/_/g,"/"),t=t.padEnd(Math.ceil(t.length/4)*4,"="),Ls.decode(t)}_u8ArrayToBigInt(t){let e="0x";for(let s=0;s0;)e%2n===1n&&(n=n*t%s),e=e/2n,t=t*t%s;return n}async generateKey(){this._key=await window.crypto.subtle.generateKey({name:"RSA-OAEP",modulusLength:this._keyLength,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["encrypt","decrypt"]);const t=await window.crypto.subtle.exportKey("jwk",this._key.privateKey);this._n=this._padArray(this._base64urlDecode(t.n),this._keyBytes),this._nBigInt=this._u8ArrayToBigInt(this._n),this._e=this._padArray(this._base64urlDecode(t.e),this._keyBytes),this._eBigInt=this._u8ArrayToBigInt(this._e),this._d=this._padArray(this._base64urlDecode(t.d),this._keyBytes),this._dBigInt=this._u8ArrayToBigInt(this._d)}setPublicKey(t,e){t.length!==this._keyBytes||e.length!==this._keyBytes||(this._n=new Uint8Array(this._keyBytes),this._e=new Uint8Array(this._keyBytes),this._n.set(t),this._e.set(e),this._nBigInt=this._u8ArrayToBigInt(this._n),this._eBigInt=this._u8ArrayToBigInt(this._e))}encrypt(t){if(t.length>this._keyBytes-11)return null;const e=new Uint8Array(this._keyBytes-t.length-3);window.crypto.getRandomValues(e);for(let a=0;a{const n=()=>!this._sock.rQwait("RA2",t);n()?e():(this._checkSock=()=>{n()&&(e(),this._checkSock=null,this._sockReject=null)},this._sockReject=s)})}_waitApproveKeyAsync(){return new Promise((t,e)=>{this._approveServerResolve=t,this._approveServerReject=e})}_waitCredentialsAsync(t){const e=()=>t===1&&this._getCredentials().username!==void 0&&this._getCredentials().password!==void 0?!0:t===2&&this._getCredentials().password!==void 0;return new Promise((s,n)=>{e()?s():(this._checkCredentials=()=>{e()&&(s(),this._checkCredentials=null,this._credentialsReject=null)},this._credentialsReject=n)})}checkInternalEvents(){this._checkSock!==null&&this._checkSock(),this._checkCredentials!==null&&this._checkCredentials()}approveServer(){this._approveServerResolve!==null&&(this._approveServerResolve(),this._approveServerResolve=null)}disconnect(){this._sockReject!==null&&(this._sockReject(new Error("disconnect normally")),this._sockReject=null),this._credentialsReject!==null&&(this._credentialsReject(new Error("disconnect normally")),this._credentialsReject=null),this._approveServerReject!==null&&(this._approveServerReject(new Error("disconnect normally")),this._approveServerReject=null)}async negotiateRA2neAuthAsync(){this._hasStarted=!0,await this._waitSockAsync(4);const t=this._sock.rQslice(0,4),e=this._sock.rQshift32();if(e<1024)throw new Error("RA2: server public key is too short: "+e);if(e>8192)throw new Error("RA2: server public key is too long: "+e);const s=Math.ceil(e/8);await this._waitSockAsync(s*2);const n=this._sock.rQshiftBytes(s),r=this._sock.rQshiftBytes(s),a=new fs(e);a.setPublicKey(n,r);const h=new Uint8Array(4+s*2);h.set(t),h.set(n,4),h.set(r,4+s),this.dispatchEvent(new CustomEvent("serververification",{detail:{type:"RSA",publickey:h}})),await this._waitApproveKeyAsync();const c=2048,o=Math.ceil(c/8),l=new fs(c);await l.generateKey();const u=l.n,x=l.e,d=new Uint8Array(4+o*2);d[0]=(c&4278190080)>>>24,d[1]=(c&16711680)>>>16,d[2]=(c&65280)>>>8,d[3]=c&255,d.set(u,4),d.set(x,4+o),this._sock.send(d);const k=new Uint8Array(16);window.crypto.getRandomValues(k);const C=a.encrypt(k),A=new Uint8Array(2+s);if(A[0]=(s&65280)>>>8,A[1]=s&255,A.set(C,2),this._sock.send(A),await this._waitSockAsync(2),this._sock.rQshift16()!==o)throw new Error("RA2: wrong encrypted message length");const K=this._sock.rQshiftBytes(o),T=l.decrypt(K);if(T===null||T.length!==16)throw new Error("RA2: corrupted server encrypted random");let X=new Uint8Array(32),S=new Uint8Array(32);X.set(T),X.set(k,16),S.set(k),S.set(T,16),X=await window.crypto.subtle.digest("SHA-1",X),X=new Uint8Array(X).slice(0,16),S=await window.crypto.subtle.digest("SHA-1",S),S=new Uint8Array(S).slice(0,16);const L=new _s;await L.setKey(X);const N=new _s;await N.setKey(S);let E=new Uint8Array(8+s*2+o*2),R=new Uint8Array(8+s*2+o*2);if(E.set(h),E.set(d,4+s*2),R.set(d),R.set(h,4+o*2),E=await window.crypto.subtle.digest("SHA-1",E),R=await window.crypto.subtle.digest("SHA-1",R),E=new Uint8Array(E),R=new Uint8Array(R),this._sock.send(await L.makeMessage(R)),await this._waitSockAsync(38),this._sock.rQshift16()!==20)throw new Error("RA2: wrong server hash");const B=await N.receiveMessage(20,this._sock.rQshiftBytes(20),this._sock.rQshiftBytes(16));if(B===null)throw new Error("RA2: failed to authenticate the message");for(let G=0;G<20;G++)if(B[G]!==E[G])throw new Error("RA2: wrong server hash");if(await this._waitSockAsync(19),this._sock.rQshift16()!==1)throw new Error("RA2: wrong subtype");let F=await N.receiveMessage(1,this._sock.rQshiftBytes(1),this._sock.rQshiftBytes(16));if(F===null)throw new Error("RA2: failed to authenticate the message");if(F=F[0],F===1)(this._getCredentials().username===void 0||this._getCredentials().password===void 0)&&this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}}));else if(F===2)this._getCredentials().password===void 0&&this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["password"]}}));else throw new Error("RA2: wrong subtype");await this._waitCredentialsAsync(F);let P;F===1?P=ce(this._getCredentials().username).slice(0,255):P="";const te=ce(this._getCredentials().password).slice(0,255),re=new Uint8Array(P.length+te.length+2);re[0]=P.length,re[P.length+1]=te.length;for(let G=0;G>2);for(let e=0;e>5]|=(255&i.charCodeAt(e/8))<>5]>>>e%32&255);return t}function Yr(i,t){i[t>>5]|=128<>>9<<4)]=t;let e=1732584193,s=-271733879,n=-1732584194,r=271733878;for(let a=0;a>16)+(t>>16)+(e>>16)<<16|65535&e}function Zr(i,t){return i<>>32-t}class qr{constructor(){this._lines=0}decodeRect(t,e,s,n,r,a,h){if(s===0||n===0)return!0;this._lines===0&&(this._lines=n);const c=h==8?1:4,o=s*c;if(r.rQwait("RAW",o))return!1;const l=e+(n-this._lines),u=Math.min(this._lines,Math.floor(r.rQlen/o)),x=s*u;let d=r.rQ,k=r.rQi;if(h==8){const C=new Uint8Array(x*4);for(let A=0;A>0&3)*255/3,C[A*4+1]=(d[k+A]>>2&3)*255/3,C[A*4+2]=(d[k+A]>>4&3)*255/3,C[A*4+3]=255;d=C,k=0}for(let C=0;C0)}}class $r{decodeRect(t,e,s,n,r,a,h){if(r.rQwait("COPYRECT",4))return!1;let c=r.rQshift16(),o=r.rQshift16();return s===0||n===0||a.copyImage(c,o,t,e,s,n),!0}}class Jr{constructor(){this._subrects=0}decodeRect(t,e,s,n,r,a,h){if(this._subrects===0){if(r.rQwait("RRE",8))return!1;this._subrects=r.rQshift32();let c=r.rQshiftBytes(4);a.fillRect(t,e,s,n,c)}for(;this._subrects>0;){if(r.rQwait("RRE",12))return!1;let c=r.rQshiftBytes(4),o=r.rQshift16(),l=r.rQshift16(),u=r.rQshift16(),x=r.rQshift16();a.fillRect(t+o,e+l,u,x,c),this._subrects--}return!0}}class ea{constructor(){this._tiles=0,this._lastsubencoding=0,this._tileBuffer=new Uint8Array(256*4)}decodeRect(t,e,s,n,r,a,h){for(this._tiles===0&&(this._tilesX=Math.ceil(s/16),this._tilesY=Math.ceil(n/16),this._totalTiles=this._tilesX*this._tilesY,this._tiles=this._totalTiles);this._tiles>0;){let c=1;if(r.rQwait("HEXTILE",c))return!1;let o=r.rQ,l=r.rQi,u=o[l];if(u>30)throw new Error("Illegal hextile subencoding (subencoding: "+u+")");const x=this._totalTiles-this._tiles,d=x%this._tilesX,k=Math.floor(x/this._tilesX),C=t+d*16,A=e+k*16,K=Math.min(16,t+s-C),T=Math.min(16,e+n-A);if(u&1)c+=K*T*4;else if(u&2&&(c+=4),u&4&&(c+=4),u&8){if(c++,r.rQwait("HEXTILE",c))return!1;let X=o[l+c-1];u&16?c+=X*6:c+=X*2}if(r.rQwait("HEXTILE",c))return!1;if(l++,u===0)this._lastsubencoding&1?M(" Ignoring blank after RAW"):a.fillRect(C,A,K,T,this._background);else if(u&1){let X=K*T;for(let S=0;S>4,R=N&15,B=o[l];l++;const F=(B>>4)+1,P=(B&15)+1;this._subTile(E,R,F,P,L)}}this._finishTile(a)}r.rQi=l,this._lastsubencoding=u,this._tiles--}return!0}_startTile(t,e,s,n,r){this._tileX=t,this._tileY=e,this._tileW=s,this._tileH=n;const a=r[0],h=r[1],c=r[2],o=this._tileBuffer;for(let l=0;l>o&1&&(this._zlibs[o].reset(),$("Reset zlib stream "+o));this._ctl=this._ctl>>4}let c;if(this._ctl===8)c=this._fillRect(t,e,s,n,r,a,h);else if(this._ctl===9)c=this._jpegRect(t,e,s,n,r,a,h);else if(this._ctl===10)c=this._pngRect(t,e,s,n,r,a,h);else if((this._ctl&8)==0)c=this._basicRect(this._ctl,t,e,s,n,r,a,h);else throw new Error("Illegal tight compression received (ctl: "+this._ctl+")");return c&&(this._ctl=null),c}_fillRect(t,e,s,n,r,a,h){if(r.rQwait("TIGHT",3))return!1;const c=r.rQi,o=r.rQ;return a.fillRect(t,e,s,n,[o[c],o[c+1],o[c+2]],!1),r.rQskipBytes(3),!0}_jpegRect(t,e,s,n,r,a,h){let c=this._readData(r);return c===null?!1:(a.imageRect(t,e,s,n,"image/jpeg",c),!0)}_pngRect(t,e,s,n,r,a,h){throw new Error("PNG received in standard Tight rect")}_basicRect(t,e,s,n,r,a,h,c){if(this._filter===null)if(t&4){if(a.rQwait("TIGHT",1))return!1;this._filter=a.rQshift8()}else this._filter=0;let o=t&3,l;switch(this._filter){case 0:l=this._copyFilter(o,e,s,n,r,a,h,c);break;case 1:l=this._paletteFilter(o,e,s,n,r,a,h,c);break;case 2:l=this._gradientFilter(o,e,s,n,r,a,h,c);break;default:throw new Error("Illegal tight filter received (ctl: "+this._filter+")")}return l&&(this._filter=null),l}_copyFilter(t,e,s,n,r,a,h,c){const o=n*r*3;let l;if(o===0)return!0;if(o<12){if(a.rQwait("TIGHT",o))return!1;l=a.rQshiftBytes(o)}else{if(l=this._readData(a),l===null)return!1;this._zlibs[t].setInput(l),l=this._zlibs[t].inflate(o),this._zlibs[t].setInput(null)}let u=new Uint8Array(n*r*4);for(let x=0,d=0;x=0;C--)x=(u*s+k*8+7-C)*4,d=(r[u*o+k]>>C&1)*3,c[x]=a[d],c[x+1]=a[d+1],c[x+2]=a[d+2],c[x+3]=255;for(let C=7;C>=8-s%8;C--)x=(u*s+k*8+7-C)*4,d=(r[u*o+k]>>C&1)*3,c[x]=a[d],c[x+1]=a[d+1],c[x+2]=a[d+2],c[x+3]=255}h.blitImage(t,e,s,n,c,0,!1)}_paletteRect(t,e,s,n,r,a,h){const c=this._getScratchBuffer(s*n*4),o=s*n*4;for(let l=0,u=0;l=2&&k<=16){const C=this._decodePaletteTile(k,d,x,l);a.blitImage(u,o,x,l,C,0,!1)}else if(k===128){const C=this._decodeRLETile(d);a.blitImage(u,o,x,l,C,0,!1)}else if(k>=130&&k<=255){const C=this._decodeRLEPaletteTile(k-128,d);a.blitImage(u,o,x,l,C,0,!1)}else throw new Error("Unknown subencoding: "+k)}}return this._length=0,!0}_getBitsPerPixelInPalette(t){if(t<=2)return 1;if(t<=4)return 2;if(t<=16)return 4}_readPixels(t){let e=this._pixelBuffer;const s=this._inflator.inflate(3*t);for(let n=0,r=0;n>x&c;r[o]=a[k*4],r[o+1]=a[k*4+1],r[o+2]=a[k*4+2],r[o+3]=a[k*4+3],o+=4,x-=h}x<8-h&&u=128&&(a-=128,h=this._readRLELength()),a>t)throw new Error("Too big index in palette: "+a+", palette size: "+t);if(r+h>e)throw new Error("Too big rle length in palette mode: "+h+", allowed length is: "+(e-r));for(let c=0;cd[1]==192||d[1]==194);if(o==-1)throw new Error("Illegal JPEG image without SOF");let l=this._segments.slice(0,o);l=l.concat(this._quantTables.length?this._quantTables:this._cachedQuantTables),l.push(this._segments[o]),l=l.concat(this._huffmanTables.length?this._huffmanTables:this._cachedHuffmanTables,this._segments.slice(o+1));let u=0;for(let d=0;ds)return!1;if(t[n]!=255)throw new Error("Illegal JPEG marker received (byte: "+t[n]+")");const r=t[n+1];if(n+=2,r==217)return this._jpegLength=n,this._segments.push(t.slice(e,n)),!0;if(r==218){let c=!1;for(let o=n+3;o+1=208&&t[o+1]<=215)){n=o,c=!0;break}if(!c)return!1;this._segments.push(t.slice(e,n)),e=n;continue}else if(r>=208&&r<217||r==1){this._segments.push(t.slice(e,n)),e=n;continue}if(n+2>s)return!1;const a=(t[n]<<8)+t[n+1]-2;if(a<0)throw new Error("Illegal JPEG length received (length: "+a+")");if(n+=2,n+a>s)return!1;n+=a;const h=t.slice(e,n);r==196?this._huffmanTables.push(h):r==219&&this._quantTables.push(h),this._segments.push(h),e=n}}}const na=3,ra="rgb(40, 40, 40)",ds=17,us=50,xs=19,Be=75,de=50,aa=1e3,oa=50,ps=1,_t=2,gs=6,bs=16,Vt=19,ws=22,vs=30,ms=113,ys=129,ks=256,he=1,Ss=1<<24,ut=1<<25,Cs=1<<26,Ue=1<<27,xt=1<<28;class Q extends Ms{constructor(t,e,s){if(!t)throw new Error("Must specify target");if(!e)throw new Error("Must specify URL, WebSocket or RTCDataChannel");window.isSecureContext||O("noVNC requires a secure context (TLS). Expect crashes!"),super(),this._target=t,typeof e=="string"?this._url=e:(this._url=null,this._rawChannel=e),s=s||{},this._rfbCredentials=s.credentials||{},this._shared="shared"in s?!!s.shared:!0,this._repeaterID=s.repeaterID||"",this._wsProtocols=s.wsProtocols||[],this._rfbConnectionState="",this._rfbInitState="",this._rfbAuthScheme=-1,this._rfbCleanDisconnect=!0,this._rfbRSAAESAuthenticationState=null,this._rfbVersion=0,this._rfbMaxVersion=3.8,this._rfbTightVNC=!1,this._rfbVeNCryptState=0,this._rfbXvpVer=0,this._fbWidth=0,this._fbHeight=0,this._fbName="",this._capabilities={power:!1},this._supportsFence=!1,this._supportsContinuousUpdates=!1,this._enabledContinuousUpdates=!1,this._supportsSetDesktopSize=!1,this._screenID=0,this._screenFlags=0,this._qemuExtKeyEventSupported=!1,this._clipboardText=null,this._clipboardServerCapabilitiesActions={},this._clipboardServerCapabilitiesFormats={},this._sock=null,this._display=null,this._flushing=!1,this._keyboard=null,this._gestures=null,this._resizeObserver=null,this._disconnTimer=null,this._resizeTimeout=null,this._mouseMoveTimer=null,this._decoders={},this._FBU={rects:0,x:0,y:0,width:0,height:0,encoding:null},this._mousePos={},this._mouseButtonMask=0,this._mouseLastMoveTime=0,this._viewportDragging=!1,this._viewportDragPos={},this._viewportHasMoved=!1,this._accumulatedWheelDeltaX=0,this._accumulatedWheelDeltaY=0,this._gestureLastTapTime=null,this._gestureFirstDoubleTapEv=null,this._gestureLastMagnitudeX=0,this._gestureLastMagnitudeY=0,this._eventHandlers={focusCanvas:this._focusCanvas.bind(this),handleResize:this._handleResize.bind(this),handleMouse:this._handleMouse.bind(this),handleWheel:this._handleWheel.bind(this),handleGesture:this._handleGesture.bind(this),handleRSAAESCredentialsRequired:this._handleRSAAESCredentialsRequired.bind(this),handleRSAAESServerVerification:this._handleRSAAESServerVerification.bind(this)},M(">> RFB.constructor"),this._screen=document.createElement("div"),this._screen.style.display="flex",this._screen.style.width="100%",this._screen.style.height="100%",this._screen.style.overflow="auto",this._screen.style.background=ra,this._canvas=document.createElement("canvas"),this._canvas.style.margin="auto",this._canvas.style.outline="none",this._canvas.width=0,this._canvas.height=0,this._canvas.tabIndex=-1,this._screen.appendChild(this._canvas),this._cursor=new Ir,this._cursorImage=Q.cursors.none,this._decoders[D.encodingRaw]=new qr,this._decoders[D.encodingCopyRect]=new $r,this._decoders[D.encodingRRE]=new Jr,this._decoders[D.encodingHextile]=new ea,this._decoders[D.encodingTight]=new sn,this._decoders[D.encodingTightPNG]=new ta,this._decoders[D.encodingZRLE]=new ia,this._decoders[D.encodingJPEG]=new sa;try{this._display=new ln(this._canvas)}catch(n){throw O("Display exception: "+n),n}this._display.onflush=this._onFlush.bind(this),this._keyboard=new Lr(this._canvas),this._keyboard.onkeyevent=this._handleKeyEvent.bind(this),this._gestures=new Pr,this._sock=new Ur,this._sock.on("open",this._socketOpen.bind(this)),this._sock.on("close",this._socketClose.bind(this)),this._sock.on("message",this._handleMessage.bind(this)),this._sock.on("error",this._socketError.bind(this)),this._expectedClientWidth=null,this._expectedClientHeight=null,this._resizeObserver=new ResizeObserver(this._eventHandlers.handleResize),this._updateConnectionState("connecting"),M("<< RFB.constructor"),this.dragViewport=!1,this.focusOnClick=!0,this._viewOnly=!1,this._clipViewport=!1,this._clippingViewport=!1,this._scaleViewport=!1,this._resizeSession=!1,this._showDotCursor=!1,s.showDotCursor!==void 0&&(se("Specifying showDotCursor as a RFB constructor argument is deprecated"),this._showDotCursor=s.showDotCursor),this._qualityLevel=6,this._compressionLevel=2}get viewOnly(){return this._viewOnly}set viewOnly(t){this._viewOnly=t,(this._rfbConnectionState==="connecting"||this._rfbConnectionState==="connected")&&(t?this._keyboard.ungrab():this._keyboard.grab())}get capabilities(){return this._capabilities}get clippingViewport(){return this._clippingViewport}_setClippingViewport(t){t!==this._clippingViewport&&(this._clippingViewport=t,this.dispatchEvent(new CustomEvent("clippingviewport",{detail:this._clippingViewport})))}get touchButton(){return 0}set touchButton(t){se("Using old API!")}get clipViewport(){return this._clipViewport}set clipViewport(t){this._clipViewport=t,this._updateClip()}get scaleViewport(){return this._scaleViewport}set scaleViewport(t){this._scaleViewport=t,t&&this._clipViewport&&this._updateClip(),this._updateScale(),!t&&this._clipViewport&&this._updateClip()}get resizeSession(){return this._resizeSession}set resizeSession(t){this._resizeSession=t,t&&this._requestRemoteResize()}get showDotCursor(){return this._showDotCursor}set showDotCursor(t){this._showDotCursor=t,this._refreshCursor()}get background(){return this._screen.style.background}set background(t){this._screen.style.background=t}get qualityLevel(){return this._qualityLevel}set qualityLevel(t){if(!Number.isInteger(t)||t<0||t>9){O("qualityLevel must be an integer between 0 and 9");return}this._qualityLevel!==t&&(this._qualityLevel=t,this._rfbConnectionState==="connected"&&this._sendEncodings())}get compressionLevel(){return this._compressionLevel}set compressionLevel(t){if(!Number.isInteger(t)||t<0||t>9){O("compressionLevel must be an integer between 0 and 9");return}this._compressionLevel!==t&&(this._compressionLevel=t,this._rfbConnectionState==="connected"&&this._sendEncodings())}disconnect(){this._updateConnectionState("disconnecting"),this._sock.off("error"),this._sock.off("message"),this._sock.off("open"),this._rfbRSAAESAuthenticationState!==null&&this._rfbRSAAESAuthenticationState.disconnect()}approveServer(){this._rfbRSAAESAuthenticationState!==null&&this._rfbRSAAESAuthenticationState.approveServer()}sendCredentials(t){this._rfbCredentials=t,this._resumeAuthentication()}sendCtrlAltDel(){this._rfbConnectionState!=="connected"||this._viewOnly||($("Sending Ctrl-Alt-Del"),this.sendKey(f.XK_Control_L,"ControlLeft",!0),this.sendKey(f.XK_Alt_L,"AltLeft",!0),this.sendKey(f.XK_Delete,"Delete",!0),this.sendKey(f.XK_Delete,"Delete",!1),this.sendKey(f.XK_Alt_L,"AltLeft",!1),this.sendKey(f.XK_Control_L,"ControlLeft",!1))}machineShutdown(){this._xvpOp(1,2)}machineReboot(){this._xvpOp(1,3)}machineReset(){this._xvpOp(1,4)}sendKey(t,e,s){if(this._rfbConnectionState!=="connected"||this._viewOnly)return;if(s===void 0){this.sendKey(t,e,!0),this.sendKey(t,e,!1);return}const n=Hr[e];if(this._qemuExtKeyEventSupported&&n)t=t||0,$("Sending key ("+(s?"down":"up")+"): keysym "+t+", scancode "+n),Q.messages.QEMUExtendedKeyEvent(this._sock,t,s,n);else{if(!t)return;$("Sending keysym ("+(s?"down":"up")+"): "+t),Q.messages.keyEvent(this._sock,t,s?1:0)}}focus(t){this._canvas.focus(t)}blur(){this._canvas.blur()}clipboardPasteFrom(t){if(!(this._rfbConnectionState!=="connected"||this._viewOnly))if(this._clipboardServerCapabilitiesFormats[he]&&this._clipboardServerCapabilitiesActions[Ue])this._clipboardText=t,Q.messages.extendedClipboardNotify(this._sock,[he]);else{let e,s,n;e=0;for(let r of t)e++;n=new Uint8Array(e),s=0;for(let r of t){let a=r.codePointAt(0);a>255&&(a=63),n[s++]=a}Q.messages.clientCutText(this._sock,n)}}getImageData(){return this._display.getImageData()}toDataURL(t,e){return this._display.toDataURL(t,e)}toBlob(t,e,s){return this._display.toBlob(t,e,s)}_connect(){if(M(">> RFB.connect"),this._url)$(`connecting to ${this._url}`),this._sock.open(this._url,this._wsProtocols);else{if($(`attaching ${this._rawChannel} to Websock`),this._sock.attach(this._rawChannel),this._sock.readyState==="closed")throw Error("Cannot use already closed WebSocket/RTCDataChannel");this._sock.readyState==="open"&&this._socketOpen()}this._target.appendChild(this._screen),this._gestures.attach(this._canvas),this._cursor.attach(this._canvas),this._refreshCursor(),this._resizeObserver.observe(this._screen),this._canvas.addEventListener("mousedown",this._eventHandlers.focusCanvas),this._canvas.addEventListener("touchstart",this._eventHandlers.focusCanvas),this._canvas.addEventListener("mousedown",this._eventHandlers.handleMouse),this._canvas.addEventListener("mouseup",this._eventHandlers.handleMouse),this._canvas.addEventListener("mousemove",this._eventHandlers.handleMouse),this._canvas.addEventListener("click",this._eventHandlers.handleMouse),this._canvas.addEventListener("contextmenu",this._eventHandlers.handleMouse),this._canvas.addEventListener("wheel",this._eventHandlers.handleWheel),this._canvas.addEventListener("gesturestart",this._eventHandlers.handleGesture),this._canvas.addEventListener("gesturemove",this._eventHandlers.handleGesture),this._canvas.addEventListener("gestureend",this._eventHandlers.handleGesture),M("<< RFB.connect")}_disconnect(){M(">> RFB.disconnect"),this._cursor.detach(),this._canvas.removeEventListener("gesturestart",this._eventHandlers.handleGesture),this._canvas.removeEventListener("gesturemove",this._eventHandlers.handleGesture),this._canvas.removeEventListener("gestureend",this._eventHandlers.handleGesture),this._canvas.removeEventListener("wheel",this._eventHandlers.handleWheel),this._canvas.removeEventListener("mousedown",this._eventHandlers.handleMouse),this._canvas.removeEventListener("mouseup",this._eventHandlers.handleMouse),this._canvas.removeEventListener("mousemove",this._eventHandlers.handleMouse),this._canvas.removeEventListener("click",this._eventHandlers.handleMouse),this._canvas.removeEventListener("contextmenu",this._eventHandlers.handleMouse),this._canvas.removeEventListener("mousedown",this._eventHandlers.focusCanvas),this._canvas.removeEventListener("touchstart",this._eventHandlers.focusCanvas),this._resizeObserver.disconnect(),this._keyboard.ungrab(),this._gestures.detach(),this._sock.close();try{this._target.removeChild(this._screen)}catch(t){if(t.name!=="NotFoundError")throw t}clearTimeout(this._resizeTimeout),clearTimeout(this._mouseMoveTimer),M("<< RFB.disconnect")}_socketOpen(){this._rfbConnectionState==="connecting"&&this._rfbInitState===""?(this._rfbInitState="ProtocolVersion",M("Starting VNC handshake")):this._fail("Unexpected server connection while "+this._rfbConnectionState)}_socketClose(t){M("WebSocket on-close event");let e="";switch(t.code&&(e="(code: "+t.code,t.reason&&(e+=", reason: "+t.reason),e+=")"),this._rfbConnectionState){case"connecting":this._fail("Connection closed "+e);break;case"connected":this._updateConnectionState("disconnecting"),this._updateConnectionState("disconnected");break;case"disconnecting":this._updateConnectionState("disconnected");break;case"disconnected":this._fail("Unexpected server disconnect when already disconnected "+e);break;default:this._fail("Unexpected server disconnect before connecting "+e);break}this._sock.off("close"),this._rawChannel=null}_socketError(t){se("WebSocket on-error event")}_focusCanvas(t){this.focusOnClick&&this.focus({preventScroll:!0})}_setDesktopName(t){this._fbName=t,this.dispatchEvent(new CustomEvent("desktopname",{detail:{name:this._fbName}}))}_saveExpectedClientSize(){this._expectedClientWidth=this._screen.clientWidth,this._expectedClientHeight=this._screen.clientHeight}_currentClientSize(){return[this._screen.clientWidth,this._screen.clientHeight]}_clientHasExpectedSize(){const[t,e]=this._currentClientSize();return t==this._expectedClientWidth&&e==this._expectedClientHeight}_handleResize(){this._clientHasExpectedSize()||(window.requestAnimationFrame(()=>{this._updateClip(),this._updateScale()}),this._resizeSession&&(clearTimeout(this._resizeTimeout),this._resizeTimeout=setTimeout(this._requestRemoteResize.bind(this),500)))}_updateClip(){const t=this._display.clipViewport;let e=this._clipViewport;if(this._scaleViewport&&(e=!1),t!==e&&(this._display.clipViewport=e),e){const s=this._screenSize();this._display.viewportChangeSize(s.w,s.h),this._fixScrollbars(),this._setClippingViewport(s.w{O("Disconnection timed out."),this._updateConnectionState("disconnected")},na*1e3);break;case"disconnected":this.dispatchEvent(new CustomEvent("disconnect",{detail:{clean:this._rfbCleanDisconnect}}));break}}_fail(t){switch(this._rfbConnectionState){case"disconnecting":O("Failed when disconnecting: "+t);break;case"connected":O("Failed while connected: "+t);break;case"connecting":O("Failed when connecting: "+t);break;default:O("RFB failure: "+t);break}return this._rfbCleanDisconnect=!1,this._updateConnectionState("disconnecting"),this._updateConnectionState("disconnected"),!1}_setCapability(t,e){this._capabilities[t]=e,this.dispatchEvent(new CustomEvent("capabilities",{detail:{capabilities:this._capabilities}}))}_handleMessage(){if(this._sock.rQlen===0){se("handleMessage called on an empty receive queue");return}switch(this._rfbConnectionState){case"disconnected":O("Got data while disconnected");break;case"connected":for(;!(this._flushing||!this._normalMsg()||this._sock.rQlen===0););break;case"connecting":for(;this._rfbConnectionState==="connecting"&&this._initMsg(););break;default:O("Got data while in an invalid state");break}}_handleKeyEvent(t,e,s){this.sendKey(t,e,s)}_handleMouse(t){if(t.type==="click"&&t.target!==this._canvas||(t.stopPropagation(),t.preventDefault(),t.type==="click"||t.type==="contextmenu"))return;let e=Le(t.clientX,t.clientY,this._canvas);switch(t.type){case"mousedown":hn(this._canvas),this._handleMouseButton(e.x,e.y,!0,1<ni||Math.abs(n)>ni)&&(this._viewportHasMoved=!0,this._viewportDragPos={x:t,y:e},this._display.viewportChangePos(s,n));return}if(this._mousePos={x:t,y:e},this._mouseMoveTimer==null){const s=Date.now()-this._mouseLastMoveTime;s>ds?(this._sendMouse(t,e,this._mouseButtonMask),this._mouseLastMoveTime=Date.now()):this._mouseMoveTimer=setTimeout(()=>{this._handleDelayedMouseMove()},ds-s)}}_handleDelayedMouseMove(){this._mouseMoveTimer=null,this._sendMouse(this._mousePos.x,this._mousePos.y,this._mouseButtonMask),this._mouseLastMoveTime=Date.now()}_sendMouse(t,e,s){this._rfbConnectionState==="connected"&&(this._viewOnly||Q.messages.pointerEvent(this._sock,this._display.absX(t),this._display.absY(e),s))}_handleWheel(t){if(this._rfbConnectionState!=="connected"||this._viewOnly)return;t.stopPropagation(),t.preventDefault();let e=Le(t.clientX,t.clientY,this._canvas),s=t.deltaX,n=t.deltaY;t.deltaMode!==0&&(s*=xs,n*=xs),this._accumulatedWheelDeltaX+=s,this._accumulatedWheelDeltaY+=n,Math.abs(this._accumulatedWheelDeltaX)>=us&&(this._accumulatedWheelDeltaX<0?(this._handleMouseButton(e.x,e.y,!0,32),this._handleMouseButton(e.x,e.y,!1,32)):this._accumulatedWheelDeltaX>0&&(this._handleMouseButton(e.x,e.y,!0,64),this._handleMouseButton(e.x,e.y,!1,64)),this._accumulatedWheelDeltaX=0),Math.abs(this._accumulatedWheelDeltaY)>=us&&(this._accumulatedWheelDeltaY<0?(this._handleMouseButton(e.x,e.y,!0,8),this._handleMouseButton(e.x,e.y,!1,8)):this._accumulatedWheelDeltaY>0&&(this._handleMouseButton(e.x,e.y,!0,16),this._handleMouseButton(e.x,e.y,!1,16)),this._accumulatedWheelDeltaY=0)}_fakeMouseMove(t,e,s){this._handleMouseMove(e,s),this._cursor.move(t.detail.clientX,t.detail.clientY)}_handleTapEvent(t,e){let s=Le(t.detail.clientX,t.detail.clientY,this._canvas);if(this._gestureLastTapTime!==null&&Date.now()-this._gestureLastTapTimede;)this._handleMouseButton(s.x,s.y,!0,8),this._handleMouseButton(s.x,s.y,!1,8),this._gestureLastMagnitudeY+=de;for(;t.detail.magnitudeY-this._gestureLastMagnitudeY<-de;)this._handleMouseButton(s.x,s.y,!0,16),this._handleMouseButton(s.x,s.y,!1,16),this._gestureLastMagnitudeY-=de;for(;t.detail.magnitudeX-this._gestureLastMagnitudeX>de;)this._handleMouseButton(s.x,s.y,!0,32),this._handleMouseButton(s.x,s.y,!1,32),this._gestureLastMagnitudeX+=de;for(;t.detail.magnitudeX-this._gestureLastMagnitudeX<-de;)this._handleMouseButton(s.x,s.y,!0,64),this._handleMouseButton(s.x,s.y,!1,64),this._gestureLastMagnitudeX-=de;break;case"pinch":if(this._fakeMouseMove(t,s.x,s.y),e=Math.hypot(t.detail.magnitudeX,t.detail.magnitudeY),Math.abs(e-this._gestureLastMagnitudeX)>Be){for(this._handleKeyEvent(f.XK_Control_L,"ControlLeft",!0);e-this._gestureLastMagnitudeX>Be;)this._handleMouseButton(s.x,s.y,!0,8),this._handleMouseButton(s.x,s.y,!1,8),this._gestureLastMagnitudeX+=Be;for(;e-this._gestureLastMagnitudeX<-Be;)this._handleMouseButton(s.x,s.y,!0,16),this._handleMouseButton(s.x,s.y,!1,16),this._gestureLastMagnitudeX-=Be}this._handleKeyEvent(f.XK_Control_L,"ControlLeft",!1);break}break;case"gestureend":switch(t.detail.type){case"onetap":case"twotap":case"threetap":case"pinch":case"twodrag":break;case"drag":this._fakeMouseMove(t,s.x,s.y),this._handleMouseButton(s.x,s.y,!1,1);break;case"longpress":this._fakeMouseMove(t,s.x,s.y),this._handleMouseButton(s.x,s.y,!1,4);break}break}}_negotiateProtocolVersion(){if(this._sock.rQwait("version",12))return!1;const t=this._sock.rQshiftStr(12).substr(4,7);$("Server ProtocolVersion: "+t);let e=0;switch(t){case"000.000":e=1;break;case"003.003":case"003.006":this._rfbVersion=3.3;break;case"003.007":this._rfbVersion=3.7;break;case"003.008":case"003.889":case"004.000":case"004.001":case"005.000":this._rfbVersion=3.8;break;default:return this._fail("Invalid server version "+t)}if(e){let n="ID:"+this._repeaterID;for(;n.length<250;)n+="\0";return this._sock.sendString(n),!0}this._rfbVersion>this._rfbMaxVersion&&(this._rfbVersion=this._rfbMaxVersion);const s="00"+parseInt(this._rfbVersion,10)+".00"+this._rfbVersion*10%10;this._sock.sendString("RFB "+s+` `),M("Sent ProtocolVersion: "+s),this._rfbInitState="Security"}_isSupportedSecurityType(t){return[ps,_t,gs,bs,Vt,ws,vs,ms,ks].includes(t)}_negotiateSecurity(){if(this._rfbVersion>=3.7){const t=this._sock.rQshift8();if(this._sock.rQwait("security type",t,1))return!1;if(t===0)return this._rfbInitState="SecurityReason",this._securityContext="no security types",this._securityStatus=1,!0;const e=this._sock.rQshiftBytes(t);M("Server security types: "+e),this._rfbAuthScheme=-1;for(let s of e)if(this._isSupportedSecurityType(s)){this._rfbAuthScheme=s;break}if(this._rfbAuthScheme===-1)return this._fail("Unsupported security types (types: "+e+")");this._sock.send([this._rfbAuthScheme])}else{if(this._sock.rQwait("security scheme",4))return!1;if(this._rfbAuthScheme=this._sock.rQshift32(),this._rfbAuthScheme==0)return this._rfbInitState="SecurityReason",this._securityContext="authentication scheme",this._securityStatus=1,!0}return this._rfbInitState="Authentication",M("Authenticating using scheme: "+this._rfbAuthScheme),!0}_handleSecurityReason(){if(this._sock.rQwait("reason length",4))return!1;const t=this._sock.rQshift32();let e="";if(t>0){if(this._sock.rQwait("reason",t,4))return!1;e=this._sock.rQshiftStr(t)}return e!==""?(this.dispatchEvent(new CustomEvent("securityfailure",{detail:{status:this._securityStatus,reason:e}})),this._fail("Security negotiation failed on "+this._securityContext+" (reason: "+e+")")):(this.dispatchEvent(new CustomEvent("securityfailure",{detail:{status:this._securityStatus}})),this._fail("Security negotiation failed on "+this._securityContext))}_negotiateXvpAuth(){if(this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0||this._rfbCredentials.target===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password","target"]}})),!1;const t=String.fromCharCode(this._rfbCredentials.username.length)+String.fromCharCode(this._rfbCredentials.target.length)+this._rfbCredentials.username+this._rfbCredentials.target;return this._sock.sendString(t),this._rfbAuthScheme=_t,this._negotiateAuthentication()}_negotiateVeNCryptAuth(){if(this._rfbVeNCryptState==0){if(this._sock.rQwait("vencrypt version",2))return!1;const t=this._sock.rQshift8(),e=this._sock.rQshift8();if(!(t==0&&e==2))return this._fail("Unsupported VeNCrypt version "+t+"."+e);this._sock.send([0,2]),this._rfbVeNCryptState=1}if(this._rfbVeNCryptState==1){if(this._sock.rQwait("vencrypt ack",1))return!1;const t=this._sock.rQshift8();if(t!=0)return this._fail("VeNCrypt failure "+t);this._rfbVeNCryptState=2}if(this._rfbVeNCryptState==2){if(this._sock.rQwait("vencrypt subtypes length",1))return!1;const t=this._sock.rQshift8();if(t<1)return this._fail("VeNCrypt subtypes empty");this._rfbVeNCryptSubtypesLength=t,this._rfbVeNCryptState=3}if(this._rfbVeNCryptState==3){if(this._sock.rQwait("vencrypt subtypes",4*this._rfbVeNCryptSubtypesLength))return!1;const t=[];for(let e=0;e>24,this._rfbAuthScheme>>16,this._rfbAuthScheme>>8,this._rfbAuthScheme]),this._rfbVeNCryptState==4,!0)}}_negotiatePlainAuth(){if(this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}})),!1;const t=ce(this._rfbCredentials.username),e=ce(this._rfbCredentials.password);return this._sock.send([t.length>>24&255,t.length>>16&255,t.length>>8&255,t.length&255]),this._sock.send([e.length>>24&255,e.length>>16&255,e.length>>8&255,e.length&255]),this._sock.sendString(t),this._sock.sendString(e),this._rfbInitState="SecurityResult",!0}_negotiateStdVNCAuth(){if(this._sock.rQwait("auth challenge",16))return!1;if(this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["password"]}})),!1;const t=Array.prototype.slice.call(this._sock.rQshiftBytes(16)),e=Q.genDES(this._rfbCredentials.password,t);return this._sock.send(e),this._rfbInitState="SecurityResult",!0}_negotiateARDAuth(){if(this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}})),!1;if(this._rfbCredentials.ardPublicKey!=null&&this._rfbCredentials.ardCredentials!=null)return this._sock.send(this._rfbCredentials.ardCredentials),this._sock.send(this._rfbCredentials.ardPublicKey),this._rfbCredentials.ardCredentials=null,this._rfbCredentials.ardPublicKey=null,this._rfbInitState="SecurityResult",!0;if(this._sock.rQwait("read ard",4))return!1;let t=this._sock.rQshiftBytes(2),e=this._sock.rQshift16();if(this._sock.rQwait("read ard keylength",e*2,4))return!1;let s=this._sock.rQshiftBytes(e),n=this._sock.rQshiftBytes(e),r=window.crypto.getRandomValues(new Uint8Array(e)),a=Array.from(window.crypto.getRandomValues(new Uint8Array(64)),h=>String.fromCharCode(65+h%26)).join("");return this._negotiateARDAuthAsync(t,e,s,n,r,a),!1}_modPow(t,e,s){let n="0x"+Array.from(t,d=>("0"+(d&255).toString(16)).slice(-2)).join(""),r="0x"+Array.from(e,d=>("0"+(d&255).toString(16)).slice(-2)).join(""),a="0x"+Array.from(s,d=>("0"+(d&255).toString(16)).slice(-2)).join(""),h=BigInt(n),c=BigInt(r),o=BigInt(a),l=1n;for(h=h%o;c>0;)c%2n===1n&&(l=l*h%o),c=c/2n,h=h*h%o;let u=l.toString(16);for(;u.length/2String.fromCharCode(h)).join(""),n=await window.crypto.subtle.importKey("raw",Vr(s),{name:"AES-CBC"},!1,["encrypt"]),r=new Uint8Array(t.length);for(let h=0;h0&&this._sock.rQwait("tunnel capabilities",16*n,4))return!1;if(this._rfbTightVNC=!0,n>0)return this._negotiateTightTunnels(n),!1}if(this._sock.rQwait("sub auth count",4))return!1;const t=this._sock.rQshift32();if(t===0)return this._rfbInitState="SecurityResult",!0;if(this._sock.rQwait("sub auth capabilities",16*t,4))return!1;const e={STDVNOAUTH__:1,STDVVNCAUTH_:2,TGHTULGNAUTH:129},s=[];for(let n=0;nthis._rfbCredentials),this._rfbRSAAESAuthenticationState.addEventListener("serververification",this._eventHandlers.handleRSAAESServerVerification),this._rfbRSAAESAuthenticationState.addEventListener("credentialsrequired",this._eventHandlers.handleRSAAESCredentialsRequired)),this._rfbRSAAESAuthenticationState.checkInternalEvents(),this._rfbRSAAESAuthenticationState.hasStarted||this._rfbRSAAESAuthenticationState.negotiateRA2neAuthAsync().catch(t=>{t.message!=="disconnect normally"&&this._fail(t.message)}).then(()=>(this.dispatchEvent(new CustomEvent("securityresult")),this._rfbInitState="SecurityResult",!0)).finally(()=>{this._rfbRSAAESAuthenticationState.removeEventListener("serververification",this._eventHandlers.handleRSAAESServerVerification),this._rfbRSAAESAuthenticationState.removeEventListener("credentialsrequired",this._eventHandlers.handleRSAAESCredentialsRequired),this._rfbRSAAESAuthenticationState=null}),!1}_negotiateMSLogonIIAuth(){if(this._sock.rQwait("mslogonii dh param",24))return!1;if(this._rfbCredentials.username===void 0||this._rfbCredentials.password===void 0)return this.dispatchEvent(new CustomEvent("credentialsrequired",{detail:{types:["username","password"]}})),!1;const t=this._sock.rQshiftBytes(8),e=this._sock.rQshiftBytes(8),s=this._sock.rQshiftBytes(8),n=window.crypto.getRandomValues(new Uint8Array(8)),r=new Uint8Array(this._modPow(t,n,e)),a=new Uint8Array(this._modPow(s,n,e)),h=new cs(a),c=ce(this._rfbCredentials.username).substring(0,255),o=ce(this._rfbCredentials.password).substring(0,63),l=new Uint8Array(256),u=new Uint8Array(64);window.crypto.getRandomValues(l),window.crypto.getRandomValues(u);for(let d=0;d=3.8?(this._rfbInitState="SecurityReason",this._securityContext="security result",this._securityStatus=t,!0):(this.dispatchEvent(new CustomEvent("securityfailure",{detail:{status:t}})),this._fail("Security handshake failed"))}_negotiateServerInit(){if(this._sock.rQwait("server initialization",24))return!1;const t=this._sock.rQshift16(),e=this._sock.rQshift16(),s=this._sock.rQshift8(),n=this._sock.rQshift8(),r=this._sock.rQshift8(),a=this._sock.rQshift8(),h=this._sock.rQshift16(),c=this._sock.rQshift16(),o=this._sock.rQshift16(),l=this._sock.rQshift8(),u=this._sock.rQshift8(),x=this._sock.rQshift8();this._sock.rQskipBytes(3);const d=this._sock.rQshift32();if(this._sock.rQwait("server init name",d,24))return!1;let k=this._sock.rQshiftStr(d);if(k=St(k,!0),this._rfbTightVNC){if(this._sock.rQwait("TightVNC extended server init header",8,24+d))return!1;const C=this._sock.rQshift16(),A=this._sock.rQshift16(),K=this._sock.rQshift16();this._sock.rQskipBytes(2);const T=(C+A+K)*16;if(this._sock.rQwait("TightVNC extended server init header",T,32+d))return!1;this._sock.rQskipBytes(16*C),this._sock.rQskipBytes(16*A),this._sock.rQskipBytes(16*K)}return $("Screen: "+t+"x"+e+", bpp: "+s+", depth: "+n+", bigEndian: "+r+", trueColor: "+a+", redMax: "+h+", greenMax: "+c+", blueMax: "+o+", redShift: "+l+", greenShift: "+u+", blueShift: "+x),this._setDesktopName(k),this._resize(t,e),this._viewOnly||this._keyboard.grab(),this._fbDepth=24,this._fbName==="Intel(r) AMT KVM"&&(se("Intel AMT KVM only supports 8/16 bit depths. Using low color mode."),this._fbDepth=8),Q.messages.pixelFormat(this._sock,this._fbDepth,!0),this._sendEncodings(),Q.messages.fbUpdateRequest(this._sock,!1,0,0,this._fbWidth,this._fbHeight),this._updateConnectionState("connected"),!0}_sendEncodings(){const t=[];t.push(D.encodingCopyRect),this._fbDepth==24&&(t.push(D.encodingTight),t.push(D.encodingTightPNG),t.push(D.encodingZRLE),t.push(D.encodingJPEG),t.push(D.encodingHextile),t.push(D.encodingRRE)),t.push(D.encodingRaw),t.push(D.pseudoEncodingQualityLevel0+this._qualityLevel),t.push(D.pseudoEncodingCompressLevel0+this._compressionLevel),t.push(D.pseudoEncodingDesktopSize),t.push(D.pseudoEncodingLastRect),t.push(D.pseudoEncodingQEMUExtendedKeyEvent),t.push(D.pseudoEncodingExtendedDesktopSize),t.push(D.pseudoEncodingXvp),t.push(D.pseudoEncodingFence),t.push(D.pseudoEncodingContinuousUpdates),t.push(D.pseudoEncodingDesktopName),t.push(D.pseudoEncodingExtendedClipboard),this._fbDepth==24&&(t.push(D.pseudoEncodingVMwareCursor),t.push(D.pseudoEncodingCursor)),Q.messages.clientEncodings(this._sock,t)}_initMsg(){switch(this._rfbInitState){case"ProtocolVersion":return this._negotiateProtocolVersion();case"Security":return this._negotiateSecurity();case"Authentication":return this._negotiateAuthentication();case"SecurityResult":return this._handleSecurityResult();case"SecurityReason":return this._handleSecurityReason();case"ClientInitialisation":return this._sock.send([this._shared?1:0]),this._rfbInitState="ServerInitialisation",!0;case"ServerInitialisation":return this._negotiateServerInit();default:return this._fail("Unknown init state (state: "+this._rfbInitState+")")}}_resumeAuthentication(){setTimeout(this._initMsg.bind(this),0)}_handleSetColourMapMsg(){return M("SetColorMapEntries"),this._fail("Unexpected SetColorMapEntries message")}_handleServerCutText(){if(M("ServerCutText"),this._sock.rQwait("ServerCutText header",7,1))return!1;this._sock.rQskipBytes(3);let t=this._sock.rQshift32();if(t=Gt(t),this._sock.rQwait("ServerCutText content",Math.abs(t),8))return!1;if(t>=0){const e=this._sock.rQshiftStr(t);if(this._viewOnly)return!0;this.dispatchEvent(new CustomEvent("clipboard",{detail:{text:e}}))}else{t=Math.abs(t);const e=this._sock.rQshift32();let s=e&65535,n=e&4278190080;if(!!(n&Ss)){this._clipboardServerCapabilitiesFormats={},this._clipboardServerCapabilitiesActions={};for(let h=0;h<=15;h++){let c=1<0&&c.charAt(c.length-1)==="\0"&&(c=c.slice(0,-1)),c=c.replace(`\r `,` `),this.dispatchEvent(new CustomEvent("clipboard",{detail:{text:c}}))}}else return this._fail("Unexpected action in extended clipboard message: "+n)}return!0}_handleServerFenceMsg(){if(this._sock.rQwait("ServerFence header",8,1))return!1;this._sock.rQskipBytes(3);let t=this._sock.rQshift32(),e=this._sock.rQshift8();if(this._sock.rQwait("ServerFence payload",e,9))return!1;e>64&&(se("Bad payload length ("+e+") in fence response"),e=64);const s=this._sock.rQshiftStr(e);return this._supportsFence=!0,t&1<<31?(t&=3,Q.messages.clientFence(this._sock,t,s),!0):this._fail("Unexpected fence response")}_handleXvpMsg(){if(this._sock.rQwait("XVP version and message",3,1))return!1;this._sock.rQskipBytes(1);const t=this._sock.rQshift8(),e=this._sock.rQshift8();switch(e){case 0:O("XVP Operation Failed");break;case 1:this._rfbXvpVer=t,$("XVP extensions enabled (version "+this._rfbXvpVer+")"),this._setCapability("power",!0);break;default:this._fail("Illegal server XVP message (msg: "+e+")");break}return!0}_normalMsg(){let t;this._FBU.rects>0?t=0:t=this._sock.rQshift8();let e,s;switch(t){case 0:return s=this._framebufferUpdate(),s&&!this._enabledContinuousUpdates&&Q.messages.fbUpdateRequest(this._sock,!0,0,0,this._fbWidth,this._fbHeight),s;case 1:return this._handleSetColourMapMsg();case 2:return M("Bell"),this.dispatchEvent(new CustomEvent("bell",{detail:{}})),!0;case 3:return this._handleServerCutText();case 150:return e=!this._supportsContinuousUpdates,this._supportsContinuousUpdates=!0,this._enabledContinuousUpdates=!1,e&&(this._enabledContinuousUpdates=!0,this._updateContinuousUpdates(),$("Enabling continuous updates.")),!0;case 248:return this._handleServerFenceMsg();case 250:return this._handleXvpMsg();default:return this._fail("Unexpected server message (type "+t+")"),M("sock.rQslice(0, 30): "+this._sock.rQslice(0,30)),!0}}_onFlush(){this._flushing=!1,this._sock.rQlen>0&&this._handleMessage()}_framebufferUpdate(){if(this._FBU.rects===0){if(this._sock.rQwait("FBU header",3,1))return!1;if(this._sock.rQskipBytes(1),this._FBU.rects=this._sock.rQshift16(),this._display.pending())return this._flushing=!0,this._display.flush(),!1}for(;this._FBU.rects>0;){if(this._FBU.encoding===null){if(this._sock.rQwait("rect header",12))return!1;const t=this._sock.rQshiftBytes(12);this._FBU.x=(t[0]<<8)+t[1],this._FBU.y=(t[2]<<8)+t[3],this._FBU.width=(t[4]<<8)+t[5],this._FBU.height=(t[6]<<8)+t[7],this._FBU.encoding=parseInt((t[8]<<24)+(t[9]<<16)+(t[10]<<8)+t[11],10)}if(!this._handleRect())return!1;this._FBU.rects--,this._FBU.encoding=null}return this._display.flip(),!0}_handleRect(){switch(this._FBU.encoding){case D.pseudoEncodingLastRect:return this._FBU.rects=1,!0;case D.pseudoEncodingVMwareCursor:return this._handleVMwareCursor();case D.pseudoEncodingCursor:return this._handleCursor();case D.pseudoEncodingQEMUExtendedKeyEvent:return this._qemuExtKeyEventSupported=!0,!0;case D.pseudoEncodingDesktopName:return this._handleDesktopName();case D.pseudoEncodingDesktopSize:return this._resize(this._FBU.width,this._FBU.height),!0;case D.pseudoEncodingExtendedDesktopSize:return this._handleExtendedDesktopSize();default:return this._handleDataRect()}}_handleVMwareCursor(){const t=this._FBU.x,e=this._FBU.y,s=this._FBU.width,n=this._FBU.height;if(this._sock.rQwait("VMware cursor encoding",1))return!1;const r=this._sock.rQshift8();this._sock.rQshift8();let a;const h=4;if(r==0){if(a=new Array(s*n*h),this._sock.rQwait("VMware cursor classic encoding",s*n*h*2,2))return!1;let o=new Array(s*n);for(let u=0;u>8&255,k=x>>16&255,C=x>>24&255;a[u*h]=d,a[u*h+1]=k,a[u*h+2]=C,a[u*h+3]=255}else(o[u]&-256)==-256?l[u]==0?(a[u*h]=0,a[u*h+1]=0,a[u*h+2]=0,a[u*h+3]=0):(l[u]&-256,a[u*h]=0,a[u*h+1]=0,a[u*h+2]=0,a[u*h+3]=255):(a[u*h]=0,a[u*h+1]=0,a[u*h+2]=0,a[u*h+3]=255)}else if(r==1){if(this._sock.rQwait("VMware cursor alpha encoding",s*n*4,2))return!1;a=new Array(s*n*h);for(let c=0;c>24&255,a[c*4+1]=o>>16&255,a[c*4+2]=o>>8&255,a[c*4+3]=o&255}}else return se("The given cursor type is not supported: "+r+" given."),!1;return this._updateCursor(a,t,e,s,n),!0}_handleCursor(){const t=this._FBU.x,e=this._FBU.y,s=this._FBU.width,n=this._FBU.height,r=s*n*4,a=Math.ceil(s/8)*n;let h=r+a;if(this._sock.rQwait("cursor encoding",h))return!1;const c=this._sock.rQshiftBytes(r),o=this._sock.rQshiftBytes(a);let l=new Uint8Array(s*n*4),u=0;for(let x=0;xn.charCodeAt(0));return new cs(s).encrypt(e)}}Q.messages={keyEvent(i,t,e){const s=i._sQ,n=i._sQlen;s[n]=4,s[n+1]=e,s[n+2]=0,s[n+3]=0,s[n+4]=t>>24,s[n+5]=t>>16,s[n+6]=t>>8,s[n+7]=t,i._sQlen+=8,i.flush()},QEMUExtendedKeyEvent(i,t,e,s){function n(c){const o=s>>8,l=s&255;return o===224&&l<127?l|128:c}const r=i._sQ,a=i._sQlen;r[a]=255,r[a+1]=0,r[a+2]=e>>8,r[a+3]=e,r[a+4]=t>>24,r[a+5]=t>>16,r[a+6]=t>>8,r[a+7]=t;const h=n(s);r[a+8]=h>>24,r[a+9]=h>>16,r[a+10]=h>>8,r[a+11]=h,i._sQlen+=12,i.flush()},pointerEvent(i,t,e,s){const n=i._sQ,r=i._sQlen;n[r]=5,n[r+1]=s,n[r+2]=t>>8,n[r+3]=t,n[r+4]=e>>8,n[r+5]=e,i._sQlen+=6,i.flush()},_buildExtendedClipboardFlags(i,t){let e=new Uint8Array(4),s=0,n=0;for(let r=0;r>24,e[1]=0,e[2]=0,e[3]=s,e},extendedClipboardProvide(i,t,e){let s=new Kr,n=[];for(let h=0;h>24&255,c.length>>16&255,c.length>>8&255,c.length&255);for(let o=0;oparseInt(a)),s.sort((a,h)=>a-h),n.set(Q.messages._buildExtendedClipboardFlags(t,[]));let r=4;for(let a=0;a>24,n[r+1]=e[s[a]]>>16,n[r+2]=e[s[a]]>>8,n[r+3]=e[s[a]]>>0,r+=4,n[3]|=1<>24,s[n+5]=r>>16,s[n+6]=r>>8,s[n+7]=r,i._sQlen+=8;let a=0,h=t.length;for(;h>0;){let c=Math.min(h,i._sQbufferSize-i._sQlen);for(let o=0;o>8,r[a+3]=t,r[a+4]=e>>8,r[a+5]=e,r[a+6]=1,r[a+7]=0,r[a+8]=s>>24,r[a+9]=s>>16,r[a+10]=s>>8,r[a+11]=s,r[a+12]=0,r[a+13]=0,r[a+14]=0,r[a+15]=0,r[a+16]=t>>8,r[a+17]=t,r[a+18]=e>>8,r[a+19]=e,r[a+20]=n>>24,r[a+21]=n>>16,r[a+22]=n>>8,r[a+23]=n,i._sQlen+=24,i.flush()},clientFence(i,t,e){const s=i._sQ,n=i._sQlen;s[n]=248,s[n+1]=0,s[n+2]=0,s[n+3]=0,s[n+4]=t>>24,s[n+5]=t>>16,s[n+6]=t>>8,s[n+7]=t;const r=e.length;s[n+8]=r;for(let a=0;a>8,a[h+3]=e,a[h+4]=s>>8,a[h+5]=s,a[h+6]=n>>8,a[h+7]=n,a[h+8]=r>>8,a[h+9]=r,i._sQlen+=10,i.flush()},pixelFormat(i,t,e){const s=i._sQ,n=i._sQlen;let r;t>16?r=32:t>8?r=16:r=8;const a=Math.floor(t/3);s[n]=0,s[n+1]=0,s[n+2]=0,s[n+3]=0,s[n+4]=r,s[n+5]=t,s[n+6]=0,s[n+7]=e?1:0,s[n+8]=0,s[n+9]=(1<>8,e[s+3]=t.length;let n=s+4;for(let r=0;r>24,e[n+1]=a>>16,e[n+2]=a>>8,e[n+3]=a,n+=4}i._sQlen+=n-s,i.flush()},fbUpdateRequest(i,t,e,s,n,r){const a=i._sQ,h=i._sQlen;typeof e>"u"&&(e=0),typeof s>"u"&&(s=0),a[h]=3,a[h+1]=t?1:0,a[h+2]=e>>8&255,a[h+3]=e&255,a[h+4]=s>>8&255,a[h+5]=s&255,a[h+6]=n>>8&255,a[h+7]=n&255,a[h+8]=r>>8&255,a[h+9]=r&255,i._sQlen+=10,i.flush()},xvpOp(i,t,e){const s=i._sQ,n=i._sQlen;s[n]=250,s[n+1]=0,s[n+2]=t,s[n+3]=e,i._sQlen+=4,i.flush()}};Q.cursors={none:{rgbaPixels:new Uint8Array,w:0,h:0,hotx:0,hoty:0},dot:{rgbaPixels:new Uint8Array([255,255,255,255,0,0,0,255,255,255,255,255,0,0,0,255,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,255,255,255,255,255]),w:3,h:3,hotx:1,hoty:1}};export{Q as default};