From a2e8873020062481ed3e166a2ed679bbff41d4f3 Mon Sep 17 00:00:00 2001 From: ienaga Date: Wed, 11 Feb 2026 09:50:47 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E3=81=AEPlayer?= =?UTF-8?q?=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/assets/js/next2d.js | 2365 +++++++++++++++++++++++++++++++++- docs/assets/js/sample.json | 2 +- public/assets/js/next2d.js | 2365 +++++++++++++++++++++++++++++++++- public/assets/js/sample.json | 2 +- 4 files changed, 4730 insertions(+), 4 deletions(-) diff --git a/docs/assets/js/next2d.js b/docs/assets/js/next2d.js index 3a3a3de6..72cdca9d 100644 --- a/docs/assets/js/next2d.js +++ b/docs/assets/js/next2d.js @@ -1 +1,2364 @@ -(()=>{"use strict";let t=0;const e=()=>t++;let i=0,s=null;const r=(t=null)=>{s=t};let n="";const a=()=>n,h=t=>{n=t};let o=null;const l=()=>o,c=(t=null)=>{o=t};let _=1;const $=()=>_,u=window,d=u.document;class g{constructor(t="",e=""){this._$name=`${t}`,this._$value=`${e}`}static toString(){return"[class URLRequestHeader]"}static get namespace(){return"next2d.net.URLRequestHeader"}toString(){return"[object URLRequestHeader]"}get namespace(){return"next2d.net.URLRequestHeader"}get name(){return this._$name}get value(){return this._$value}}let f=1,p=0,m=!1;const x=(t=!0)=>{m=t},b=1/0,v=Math,T=Array,y=Map,E=Number,A=Float32Array,M=Int32Array,w=Int16Array,S=OffscreenCanvas,C=isNaN,I=requestAnimationFrame,F=cancelAnimationFrame,R=performance,B=setTimeout,L=clearTimeout,P=new A([1,0,0,1,0,0]),k=new A([1,1,1,1,0,0,0,0]),N=-32768,O=32767,D=v.PI/180,U=180/v.PI,V=[],G=[],z=[],X=[],q=[],Y=[],H=[],j=[],W=[],K=new S(1,1).getContext("2d"),Q=(t=0,e=0,i=0,s=0)=>{const r=W.pop()||{xMin:0,xMax:0,yMin:0,yMax:0};return r.xMin=t,r.xMax=e,r.yMin=i,r.yMax=s,r},J=t=>{W.push(t)},Z=(t=0,e=0,i=0,s=0)=>{const r=z.pop()||new A(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},tt=t=>{z.push(t)},et=(t=0,e=0,i=0,s=0)=>{const r=G.pop()||new M(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},it=(t=0,e=0,i=0,s=0,r=0,n=0)=>{const a=X.pop()||new A(6);return a[0]=t,a[1]=e,a[2]=i,a[3]=s,a[4]=r,a[5]=n,a},st=t=>{X.push(t)},rt=(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0)=>{const o=q.pop()||new A(8);return o[0]=t,o[1]=e,o[2]=i,o[3]=s,o[4]=r,o[5]=n,o[6]=a,o[7]=h,o},nt=t=>{q.push(t)},at=(t=0,e=0,i=0,s=0,r=0,n=0,a=0,h=0,o=0)=>{const l=Y.pop()||new A(9);return l[0]=t,l[1]=e,l[2]=i,l[3]=s,l[4]=r,l[5]=n,l[6]=a,l[7]=h,l[8]=o,l},ht=(...t)=>{const e=H.pop()||[];return t.length&&e.push(...t),e},ot=(t=null)=>{t&&(t.length&&(t.length=0),H.push(t))},lt=t=>{t.size&&t.clear(),j.push(t)},ct=()=>j.pop()||new y,_t=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t),$t=t=>{const e=-819.2*t[0]-819.2*t[2]+t[4],i=819.2*t[0]-819.2*t[2]+t[4],s=-819.2*t[0]+819.2*t[2]+t[4],r=-819.2*t[1]-819.2*t[3]+t[5],n=819.2*t[1]-819.2*t[3]+t[5];let a=s-e,h=-819.2*t[1]+819.2*t[3]+t[5]-r;const o=v.sqrt(a*a+h*h);o?(a/=o,h/=o):(a=0,h=0);const l=(i-e)*a+(n-r)*h;return Z(e+l*a,r+l*h,i,n)},ut=t=>{const e=1/(t[0]*t[4]-t[3]*t[1]),i=t[3]*t[7]-t[4]*t[6],s=t[1]*t[6]-t[0]*t[7];return at(t[4]*e,0-t[1]*e,0,0-t[3]*e,t[0]*e,0,i*e,s*e,1)},dt=(t,e,i,s=null)=>{const r=+t;return C(r)&&null!==s?s:v.min(v.max(e,C(r)?0:r),i)},gt=(t,e)=>it(t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],t[0]*e[4]+t[2]*e[5]+t[4],t[1]*e[4]+t[3]*e[5]+t[5]),ft=(t,e)=>rt(t[0]*e[0],t[1]*e[1],t[2]*e[2],t[3]*e[3],t[0]*e[4]+t[4],t[1]*e[5]+t[5],t[2]*e[6]+t[6],t[3]*e[7]+t[7]),pt=(t,e)=>{const i=t.xMax*e[0]+t.yMax*e[2]+e[4],s=t.xMax*e[0]+t.yMin*e[2]+e[4],r=t.xMin*e[0]+t.yMax*e[2]+e[4],n=t.xMin*e[0]+t.yMin*e[2]+e[4],a=t.xMax*e[1]+t.yMax*e[3]+e[5],h=t.xMax*e[1]+t.yMin*e[3]+e[5],o=t.xMin*e[1]+t.yMax*e[3]+e[5],l=t.xMin*e[1]+t.yMin*e[3]+e[5],c=v.min(E.MAX_VALUE,i,s,r,n),_=v.max(0-E.MAX_VALUE,i,s,r,n),$=v.min(E.MAX_VALUE,a,h,o,l),u=v.max(0-E.MAX_VALUE,a,h,o,l);return Q(c,_,$,u)},mt=t=>{if(!K)return 0;K.fillStyle=t;const e=+`0x${K.fillStyle.slice(1)}`;return K.fillStyle="rgba(0, 0, 0, 1)",e},xt=t=>C(+t)?mt(`${t}`):+t,bt=t=>({A:t>>>24,R:(16711680&t)>>16,G:(65280&t)>>8,B:255&t}),vt=(t,e,i)=>(t>>16)*(i?e:1)/255,Tt=(t,e,i)=>(t>>8&255)*(i?e:1)/255,yt=(t,e,i)=>(255&t)*(i?e:1)/255,Et=(t,e=1)=>({R:(16711680&t)>>16,G:(65280&t)>>8,B:255&t,A:255*e}),At=(t,e,i=!1,s=!1)=>{let r="";return i&&(r="italic "),s&&(r+="bold "),`${r}${e}px '${t}','sans-serif'`},Mt=t=>{t.color&&nt(t.color),t.isLayer=!1,t.isUpdated=null,t.canApply=null,t.matrix=null,t.color=null,t.filters=null,t.blendMode="normal",t.sw=0,t.sh=0,V.push(t)};new Map([[1,"normal"],[2,"layer"],[3,"multiply"],[4,"screen"],[5,"lighten"],[6,"darken"],[7,"difference"],[8,"add"],[9,"subtract"],[10,"invert"],[11,"alpha"],[12,"erase"],[13,"overlay"],[14,"hardlight"]]);const wt=new class{constructor(){this._$pool=[],this._$store=new Map,this._$timerMap=new Map,this._$context=null}set context(t){this._$context=t}reset(){for(const t of this._$store.values()){for(const e of t.values())this.destroy(e);lt(t)}this._$store.clear(),this._$context&&this._$context.frameBuffer.clearCache()}destroy(t=null){if(t&&"object"==typeof t)if(t instanceof WebGLTexture)I((()=>{this._$context&&this._$context.frameBuffer.releaseTexture(t)}));else{if("canvas"in t&&t instanceof CanvasRenderingContext2D){const e=t.canvas,i=e.width,s=e.height;t.clearRect(0,0,i+1,s+1),e.width=e.height=1,this._$pool.push(e)}this._$context&&"index"in t&&this._$context.frameBuffer.textureManager.releasePosition(t)}}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(t,e){if(!this._$store.has(t))return;const i=this._$store.get(t);i.has(e)&&(i.delete(e),i.size||(lt(i),this._$store.delete(t)))}stopTimer(t){t=`${t}`,this._$timerMap.has(t)&&(L(this._$timerMap.get(t)),this._$timerMap.delete(t))}removeCache(t){if(t=`${t}`,this._$store.has(t)){const e=this._$store.get(t);for(const t of e.values())this.destroy(t);e.clear(),lt(e),this._$store.delete(t)}this._$timerMap.delete(t)}setRemoveTimer(t){if(t=`${t}`,this.stopTimer(t),this._$store.has(t)){const e=B((()=>{this.removeCache(t)}),5e3);this._$timerMap.set(t,e)}}get(t){const e=`${t[0]}`,i=`${t[1]}`;if(this._$store.has(e)){this.stopTimer(e);const t=this._$store.get(e);if(t.has(i))return t.get(i)}return null}set(t,e=null){const i=`${t[0]}`,s=`${t[1]}`;this._$store.has(i)||this._$store.set(i,ct());const r=this._$store.get(i);if(null===e){if(!r.has(s))return;return this.destroy(r.get(s)),r.delete(s),void(r.size||(lt(r),this._$store.delete(i)))}r.set(s,e)}has(t){const e=`${t[0]}`;return!!this._$store.has(e)&&this._$store.get(e).has(`${t[1]}`)}generateKeys(t,e=null,i=null){let s="";e&&e.length&&(s+=`${e[0]}_${e[1]}`),i&&i.length&&(s+=0===i[7]?"":`_${i[7]}`);const r=ht();if(s){let t=0;const e=s.length;for(let i=0;i1&&n.sort((function(t,e){switch(!0){case t.priority>e.priority:return-1;case t.priority1&&r.sort((function(t,e){switch(!0){case t.priority>e.priority:return-1;case t.priority1&&n.sort((function(t,e){switch(!0){case t.priority>e.priority:return-1;case t.priority{if(e in t)return t[e];const i=l();return i&&e in i?i[e]:void 0}})}static toString(){return"[class MouseEvent]"}static get namespace(){return"next2d.events.MouseEvent"}toString(){return this.formatToString("MouseEvent","type","bubbles","cancelable","eventPhase","localX","localY","stageX","stageY","ctrlKey","altKey","shiftKey","buttonDown","delta","commandKey","controlKey","clickCount")}get namespace(){return"next2d.events.MouseEvent"}static get CLICK(){return"click"}static get DOUBLE_CLICK(){return"dblclick"}static get MOUSE_DOWN(){return"mouseDown"}static get MOUSE_MOVE(){return"mouseMove"}static get MOUSE_OUT(){return"mouseOut"}static get MOUSE_OVER(){return"mouseOver"}static get MOUSE_UP(){return"mouseUp"}static get MOUSE_WHEEL(){return"mouseWheel"}static get ROLL_OUT(){return"rollOut"}static get ROLL_OVER(){return"rollOver"}}class kt extends It{constructor(t,e=!1,i=!1,s=0,r=0){super(t,e,i),this._$bytesLoaded=0|s,this._$bytesTotal=0|r}static toString(){return"[class ProgressEvent]"}static get namespace(){return"next2d.events.ProgressEvent"}toString(){return this.formatToString("ProgressEvent","type","bubbles","cancelable","eventPhase","bytesLoaded","bytesTotal")}get namespace(){return"next2d.events.ProgressEvent"}static get PROGRESS(){return"progress"}get bytesLoaded(){return this._$bytesLoaded}get bytesTotal(){return this._$bytesTotal}}class Nt extends It{constructor(t,e=!1,i=!1,s=0,r=0){super(t,e,i),this._$bytesLoaded=0|s,this._$bytesTotal=0|r}static toString(){return"[class VideoEvent]"}static get namespace(){return"next2d.events.VideoEvent"}toString(){return this.formatToString("VideoEvent","type","bubbles","cancelable","eventPhase","bytesLoaded","bytesTotal")}get namespace(){return"next2d.events.VideoEvent"}static get PROGRESS(){return"progress"}static get PLAY(){return"play"}static get PLAY_START(){return"playStart"}static get PLAY_END(){return"playEnd"}static get PAUSE(){return"pause"}static get SEEK(){return"seek"}get bytesLoaded(){return this._$bytesLoaded}get bytesTotal(){return this._$bytesTotal}}class Ot{constructor(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0){this._$colorTransform=rt(),this.redMultiplier=t,this.greenMultiplier=e,this.blueMultiplier=i,this.alphaMultiplier=s,this.redOffset=r,this.greenOffset=n,this.blueOffset=a,this.alphaOffset=h}static toString(){return"[class ColorTransform]"}static get namespace(){return"next2d.geom.ColorTransform"}toString(){return"(redMultiplier="+this._$colorTransform[0]+", greenMultiplier="+this._$colorTransform[1]+", blueMultiplier="+this._$colorTransform[2]+", alphaMultiplier="+this._$colorTransform[3]+", redOffset="+this._$colorTransform[4]+", greenOffset="+this._$colorTransform[5]+", blueOffset="+this._$colorTransform[6]+", alphaOffset="+this._$colorTransform[7]+")"}get namespace(){return"next2d.geom.ColorTransform"}get alphaMultiplier(){return this._$colorTransform[3]}set alphaMultiplier(t){this._$colorTransform[3]=dt(+t,0,1,0)}get alphaOffset(){return this._$colorTransform[7]}set alphaOffset(t){this._$colorTransform[7]=dt(0|t,-255,255,0)}get blueMultiplier(){return this._$colorTransform[2]}set blueMultiplier(t){this._$colorTransform[2]=dt(+t,0,1,0)}get blueOffset(){return this._$colorTransform[6]}set blueOffset(t){this._$colorTransform[6]=dt(0|t,-255,255,0)}get greenMultiplier(){return this._$colorTransform[1]}set greenMultiplier(t){this._$colorTransform[1]=dt(+t,0,1,0)}get greenOffset(){return this._$colorTransform[5]}set greenOffset(t){this._$colorTransform[5]=dt(0|t,-255,255,0)}get redMultiplier(){return this._$colorTransform[0]}set redMultiplier(t){this._$colorTransform[0]=dt(+t,0,1,0)}get redOffset(){return this._$colorTransform[4]}set redOffset(t){this._$colorTransform[4]=dt(0|t,-255,255,0)}concat(t){const e=ft(this._$colorTransform,t._$colorTransform);this.redMultiplier=e[0],this.greenMultiplier=e[1],this.blueMultiplier=e[2],this.alphaMultiplier=e[3],this.redOffset=e[4],this.greenOffset=e[5],this.blueOffset=e[6],this.alphaOffset=e[7],nt(e)}_$clone(){return dr(this._$colorTransform[0],this._$colorTransform[1],this._$colorTransform[2],this._$colorTransform[3],this._$colorTransform[4],this._$colorTransform[5],this._$colorTransform[6],this._$colorTransform[7])}}class Dt{constructor(t=0,e=0){this._$x=0,this._$y=0,this.x=t,this.y=e}static toString(){return"[class Point]"}static get namespace(){return"next2d.geom.Point"}toString(){return`(x=${this.x}, y=${this.y})`}get namespace(){return"next2d.geom.Point"}get length(){return v.sqrt(v.pow(this.x,2)+v.pow(this.y,2))}get x(){return this._$x}set x(t){this._$x=dt(+t,N,O,0)}get y(){return this._$y}set y(t){this._$y=dt(+t,N,O,0)}add(t){return new Dt(this.x+t.x,this.y+t.y)}clone(){return new Dt(this.x,this.y)}copyFrom(t){this._$x=t._$x,this._$y=t._$y}static distance(t,e){return v.sqrt(v.pow(t._$x-e._$x,2)+v.pow(t._$y-e._$y,2))}equals(t){return this._$x===t._$x&&this._$y===t._$y}static interpolate(t,e,i){return new Dt(t.x+(e.x-t.x)*(1-i),t.y+(e.y-t.y)*(1-i))}normalize(t){const e=this.length;this.x=this.x*t/e,this.y=this.y*t/e}offset(t,e){this.x+=t,this.y+=e}static polar(t,e){return new Dt(t*v.cos(e),t*v.sin(e))}setTo(t,e){this.x=t,this.y=e}subtract(t){return new Dt(this.x-t.x,this.y-t.y)}}class Ut{constructor(t=1,e=0,i=0,s=1,r=0,n=0){this._$matrix=it(1,0,0,1,0,0),this.a=t,this.b=e,this.c=i,this.d=s,this.tx=r,this.ty=n}static toString(){return"[class Matrix]"}static get namespace(){return"next2d.geom.Matrix"}toString(){return`(a=${this.a}, b=${this.b}, c=${this.c}, d=${this.d}, tx=${this.tx}, ty=${this.ty})`}get namespace(){return"next2d.geom.Matrix"}get a(){return this._$matrix[0]}set a(t){this._$matrix[0]=dt(+t,N,O,0)}get b(){return this._$matrix[1]}set b(t){this._$matrix[1]=dt(+t,N,O,0)}get c(){return this._$matrix[2]}set c(t){this._$matrix[2]=dt(+t,N,O,0)}get d(){return this._$matrix[3]}set d(t){this._$matrix[3]=dt(+t,N,O,0)}get tx(){return this._$matrix[4]}set tx(t){this._$matrix[4]=dt(+t,N,O,0)}get ty(){return this._$matrix[5]}set ty(t){this._$matrix[5]=dt(+t,N,O,0)}_$clone(){return this.clone()}clone(){return $r(this._$matrix[0],this._$matrix[1],this._$matrix[2],this._$matrix[3],this._$matrix[4],this._$matrix[5])}concat(t){const e=this._$matrix,i=t._$matrix;let s=e[0]*i[0],r=0,n=0,a=e[3]*i[3],h=e[4]*i[0]+i[4],o=e[5]*i[3]+i[5];(e[1]||e[2]||i[1]||i[2])&&(s+=e[1]*i[2],a+=e[2]*i[1],r+=e[0]*i[1]+e[1]*i[3],n+=e[2]*i[0]+e[3]*i[2],h+=e[5]*i[2],o+=e[4]*i[1]),this.a=s,this.b=r,this.c=n,this.d=a,this.tx=h,this.ty=o}copyFrom(t){this.a=t.a,this.b=t.b,this.c=t.c,this.d=t.d,this.tx=t.tx,this.ty=t.ty}createBox(t,e,i=0,s=0,r=0){this.identity(),this.rotate(i),this.scale(t,e),this.translate(s,r)}createGradientBox(t,e,i=0,s=0,r=0){this.createBox(t/1638.4,e/1638.4,i,s+t/2,r+e/2)}deltaTransformPoint(t){return new Dt(t.x*this._$matrix[0]+t.y*this._$matrix[2],t.x*this._$matrix[1]+t.y*this._$matrix[3])}identity(){this._$matrix[0]=1,this._$matrix[1]=0,this._$matrix[2]=0,this._$matrix[3]=1,this._$matrix[4]=0,this._$matrix[5]=0}invert(){const t=this._$matrix[0],e=this._$matrix[1],i=this._$matrix[2],s=this._$matrix[3],r=this._$matrix[4],n=this._$matrix[5];if(0===e&&0===i)this.a=1/t,this.b=0,this.c=0,this.d=1/s,this.tx=-this.a*r,this.ty=-this.d*n;else{const a=t*s-e*i;if(a){const h=1/a;this.a=s*h,this.b=-e*h,this.c=-i*h,this.d=t*h,this.tx=-(this.a*r+this.c*n),this.ty=-(this.b*r+this.d*n)}}}rotate(t){const e=this._$matrix[0],i=this._$matrix[1],s=this._$matrix[2],r=this._$matrix[3],n=this._$matrix[4],a=this._$matrix[5];this.a=e*v.cos(t)-i*v.sin(t),this.b=e*v.sin(t)+i*v.cos(t),this.c=s*v.cos(t)-r*v.sin(t),this.d=s*v.sin(t)+r*v.cos(t),this.tx=n*v.cos(t)-a*v.sin(t),this.ty=n*v.sin(t)+a*v.cos(t)}scale(t,e){this.a*=t,this.c*=t,this.tx*=t,this.b*=e,this.d*=e,this.ty*=e}setTo(t,e,i,s,r,n){this.a=t,this.b=e,this.c=i,this.d=s,this.tx=r,this.ty=n}transformPoint(t){return new Dt(t.x*this._$matrix[0]+t.y*this._$matrix[2]+this._$matrix[4],t.x*this._$matrix[1]+t.y*this._$matrix[3]+this._$matrix[5])}translate(t,e){this.tx+=t,this.ty+=e}}class Vt{constructor(t=0,e=0,i=0,s=0){this._$x=0,this._$y=0,this._$width=0,this._$height=0,this.setTo(t,e,i,s)}static toString(){return"[class Rectangle]"}static get namespace(){return"next2d.geom.Rectangle"}toString(){return`(x=${this.x}, y=${this.y}, w=${this.width}, h=${this.height})`}get namespace(){return"next2d.geom.Rectangle"}get bottom(){return this.y+this.height}set bottom(t){this.height=+t-this.y}get bottomRight(){return new Dt(this.right,this.bottom)}set bottomRight(t){this.right=t.x,this.bottom=t.y}get height(){return this._$height}set height(t){this._$height=dt(+t,N,O,0)}get left(){return this.x}set left(t){this.width=this.right-+t,this.x=t}get right(){return this.x+this.width}set right(t){this.width=+t-this.x}get size(){return new Dt(this.width,this.height)}set size(t){this.width=t.x,this.height=t.y}get top(){return this.y}set top(t){this.height=+(this.bottom-+t),this.y=t}get topLeft(){return new Dt(this.x,this.y)}set topLeft(t){this.left=t.x,this.top=t.y}get width(){return this._$width}set width(t){this._$width=dt(+t,N,O,0)}get x(){return this._$x}set x(t){this._$x=dt(+t,N,O,0)}get y(){return this._$y}set y(t){this._$y=dt(+t,N,O,0)}clone(){return new Vt(this.x,this.y,this.width,this.height)}contains(t,e){return this.x<=t&&this.y<=e&&this.right>t&&this.bottom>e}containsPoint(t){return this.x<=t.x&&this.y<=t.y&&this.right>t.x&&this.bottom>t.y}containsRect(t){return this.x<=t.x&&this.y<=t.y&&this.right>=t.right&&this.bottom>=t.bottom}copyFrom(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height}equals(t){return this.x===t.x&&this.y===t.y&&this.width===t.width&&this.height===t.height}inflate(t,e){this.x=this.x-+t,this.width=this.width+2*+t,this.y=this.y-+e,this.height=this.height+2*+e}inflatePoint(t){this.x=this.x-t.x,this.width=this.width+2*t.x,this.y=this.y-t.y,this.height=this.height+2*t.y}intersection(t){const e=v.max(this.x,t.x),i=v.max(this.y,t.y),s=v.min(this.right,t.right)-e,r=v.min(this.bottom,t.bottom)-i;return s>0&&r>0?new Vt(e,i,s,r):new Vt(0,0,0,0)}intersects(t){const e=v.max(this.x,t.x),i=v.max(this.y,t.y),s=v.min(this.right,t.right),r=v.min(this.bottom,t.bottom);return s-e>0&&r-i>0}isEmpty(){return this.width<=0||this.height<=0}offset(t,e){this.x+=t,this.y+=e}offsetPoint(t){this.x+=t.x,this.y+=t.y}setEmpty(){this._$x=0,this._$y=0,this._$width=0,this._$height=0}setTo(t,e,i,s){this.x=t,this.y=e,this.width=i,this.height=s}union(t){return this.isEmpty()?t.clone():t.isEmpty()?this.clone():new Vt(v.min(this.x,t.x),v.min(this.y,t.y),v.max(this.right-t.left,t.right-this.left),v.max(this.bottom-t.top,t.bottom-this.top))}}class Gt{constructor(){this._$updated=!0}static toString(){return"[class BitmapFilter]"}static get namespace(){return"next2d.filters.BitmapFilter"}toString(){return"[object BitmapFilter]"}get namespace(){return"next2d.filters.BitmapFilter"}_$isUpdated(){return this._$updated}_$doChanged(){this._$updated=!0,x()}}class zt extends Gt{constructor(t=4,e=4,i=1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this.blurX=t,this.blurY=e,this.quality=i}static toString(){return"[class BlurFilter]"}static get namespace(){return"next2d.filters.BlurFilter"}toString(){return"[object BlurFilter]"}get namespace(){return"next2d.filters.BlurFilter"}static get STEP(){return[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5]}get blurX(){return this._$blurX}set blurX(t){(t=dt(+t,0,255,0))!==this._$blurX&&(this._$blurX=t,this._$doChanged())}get blurY(){return this._$blurY}set blurY(t){(t=dt(+t,0,255,0))!==this._$blurY&&(this._$blurY=t,this._$doChanged())}get quality(){return this._$quality}set quality(t){(t=dt(0|t,0,15,1))!==this._$quality&&(this._$quality=t,this._$doChanged())}clone(){return new zt(this._$blurX,this._$blurY,this._$quality)}_$toArray(){return ht(1,this._$blurX,this._$blurY,this._$quality)}_$generateFilterRect(t,e=0,i=0){const s=Q(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$quality)return s;const r=zt.STEP[this._$quality-1];let n=0>=this._$blurX?1:this._$blurX*r,a=0>=this._$blurY?1:this._$blurY*r;return e?n*=e:n=v.round(n),i?a*=i:a=v.round(a),s.xMin-=n,s.xMax+=2*n,s.yMin-=a,s.yMax+=2*a,s}_$canApply(){return 0!==this._$blurX&&0!==this._$blurY}_$applyFilter(t,e,i=!0){this._$updated=!1;const s=t.frameBuffer,r=s.currentAttachment,n=s.getTextureFromCurrentAttachment();if(!this._$canApply())return i?n:s.createTextureFromCurrentAttachment();let a=v.sqrt(e[0]*e[0]+e[1]*e[1]),h=v.sqrt(e[2]*e[2]+e[3]*e[3]);a/=f,h/=f,a*=2,h*=2;const o=Q(0,n.width,0,n.height),l=this._$generateFilterRect(o,a,h);J(o);const c=0|v.ceil(l.xMax),_=0|v.ceil(l.yMax),$=v.ceil(v.abs(l.xMin)+.5*v.abs(c-l.xMax)),u=v.ceil(v.abs(l.yMin)+.5*v.abs(_-l.yMax));t._$offsetX=$+t._$offsetX,t._$offsetY=u+t._$offsetY;const d=this._$blurX*a,g=this._$blurY*h;let p=1,m=1;d>128?p=.0625:d>64?p=.125:d>32?p=.25:d>16&&(p=.5),g>128?m=.0625:g>64?m=.125:g>32?m=.25:g>16&&(m=.5);const x=d*p,b=g*m,T=v.ceil(c*p),y=v.ceil(_*m),E=s.createTextureAttachment(T,y),A=[E,s.createTextureAttachment(T,y)];let M=0;t._$bind(E),t.reset(),t.setTransform(p,0,0,m,0,0),t.drawImage(n,$,u,n.width,n.height),t.blend.toOneZero();let w=s.getTextureFromCurrentAttachment();for(let e=0;e0){M=(M+1)%2;const e=A[M];t._$bind(e),t._$applyBlurFilter(w,!0,x),w=s.getTextureFromCurrentAttachment()}if(this._$blurY>0){M=(M+1)%2;const e=A[M];t._$bind(e),t._$applyBlurFilter(w,!1,b),w=s.getTextureFromCurrentAttachment()}}if(t.blend.reset(),1!==p||1!==m){const e=s.createTextureAttachment(c,_);t._$bind(e),t.reset(),t.imageSmoothingEnabled=!0,t.setTransform(1/p,0,0,1/m,0,0),t.drawImage(w,0,0,T,y),w=s.getTextureFromCurrentAttachment(),t.reset(),t.setTransform(1,0,0,1,0,0),s.releaseAttachment(A[0],!0),s.releaseAttachment(A[1],!0),i?s.releaseAttachment(r,!0):s.releaseAttachment(e,!1)}else s.releaseAttachment(A[(M+1)%2],!0),i?s.releaseAttachment(r,!0):s.releaseAttachment(A[M],!1);return w}}class Xt extends Gt{constructor(t=4,e=45,i=16777215,s=1,r=0,n=1,a=4,h=4,o=1,l=1,c="inner",_=!1){super(),this._$blurFilter=new zt(a,h,l),this._$distance=4,this._$angle=45,this._$highlightColor=16777215,this._$highlightAlpha=1,this._$shadowColor=0,this._$shadowAlpha=1,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.highlightColor=i,this.highlightAlpha=s,this.shadowColor=r,this.shadowAlpha=n,this.strength=o,this.type=c,this.knockout=_}static toString(){return"[class BevelFilter]"}static get namespace(){return"next2d.filters.BevelFilter"}toString(){return"[object BevelFilter]"}get namespace(){return"next2d.filters.BevelFilter"}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=dt(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get distance(){return this._$distance}set distance(t){(t=dt(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get highlightAlpha(){return this._$highlightAlpha}set highlightAlpha(t){(t=dt(+t,0,1,0))!==this._$highlightAlpha&&(this._$highlightAlpha=t,this._$doChanged())}get highlightColor(){return this._$highlightColor}set highlightColor(t){(t=dt(xt(t),0,16777215,16777215))!==this._$highlightColor&&(this._$highlightColor=t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get shadowAlpha(){return this._$shadowAlpha}set shadowAlpha(t){(t=dt(+t,0,1,0))!==this._$shadowAlpha&&(this._$shadowAlpha=t,this._$doChanged())}get shadowColor(){return this._$shadowColor}set shadowColor(t){(t=dt(xt(t),0,16777215,0))!==this._$shadowColor&&(this._$shadowColor=t,this._$doChanged())}get strength(){return this._$strength}set strength(t){(t=dt(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}get type(){return this._$type}set type(t){(t=`${t}`)!==this._$type&&(this._$type=t,this._$doChanged())}clone(){return new Xt(this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$toArray(){return ht(0,this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=Q(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const r=this._$angle*D;let n=v.abs(v.cos(r)*this._$distance),a=v.abs(v.sin(r)*this._$distance);return e&&(n*=e),i&&(a*=i),s.xMin=v.min(s.xMin,n),n>0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$strength>0&&0!==this._$distance&&this._$blurFilter._$canApply()}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");t.setTransform(1,0,0,1,0,0);const r=i.getTextureFromCurrentAttachment();if(!this._$canApply())return r;const n=s.width,a=s.height,h=t._$offsetX,o=t._$offsetY;let l=v.sqrt(e[0]*e[0]+e[1]*e[1]),c=v.sqrt(e[2]*e[2]+e[3]*e[3]);l/=f,c/=f,l*=2,c*=2;const _=this._$angle*D,$=v.cos(_)*this._$distance*l,u=v.sin(_)*this._$distance*c,d=i.createTextureAttachment(n,a);t._$bind(d),t.reset(),t.drawImage(r,0,0,n,a),t.globalCompositeOperation="erase",t.drawImage(r,2*$,2*u,n,a);const g=this._$blurFilter._$applyFilter(t,e,!1),p=g.width,m=g.height,x=v.ceil(p+2*v.abs($)),b=v.ceil(m+2*v.abs(u)),T="inner"===this._$type,y=T?n:x,E=T?a:b,A=v.abs($),M=v.abs(u),w=(p-n)/2,S=(m-a)/2,C=T?0:A+w,I=T?0:M+S,F=T?-w-$:A-$,R=T?-S-u:M-u;return t._$bind(s),i.releaseAttachment(d,!0),t._$applyBitmapFilter(g,y,E,n,a,C,I,p,m,F,R,!1,this._$type,this._$knockout,this._$strength,null,null,null,vt(this._$highlightColor,this._$highlightAlpha,!0),Tt(this._$highlightColor,this._$highlightAlpha,!0),yt(this._$highlightColor,this._$highlightAlpha,!0),this._$highlightAlpha,vt(this._$shadowColor,this._$shadowAlpha,!0),Tt(this._$shadowColor,this._$shadowAlpha,!0),yt(this._$shadowColor,this._$shadowAlpha,!0),this._$shadowAlpha),t._$offsetX=h+C,t._$offsetY=o+I,i.releaseTexture(g),i.getTextureFromCurrentAttachment()}}class qt extends Gt{constructor(t=null){super(),this._$matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix=t}static toString(){return"[class ColorMatrixFilter]"}static get namespace(){return"next2d.filters.ColorMatrixFilter"}toString(){return"[object ColorMatrixFilter]"}get namespace(){return"next2d.filters.ColorMatrixFilter"}get matrix(){return this._$matrix}set matrix(t){if(t&&T.isArray(t)&&20===t.length){for(let e=0;e<20;++e)if(t[e]!==this._$matrix[e]){this._$doChanged();break}this._$matrix=t}}clone(){return new qt(this._$matrix)}_$toArray(){return ht(2,this._$matrix)}_$generateFilterRect(t){return t}_$canApply(){return!0}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment(),r=s.width,n=s.height,a=e.createTextureAttachment(r,n);return t._$bind(a),t.reset(),t._$applyColorMatrixFilter(s,this._$matrix),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()}}class Yt extends Gt{constructor(t=0,e=0,i=null,s=1,r=0,n=!0,a=!0,h=0,o=0){super(),this._$matrixX=0,this._$matrixY=0,this._$matrix=null,this._$divisor=1,this._$bias=0,this._$preserveAlpha=!0,this._$clamp=!0,this._$color=0,this._$alpha=0,this.matrixX=t,this.matrixY=e,this.matrix=i,this.divisor=s,this.bias=r,this.preserveAlpha=n,this.clamp=a,this.color=h,this.alpha=o}static toString(){return"[class ConvolutionFilter]"}static get namespace(){return"next2d.filters.ConvolutionFilter"}toString(){return"[object ConvolutionFilter]"}get namespace(){return"next2d.filters.ConvolutionFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get bias(){return this._$bias}set bias(t){t!==this._$bias&&(this._$bias=0|t,this._$doChanged())}get clamp(){return this._$clamp}set clamp(t){t!==this._$clamp&&(this._$clamp=!!t,this._$doChanged())}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get divisor(){return this._$divisor}set divisor(t){t!==this._$divisor&&(this._$divisor=0|t,this._$doChanged())}get matrix(){return this._$matrix}set matrix(t){T.isArray(this._$matrix)&&ot(this._$matrix),this._$matrix=T.isArray(t)?t:null,this._$doChanged()}get matrixX(){return this._$matrixX}set matrixX(t){(t=0|dt(0|t,0,15,0))!==this._$matrixX&&(this._$matrixX=t,this._$doChanged())}get matrixY(){return this._$matrixY}set matrixY(t){(t=0|dt(0|t,0,15,0))!==this._$matrixY&&(this._$matrixY=t,this._$doChanged())}get preserveAlpha(){return this._$preserveAlpha}set preserveAlpha(t){t!==this._$preserveAlpha&&(this._$preserveAlpha=!!t,this._$doChanged())}clone(){return new Yt(this._$matrixX,this._$matrixY,this._$matrix?this._$matrix.slice():null,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$toArray(){return ht(3,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$matrix&&this._$matrixX*this._$matrixY===this._$matrix.length}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment();return this._$canApply()&&this._$matrix?(t._$applyConvolutionFilter(s,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,vt(this._$color,this._$alpha,!1),Tt(this._$color,this._$alpha,!1),yt(this._$color,this._$alpha,!1),this._$alpha),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()):s}}class Ht extends Gt{constructor(t=null,e=null,i=0,s=0,r=0,n=0,a="wrap",h=0,o=0){super(),this._$mapBitmap=null,this._$mapPoint=null,this._$componentX=0,this._$componentY=0,this._$scaleX=0,this._$scaleY=0,this._$mode="wrap",this._$color=0,this._$alpha=0,this.mapBitmap=t,this.mapPoint=e,this.componentX=i,this.componentY=s,this.scaleX=r,this.scaleY=n,this.mode=a,this.color=h,this.alpha=o}static toString(){return"[class DisplacementMapFilter]"}static get namespace(){return"next2d.filters.DisplacementMapFilter"}toString(){return"[object DisplacementMapFilter]"}get namespace(){return"next2d.filters.DisplacementMapFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get componentX(){return this._$componentX}set componentX(t){t!==this._$componentX&&(this._$componentX=t,this._$doChanged())}get componentY(){return this._$componentY}set componentY(t){t!==this._$componentY&&(this._$componentY=t,this._$doChanged())}get mapBitmap(){return this._$mapBitmap}set mapBitmap(t){t!==this._$mapBitmap&&(this._$mapBitmap=t,this._$doChanged())}get mapPoint(){return this._$mapPoint}set mapPoint(t){t!==this._$mapPoint&&(this._$mapPoint=t,this._$doChanged())}get mode(){return this._$mode}set mode(t){t!==this._$mode&&(this._$mode=t,this._$doChanged())}get scaleX(){return this._$scaleX}set scaleX(t){(t=dt(+t,-65535,65535,0))!==this._$scaleX&&(this._$scaleX=t,this._$doChanged())}get scaleY(){return this._$scaleY}set scaleY(t){(t=dt(+t,-65535,65535,0))!==this._$scaleY&&(this._$scaleY=t,this._$doChanged())}clone(){return new Ht(this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$toArray(){return ht(4,this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$mapBitmap&&this._$componentX>0&&this._$componentY>0&&0!==this._$scaleX&&0!==this._$scaleY}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;t.setTransform(1,0,0,1,0,0);const r=i.getTextureFromCurrentAttachment();if(!this._$canApply()||!s||!this._$mapBitmap)return r;const n=v.sqrt(e[0]*e[0]+e[1]*e[1]),a=v.sqrt(e[2]*e[2]+e[3]*e[3]);return t._$applyDisplacementMapFilter(r,this._$mapBitmap,r.width/n,r.height/a,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,vt(this._$color,this._$alpha,!0),Tt(this._$color,this._$alpha,!0),yt(this._$color,this._$alpha,!0),this._$alpha),i.releaseAttachment(s,!0),i.getTextureFromCurrentAttachment()}}class jt extends Gt{constructor(t=4,e=45,i=0,s=1,r=4,n=4,a=1,h=1,o=!1,l=!1,c=!1){super(),this._$blurFilter=new zt(r,n,h),this._$distance=4,this._$angle=45,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this._$hideObject=!1,this.distance=t,this.angle=e,this.color=i,this.alpha=s,this.strength=a,this.inner=o,this.knockout=l,this.hideObject=c}static toString(){return"[class DropShadowFilter]"}static get namespace(){return"next2d.filters.DropShadowFilter"}toString(){return"[object DropShadowFilter]"}get namespace(){return"next2d.filters.DropShadowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=dt(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get distance(){return this._$distance}set distance(t){(t=dt(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get hideObject(){return this._$hideObject}set hideObject(t){t!==this._$hideObject&&(this._$hideObject=!!t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=dt(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new jt(this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$toArray(){return ht(5,this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=Q(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const r=this._$angle*D;let n=v.cos(r)*this._$distance,a=v.sin(r)*this._$distance;return e&&(n*=e),i&&(a*=i),s.xMin=v.min(s.xMin,n),n>0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(t,e){const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");if(t.setTransform(1,0,0,1,0,0),!this._$canApply())return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),l=o.width,c=o.height,_=t._$offsetX,$=t._$offsetY,u=_-a,d=$-h;let g=v.sqrt(e[0]*e[0]+e[1]*e[1]),p=v.sqrt(e[2]*e[2]+e[3]*e[3]);g/=f,p/=f,g*=2,p*=2;const m=this._$angle*D,x=v.cos(m)*this._$distance*g,b=v.sin(m)*this._$distance*p,T=this._$inner?r:l+v.max(0,v.abs(x)-u),y=this._$inner?n:c+v.max(0,v.abs(b)-d),E=v.ceil(T),A=v.ceil(y),M=(E-T)/2,w=(A-y)/2,S=this._$inner?0:v.max(0,u-x)+M,C=this._$inner?0:v.max(0,d-b)+w,I=this._$inner?x-_:(x>0?v.max(0,x-u):0)+M,F=this._$inner?b-$:(b>0?v.max(0,b-d):0)+w;let R,B;return this._$inner?(R="inner",B=this._$knockout||this._$hideObject):!this._$knockout&&this._$hideObject?(R="full",B=!0):(R="outer",B=this._$knockout),t._$bind(s),t._$applyBitmapFilter(o,E,A,r,n,S,C,l,c,I,F,!0,R,B,this._$strength,null,null,null,vt(this._$color,this._$alpha,!0),Tt(this._$color,this._$alpha,!0),yt(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),t._$offsetX=a+S,t._$offsetY=h+C,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class Wt extends Gt{constructor(t=0,e=1,i=4,s=4,r=1,n=1,a=!1,h=!1){super(),this._$blurFilter=new zt(i,s,n),this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this.color=t,this.alpha=e,this.strength=r,this.inner=a,this.knockout=h}static toString(){return"[class GlowFilter]"}static get namespace(){return"next2d.filters.GlowFilter"}toString(){return"[object GlowFilter]"}get namespace(){return"next2d.filters.GlowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,4))!==this._$color&&(this._$color=t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=dt(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new Wt(this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$toArray(){return ht(6,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){const s=Q(t.xMin,t.xMax,t.yMin,t.yMax);return this._$canApply()?this._$blurFilter._$generateFilterRect(s,e,i):s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(t,e){const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");if(this._$updated=!1,t.setTransform(1,0,0,1,0,0),!this._$canApply())return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),l=o.width,c=o.height,_=t._$offsetX,$=t._$offsetY,u=this._$inner?r:l,d=this._$inner?n:c,g=this._$inner?0:_-a,f=this._$inner?0:$-h,p=this._$inner?-_:0,m=this._$inner?-$:0,x=this._$inner?"inner":"outer";return t._$bind(s),t._$applyBitmapFilter(o,u,d,r,n,g,f,l,c,p,m,!0,x,this._$knockout,this._$strength,null,null,null,vt(this._$color,this._$alpha,!0),Tt(this._$color,this._$alpha,!0),yt(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),t._$offsetX=a+g,t._$offsetY=h+f,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class Kt extends Gt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,l="inner",c=!1){super(),this._$blurFilter=new zt(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=l,this.knockout=c}static toString(){return"[class GradientBevelFilter]"}static get namespace(){return"next2d.filters.GradientBevelFilter"}toString(){return"[object GradientBevelFilter]"}get namespace(){return"next2d.filters.GradientBevelFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,T.isArray(t)){for(let e=0;e0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;t.setTransform(1,0,0,1,0,0);const r=i.getTextureFromCurrentAttachment();if(!this._$canApply()||!s)return r;const n=s.width,a=s.height,h=t._$offsetX,o=t._$offsetY;let l=v.sqrt(e[0]*e[0]+e[1]*e[1]),c=v.sqrt(e[2]*e[2]+e[3]*e[3]);l/=f,c/=f,l*=2,c*=2;const _=+this._$angle*D,$=+v.cos(_)*this._$distance*l,u=+v.sin(_)*this._$distance*c,d=i.createTextureAttachment(n,a);t._$bind(d),t.reset(),t.drawImage(r,0,0,n,a),t.globalCompositeOperation="erase",t.drawImage(r,2*$,2*u,n,a);const g=this._$blurFilter._$applyFilter(t,e,!1),p=g.width,m=g.height,x=v.ceil(p+2*v.abs($)),b=v.ceil(m+2*v.abs(u)),T="inner"===this._$type,y=T?n:x,E=T?a:b,A=v.abs($),M=v.abs(u),w=(p-n)/2,S=(m-a)/2,C=T?0:A+w,I=T?0:M+S,F=T?-w-$:A-$,R=T?-S-u:M-u;return t._$bind(s),t._$applyBitmapFilter(g,y,E,n,a,C,I,p,m,F,R,!1,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),t._$offsetX=h+C,t._$offsetY=o+I,i.releaseAttachment(d,!0),i.getTextureFromCurrentAttachment()}}class Qt extends Gt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,l="inner",c=!1){super(),this._$blurFilter=new zt(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=l,this.knockout=c}static toString(){return"[class GradientGlowFilter]"}static get namespace(){return"next2d.filters.GradientGlowFilter"}toString(){return"[object GradientGlowFilter]"}get namespace(){return"next2d.filters.GradientGlowFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,T.isArray(t)){for(let e=0;e0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;if(t.setTransform(1,0,0,1,0,0),!this._$canApply()||!s)return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),l=o.width,c=o.height,_=t._$offsetX,$=t._$offsetY,u=_-a,d=$-h;let g=v.sqrt(e[0]*e[0]+e[1]*e[1]),p=v.sqrt(e[2]*e[2]+e[3]*e[3]);g/=f,p/=f,g*=2,p*=2;const m=+this._$angle*D,x=+v.cos(m)*this._$distance*g,b=+v.sin(m)*this._$distance*p,T="inner"===this.type,y=T?r:l+v.max(0,v.abs(x)-u),E=T?n:c+v.max(0,v.abs(b)-d),A=v.ceil(y),M=v.ceil(E),w=(A-y)/2,S=(M-E)/2,C=T?0:v.max(0,u-x)+w,I=T?0:v.max(0,d-b)+S,F=T?x-_:(x>0?v.max(0,x-u):0)+w,R=T?b-$:(b>0?v.max(0,b-d):0)+S;return t._$bind(s),t._$applyBitmapFilter(o,A,M,r,n,C,I,l,c,F,R,!0,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),t._$offsetX=a+C,t._$offsetY=h+I,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class Jt{constructor(t){this._$displayObject=t,this._$matrix=null,this._$colorTransform=null,this._$blendMode=null,this._$filters=null}static toString(){return"[class Transform]"}static get namespace(){return"next2d.geom.Transform"}toString(){return"[object Transform]"}get namespace(){return"next2d.geom.Transform"}get colorTransform(){if(this._$colorTransform)return this._$colorTransform._$clone();const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.colorTransform){const t=e.colorTransform;return dr(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7])}return this._$transform(),this._$colorTransform||(this._$colorTransform=dr()),this._$colorTransform._$clone()}set colorTransform(t){this._$transform(null,t._$colorTransform)}get concatenatedColorTransform(){let t=this._$rawColorTransform(),e=this._$displayObject._$parent;for(;e;)t=ft(e._$transform._$rawColorTransform(),t),e=e._$parent;return dr(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7])}get matrix(){if(this._$matrix)return this._$matrix._$clone();const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.matrix){const t=e.matrix;return $r(t[0],t[1],t[2],t[3],t[4],t[5])}return this._$transform(),this._$matrix||(this._$matrix=$r()),this._$matrix._$clone()}set matrix(t){this._$transform(t._$matrix,null)}get concatenatedMatrix(){let t=this._$rawMatrix(),e=this._$displayObject._$parent;for(;e;)t=gt(e._$transform._$rawMatrix(),t),e=e._$parent;return $r(t[0],t[1],t[2],t[3],t[4],t[5])}pixelBounds(){if(!this._$displayObject)return new Vt(0,0,0,0);const t=this._$displayObject._$getBounds(null),e=new Vt(t.xMin,t.yMin,+v.abs(t.xMax-t.xMin),+v.abs(t.yMax-t.yMin));return J(t),e}_$rawMatrix(){if(null!==this._$matrix)return this._$matrix._$matrix;const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.matrix){if(T.isArray(e.matrix)){const t=e.matrix;e.matrix=it(t[0],t[1],t[2],t[3],t[4],t[5]),ot(t)}return e.matrix}return P}_$rawColorTransform(){if(null!==this._$colorTransform)return this._$colorTransform._$colorTransform;const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.colorTransform){if(T.isArray(e.colorTransform)){const t=e.colorTransform;e.colorTransform=rt(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]),ot(t)}return e.colorTransform}return k}_$transform(t=null,e=null,i=null,s=""){const r=this._$displayObject,n=r._$placeObject||r._$getPlaceObject();this._$setMatrix(t,n),this._$setColorTransform(e,n),this._$setFilters(i,n),this._$setBlendMode(s,n)}_$setMatrix(t=null,e=null){if((t||e)&&(this._$displayObject._$doChanged(),x()),this._$matrix||(this._$matrix=$r(1,0,0,1,0,0),!t&&e&&e.matrix&&(t=e.matrix)),t){const e=this._$matrix._$matrix;e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]}}_$setColorTransform(t=null,e=null){if((t||e)&&(this._$displayObject._$doChanged(),x()),this._$colorTransform||(this._$colorTransform=dr(1,1,1,1,0,0,0,0),!t&&e&&e.colorTransform&&(t=e.colorTransform)),t){const e=this._$colorTransform._$colorTransform;e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]}}_$setFilters(t=null,e=null){if(T.isArray(t))return this._$filters&&ot(this._$filters),this._$filters=t.slice(0),this._$displayObject._$doChanged(),void x();if(!this._$filters)if(e){if(e.filters){this._$filters=e.filters.slice(0);for(let t=0;t-1){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this.rotation,s=i?pt(e,this._$transform._$rawMatrix()):e;i&&J(e);const r=v.abs(s.yMax-s.yMin);switch(J(s),r){case 0:case b:case-1/0:this.scaleY=0;break;default:this.scaleY=t/r}}}get loaderInfo(){return this._$loaderInfo}get mask(){return this._$mask}set mask(t){t!==this._$mask&&(this._$mask&&(Mr&&this._$mask.stage&&this._$mask._$removeWorkerInstance(),this._$mask._$isMask=!1,this._$mask=null),t&&(Mr&&"_$createWorkerInstance"in t&&"function"==typeof t._$createWorkerInstance&&t._$createWorkerInstance(),t._$isMask=!0,this._$mask=t),this._$doChanged())}get mouseX(){return l()?this.globalToLocal(_r()).x:0}get mouseY(){return l()?this.globalToLocal(_r()).y:0}get name(){return this._$name?this._$name:`instance${this._$instanceId}`}set name(t){this._$name=`${t}`;const e=this._$parent;if(e&&e._$names){e._$names.clear();const t=e._$getChildren();for(let i=0;it[0]?-1*e:e}set scaleX(t){if(t=dt(+t,N,O),!E.isInteger(t)){const e=t.toString(),i=e.indexOf("e");-1!==i&&(t=+e.slice(0,i)),t=+t.toFixed(4)}if(this._$scaleX===t)return;const e=this._$transform,i=null!==e._$matrix,s=i?e._$matrix:e.matrix;if(0===s.b||C(s.b))s.a=t;else{let e=v.atan2(s.b,s.a);e===-v.PI&&(e=0),s.b=t*v.sin(e),s.a=t*v.cos(e)}i?(this._$doChanged(),x()):(e.matrix=s,ur(s)),this._$scaleX=t}get scaleY(){if(null!==this._$scaleY)return this._$scaleY;const t=this._$transform._$rawMatrix();let e=v.sqrt(t[2]*t[2]+t[3]*t[3]);if(!E.isInteger(e)){const t=e.toString(),i=t.indexOf("e");-1!==i&&(e=+t.slice(0,i)),e=+e.toFixed(4)}return 0>t[3]?-1*e:e}set scaleY(t){if(t=dt(+t,N,O),!E.isInteger(t)){const e=t.toString(),i=e.indexOf("e");-1!==i&&(t=+e.slice(0,i)),t=+t.toFixed(4)}if(this._$scaleY===t)return;const e=this._$transform,i=null!==e._$matrix,s=i?e._$matrix:e.matrix;if(0===s.c||C(s.c))s.d=t;else{let e=v.atan2(-s.c,s.d);e===-v.PI&&(e=0),s.c=-t*v.sin(e),s.d=t*v.cos(e)}i?(this._$doChanged(),x()):(e.matrix=s,ur(s)),this._$scaleY=t}get stage(){if(this._$stage)return this._$stage;const t=this._$parent;return t?t._$stage:null}get transform(){return this._$transform}set transform(t){this._$transform=t}get visible(){return this._$visible}set visible(t){this._$visible!==t&&(this._$visible=!!t,this._$doChanged(),x())}get width(){const t="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),e=pt(t,this._$transform._$rawMatrix());J(t);const i=v.abs(e.xMax-e.xMin);switch(J(e),!0){case 0===i:case i===b:case i===-1/0:return 0;default:return+i.toFixed(2)}}set width(t){if(!C(t=+t)&&t>-1){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this.rotation,s=i?pt(e,this._$transform._$rawMatrix()):e;i&&J(e);const r=v.abs(s.xMax-s.xMin);switch(J(s),!0){case 0===r:case r===b:case r===-1/0:this.scaleX=0;break;default:this.scaleX=t/r}}}get x(){return this._$transform._$rawMatrix()[4]}set x(t){const e=this._$transform;if(e._$matrix)e._$matrix.tx=t,this._$doChanged(),x();else{const i=e.matrix;i.tx=t,e.matrix=i,ur(i)}}get y(){return this._$transform._$rawMatrix()[5]}set y(t){const e=this._$transform;if(e._$matrix)e._$matrix.ty=t,this._$doChanged(),x();else{const i=e.matrix;i.ty=t,e.matrix=i,ur(i)}}getBounds(t=null){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this._$transform.concatenatedMatrix,s=pt(e,i._$matrix);ur(i),J(e);const r=Q(s.xMin,s.xMax,s.yMin,s.yMax);J(s),t||(t=this);const n=t._$transform.concatenatedMatrix;n.invert();const a=pt(r,n._$matrix);J(r),ur(n);const h=a.xMin,o=a.yMin,l=a.xMax,c=a.yMax;return J(a),new Vt(h,o,v.abs(l-h),v.abs(c-o))}globalToLocal(t){const e=this._$transform.concatenatedMatrix;e.invert();const i=new Dt(t.x*e.a+t.y*e.c+e.tx,t.x*e.b+t.y*e.d+e.ty);return ur(e),i}hitTestObject(t){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this._$transform.concatenatedMatrix,s=pt(e,i._$matrix);ur(i),J(e);const r=t._$getBounds(null),n=t._$transform.concatenatedMatrix,a=pt(r,n._$matrix);ur(n),J(r);const h=v.max(s.xMin,a.xMin),o=v.max(s.yMin,a.yMin),l=v.min(s.xMax,a.xMax),c=v.min(s.yMax,a.yMax);return J(s),J(a),l-h>=0&&c-o>=0}hitTestPoint(t,e,i=!1){if(i){let i=P,s=this._$parent;for(;s;)i=gt(s._$transform._$rawMatrix(),i),s=s._$parent;rr.setTransform(1,0,0,1,0,0),rr.beginPath();let r=!1;return"_$hit"in this&&"function"==typeof this._$hit&&(r=this._$hit(rr,i,{x:t,y:e},!0)),i!==P&&st(i),r}const s="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),r=pt(s,this._$transform._$rawMatrix());J(s);const n=new Vt(r.xMin,r.yMin,r.xMax-r.xMin,r.yMax-r.yMin);J(r);const a=this._$parent?this._$parent.globalToLocal(new Dt(t,e)):new Dt(t,e);return n.containsPoint(a)}localToGlobal(t){const e=this._$transform.concatenatedMatrix,i=new Dt(t.x*e.a+t.y*e.c+e.tx,t.x*e.b+t.y*e.d+e.ty);return ur(e),i}getLocalVariable(t){return this._$variables?this._$variables.has(t)?this._$variables.get(t):void 0:null}setLocalVariable(t,e){this._$variables||(this._$variables=ct()),this._$variables.set(t,e)}hasLocalVariable(t){return!!this._$variables&&this._$variables.has(t)}deleteLocalVariable(t){this._$variables&&this._$variables.has(t)&&(this._$variables.delete(t),this._$variables.size||(lt(this._$variables),this._$variables=null))}getGlobalVariable(t){return Os.has(t)?Os.get(t):null}setGlobalVariable(t,e){Os.set(t,e)}hasGlobalVariable(t){return Os.has(t)}deleteGlobalVariable(t){Os.has(t)&&Os.delete(t)}clearGlobalVariable(){return Os.clear()}_$getPlaceObject(){if(!this._$placeObject){const t=this._$placeId;if(-1===t)return null;const e=this._$parent;if(!e||!e._$placeObjects)return null;const i=e._$placeMap;if(!i||!i.length)return null;const s=i["currentFrame"in e?e.currentFrame:1];if(!s)return null;const r=0|s[t],n=e._$placeObjects[r];return n?(this._$changePlace=r!==this._$currentPlaceId,this._$currentPlaceId=r,this._$placeObject=n,n):null}return this._$placeObject}_$baseBuild(t,e){const i=e._$loaderInfo;if(!i||!i._$data)throw new Error("the loaderInfo or data is nul.");return this._$parent=e,this._$root=e._$root,this._$stage=e._$stage,this._$loaderInfo=i,this._$characterId=0|t.characterId,this._$clipDepth=0|t.clipDepth,this._$startFrame=0|t.startFrame,this._$endFrame=0|t.endFrame,this._$name=t.name||"",i._$data.characters[t.characterId]}_$isUpdated(){return this._$updated}_$updateState(){this._$isNext=!0;const t=this._$parent;t&&t._$updateState()}_$doChanged(){this._$posted=!1,this._$isNext=!0,this._$updated=!0;const t=this._$parent;t&&(t._$updated||t._$doChanged())}_$drawFilter(t,e,i,s,r,n=null){const a=ht(this._$instanceId,"f");let h=wt.get(a);const o=this._$isFilterUpdated(e,i,!0);if(h&&!o)return t.cachePosition=h,h;h&&wt.set(a,null);const l=t.frameBuffer,c=n||t.getTextureFromRect(t.cachePosition),_=this._$applyFilter(t,i,c,e,s,r);l.textureManager.release(c);const $=this._$getLayerBounds(e);return h=l.createCachePosition(v.ceil(v.abs($.xMax-$.xMin)),v.ceil(v.abs($.yMax-$.yMin))),J($),h.filterState=!0,h.matrix=`${e[0]}_${e[1]}_${e[2]}_${e[3]}_0_0`,h.offsetX=_.offsetX,h.offsetY=_.offsetY,t.drawTextureFromRect(_,h),wt.set(a,h),ot(a),h}_$getLayerBounds(t){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=pt(e,t);J(e);const s=this._$filters||this.filters;if(!s.length)return i;let r=Q(0,v.abs(i.xMax-i.xMin),0,v.abs(i.yMax-i.yMin));J(i);let n=+v.sqrt(t[0]*t[0]+t[1]*t[1]),a=+v.sqrt(t[2]*t[2]+t[3]*t[3]);n/=f,a/=f,n*=2,a*=2;for(let t=0;t-1&&(t.depth=this._$placeId),this._$clipDepth&&(t.clipDepth=this._$clipDepth),this._$isMask&&(t.isMask=this._$isMask);const e=this._$mask;if(e){t.maskId=e._$instanceId;let i=P,s=e._$parent;for(;s;)i=gt(s._$transform._$rawMatrix(),i),s=s._$parent;t.maskMatrix=i}if(this._$visible){const e=this._$transform,i=e._$rawMatrix();1!==i[0]&&(t.a=i[0]),0!==i[1]&&(t.b=i[1]),0!==i[2]&&(t.c=i[2]),1!==i[3]&&(t.d=i[3]),0!==i[4]&&(t.tx=i[4]),0!==i[5]&&(t.ty=i[5]);const s=e._$rawColorTransform();1!==s[0]&&(t.f0=s[0]),1!==s[1]&&(t.f1=s[1]),1!==s[2]&&(t.f2=s[2]),1!==s[3]&&(t.f3=s[3]),0!==s[4]&&(t.f4=s[4]),0!==s[5]&&(t.f5=s[5]),0!==s[6]&&(t.f6=s[6]),0!==s[7]&&(t.f7=s[7]);const r=this._$filters||this.filters;if(r&&r.length){const e=ht();for(let t=0;tt._$names.size&&t._$names.has(e)?t._$names.get(e):t[e]})}get mouseChildren(){return this._$mouseChildren}set mouseChildren(t){this._$mouseChildren=!!t}get numChildren(){return this._$needsChildren?this._$getChildren().length:this._$children.length}addChild(t){return t._$parent&&t._$parent._$remove(t,!(t._$parent._$instanceId===this._$instanceId)),this._$getChildren().push(t),t._$name&&this._$names.set(t._$name,t),this._$addChild(t)}addChildAt(t,e){t._$parent&&t._$parent._$remove(t,!(t._$parent._$instanceId===this._$instanceId));const i=this._$getChildren(),s=i.length;if(0>e||e>s)throw new RangeError(`RangeError: addChildAt: index error: ${e}`);if(s&&s>e){i.splice(e,0,t);for(let t=0;tt||t>e.length)throw new RangeError(`RangeError: getChildAt: index error: ${t}`);return t in e?e[t]:null}getChildByName(t){if(!t)return null;const e=this._$getChildren();for(let i=0;it;--s)this._$remove(i[s])}}setChildIndex(t,e){const i=this.getChildIndex(t);if(i===e)return;const s=this._$getChildren();s.splice(i,1),s.splice(e,0,t),Mr&&this._$postChildrenIds(),this._$doChanged()}swapChildren(t,e){const i=this._$getChildren(),s=this.getChildIndex(t),r=this.getChildIndex(e);i[s]=e,i[r]=t,Mr&&this._$postChildrenIds(),this._$doChanged()}swapChildrenAt(t,e){this.swapChildren(this.getChildAt(t),this.getChildAt(e))}_$getBounds(t=null){let e=P;if(t){e=t;const i=this._$transform._$rawMatrix();1===i[0]&&0===i[1]&&0===i[2]&&1===i[3]&&0===i[4]&&0===i[5]||(e=gt(t,i))}const i=this._$needsChildren?this._$getChildren():this._$children;if(!i.length){const i=Q(e[4],-e[4],e[5],-e[5]);return t&&e!==t&&st(e),i}const s=E.MAX_VALUE;let r=s,n=-s,a=s,h=-s;for(let t=0;te){if(l._$isNext=!0,l._$placeObject=null,l._$filters=null,l._$blendMode=null,-1===l._$id){h.push(l),l._$name&&this._$names.set(l._$name,l);continue}const t=i[a];if(l._$id===t){l._$placeId=a,h.push(l),l._$name&&this._$names.set(l._$name,l),n.has(t)&&n.delete(t),r.set(t,!0),a++,s&&l._$postProperty();continue}n.set(l._$id,l)}else s&&l._$removeWorkerInstance(),wt.setRemoveTimer(_),l._$loaderInfo&&l._$characterId&&wt.setRemoveTimer(`${l._$loaderInfo._$id}@${l._$characterId}`),l._$graphics&&wt.setRemoveTimer(l._$graphics._$uniqueKey),l.willTrigger(It.REMOVED)&&l.dispatchEvent(new It(It.REMOVED,!0)),l.willTrigger(It.REMOVED_FROM_STAGE)&&l.dispatchEvent(new It(It.REMOVED_FROM_STAGE,!0)),l._$added=!1,l._$addedStage=!1,l._$active=!1,l._$updated=!0,l._$filters=null,l._$blendMode=null,l._$isNext=!0,l._$placeObject=null,l._$created=!1,l._$posted=!1,l instanceof ee&&(l._$executeRemovedFromStage(),l._$removeParentAndStage())}if(i)for(let t=0;t-1;--e)t[e]._$prepareActions();this._$executeAddedEvent()}_$nextFrame(){let t=!1;const e=this._$getChildren();for(let i=e.length-1;i>-1;--i){const s=e[i];s._$isNext&&(t?s._$nextFrame():t=s._$nextFrame())}return this._$executeAddedEvent(),this._$isNext=t,!this._$posted&&Mr&&this._$postProperty(),this._$isNext}_$clip(t,e){let i=e;const s=this._$transform._$rawMatrix();1===s[0]&&0===s[1]&&0===s[2]&&1===s[3]&&0===s[4]&&0===s[5]||(i=gt(e,s));const r=this._$getChildren();for(let e=0;e0||"normal"!==a){const s=this._$getBounds(null),h=pt(s,i);J(s);const o=+h.xMax,l=+h.xMin,c=+h.yMax,_=+h.yMin;J(h);const $=v.ceil(v.abs(o-l)),u=v.ceil(v.abs(c-_));if(0>=$||0>=u)return Mt(r),i!==e&&st(i),null;let d=+v.sqrt(i[0]*i[0]+i[1]*i[1]);if(!E.isInteger(d)){const t=d.toString(),e=t.indexOf("e");-1!==e&&(d=+t.slice(0,e)),d=+d.toFixed(4)}let g=+v.sqrt(i[2]*i[2]+i[3]*i[3]);if(!E.isInteger(g)){const t=g.toString(),e=t.indexOf("e");-1!==e&&(g=+t.slice(0,e)),g=+g.toFixed(4)}r.canApply=this._$canApply(n);let f=Q(0,$,0,u);if(r.canApply&&n)for(let t=0;tp.width||_-f.yMin>p.height)return J(f),Mt(r),i!==e&&st(i),null;if(0>l+f.xMax||0>_+f.yMax)return J(f),Mt(r),i!==e&&st(i),null;let m=i[4]-l,x=i[5]-_;t._$startLayer(Q(l,o,_,c));const b=this._$isFilterUpdated(i,n,r.canApply),T=this._$getLayerBounds(i),y=v.ceil(v.abs(T.xMax-T.xMin)),A=v.ceil(v.abs(T.yMax-T.yMin));J(T);const M=y-f.xMax+f.xMin,w=A-f.yMax+f.yMin;m+=M,x+=w,r.sw=M,r.sh=w,b&&t._$saveAttachment(v.ceil($+M),v.ceil(u+w),!0),r.isLayer=!0,r.isUpdated=b,r.filters=n,r.blendMode=a,r.color=rt(),r.matrix=it(i[0],i[1],i[2],i[3],m,x),i!==e&&st(i),J(f)}return r}_$postDraw(t,e,i,s){t.drawInstacedArray();const r=ht(this._$instanceId,"f"),n=t.frameBuffer,a=s.matrix;let h=0,o=0,l=wt.get(r);if(!l||s.isUpdated){l&&wt.set(r,null),l=n.getTextureFromCurrentAttachment();const i=s.filters;let c=!1;if(i&&i.length){for(let s=0;s_||i._$clipDepth>0)&&(t.restore(),c&&t._$leaveClip(),_=0,c=!0),!c)continue;if(i._$clipDepth>0){_=i._$clipDepth,c=i._$shouldClip(o),c&&(t.save(),c=i._$startClip(t,o));continue}const r=i._$mask;if(r){let e;if(r._$updated=!1,this===r._$parent)e=o;else{e=P;let i=r._$parent;for(;i;)e=gt(i._$transform._$rawMatrix(),e),i=i._$parent;const s=$.scaleX,n=it(s,0,0,s,0,0);if(e=gt(n,e),st(n),t.isLayer){const i=t.getCurrentPosition();e[4]-=i.xMin,e[5]-=i.yMin}}if(!r._$shouldClip(e))continue;const i=r._$startClip(t,e);if(t.save(),!i){t.restore();continue}}i._$draw(t,o,l),i._$updated=!1,r&&(t.restore(),t._$leaveClip())}if(_&&(t.restore(),c&&t._$leaveClip()),h.isLayer)return this._$postDraw(t,e,s,h);h.matrix!==e&&st(h.matrix),s!==i&&nt(s),Mt(h)}_$mouseHit(t,e,i,s=!0){let r=e;const n=this._$transform._$rawMatrix();n!==P&&(r=gt(e,n));const a=this._$getChildren(),h=ht(),o=ht(),l=ct();let c=0,_=0;for(let t=0;tc&&(_=0,c=0),_&&l.set(e._$instanceId,_),o.push(e)))}const $=this._$mouseChildren&&s;let u=!1;const d=this._$root===this;for(;o.length;){const e=o.pop();if(e._$isMask)continue;if(d&&!(e instanceof te))continue;if(l.has(e._$instanceId)){const s=l.get(e._$instanceId);if(!s)continue;if(!h[s]._$hit(t,r,i,!0))continue}const s=e._$mask;if(s)if(this===s._$parent){if(!s._$hit(t,r,i,!0))continue}else{let e=P,r=s._$parent;for(;r;)e=gt(r._$transform._$rawMatrix(),e),r=r._$parent;if(!s._$hit(t,e,i,!0))continue}if(e._$mouseHit(t,r,i,$)||e._$hitArea&&e._$hitArea._$mouseHit(t,r,i,$)){if(e._$root===e)return!0;if(!$)return!0;if(u=!0,e instanceof te){if(!e.mouseEnabled&&!e._$hitObject)continue;return Zs||i.pointer||("_$text"in e&&"type"in e&&"input"===e.type&&(i.pointer="text"),"buttonMode"in e&&"useHandCursor"in e&&e.buttonMode&&e.useHandCursor&&(i.pointer="pointer")),i.hit||(i.hit=!e.mouseEnabled&&e._$hitObject?e._$hitObject:e),!0}}}return ot(h),ot(o),lt(l),r!==e&&st(r),u}_$hit(t,e,i,s=!1){let r=e;const n=this._$transform._$rawMatrix();n!==P&&(r=gt(e,n));const a=this._$getChildren();for(let e=a.length;e>-1;--e){const n=a[e];if(!n._$isMask&&n._$hit(t,r,i,s))return!0}return r!==e&&st(r),!1}_$createInstance(t){if(!this._$dictionary)throw new Error("the dictionary is null.");const e=this._$dictionary[t],i=this._$loaderInfo;if(!i||!i._$data)throw new Error("the loaderInfo or data is null.");const s=i._$data.characters[e.characterId],r=Ar(s.extends);return r._$build(e,this),r._$id=t,r}_$outCheck(t,e){let i=P,s=this._$parent;for(;s;)i=gt(s._$transform._$rawMatrix(),i),s=s._$parent;rr.setTransform(1,0,0,1,0,0),rr.beginPath();const r={x:t,y:e,pointer:"",hit:null};return this._$mouseHit(rr,i,r)}_$createWorkerInstance(){if(this._$created||!Mr)return;this._$created=!0,this._$posted=!0,this._$updated=!1;let t=0;const e=hr();e[t++]=this._$instanceId,e[t++]=this._$parent?this._$parent._$instanceId:-1,this._$registerProperty(e,2);const i=or();i.command="createDisplayObjectContainer",i.buffer=e;const s=ht(e.buffer);Mr.postMessage(i,s),lr(i),ot(s),this._$postChildrenIds()}_$postProperty(){if(!Mr)return;this._$postChildrenIds();const t=ht(),e=this._$createMessage();Mr.postMessage(e,t),ot(t),this._$posted=!0,this._$updated=!1}_$postChildrenIds(t=null){if(!Mr||!this._$created)return;let e=!1;if(!t){const i=this._$getChildren();t=ht();for(let e=0;eo||a>l)&&(h._$width=n,h._$height=a,h._$resizeCanvas(n,a,h.scaleX));const c=i?i._$colorTransform:k;let _=e?e._$matrix:P;if(e){const e=t._$transform.matrix;e.invert(),_=gt(_,e._$matrix),ur(e)}if(s||(s=wt.getCanvas()),Mr){t._$stage||(t instanceof ee?Sr&&Sr(t):(t._$createWorkerInstance(),t._$postProperty())),s.width=n,s.height=a;const e=s.getContext("2d");if(!e)throw new Error("the context is null.");e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,n,a);const i=t._$instanceId;Hs.set(i,{source:t,context:e,callback:r});const h=ht(),o={command:"bitmapDraw",sourceId:i,width:n,height:a};1===_[0]&&0===_[1]&&0===_[2]&&1===_[3]&&0===_[4]&&0===_[5]||(o.matrix=_.slice(),h.push(o.matrix.buffer)),1===c[0]&&1===c[1]&&1===c[2]&&1===c[3]&&0===c[4]&&0===c[5]&&0===c[6]&&0===c[7]||(o.colorTransform=c.slice(),h.push(o.colorTransform.buffer)),Mr.postMessage(o,h),ot(h)}else{const e=h.context;if(!e)throw new Error("the context is null.");e.reset(),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,h._$width,h._$height),e.beginPath(),t._$draw(e,_,c),e.drawInstacedArray(),e.frameBuffer.transferToMainTexture(),s.width=n,s.height=a;const i=s.getContext("2d");if(!i)return;i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,n,a),i.drawImage(h.canvas,0,0),r&&r(s)}e&&ur(e),i&&gr(i)}}class se extends Ft{constructor(t,e){super(),this._$name=`${t}`,this._$frame=0|e}static toString(){return"[class FrameLabel]"}static get namespace(){return"next2d.display.FrameLabel"}toString(){return"[object FrameLabel]"}get namespace(){return"next2d.display.FrameLabel"}get frame(){return this._$frame}get name(){return this._$name}}class re{constructor(t,e=null,i=!0,s=!1){this._$bitmapData=t,this._$matrix=e,this._$repeat=i,this._$smooth=s}clone(){return new re(this._$bitmapData.clone(),this._$matrix?this._$matrix.clone():null,this._$repeat,this._$smooth)}toArray(){return ht(this._$bitmapData,this._$matrix,this._$repeat,this._$smooth)}}class ne{constructor(t,e,i,s,r=null,n="pad",a="rgb",h=0){this._$type=t,this._$colors=e,this._$alphas=i,this._$ratios=s,this._$matrix=r,this._$spreadMethod=n,this._$interpolationMethod=a,this._$focalPointRatio=h,this._$colorStops=ht()}get colorStops(){if(!this._$colorStops.length){const t=v.min(v.min(this._$alphas.length,this._$colors.length),this._$ratios.length);for(let e=0;e7)switch(this._$recode||(this._$recode=ht()),this._$fills[2]===this._$fills[this._$fills.length-2]&&this._$fills[3]===this._$fills[this._$fills.length-1]||this._$fills.push(ae.LINE_TO,this._$fills[2],this._$fills[3]),this._$recode.push(...this._$fills),this._$fillType){case ae.FILL_STYLE:this._$recode.push(this._$fillType,this._$fillStyleR,this._$fillStyleG,this._$fillStyleB,this._$fillStyleA,ae.END_FILL);break;case ae.GRADIENT_FILL:this._$fillGradient&&this._$recode.push(this._$fillType,...this._$fillGradient.toArray());break;case ae.BITMAP_FILL:this._$fillBitmap&&this._$recode.push(this._$fillType,...this._$fillBitmap.toArray())}return this._$fills&&(ot(this._$fills),this._$fills=null),this._$fillType=0,this._$fillGradient=null,this._$fillBitmap=null,this._$fillStyleR=0,this._$fillStyleG=0,this._$fillStyleB=0,this._$fillStyleA=0,this._$doFill=!1,this._$restart(),this}endLine(){if(this._$doLine&&this._$lines)switch(this._$recode||(this._$recode=ht()),this._$recode.push(...this._$lines),ot(this._$lines),this._$lines=null,this._$lineType){case ae.STROKE_STYLE:this._$recode.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,this._$lineStyleR,this._$lineStyleG,this._$lineStyleB,this._$lineStyleA,ae.END_STROKE);break;case ae.GRADIENT_STROKE:this._$lineGradient&&this._$recode.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$lineGradient.toArray());break;case ae.BITMAP_STROKE:this._$fillBitmap&&this._$recode.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$fillBitmap.toArray())}return this._$lineType=0,this._$lineWidth=0,this._$lineGradient=null,this._$lineStyleR=0,this._$lineStyleG=0,this._$lineStyleB=0,this._$lineStyleA=0,this._$caps="none",this._$joints="round",this._$miterLimit=0,this._$doLine=!1,this._$restart(),this}lineBitmapStyle(t,e=null,i=!0,s=!1){return this._$doLine&&this.endLine(),this._$lines||(this._$lines=ht()),this._$maxAlpha=1,this._$doLine=!0,this._$canDraw=!0,this._$lines.push(ae.BEGIN_PATH),this._$lineType=ae.BITMAP_STROKE,this._$fillBitmap=new re(t,e,i,s),this}lineGradientStyle(t,e,i,s,r=null,n="pad",a="rgb",h=0){if(!this._$doLine)return this;this._$lines||(this._$lines=ht());for(let t=0;t0&&a._$canApply(r);let T=Q(0,g,0,f);if(x&&r)for(let t=0;tA.width||d-T.yMin>A.height)return void J(T);if(0>$+T.xMax||0>d+T.yMax)return void J(T);J(T),""===this._$uniqueKey&&(!h&&a._$loaderInfo&&a._$characterId?this._$uniqueKey=`${a._$loaderInfo._$id}@${this._$bitmapId||a._$characterId}`:this._$uniqueKey=this._$createCacheKey());const M=cr();if("bitmap"===this._$mode)this._$cacheKeys.length||(this._$cacheKeys=wt.generateKeys(this._$uniqueKey));else if(!this._$cacheKeys.length||this._$cacheParams[0]!==p||this._$cacheParams[1]!==m||this._$cacheParams[2]!==i[7]){const t=ht();t[0]=p,t[1]=m,this._$cacheKeys=wt.generateKeys(this._$uniqueKey,t,i),ot(t),this._$cacheParams[0]=p,this._$cacheParams[1]=m,this._$cacheParams[2]=i[7]}if(t.cachePosition=wt.get(this._$cacheKeys),!t.cachePosition){const s=y.currentAttachment;s&&s.mask&&t.stopStencil();let r=0,n=0;if("shape"===this._$mode){r=v.ceil(v.abs(l.xMax-l.xMin)*p),n=v.ceil(v.abs(l.yMax-l.yMin)*m);const e=t._$getTextureScale(r,n);e<1&&(r*=e,n*=e)}else r=v.ceil(v.abs(l.xMax-l.xMin)),n=v.ceil(v.abs(l.yMax-l.yMin));if(t.cachePosition=y.createCachePosition(r,n),t.bindRenderBuffer(t.cachePosition),t.reset(),"shape"===this._$mode?t.setTransform(p,0,0,m,-l.xMin*p,-l.yMin*m):t.setTransform(1,0,0,1,-l.xMin,-l.yMin),h){const i=M.scaleX,s=it(i,0,0,i,0,0),r=gt(s,o);st(s);const n=a._$parent._$transform.concatenatedMatrix._$matrix,h=it(n[0],n[1],n[2],n[3],n[4]*i-$,n[5]*i-d);st(n);const c=gt(h,r),_=c[4]-(e[4]-$),u=c[5]-(e[5]-d);st(c);const g=pt(l,r),f=+g.xMax,p=+g.xMin,m=+g.yMax,x=+g.yMin,b=v.ceil(v.abs(f-p)),T=v.ceil(v.abs(m-x));J(g);const y=a._$scale9Grid,E={x:y.x,y:y.y,w:y.width,h:y.height};t.grid.enable(p,x,b,T,l,E,i,r[0],r[1],r[2],r[3],r[4],r[5],h[0],h[1],h[2],h[3],h[4]-_,h[5]-u),st(r),st(h)}this._$doDraw(t,i,!1),h&&t.grid.disable(),y.transferTexture(t.cachePosition),wt.set(this._$cacheKeys,t.cachePosition),t._$bind(s)}let w=0,S=0;if(x){const i=this._$createBitmapTexture(t,t.cachePosition,p,m,g,f),s=a._$drawFilter(t,e,r,g,f,i);s.offsetX&&(w=s.offsetX),s.offsetY&&(S=s.offsetY),t.cachePosition=s}if(x||"bitmap"!==this._$mode){const i=v.atan2(e[1],e[0]),s=v.atan2(-e[2],e[3]);if(x||!i&&!s)t.setTransform(1,0,0,1,$-w,d-S);else{const r=l.xMin*p,n=l.yMin*m,a=v.cos(i),h=v.sin(i),o=v.cos(s),c=v.sin(s);t.setTransform(a,h,-c,o,r*a-n*c+e[4],r*h+n*o+e[5])}}else t.setTransform(e[0],e[1],e[2],e[3],l.xMin*e[0]+l.yMin*e[2]+e[4],l.xMin*e[1]+l.yMin*e[3]+e[5]);t.cachePosition&&(t.globalAlpha=n,t.imageSmoothingEnabled="shape"===this._$mode,t.globalCompositeOperation=s,t.drawInstance($-w,d-S,_,u,i),t.cachePosition=null),J(l)}_$createBitmapTexture(t,e,i,s,r,n){if("bitmap"!==this._$mode)return null;t.drawInstacedArray();const a=t.frameBuffer,h=a.currentAttachment,o=a.createCacheAttachment(r,n);t._$bind(o),t.reset();const l=it(i,0,0,s,r/2,n/2),c=t.getTextureFromRect(e),_=it(1,0,0,1,-c.width/2,-c.height/2),$=gt(l,_);st(l),st(_),t.setTransform($[0],$[1],$[2],$[3],$[4],$[5]),t.drawImage(c,0,0,c.width,c.height);const u=a.getTextureFromCurrentAttachment();return t._$bind(h),a.releaseAttachment(o),a.textureManager.release(c),u}_$doDraw(t,e=null,i=!1){t.reset(),t.beginPath(),this._$runCommand(t,e,i)}_$hit(t,e,i,s=!1){return t.beginPath(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),this._$runCommand(t,null,s,i)}_$getBounds(){const t=this._$displayObject;return t&&t._$bounds?Q(t._$bounds.xMin,t._$bounds.xMax,t._$bounds.yMin,t._$bounds.yMax):Q(this._$xMin,this._$xMax,this._$yMin,this._$yMax)}_$restart(){this._$displayObject&&(this._$displayObject._$posted=!1,this._$displayObject._$isUpdated()||(this._$displayObject._$doChanged(),x(),wt.removeCache(this._$displayObject._$instanceId),this._$displayObject._$characterId&&wt.removeCache(this._$displayObject._$characterId)))}_$setBounds(t=0,e=0){this._$setFillBounds(t,e),this._$doLine&&this._$setLineBounds(t,e)}_$setFillBounds(t=0,e=0){this._$xMin=v.min(this._$xMin,t),this._$xMax=v.max(this._$xMax,t),this._$yMin=v.min(this._$yMin,e),this._$yMax=v.max(this._$yMax,e)}_$setLineBounds(t=0,e=0){this._$xMin=v.min(this._$xMin,v.min(t,this._$pointerX)),this._$xMax=v.max(this._$xMax,v.max(t,this._$pointerX)),this._$yMin=v.min(this._$yMin,v.min(e,this._$pointerY)),this._$yMax=v.max(this._$yMax,v.max(e,this._$pointerY));const i=this._$lineWidth/2,s=.5*v.PI,r=v.atan2(e-this._$pointerY,t-this._$pointerX),n=v.atan2(this._$pointerY-e,this._$pointerX-t),a=r+s,h=r-s,o=n+s,l=n-s;let c=t+i,_=-i+t,$=this._$pointerX+i,u=-i+this._$pointerX,d=e+i,g=-i+e,f=this._$pointerY+i,p=-i+this._$pointerY;switch(this._$xMin=v.min(this._$xMin,v.min(c,v.min(_,v.min($,u)))),this._$xMax=v.max(this._$xMax,v.max(c,v.max(_,v.max($,u)))),this._$yMin=v.min(this._$yMin,v.min(d,v.min(g,v.min(f,p)))),this._$yMax=v.max(this._$yMax,v.max(d,v.max(g,v.max(f,p)))),v.abs(a)%s!=0&&(c=t+v.cos(a)*i),v.abs(h)%s!=0&&(_=t+v.cos(h)*i),v.abs(o)%s!=0&&($=this._$pointerX+v.cos(o)*i),v.abs(l)%s!=0&&(u=this._$pointerX+v.cos(l)*i),a&&v.abs(a)%v.PI!=0&&(d=e+v.sin(a)*i),h&&v.abs(h)%v.PI!=0&&(g=e+v.sin(h)*i),o&&v.abs(o)%v.PI!=0&&(f=this._$pointerY+v.sin(o)*i),l&&v.abs(l)%v.PI!=0&&(p=this._$pointerY+v.sin(l)*i),this._$xMin=v.min(this._$xMin,v.min(c,v.min(_,v.min($,u)))),this._$xMax=v.max(this._$xMax,v.max(c,v.max(_,v.max($,u)))),this._$yMin=v.min(this._$yMin,v.min(d,v.min(g,v.min(f,p)))),this._$yMax=v.max(this._$yMax,v.max(d,v.max(g,v.max(f,p)))),this._$caps){case"round":if(v.abs(r)%s!=0){const e=t+v.cos(r)*i;this._$xMin=v.min(this._$xMin,e),this._$xMax=v.max(this._$xMax,e)}if(r&&v.abs(r)%v.PI!=0){const t=e+v.sin(r)*i;this._$yMin=v.min(this._$yMin,t),this._$yMax=v.max(this._$yMax,t)}if(v.abs(n)%s!=0){const t=this._$pointerX+v.cos(n)*i;this._$xMin=v.min(this._$xMin,t),this._$xMax=v.max(this._$xMax,t)}if(n&&v.abs(n)%v.PI!=0){const t=this._$pointerY+v.sin(n)*i;this._$yMin=v.min(this._$yMin,t),this._$yMax=v.max(this._$yMax,t)}break;case"square":if(v.abs(r)%s!=0){const t=v.cos(r)*i,e=c+t,s=_+t;this._$xMin=v.min(this._$xMin,v.min(e,s)),this._$xMax=v.max(this._$xMax,v.max(e,s))}if(v.abs(n)%s!=0){const t=v.cos(n)*i,e=$+t,s=u+t;this._$xMin=v.min(this._$xMin,v.min(e,s)),this._$xMax=v.max(this._$xMax,v.max(e,s))}if(r&&v.abs(r)%v.PI!=0){const t=v.sin(r)*i,e=d+t,s=g+t;this._$yMin=v.min(this._$yMin,v.min(e,s)),this._$yMax=v.max(this._$yMax,v.max(e,s))}if(n&&v.abs(n)%v.PI!=0){const t=v.sin(n)*i,e=f+t,s=p+t;this._$yMin=v.min(this._$yMin,v.min(e,s)),this._$yMax=v.max(this._$yMax,v.max(e,s))}}}_$margePath(t){this._$doFill&&this._$fills&&this._$fills.push(...t),this._$doLine&&this._$lines&&this._$lines.push(...t),ot(t)}_$createCacheKey(){if(this._$doLine&&this.endLine(),this._$doFill&&this.endFill(),!this._$recode)return"";const t=this._$getRecodes();let e=0;for(let i=0;i{_=t})(dt(t,0,1,1));const e=$(),i=cr(),s=i._$sources;for(let t=0;t{this._$loadStart(t)},progress:t=>{this._$progress(t)},loadend:t=>{this._$loadEnd(t)}}})}_$loadStart(t){this._$bytesLoaded=t.loaded,this._$bytesTotal=t.total,this.willTrigger(It.OPEN)&&this.dispatchEvent(new It(It.OPEN)),this.willTrigger(kt.PROGRESS)&&this.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total))}_$progress(t){this._$bytesLoaded=t.loaded,this._$bytesTotal=t.total,this.willTrigger(kt.PROGRESS)&&this.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total))}_$loadEnd(t){this._$bytesLoaded=t.loaded,this._$bytesTotal=t.total,this.willTrigger(kt.PROGRESS)&&this.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total));const e=t.target;if(!e)throw new Error("the Sound target is null.");199e.status?(this._$arrayBuffer=e.response,Ns?pr(this).then((t=>{(t.hasEventListener(It.INIT)||t.hasEventListener(It.COMPLETE))&&cr()._$loaders.push(t)})):Xs.push(this)):this.willTrigger(Lt.IO_ERROR)&&this.dispatchEvent(new Lt(Lt.IO_ERROR,!1,!1,e.statusText))}play(t=0){const e=this._$character?this._$character.audioBuffer:this._$audioBuffer;if(Ns&&e)this._$createBufferSource(t);else{const e=R.now(),i=()=>{if(null===(this._$character?this._$character.audioBuffer:this._$audioBuffer)||null===Ns)I(i);else{const i=(R.now()-e)/1e3;this._$createBufferSource(t,i)}};I(i)}}stop(){this._$stopFlag=!0;const t=this._$sources.length;if(t){const e=cr();if(Ns)for(let e=0;e{(t.hasEventListener(It.INIT)||t.hasEventListener(It.COMPLETE))&&cr()._$loaders.push(t)})):Xs.push(this)),this._$loopCount=0|t.loopCount,this._$volume=v.min(oe.volume,t.volume)}_$createBufferSource(t=0,e=0){if(!Ns)throw new Error("the Audio Context is null.");const i=Ns.createBufferSource();i.onended=t=>this._$endEventHandler(t),i.buffer=this._$character?this._$character.audioBuffer:this._$audioBuffer,i._$gainNode=Ns.createGain(),i._$gainNode.connect(Ns.destination);const s=v.min(oe.volume,this._$volume);i._$gainNode.gain.value=s,i._$volume=s,i.connect(i._$gainNode),i.start(0|t,e);const r=cr();-1===r._$sources.indexOf(this)&&r._$sources.push(this),this._$sources.push(i),this._$stopFlag=!1}_$endEventHandler(t){const e=t.target;if(this._$sources.splice(this._$sources.indexOf(e),1),!this._$stopFlag&&this._$loopCount>this._$currentCount)this._$createBufferSource(),this._$currentCount++;else{if(this._$currentCount=0,Ns&&(e._$gainNode&&(e._$gainNode.gain.value=0,e._$gainNode.disconnect(),e._$gainNode=null),e.onended=null,e.disconnect()),!this._$sources.length){const t=cr();t._$sources.splice(t._$sources.indexOf(this),1)}this.willTrigger(It.SOUND_COMPLETE)&&this.dispatchEvent(new It(It.SOUND_COMPLETE))}}}class ce{constructor(t=1,e=!1){this._$volume=1,this._$loop=!1,this.volume=t,this.loop=e}static toString(){return"[class SoundTransform]"}static get namespace(){return"next2d.media.SoundTransform"}toString(){return"[object SoundTransform]"}get namespace(){return"next2d.media.SoundTransform"}get loop(){return this._$loop}set loop(t){this._$loop=t}get volume(){return this._$volume}set volume(t){this._$volume=dt(+t,0,1,0)}}class _e extends Zt{constructor(t=0,e=0){super(),this._$smoothing=!0,this._$loop=!1,this._$autoPlay=!0,this._$bounds=Q(0,t,0,e),this._$bytesLoaded=0,this._$bytesTotal=0,this._$timerId=-1,this._$video=null,this._$stop=!0,this._$ready=!1,this._$volume=1,this._$context=null,this._$cacheKeys=ht(),this._$cacheParams=ht(0,0,0)}static toString(){return"[class Video]"}static get namespace(){return"next2d.media.Video"}toString(){return"[object Video]"}get namespace(){return"next2d.media.Video"}get bytesLoaded(){return this._$bytesLoaded}get bytesTotal(){return this._$bytesTotal}get currentTime(){return this._$video?this._$video.currentTime:0}get duration(){return this._$video?this._$video.duration:0}get loop(){return this._$loop}set loop(t){this._$loop=!!t}get autoPlay(){return this._$autoPlay}set autoPlay(t){this._$autoPlay=!!t}get smoothing(){return this._$smoothing}set smoothing(t){this._$smoothing=!!t}get src(){return this._$video?this._$video.src:""}set src(t){this._$video||(this._$video=this._$initializeVideo()),this._$video.src=t,this._$video.load()}get videoHeight(){return this._$video?this._$video.videoHeight:this._$bounds.yMax}get videoWidth(){return this._$video?this._$video.videoWidth:this._$bounds.xMax}get volume(){return this._$volume}set volume(t){this._$volume=dt(v.min(oe.volume,t),0,1,1),this._$video&&(this._$video.volume=this._$volume)}clear(){this._$video&&this._$video.pause(),this._$video=null,this._$bounds.xMax=0,this._$bounds.yMax=0,this._$doChanged()}pause(){if(this._$video&&!this._$stop){this._$stop=!0,this._$video.pause(),F(this._$timerId),this._$timerId=-1,this.hasEventListener(Nt.PAUSE)&&this.dispatchEvent(new Nt(Nt.PAUSE,!1,!1,this._$bytesLoaded,this._$bytesTotal));const t=cr();t._$videos.splice(t._$videos.indexOf(this),1)}}play(){this._$video&&this._$stop&&(this._$stop=!1,this._$video.volume=v.min(this._$volume,oe.volume),this._$video.play().then((()=>{this._$timerId=I((()=>{this._$update()})),this.hasEventListener(Nt.PLAY)&&this.dispatchEvent(new Nt(Nt.PLAY,!1,!1,this._$bytesLoaded,this._$bytesTotal));const t=cr();-1===t._$videos.indexOf(this)&&t._$videos.push(this),this._$ready=!0})))}seek(t){this._$video&&(this._$video.currentTime=t,this.hasEventListener(Nt.SEEK)&&this.dispatchEvent(new Nt(Nt.SEEK,!1,!1,this._$bytesLoaded,this._$bytesTotal)))}_$update(){const t=cr();if(!this.stage||!this._$video)return this._$video&&this._$video.pause(),F(this._$timerId),this._$timerId=-1,void t._$videos.splice(t._$videos.indexOf(this),1);Mr&&this._$postProperty(),this._$bytesLoaded=this._$video.currentTime,this._$video.currentTime&&(this.hasEventListener(Nt.PROGRESS)&&this.dispatchEvent(new Nt(Nt.PROGRESS,!1,!1,this._$bytesLoaded,this._$bytesTotal)),this._$doChanged()),this._$timerId=I((()=>{this._$update()}))}_$start(){if(!this._$video)return;this._$bounds.xMax=this._$video.videoWidth,this._$bounds.yMax=this._$video.videoHeight,this._$bytesTotal=this._$video.duration;const t=cr();this._$autoPlay&&(this._$stop=!1,this._$video.play().then((()=>{-1===t._$videos.indexOf(this)&&t._$videos.push(this),this.hasEventListener(Nt.PLAY_START)&&this.dispatchEvent(new Nt(Nt.PLAY_START,!1,!1,this._$bytesLoaded,this._$bytesTotal)),this._$timerId=I((()=>{this._$update()})),this._$ready=!0,this._$doChanged()}))),this._$createContext()}_$initializeVideo(){this._$cacheKeys.length=0;const t=d.createElement("video");return t.autoplay=!1,t.crossOrigin="anonymous",Ns||(t.muted=!0),Zs&&t.setAttribute("playsinline",""),t.addEventListener("canplaythrough",(()=>{this._$start()})),t.addEventListener("ended",(()=>{this._$loop?t.currentTime=0:(this.hasEventListener(Nt.PLAY_END)&&this.dispatchEvent(new Nt(Nt.PLAY_END,!1,!1,this._$bytesLoaded,this._$bytesTotal)),F(this._$timerId),this._$timerId=-1)})),t}_$createContext(){if(Mr){const t=new S(this._$bounds.xMax,this._$bounds.yMax);this._$context=t.getContext("2d")}}_$buildCharacter(t){t.buffer&&!t._$buffer&&(t._$buffer=new Uint8Array(t.buffer),t.buffer=null),this._$loop=t.loop,this._$autoPlay=t.autoPlay,this._$bounds.xMin=t.bounds.xMin,this._$bounds.yMin=t.bounds.yMin,this._$bounds.xMax=t.bounds.xMax,this._$bounds.yMax=t.bounds.yMax,this._$video||(this._$video=this._$initializeVideo()),this._$video.src=URL.createObjectURL(new Blob([t._$buffer],{type:"video/mp4"})),this._$video.volume=v.min(t.volume,oe.volume),this._$video.load(),Mr&&this._$stage&&this._$createWorkerInstance()}_$sync(t){this._$buildCharacter(t)}_$build(t,e){const i=this._$baseBuild(t,e);return this._$buildCharacter(i),i}_$clip(t,e){const i=this._$bounds.xMax,s=this._$bounds.yMax;if(!i||!s)return;let r=e;const n=this._$transform._$rawMatrix();1===n[0]&&0===n[1]&&0===n[2]&&1===n[3]&&0===n[4]&&0===n[5]||(r=gt(e,n)),t.reset(),t.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),t.clip(),r!==e&&st(r)}_$draw(t,e,i){if(!this._$visible||!this._$video||!this._$ready)return;let s=i;const r=this._$transform._$rawColorTransform();1===r[0]&&1===r[1]&&1===r[2]&&1===r[3]&&0===r[4]&&0===r[5]&&0===r[6]&&0===r[7]||(s=ft(i,r));const n=dt(s[3]+s[7]/255,0,1,0);if(!n)return void(s!==i&&nt(s));let a=e;const h=this._$transform._$rawMatrix();1===h[0]&&0===h[1]&&0===h[2]&&1===h[3]&&0===h[4]&&0===h[5]||(a=gt(e,h));const o=pt(this._$bounds,a),l=+o.xMax,c=+o.xMin,_=+o.yMax,$=+o.yMin;J(o);const u=v.ceil(v.abs(l-c)),d=v.ceil(v.abs(_-$));switch(!0){case 0===u:case 0===d:case u===-1/0:case d===-1/0:case u===b:case d===b:return}let g=+v.sqrt(a[0]*a[0]+a[1]*a[1]);if(!E.isInteger(g)){const t=g.toString(),e=t.indexOf("e");-1!==e&&(g=+t.slice(0,e)),g=+g.toFixed(4)}let f=+v.sqrt(a[2]*a[2]+a[3]*a[3]);if(!E.isInteger(f)){const t=f.toString(),e=t.indexOf("e");-1!==e&&(f=+t.slice(0,e)),f=+f.toFixed(4)}const p=this._$filters||this.filters,m=p&&p.length>0&&this._$canApply(p);let x=Q(0,u,0,d);if(m)for(let t=0;ty.width||$-x.yMin>y.height)return void J(x);if(0>c+x.xMax||0>$+x.yMax)return void J(x);if(J(x),!this._$cacheKeys.length||this._$cacheParams[0]!==g||this._$cacheParams[1]!==f||this._$cacheParams[2]!==i[7]){const t=ht();t[0]=g,t[1]=f,this._$cacheKeys=wt.generateKeys(this._$instanceId,t,i),ot(t),this._$cacheParams[0]=g,this._$cacheParams[1]=f,this._$cacheParams[2]=i[7]}const A=this._$blendMode||this.blendMode;if(t.cachePosition=wt.get(this._$cacheKeys),!t.cachePosition){const e=v.ceil(v.abs(this._$bounds.xMax-this._$bounds.xMin)),i=v.ceil(v.abs(this._$bounds.yMax-this._$bounds.yMin)),s=T.createCachePosition(e,i);t.cachePosition=s,wt.set(this._$cacheKeys,s)}const M=T.createTextureFromVideo(this._$video,this._$smoothing);let w=0,S=0;if(m){const e=T.currentAttachment,i=T.createCacheAttachment(u,d);t._$bind(i),t.reset();const s=it(g,0,0,f,u/2,d/2),r=it(1,0,0,1,-M.width/2,-M.height/2),n=gt(s,r);st(s),st(r),t.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t.drawImage(M,0,0,M.width,M.height);const h=T.getTextureFromCurrentAttachment();t._$bind(e),T.releaseAttachment(i),t.drawTextureFromRect(M,t.cachePosition);const o=this._$drawFilter(t,a,p,u,d,h);o.offsetX&&(w=o.offsetX),o.offsetY&&(S=o.offsetY),t.cachePosition=o,t.setTransform(1,0,0,1,c-w,$-S)}else t.drawTextureFromRect(M,t.cachePosition),t.setTransform(a[0],a[1],a[2],a[3],a[4],a[5]);t.cachePosition&&(t.globalAlpha=n,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=A,t.drawInstance(c-w,$-S,l,_,i),t.cachePosition=null),a!==e&&st(a),s!==i&&nt(s)}_$mouseHit(t,e,i){return!!this._$visible&&this._$hit(t,e,i)}_$hit(t,e,i){let s=e;const r=this._$transform._$rawMatrix();r!==P&&(s=gt(e,r));const n=this._$getBounds(null),a=pt(n,s),h=+a.xMax,o=+a.xMin,l=+a.yMax,c=+a.yMin;J(a),J(n);const _=v.ceil(v.abs(h-o)),$=v.ceil(v.abs(l-c));return t.setTransform(1,0,0,1,o,c),t.beginPath(),t.moveTo(0,0),t.lineTo(_,0),t.lineTo(_,$),t.lineTo(0,$),t.lineTo(0,0),s!==e&&st(s),t.isPointInPath(i.x,i.y)}_$getBounds(t=null){if(t){let e=t;const i=this._$transform._$rawMatrix();1===i[0]&&0===i[1]&&0===i[2]&&1===i[3]&&0===i[4]&&0===i[5]||(e=gt(t,i));const s=pt(this._$bounds,e);return e!==t&&st(e),s}return Q(this._$bounds.xMin,this._$bounds.xMax,this._$bounds.yMin,this._$bounds.yMax)}_$createWorkerInstance(){if(!Mr||this._$created)return;this._$created=!0;const t={command:"createVideo",buffer:new Float32Array,instanceId:this._$instanceId,parentId:this._$parent?this._$parent._$instanceId:-1,smoothing:this._$smoothing,xMin:this._$bounds.xMin,yMin:this._$bounds.yMin,xMax:this._$bounds.xMax,yMax:this._$bounds.yMax};this._$characterId>-1&&(t.characterId=this._$characterId),this._$loaderInfo&&(t.loaderInfoId=this._$loaderInfo._$id),this._$scale9Grid&&(t.grid={x:this._$scale9Grid.x,y:this._$scale9Grid.y,w:this._$scale9Grid.width,h:this._$scale9Grid.height}),Mr.postMessage(t)}_$postProperty(){if(!Mr)return;const t=this._$createMessage();t.smoothing=this._$smoothing;const e=ht(),i=this._$context;if(i&&this._$video){t.xMin=this._$bounds.xMin,t.yMin=this._$bounds.yMin,t.xMax=this._$bounds.xMax,t.yMax=this._$bounds.yMax,i.drawImage(this._$video,0,0);const s=i.canvas.transferToImageBitmap();t.imageBitmap=s,e.push(s)}Mr.postMessage(t,e),ot(e),this._$posted=!0,this._$updated=!1}}class $e extends ee{constructor(){super(),this._$buttonMode=!1,this._$hitArea=null,this._$soundTransform=null,this._$useHandCursor=!0}static toString(){return"[class Sprite]"}static get namespace(){return"next2d.display.Sprite"}toString(){return"[object Sprite]"}get namespace(){return"next2d.display.Sprite"}get buttonMode(){return this._$buttonMode}set buttonMode(t){this._$buttonMode=!!t}get dropTarget(){return Ds}get hitArea(){return this._$hitArea}set hitArea(t){this._$hitArea&&(this._$hitArea._$hitObject=null),this._$hitArea=t,t&&(t._$hitObject=this)}get soundTransform(){return this._$soundTransform||(this._$soundTransform=new ce),this._$soundTransform}set soundTransform(t){this._$soundTransform=t}get useHandCursor(){return this._$useHandCursor}set useHandCursor(t){this._$useHandCursor=t}startDrag(t=!1,e=null){let i=0,s=0;if(!t){const t=this._$dragMousePoint();i=this.x-t.x,s=this.y-t.y}Us(this),Vs.lock=t,Vs.position.x=i,Vs.position.y=s,Vs.bounds=e}stopDrag(){Us(null),Vs.lock=!1,Vs.position.x=0,Vs.position.y=0,Vs.bounds=null}_$sync(t){Mr&&this._$stage&&this._$createWorkerInstance(),this._$controller=t.controller,this._$dictionary=t.dictionary,this._$placeMap=t.placeMap,this._$placeObjects=t.placeObjects}_$build(t,e){const i=this._$baseBuild(t,e);return Mr&&this._$stage&&this._$createWorkerInstance(),this._$controller=i.controller,this._$dictionary=i.dictionary,this._$placeMap=i.placeMap,this._$placeObjects=i.placeObjects,i}_$dragMousePoint(){return this._$parent?this._$parent.globalToLocal(_r()):this.globalToLocal(_r())}}class ue extends $e{constructor(){super(),this._$stopFlag=!1,this._$canAction=!0,this._$childRemove=!1,this._$canSound=!0,this._$actionProcess=!1,this._$actions=ct(),this._$frameCache=ct(),this._$labels=null,this._$sounds=ct(),this._$actionOffset=0,this._$actionLimit=0,this._$currentFrame=1,this._$totalFrames=1,this._$isPlaying=!1,this._$loopConfig=null,this._$tweenFrame=0}static toString(){return"[class MovieClip]"}static get namespace(){return"next2d.display.MovieClip"}toString(){return"[object MovieClip]"}get namespace(){return"next2d.display.MovieClip"}get currentFrame(){return this._$currentFrame}get currentFrameLabel(){if(!this._$labels)return null;const t=this._$currentFrame;return this._$labels.has(t)&&this._$labels.get(t)||null}get currentLabels(){return this._$labels&&this._$labels.size?T.from(this._$labels.values()):null}get isPlaying(){return this._$isPlaying}get totalFrames(){return this._$totalFrames}get loopConfig(){if(this._$loopConfig)return this._$loopConfig;const t=this._$placeObject||this._$getPlaceObject();return t&&t.loop?(this._$tweenFrame&&(this._$changePlace=this._$tweenFrame!==this._$parent._$currentFrame,this._$tweenFrame=0),t.loop.tweenFrame&&(this._$tweenFrame=t.loop.tweenFrame),t.loop):null}set loopConfig(t){this._$loopConfig=t,t&&(t.frame=this._$startFrame,this._$loopConfig=t,this._$currentFrame=this._$getLoopFrame(t))}gotoAndPlay(t){this.play(),this._$goToFrame(t)}gotoAndStop(t){this.stop(),this._$goToFrame(t)}nextFrame(){this.stop(),this._$totalFrames>this._$currentFrame&&this._$goToFrame(this._$currentFrame+1)}play(){this._$stopFlag=!1,this._$isPlaying=!0,this._$updateState()}prevFrame(){const t=this._$currentFrame-1;t&&(this.stop(),this._$goToFrame(t))}stop(){this._$stopFlag=!0,this._$isPlaying=!1}addFrameLabel(t){this._$labels||(this._$labels=ct()),this._$labels.set(t.frame,t)}addFrameScript(...t){for(let e=0;e=s&&this._$addAction(s,r),s===this._$currentFrame){const t=cr();if(t._$actionOffset=t._$actions.length,this._$canAction=!0,this._$setAction(),t._$actionOffset!==t._$actions.length){const e=t._$actions.splice(0,t._$actionOffset);t._$actions.push(...t._$actions,...e),t._$actionOffset=0}}}}_$getFrameForLabel(t){if(!this._$labels)return 0;for(const[e,i]of this._$labels)if(i.name===t)return e;return 0}_$addAction(t,e){if(t){this._$actions.has(t)||this._$actions.set(t,ht());const i=this._$actions.get(t);i&&i.push(e)}}_$setAction(){if(this._$executeAddedEvent(),this._$canAction){const t=this._$currentFrame;if(this._$labels&&this._$labels.has(t)){const e=this._$labels.get(t);e&&e.willTrigger(It.FRAME_LABEL)&&e.dispatchEvent(new It(It.FRAME_LABEL))}if(this._$actions.size&&this._$actions.has(t)){const t=cr();-1===t._$actions.indexOf(this)&&t._$actions.push(this)}}}_$goToFrame(t){let e=+t;if(C(e)&&(e=this._$getFrameForLabel(`${t}`)),e<1&&(e=1),e>this._$totalFrames)return this._$currentFrame=this._$totalFrames,this._$clearChildren(),this._$canAction=!1,void(this._$wait=!1);const i=cr();switch(!0){case e!==this._$currentFrame:{this._$wait=!1;const t=this._$currentFrame;this._$actionProcess&&(this._$frameCache.set("nextFrame",e),this._$frameCache.set("stopFlag",this._$stopFlag),this._$frameCache.set("isPlaying",this._$isPlaying)),this._$currentFrame=e,this._$clearChildren(),i._$actionOffset=i._$actions.length;const s=i._$actionOffset?i._$actions.indexOf(this):-1;if(this._$canAction=!0,this._$prepareActions(),i._$actionOffset&&i._$actionOffset!==i._$actions.length){const t=i._$actions.splice(0,i._$actionOffset);i._$actions.push(...i._$actions,...t),i._$actionOffset=0}if(!this._$actionProcess&&(s>-1||!i._$actionOffset))for(;i._$actions.length&&i._$actions.length!==s;){const t=i._$actions.pop();if(!t)continue;t._$canAction=!1,t._$actionOffset=0,t._$actionLimit=0,t._$actionProcess&&t._$frameCache.size&&(t._$currentFrame=t._$frameCache.get("nextFrame"),t._$clearChildren(),t._$stopFlag=t._$frameCache.get("stopFlag"),t._$isPlaying=t._$frameCache.get("isPlaying"),t._$frameCache.clear());const e=t._$currentFrame;if(!t._$actions.has(e))continue;const s=t._$actions.get(e);if(s)for(let e=0;e-1:{if(!this._$actionLimit)break;this._$wait=!1;const t=i._$actions.splice(this._$actionOffset,this._$actionLimit);for(;t.length;){const e=t.pop();if(!e)continue;e._$canAction=!1,e._$actionOffset=0,e._$actionLimit=0;const i=e._$currentFrame;if(!e._$actions.has(i))continue;const s=e._$actions.get(i);if(s)for(let t=0;t-1;--e)t[e]._$prepareActions();this._$setAction()}_$nextFrame(){let t=this._$needsChildren;switch(!0){case this._$wait:t=!0,this._$wait=!1;break;case this._$stopFlag:case 1===this._$totalFrames:break;default:{t=!0,this._$canAction=!0,this._$canSound=!0;const e=this.loopConfig;if(e){const i=e.end?e.end:this._$totalFrames;switch(e.type){case 0:this._$changePlace?this._$currentFrame=e.start:(++this._$currentFrame,this._$currentFrame>i&&(this._$currentFrame=e.start));break;case 1:this._$changePlace?this._$currentFrame=e.start:(++this._$currentFrame,this._$currentFrame>i&&(this._$currentFrame=i,t=!1,this._$canAction=!1,this._$canSound=!1));break;case 2:this._$changePlace?this._$currentFrame=e.start:(t=!1,this._$canAction=!1,this._$canSound=!1);break;case 3:this._$changePlace?this._$currentFrame=i:(--this._$currentFrame,e.start>this._$currentFrame&&(this._$currentFrame=e.start,t=!1,this._$canAction=!1,this._$canSound=!1));break;case 4:this._$changePlace?this._$currentFrame=i:(--this._$currentFrame,e.start>this._$currentFrame&&(this._$currentFrame=i))}}else++this._$currentFrame,this._$currentFrame>this._$totalFrames&&(this._$currentFrame=1);if(t&&this._$clearChildren(),this._$canSound&&this._$sounds.size&&this._$sounds.has(this._$currentFrame)){const t=cr();t._$sounds.has(this._$instanceId)||t._$sounds.set(this._$instanceId,this)}}}const e=this._$needsChildren?this._$getChildren():this._$children;for(let i=e.length-1;i>-1;--i){const s=e[i];s._$isNext&&(t?s._$nextFrame():t=s._$nextFrame())}return this._$setAction(),this._$isNext=t,!this._$posted&&Mr&&this._$postProperty(),this._$isNext}_$getLoopFrame(t){const e=this._$parent._$currentFrame-t.frame;let i=1;switch(t.type){case 0:{const s=t.end?t.end:this._$totalFrames;i=t.start;for(let r=0;rs&&(i=t.start)}break;case 1:{const s=t.end?t.end:this._$totalFrames;i=v.min(s,t.start+e)}break;case 2:i=t.start;break;case 3:i=t.end?t.end:this._$totalFrames,i=v.max(t.start,i-e);break;case 4:{const s=t.end?t.end:this._$totalFrames;i=s;for(let r=0;ri&&(i=s)}}return i}_$buildCharacter(t){if(t.sounds)for(let e=0;e{this._$loadstart(t)},progress:t=>{this._$progress(t)},loadend:t=>{this._$loadend(t)}}}))}loadJSON(t){if("zlib"===t.type){if(Pr())return void Ir.push(t);Lr(!0);const e=Rr(),i=new Uint8Array(t.buffer);e.onmessage=t=>{this._$unzipHandler(t)},e.postMessage(i,[i.buffer])}else this._$build(t)}_$loadend(t){const e=this._$loaderInfo;if(!e)return;e.bytesLoaded=t.loaded,e.bytesTotal=t.total,e.willTrigger(kt.PROGRESS)&&e.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total));const i=t.target;if(e.willTrigger(Bt.HTTP_STATUS)){const t=Tr(i.getAllResponseHeaders());e.dispatchEvent(new Bt(Bt.HTTP_STATUS,!1,!1,i.status,i.responseURL,t))}199i.status?"json"===e.format?this.loadJSON(i.response):e.willTrigger(Lt.IO_ERROR)&&e.dispatchEvent(new Lt(Lt.IO_ERROR,!1,!1,"LoaderInfo format is `json`")):e.willTrigger(Lt.IO_ERROR)&&e.dispatchEvent(new Lt(Lt.IO_ERROR,!1,!1,i.statusText))}_$unzipHandler(t){if(this._$build(t.data),Ir.length){const t=Ir.pop();if(!t)return;const e=new Uint8Array(t.buffer),i=Rr();i.onmessage=t=>{this._$unzipHandler(t)},i.postMessage(e,[e.buffer])}else Lr(!1)}_$loadstart(t){const e=this._$loaderInfo;e&&(e.bytesLoaded=t.loaded,e.bytesTotal=t.total,e.willTrigger(It.OPEN)&&e.dispatchEvent(new It(It.OPEN)),e.willTrigger(kt.PROGRESS)&&e.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total)))}_$progress(t){const e=this._$loaderInfo;e&&(e.bytesLoaded=t.loaded,e.bytesTotal=t.total,e.willTrigger(kt.PROGRESS)&&e.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total)))}_$build(t){const e=this._$loaderInfo;if(!e)return;const i=ct();if(t.symbols.length)for(let e=0;e{const t=e.width,i=e.height,s=new ie(t,i);s.image=e,this.graphics.beginBitmapFill(s).drawRect(0,0,t,i),this.hasEventListener(It.LOAD)&&this.dispatchEvent(new It(It.LOAD))})),this._$src=e.src=t,this.graphics._$mode="bitmap"}_$buildCharacter(t,e){const i=this.graphics;if(!e._$data)throw new Error("the loaderInfo data is null.");if(t.recodes)switch(!0){case t.bitmapId>0:{const s=e._$data.characters[t.bitmapId];if(!s.buffer)throw new Error("the bitmap buffer is null.");const r=v.abs(s.bounds.xMax-s.bounds.xMin),n=v.abs(s.bounds.yMax-s.bounds.yMin),a=new ie(r,n);s._$buffer||(s._$buffer=new Uint8Array(s.buffer),ot(s.buffer),s.buffer=null),a.buffer=s._$buffer.slice(),i._$recode=ht(),r===t.bounds.xMax-t.bounds.xMin&&n===t.bounds.yMax-t.bounds.yMin&&(i._$bitmapId=t.bitmapId,i._$mode="bitmap");const h=t.recodes;if(h[h.length-1]===ae.END_FILL){const t=h.length-6;for(let e=0;e0&&i._$canDraw){i._$posted=!0;const e=or(),s=i._$getRecodes();e.command=`shapeRecodes@${this._$instanceId}`,e.buffer=s;const r=ht(s.buffer);Mr.postMessage(e,r),lr(e),ot(r),t[2]=i._$maxAlpha,t[3]=+i._$canDraw}const s=this._$getBounds();t[e++]=s.xMin,t[e++]=s.yMin,t[e++]=s.xMax,t[e++]=s.yMax,t[e++]=this._$characterId>-1?this._$characterId:-1,t[e++]=this._$loaderInfo?this._$loaderInfo._$id:-1,this._$registerProperty(t,10);const r=or();r.command="createShape",r.buffer=t;const n=ht(t.buffer);Mr.postMessage(r,n),lr(r),ot(n)}_$postProperty(){if(!this._$created||!Mr)return;const t=this._$createMessage(),e=this._$graphics;if(e&&!e._$posted){t.maxAlpha=e._$maxAlpha,t.canDraw=e._$canDraw;const i=e._$getRecodes();t.recodes=i;const s=ht(i.buffer),r=this._$getBounds();t.xMin=r.xMin,t.yMin=r.yMin,t.xMax=r.xMax,t.yMax=r.yMax,Mr.postMessage(t,s),ot(s)}else Mr.postMessage(t);this._$posted=!0,this._$updated=!1}}class fe extends ee{constructor(){super(),this._$player=null,this._$root=this,this._$stage=this,this._$invalidate=!0,this._$color=4294967295,this._$frameRate=60}static toString(){return"[class Stage]"}static get namespace(){return"next2d.display.Stage"}toString(){return"[object Stage]"}get namespace(){return"next2d.display.Stage"}get color(){return this._$color}set color(t){this._$color=dt(xt(t),0,16777215,16777215);const e=this._$player;if(e&&e.context){const t=bt(this._$color);e.context._$setColor(t.R/255,t.G/255,t.B/255,t.A/255)}}get frameRate(){return this._$frameRate}set frameRate(t){this._$frameRate=dt(+t,1,60,60),this._$player&&!this._$player._$stopFlag&&(this._$player.stop(),this._$player.play())}get player(){return this._$player}get canvasHeight(){return this._$player?this._$player._$height/f:0}get canvasWidth(){return this._$player?this._$player._$width/f:0}get currentStageHeight(){return this._$player?this._$player.height*this._$player._$scale:0}get currentStageWidth(){return this._$player?this._$player.width*this._$player._$scale:0}get stageHeight(){return this._$player?this._$player.height:0}get stageWidth(){return this._$player?this._$player.width:0}invalidate(){this._$invalidate=!0}_$addChild(t){return t._$stage=this,t._$root=t,this._$created=!0,super._$addChild(t)}}class pe{static toString(){return"[class Easing]"}static get namespace(){return"next2d.ui.Easing"}toString(){return"[object Easing]"}get namespace(){return"next2d.ui.Easing"}static linear(t,e,i,s){return t/s*i+e}static inQuad(t,e,i,s){return(t/=s)*t*i+e}static outQuad(t,e,i,s){return-(t/=s)*(t-2)*i+e}static inOutQuad(t,e,i,s){return(t/=s/2)<1?t*t*i/2+e:-((t-=1)*(t-2)-1)*i/2+e}static inCubic(t,e,i,s){return(t/=s)*t*t*i+e}static outCubic(t,e,i,s){return t/=s,(--t*t*t+1)*i+e}static inOutCubic(t,e,i,s){return(t/=s/2)<1?t*t*t*i/2+e:((t-=2)*t*t+2)*i/2+e}static inQuart(t,e,i,s){return(t/=s)*t*t*t*i+e}static outQuart(t,e,i,s){return t/=s,(--t*t*t*t-1)*-i+e}static inOutQuart(t,e,i,s){return(t/=s/2)<1?t*t*t*t*i/2+e:((t-=2)*t*t*t-2)*-i/2+e}static inQuint(t,e,i,s){return(t/=s)*t*t*t*t*i+e}static outQuint(t,e,i,s){return t/=s,(--t*t*t*t*t+1)*i+e}static inOutQuint(t,e,i,s){return(t/=s/2)<1?t*t*t*t*t*i/2+e:((t-=2)*t*t*t*t+2)*i/2+e}static inSine(t,e,i,s){return-i*v.cos(t/s*(v.PI/2))+i+e}static outSine(t,e,i,s){return i*v.sin(t/s*(v.PI/2))+e}static inOutSine(t,e,i,s){return-i/2*(v.cos(v.PI*t/s)-1)+e}static inExpo(t,e,i,s){return i*v.pow(2,10*(t/s-1))+e}static outExpo(t,e,i,s){return i*(1-v.pow(2,-10*t/s))+e}static inOutExpo(t,e,i,s){return(t/=s/2)<1?i/2*v.pow(2,10*(t-1))+e:i/2*(2-v.pow(2,-10*(t-1)))+e}static inCirc(t,e,i,s){return(1-v.sqrt(1-(t/=s)*t))*i+e}static outCirc(t,e,i,s){return t/=s,v.sqrt(1- --t*t)*i+e}static inOutCirc(t,e,i,s){return(t/=2*s)<1?(v.sqrt(1-t*t)-1)/-2*i+e:(v.sqrt(1-(t-=2)*t)+1)/2*i+e}static inBack(t,e,i,s){return(2.70158*(t/=s)*t*t-1.70158*t*t)*i+e}static outBack(t,e,i,s){return(1+2.70158*v.pow((t/=s)-1,3)+1.70158*v.pow(t-1,2))*i+e}static inOutBack(t,e,i,s){let r=1.70158;return(t/=s/2)<1?t*t*((1+(r*=1.525))*t-r)*i/2+e:((t-=2)*t*((1+(r*=1.525))*t+r)+2)*i/2+e}static inElastic(t,e,i,s){return 0==(t/=s)?e:1===t?i+e:-v.pow(2,(t*=10)-10)*v.sin((t-10.75)*(2*v.PI/3))*i+e}static outElastic(t,e,i,s){return 0==(t/=s)?e:1===t?i+e:(v.pow(2,-10*t)*v.sin((10*t-.75)*(2*v.PI/3))+1)*i+e}static inOutElastic(t,e,i,s){return 0==(t/=s)?e:1===t?i+e:t<.5?-v.pow(2,20*t-10)*v.sin((20*t-11.125)*(2*v.PI/4.5))/2*i+e:(v.pow(2,-20*t+10)*v.sin((20*t-11.125)*(2*v.PI/4.5))/2+1)*i+e}static outBounce(t,e,i,s){return(t/=s)<1/2.75?7.5625*t*t*i+e:t<2/2.75?(7.5625*(t-=1.5/2.75)*t+.75)*i+e:t<2.5/2.75?(7.5625*(t-=2.25/2.75)*t+.9375)*i+e:(7.5625*(t-=2.625/2.75)*t+.984375)*i+e}static inBounce(t,e,i,s){return i-pe.outBounce(s-t,0,i,s)+e}static inOutBounce(t,e,i,s){return t{this._$update(t)})))}entries(t){const e=Object.entries(t);for(let t=0;t{this.hasEventListener(It.COMPLETE)||this.addEventListener(It.COMPLETE,(e=>{this.removeEventListener(It.COMPLETE,e.listener),t()})),this._$delay?B((()=>{this.initialize()}),1e3*this._$delay):this.initialize()}))}stop(){this.hasEventListener(It.STOP)&&this.dispatchEvent(new It(It.STOP)),this.hasEventListener(It.ENTER_FRAME)&&this.removeAllEventListener(It.ENTER_FRAME),this.hasEventListener(It.UPDATE)&&this.removeAllEventListener(It.UPDATE),this.hasEventListener(It.COMPLETE)&&this.removeAllEventListener(It.COMPLETE),this._$forceStop=!0,this._$stopFlag=!0}_$update(t){this._$stopFlag||(this._$currentTime=.001*(R.now()-this._$startTime),this._$names&&this._$updateProperty(this._$target,this._$from,this._$to,this._$names),this.hasEventListener(It.UPDATE)&&this.dispatchEvent(new It(It.UPDATE)),this._$currentTime>=this._$duration&&(this.removeEventListener(It.ENTER_FRAME,t.listener),this.hasEventListener(It.COMPLETE)&&this.dispatchEvent(new It(It.COMPLETE))))}_$updateProperty(t,e,i,s){for(let r=0;rthis._$currentTime?t[a]=this._$ease(this._$currentTime,o,i[a]-o,this._$duration):t[a]=i[a]}}}class xe{static toString(){return"[class Tween]"}static get namespace(){return"next2d.ui.Tween"}toString(){return"[object Tween]"}get namespace(){return"next2d.ui.Tween"}static add(t,e,i,s=0,r=1,n=null){return new me(t,e,i,s,r,n)}}class be{constructor(t=null,e=null,i=null,s=null,r=null,n=null,a=null,h=null,o=null,l=null){this._$font=t,this._$size=e,this._$color=null===i?null:dt(xt(i),0,16777215,0),this._$bold=s,this._$italic=r,this._$underline=n,this._$align=a,this._$leftMargin=h,this._$rightMargin=o,this._$leading=l,this._$letterSpacing=0}static toString(){return"[class TextFormat]"}static get namespace(){return"next2d.text.TextFormat"}toString(){return"[object TextFormat]"}get namespace(){return"next2d.text.TextFormat"}get align(){return this._$align}set align(t){this._$align=t}get bold(){return this._$bold}set bold(t){this._$bold=null!==t?!!t:null}get color(){return this._$color}set color(t){this._$color=t,t&&(this._$color=dt(xt(t),0,16777215,0))}get font(){return this._$font}set font(t){this._$font=null!==t?`${t}`:null}get italic(){return this._$italic}set italic(t){this._$italic=null!==t?!!t:null}get leading(){return this._$leading}set leading(t){this._$leading=t}get leftMargin(){return this._$leftMargin}set leftMargin(t){this._$leftMargin=t}get letterSpacing(){return this._$letterSpacing}set letterSpacing(t){this._$letterSpacing=t}get rightMargin(){return this._$rightMargin}set rightMargin(t){this._$rightMargin=t}get size(){return this._$size}set size(t){this._$size=t?0|t:null}get underline(){return this._$underline}set underline(t){this._$underline=null!==t?!!t:null}_$toStyleString(){let t="";if(this._$font&&(t+=`font-family: ${this._$font};`),this._$size&&(t+=`font-size: ${this._$size}px;`),this._$color){const e=Et(xt(this._$color));t+=`color: #${e.R.toString(16).padStart(2,"0")}${e.G.toString(16).padStart(2,"0")}${e.B.toString(16).padStart(2,"0")};`}return this._$bold&&(t+="font-weight: bold;"),this._$italic&&(t+="font-style: italic;"),this._$underline&&(t+="text-decoration: underline;"),this._$align&&(t+=`text-align: ${this._$align};`),this._$leftMargin&&(t+=`margin-left: ${this._$leftMargin}px;`),this._$rightMargin&&(t+=`margin-right: ${this._$rightMargin}px;`),this._$leading&&(t+=`margin-bottom: ${this._$leading}px;`),this._$letterSpacing&&(t+=`letter-spacing: ${this._$letterSpacing}px;`),t}_$isSame(t){return this._$font===t.font&&this._$size===t.size&&this._$color===t.color&&this._$bold===t.bold&&this._$italic===t.italic&&this._$underline===t.underline&&this._$align===t.align&&this._$leftMargin===t.leftMargin&&this._$rightMargin===t.rightMargin&&this._$leading===t.leading&&this._$letterSpacing===t.letterSpacing}_$clone(){const t=new be(this._$font,this._$size,this._$color,this._$bold,this._$italic,this._$underline,this._$align,this._$leftMargin,this._$rightMargin,this._$leading);return t._$letterSpacing=this._$letterSpacing,t}_$setDefault(){this._$align="left",this._$bold=!1,this._$color=0,this._$font="Times New Roman",this._$italic=!1,this._$leading=0,this._$leftMargin=0,this._$letterSpacing=0,this._$rightMargin=0,this._$size=12,this._$underline=!1}_$merge(t){null===this._$align&&(this._$align=t._$align),null===this._$bold&&(this._$bold=t._$bold),null===this._$color&&(this._$color=t._$color),null===this._$font&&(this._$font=t._$font),null===this._$italic&&(this._$italic=t._$italic),null===this._$leading&&(this._$leading=t._$leading),null===this._$leftMargin&&(this._$leftMargin=t._$leftMargin),null===this._$letterSpacing&&(this._$letterSpacing=t._$letterSpacing),null===this._$rightMargin&&(this._$rightMargin=t._$rightMargin),null===this._$size&&(this._$size=t._$size),null===this._$underline&&(this._$underline=t._$underline)}_$widthMargin(){let t=0;return this._$leftMargin&&(t+=this._$leftMargin),this._$rightMargin&&(t+=this._$rightMargin),t}_$generateFontStyle(){let t="";return this._$italic&&(t="italic "),this._$bold&&(t+="bold "),`${t}${this._$size}px '${this._$font}',sans-serif`}}const ve=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((t=>t.charCodeAt(0)))),Te=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((t=>t.charCodeAt(0))));var ye;const Ee=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Ae=null!==(ye=String.fromCodePoint)&&void 0!==ye?ye:function(t){let e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t),e};var Me,we,Se,Ce,Ie,Fe,Re,Be;function Le(t){return t>=Me.ZERO&&t<=Me.NINE}!function(t){t[t.NUM=35]="NUM",t[t.SEMI=59]="SEMI",t[t.EQUALS=61]="EQUALS",t[t.ZERO=48]="ZERO",t[t.NINE=57]="NINE",t[t.LOWER_A=97]="LOWER_A",t[t.LOWER_F=102]="LOWER_F",t[t.LOWER_X=120]="LOWER_X",t[t.LOWER_Z=122]="LOWER_Z",t[t.UPPER_A=65]="UPPER_A",t[t.UPPER_F=70]="UPPER_F",t[t.UPPER_Z=90]="UPPER_Z"}(Me||(Me={})),function(t){t[t.VALUE_LENGTH=49152]="VALUE_LENGTH",t[t.BRANCH_LENGTH=16256]="BRANCH_LENGTH",t[t.JUMP_TABLE=127]="JUMP_TABLE"}(we||(we={})),function(t){t[t.EntityStart=0]="EntityStart",t[t.NumericStart=1]="NumericStart",t[t.NumericDecimal=2]="NumericDecimal",t[t.NumericHex=3]="NumericHex",t[t.NamedEntity=4]="NamedEntity"}(Se||(Se={})),(Ie=Ce||(Ce={}))[Ie.Legacy=0]="Legacy",Ie[Ie.Strict=1]="Strict",Ie[Ie.Attribute=2]="Attribute";class Pe{constructor(t,e,i){this.decodeTree=t,this.emitCodePoint=e,this.errors=i,this.state=Se.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Ce.Strict}startEntity(t){this.decodeMode=t,this.state=Se.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,e){switch(this.state){case Se.EntityStart:return t.charCodeAt(e)===Me.NUM?(this.state=Se.NumericStart,this.consumed+=1,this.stateNumericStart(t,e+1)):(this.state=Se.NamedEntity,this.stateNamedEntity(t,e));case Se.NumericStart:return this.stateNumericStart(t,e);case Se.NumericDecimal:return this.stateNumericDecimal(t,e);case Se.NumericHex:return this.stateNumericHex(t,e);case Se.NamedEntity:return this.stateNamedEntity(t,e)}}stateNumericStart(t,e){return e>=t.length?-1:(32|t.charCodeAt(e))===Me.LOWER_X?(this.state=Se.NumericHex,this.consumed+=1,this.stateNumericHex(t,e+1)):(this.state=Se.NumericDecimal,this.stateNumericDecimal(t,e))}addToNumericResult(t,e,i,s){if(e!==i){const r=i-e;this.result=this.result*Math.pow(s,r)+parseInt(t.substr(e,r),s),this.consumed+=r}}stateNumericHex(t,e){const i=e;for(;e=Me.UPPER_A&&s<=Me.UPPER_F||s>=Me.LOWER_A&&s<=Me.LOWER_F)))return this.addToNumericResult(t,i,e,16),this.emitNumericEntity(r,3);e+=1}var s;return this.addToNumericResult(t,i,e,16),-1}stateNumericDecimal(t,e){const i=e;for(;e=55296&&t<=57343||t>1114111?65533:null!==(e=Ee.get(t))&&void 0!==e?e:t}(this.result),this.consumed),this.errors&&(t!==Me.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,e){const{decodeTree:i}=this;let s=i[this.treeIndex],r=(s&we.VALUE_LENGTH)>>14;for(;e=Me.UPPER_A&&t<=Me.UPPER_Z||t>=Me.LOWER_A&&t<=Me.LOWER_Z||Le(t)}(n)))?0:this.emitNotTerminatedNamedEntity();if(s=i[this.treeIndex],r=(s&we.VALUE_LENGTH)>>14,0!==r){if(a===Me.SEMI)return this.emitNamedEntityData(this.treeIndex,r,this.consumed+this.excess);this.decodeMode!==Ce.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}var n;return-1}emitNotTerminatedNamedEntity(){var t;const{result:e,decodeTree:i}=this,s=(i[e]&we.VALUE_LENGTH)>>14;return this.emitNamedEntityData(e,s,this.consumed),null===(t=this.errors)||void 0===t||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,e,i){const{decodeTree:s}=this;return this.emitCodePoint(1===e?s[t]&~we.VALUE_LENGTH:s[t+1],i),3===e&&this.emitCodePoint(s[t+2],i),i}end(){var t;switch(this.state){case Se.NamedEntity:return 0===this.result||this.decodeMode===Ce.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case Se.NumericDecimal:return this.emitNumericEntity(0,2);case Se.NumericHex:return this.emitNumericEntity(0,3);case Se.NumericStart:return null===(t=this.errors)||void 0===t||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Se.EntityStart:return 0}}}function ke(t){let e="";const i=new Pe(t,(t=>e+=Ae(t)));return function(t,s){let r=0,n=0;for(;(n=t.indexOf("&",n))>=0;){e+=t.slice(r,n),i.startEntity(s);const a=i.write(t,n+1);if(a<0){r=n+i.end();break}r=n+a,n=0===a?r+1:r}const a=e+t.slice(r);return e="",a}}function Ne(t,e,i,s){const r=(e&we.BRANCH_LENGTH)>>7,n=e&we.JUMP_TABLE;if(0===r)return 0!==n&&s===n?i:-1;if(n){const e=s-n;return e<0||e>=r?-1:t[i+e]-1}let a=i,h=a+r-1;for(;a<=h;){const e=a+h>>>1,i=t[e];if(is))return t[e+r];h=e-1}}return-1}function Oe(t){return t===Fe.Space||t===Fe.NewLine||t===Fe.Tab||t===Fe.FormFeed||t===Fe.CarriageReturn}function De(t){return t===Fe.Slash||t===Fe.Gt||Oe(t)}ke(ve),ke(Te),function(t){t[t.Tab=9]="Tab",t[t.NewLine=10]="NewLine",t[t.FormFeed=12]="FormFeed",t[t.CarriageReturn=13]="CarriageReturn",t[t.Space=32]="Space",t[t.ExclamationMark=33]="ExclamationMark",t[t.Number=35]="Number",t[t.Amp=38]="Amp",t[t.SingleQuote=39]="SingleQuote",t[t.DoubleQuote=34]="DoubleQuote",t[t.Dash=45]="Dash",t[t.Slash=47]="Slash",t[t.Zero=48]="Zero",t[t.Nine=57]="Nine",t[t.Semi=59]="Semi",t[t.Lt=60]="Lt",t[t.Eq=61]="Eq",t[t.Gt=62]="Gt",t[t.Questionmark=63]="Questionmark",t[t.UpperA=65]="UpperA",t[t.LowerA=97]="LowerA",t[t.UpperF=70]="UpperF",t[t.LowerF=102]="LowerF",t[t.UpperZ=90]="UpperZ",t[t.LowerZ=122]="LowerZ",t[t.LowerX=120]="LowerX",t[t.OpeningSquareBracket=91]="OpeningSquareBracket"}(Fe||(Fe={})),function(t){t[t.Text=1]="Text",t[t.BeforeTagName=2]="BeforeTagName",t[t.InTagName=3]="InTagName",t[t.InSelfClosingTag=4]="InSelfClosingTag",t[t.BeforeClosingTagName=5]="BeforeClosingTagName",t[t.InClosingTagName=6]="InClosingTagName",t[t.AfterClosingTagName=7]="AfterClosingTagName",t[t.BeforeAttributeName=8]="BeforeAttributeName",t[t.InAttributeName=9]="InAttributeName",t[t.AfterAttributeName=10]="AfterAttributeName",t[t.BeforeAttributeValue=11]="BeforeAttributeValue",t[t.InAttributeValueDq=12]="InAttributeValueDq",t[t.InAttributeValueSq=13]="InAttributeValueSq",t[t.InAttributeValueNq=14]="InAttributeValueNq",t[t.BeforeDeclaration=15]="BeforeDeclaration",t[t.InDeclaration=16]="InDeclaration",t[t.InProcessingInstruction=17]="InProcessingInstruction",t[t.BeforeComment=18]="BeforeComment",t[t.CDATASequence=19]="CDATASequence",t[t.InSpecialComment=20]="InSpecialComment",t[t.InCommentLike=21]="InCommentLike",t[t.BeforeSpecialS=22]="BeforeSpecialS",t[t.SpecialStartSequence=23]="SpecialStartSequence",t[t.InSpecialTag=24]="InSpecialTag",t[t.InEntity=25]="InEntity"}(Re||(Re={})),function(t){t[t.NoValue=0]="NoValue",t[t.Unquoted=1]="Unquoted",t[t.Single=2]="Single",t[t.Double=3]="Double"}(Be||(Be={}));const Ue={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])};class Ve{constructor({xmlMode:t=!1,decodeEntities:e=!0},i){this.cbs=i,this.state=Re.Text,this.buffer="",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=Re.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=t,this.decodeEntities=e,this.entityDecoder=new Pe(t?Te:ve,((t,e)=>this.emitCodePoint(t,e)))}reset(){this.state=Re.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=Re.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(t){this.offset+=this.buffer.length,this.buffer=t,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=Re.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&t===Fe.Amp&&this.startEntity()}stateSpecialStartSequence(t){const e=this.sequenceIndex===this.currentSequence.length;if(e?De(t):(32|t)===this.currentSequence[this.sequenceIndex]){if(!e)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=Re.InTagName,this.stateInTagName(t)}stateInSpecialTag(t){if(this.sequenceIndex===this.currentSequence.length){if(t===Fe.Gt||Oe(t)){const e=this.index-this.currentSequence.length;if(this.sectionStart=Fe.LowerA&&t<=Fe.LowerZ||t>=Fe.UpperA&&t<=Fe.UpperZ}(t)}startSpecial(t,e){this.isSpecial=!0,this.currentSequence=t,this.sequenceIndex=e,this.state=Re.SpecialStartSequence}stateBeforeTagName(t){if(t===Fe.ExclamationMark)this.state=Re.BeforeDeclaration,this.sectionStart=this.index+1;else if(t===Fe.Questionmark)this.state=Re.InProcessingInstruction,this.sectionStart=this.index+1;else if(this.isTagStartChar(t)){const e=32|t;this.sectionStart=this.index,this.xmlMode||e!==Ue.TitleEnd[2]?this.state=this.xmlMode||e!==Ue.ScriptEnd[2]?Re.InTagName:Re.BeforeSpecialS:this.startSpecial(Ue.TitleEnd,3)}else t===Fe.Slash?this.state=Re.BeforeClosingTagName:(this.state=Re.Text,this.stateText(t))}stateInTagName(t){De(t)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateBeforeClosingTagName(t){Oe(t)||(t===Fe.Gt?this.state=Re.Text:(this.state=this.isTagStartChar(t)?Re.InClosingTagName:Re.InSpecialComment,this.sectionStart=this.index))}stateInClosingTagName(t){(t===Fe.Gt||Oe(t))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=Re.AfterClosingTagName,this.stateAfterClosingTagName(t))}stateAfterClosingTagName(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.state=Re.Text,this.sectionStart=this.index+1)}stateBeforeAttributeName(t){t===Fe.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=Re.InSpecialTag,this.sequenceIndex=0):this.state=Re.Text,this.sectionStart=this.index+1):t===Fe.Slash?this.state=Re.InSelfClosingTag:Oe(t)||(this.state=Re.InAttributeName,this.sectionStart=this.index)}stateInSelfClosingTag(t){t===Fe.Gt?(this.cbs.onselfclosingtag(this.index),this.state=Re.Text,this.sectionStart=this.index+1,this.isSpecial=!1):Oe(t)||(this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateInAttributeName(t){(t===Fe.Eq||De(t))&&(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=-1,this.state=Re.AfterAttributeName,this.stateAfterAttributeName(t))}stateAfterAttributeName(t){t===Fe.Eq?this.state=Re.BeforeAttributeValue:t===Fe.Slash||t===Fe.Gt?(this.cbs.onattribend(Be.NoValue,this.index),this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t)):Oe(t)||(this.cbs.onattribend(Be.NoValue,this.index),this.state=Re.InAttributeName,this.sectionStart=this.index)}stateBeforeAttributeValue(t){t===Fe.DoubleQuote?(this.state=Re.InAttributeValueDq,this.sectionStart=this.index+1):t===Fe.SingleQuote?(this.state=Re.InAttributeValueSq,this.sectionStart=this.index+1):Oe(t)||(this.sectionStart=this.index,this.state=Re.InAttributeValueNq,this.stateInAttributeValueNoQuotes(t))}handleInAttributeValue(t,e){t===e||!this.decodeEntities&&this.fastForwardTo(e)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(e===Fe.DoubleQuote?Be.Double:Be.Single,this.index),this.state=Re.BeforeAttributeName):this.decodeEntities&&t===Fe.Amp&&this.startEntity()}stateInAttributeValueDoubleQuotes(t){this.handleInAttributeValue(t,Fe.DoubleQuote)}stateInAttributeValueSingleQuotes(t){this.handleInAttributeValue(t,Fe.SingleQuote)}stateInAttributeValueNoQuotes(t){Oe(t)||t===Fe.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(Be.Unquoted,this.index),this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t)):this.decodeEntities&&t===Fe.Amp&&this.startEntity()}stateBeforeDeclaration(t){t===Fe.OpeningSquareBracket?(this.state=Re.CDATASequence,this.sequenceIndex=0):this.state=t===Fe.Dash?Re.BeforeComment:Re.InDeclaration}stateInDeclaration(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=Re.Text,this.sectionStart=this.index+1)}stateInProcessingInstruction(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=Re.Text,this.sectionStart=this.index+1)}stateBeforeComment(t){t===Fe.Dash?(this.state=Re.InCommentLike,this.currentSequence=Ue.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=Re.InDeclaration}stateInSpecialComment(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=Re.Text,this.sectionStart=this.index+1)}stateBeforeSpecialS(t){const e=32|t;e===Ue.ScriptEnd[3]?this.startSpecial(Ue.ScriptEnd,4):e===Ue.StyleEnd[3]?this.startSpecial(Ue.StyleEnd,4):(this.state=Re.InTagName,this.stateInTagName(t))}startEntity(){this.baseState=this.state,this.state=Re.InEntity,this.entityStart=this.index,this.entityDecoder.startEntity(this.xmlMode?Ce.Strict:this.baseState===Re.Text||this.baseState===Re.InSpecialTag?Ce.Legacy:Ce.Attribute)}stateInEntity(){const t=this.entityDecoder.write(this.buffer,this.index-this.offset);t>=0?(this.state=this.baseState,0===t&&(this.index=this.entityStart)):this.index=this.offset+this.buffer.length-1}cleanup(){this.running&&this.sectionStart!==this.index&&(this.state===Re.Text||this.state===Re.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==Re.InAttributeValueDq&&this.state!==Re.InAttributeValueSq&&this.state!==Re.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}shouldContinue(){return this.index=t||(this.state===Re.InCommentLike?this.currentSequence===Ue.CdataEnd?this.cbs.oncdata(this.sectionStart,t,0):this.cbs.oncomment(this.sectionStart,t,0):this.state===Re.InTagName||this.state===Re.BeforeAttributeName||this.state===Re.BeforeAttributeValue||this.state===Re.AfterAttributeName||this.state===Re.InAttributeName||this.state===Re.InAttributeValueSq||this.state===Re.InAttributeValueDq||this.state===Re.InAttributeValueNq||this.state===Re.InClosingTagName||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,e){this.baseState!==Re.Text&&this.baseState!==Re.InSpecialTag?(this.sectionStart0&&n.has(this.stack[0]);){const t=this.stack.shift();null===(i=(e=this.cbs).onclosetag)||void 0===i||i.call(e,t,!0)}this.isVoidElement(t)||(this.stack.unshift(t),this.htmlMode&&(We.has(t)?this.foreignContext.unshift(!0):Ke.has(t)&&this.foreignContext.unshift(!1))),null===(r=(s=this.cbs).onopentagname)||void 0===r||r.call(s,t),this.cbs.onopentag&&(this.attribs={})}endOpenTag(t){var e,i;this.startIndex=this.openTagStart,this.attribs&&(null===(i=(e=this.cbs).onopentag)||void 0===i||i.call(e,this.tagname,this.attribs,t),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(t){this.endIndex=t,this.endOpenTag(!1),this.startIndex=t+1}onclosetag(t,e){var i,s,r,n,a,h,o,l;this.endIndex=e;let c=this.getSlice(t,e);if(this.lowerCaseTagNames&&(c=c.toLowerCase()),this.htmlMode&&(We.has(c)||Ke.has(c))&&this.foreignContext.shift(),this.isVoidElement(c))this.htmlMode&&"br"===c&&(null===(n=(r=this.cbs).onopentagname)||void 0===n||n.call(r,"br"),null===(h=(a=this.cbs).onopentag)||void 0===h||h.call(a,"br",{},!0),null===(l=(o=this.cbs).onclosetag)||void 0===l||l.call(o,"br",!1));else{const t=this.stack.indexOf(c);if(-1!==t)for(let e=0;e<=t;e++){const r=this.stack.shift();null===(s=(i=this.cbs).onclosetag)||void 0===s||s.call(i,r,e!==t)}else this.htmlMode&&"p"===c&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=e+1}onselfclosingtag(t){this.endIndex=t,this.options.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=t+1):this.onopentagend(t)}closeCurrentTag(t){var e,i;const s=this.tagname;this.endOpenTag(t),this.stack[0]===s&&(null===(i=(e=this.cbs).onclosetag)||void 0===i||i.call(e,s,!t),this.stack.shift())}onattribname(t,e){this.startIndex=t;const i=this.getSlice(t,e);this.attribname=this.lowerCaseAttributeNames?i.toLowerCase():i}onattribdata(t,e){this.attribvalue+=this.getSlice(t,e)}onattribentity(t){this.attribvalue+=Ae(t)}onattribend(t,e){var i,s;this.endIndex=e,null===(s=(i=this.cbs).onattribute)||void 0===s||s.call(i,this.attribname,this.attribvalue,t===Be.Double?'"':t===Be.Single?"'":t===Be.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(t){const e=t.search(Qe);let i=e<0?t:t.substr(0,e);return this.lowerCaseTagNames&&(i=i.toLowerCase()),i}ondeclaration(t,e){this.endIndex=e;const i=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(i);this.cbs.onprocessinginstruction(`!${t}`,`!${i}`)}this.startIndex=e+1}onprocessinginstruction(t,e){this.endIndex=e;const i=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(i);this.cbs.onprocessinginstruction(`?${t}`,`?${i}`)}this.startIndex=e+1}oncomment(t,e,i){var s,r,n,a;this.endIndex=e,null===(r=(s=this.cbs).oncomment)||void 0===r||r.call(s,this.getSlice(t,e-i)),null===(a=(n=this.cbs).oncommentend)||void 0===a||a.call(n),this.startIndex=e+1}oncdata(t,e,i){var s,r,n,a,h,o,l,c,_,$;this.endIndex=e;const u=this.getSlice(t,e-i);!this.htmlMode||this.options.recognizeCDATA?(null===(r=(s=this.cbs).oncdatastart)||void 0===r||r.call(s),null===(a=(n=this.cbs).ontext)||void 0===a||a.call(n,u),null===(o=(h=this.cbs).oncdataend)||void 0===o||o.call(h)):(null===(c=(l=this.cbs).oncomment)||void 0===c||c.call(l,`[CDATA[${u}]]`),null===($=(_=this.cbs).oncommentend)||void 0===$||$.call(_)),this.startIndex=e+1}onend(){var t,e;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let t=0;t=this.buffers[0].length;)this.shiftBuffer();let i=this.buffers[0].slice(t-this.bufferOffset,e-this.bufferOffset);for(;e-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),i+=this.buffers[0].slice(0,e-this.bufferOffset);return i}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(t){var e,i;this.ended?null===(i=(e=this.cbs).onerror)||void 0===i||i.call(e,new Error(".write() after done!")):(this.buffers.push(t),this.tokenizer.running&&(this.tokenizer.write(t),this.writeIndex++))}end(t){var e,i;this.ended?null===(i=(e=this.cbs).onerror)||void 0===i||i.call(e,new Error(".end() after done!")):(t&&this.write(t),this.ended=!0,this.tokenizer.end())}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex0?this.children[this.children.length-1]:null}get childNodes(){return this.children}set childNodes(t){this.children=t}}class hi extends ai{constructor(){super(...arguments),this.type=Ze.CDATA}get nodeType(){return 4}}class oi extends ai{constructor(){super(...arguments),this.type=Ze.Root}get nodeType(){return 9}}class li extends ai{constructor(t,e,i=[],s=("script"===t?Ze.Script:"style"===t?Ze.Style:Ze.Tag)){super(i),this.name=t,this.attribs=e,this.type=s}get nodeType(){return 1}get tagName(){return this.name}set tagName(t){this.name=t}get attributes(){return Object.keys(this.attribs).map((t=>{var e,i;return{name:t,value:this.attribs[t],namespace:null===(e=this["x-attribsNamespace"])||void 0===e?void 0:e[t],prefix:null===(i=this["x-attribsPrefix"])||void 0===i?void 0:i[t]}}))}}function ci(t,e=!1){let i;if(function(t){return t.type===Ze.Text}(t))i=new si(t.data);else if(function(t){return t.type===Ze.Comment}(t))i=new ri(t.data);else if(function(t){return(e=t).type===Ze.Tag||e.type===Ze.Script||e.type===Ze.Style;var e}(t)){const s=e?_i(t.children):[],r=new li(t.name,{...t.attribs},s);s.forEach((t=>t.parent=r)),null!=t.namespace&&(r.namespace=t.namespace),t["x-attribsNamespace"]&&(r["x-attribsNamespace"]={...t["x-attribsNamespace"]}),t["x-attribsPrefix"]&&(r["x-attribsPrefix"]={...t["x-attribsPrefix"]}),i=r}else if(function(t){return t.type===Ze.CDATA}(t)){const s=e?_i(t.children):[],r=new hi(s);s.forEach((t=>t.parent=r)),i=r}else if(function(t){return t.type===Ze.Root}(t)){const s=e?_i(t.children):[],r=new oi(s);s.forEach((t=>t.parent=r)),t["x-mode"]&&(r["x-mode"]=t["x-mode"]),i=r}else{if(!function(t){return t.type===Ze.Directive}(t))throw new Error(`Not implemented yet: ${t.type}`);{const e=new ni(t.name,t.data);null!=t["x-name"]&&(e["x-name"]=t["x-name"],e["x-publicId"]=t["x-publicId"],e["x-systemId"]=t["x-systemId"]),i=e}}return i.startIndex=t.startIndex,i.endIndex=t.endIndex,null!=t.sourceCodeLocation&&(i.sourceCodeLocation=t.sourceCodeLocation),i}function _i(t){const e=t.map((t=>ci(t,!0)));for(let t=1;t'"]/g,gi),fi(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),fi(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]])),function(t){t[t.XML=0]="XML",t[t.HTML=1]="HTML"}(pi||(pi={})),function(t){t[t.UTF8=0]="UTF8",t[t.ASCII=1]="ASCII",t[t.Extensive=2]="Extensive",t[t.Attribute=3]="Attribute",t[t.Text=4]="Text"}(mi||(mi={})),new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((t=>[t.toLowerCase(),t]))),new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((t=>[t.toLowerCase(),t]))),new Set(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]),new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),new Set(["svg","math"]),function(t){t[t.DISCONNECTED=1]="DISCONNECTED",t[t.PRECEDING=2]="PRECEDING",t[t.FOLLOWING=4]="FOLLOWING",t[t.CONTAINS=8]="CONTAINS",t[t.CONTAINED_BY=16]="CONTAINED_BY"}(xi||(xi={}));class bi{constructor(){this._$textWidth=-1,this._$textHeight=-1,this._$widthTable=[],this._$heightTable=[],this._$ascentTable=[],this._$textTable=[],this._$lineTable=[]}get textWidth(){if(-1===this._$textWidth){this._$textWidth=0;for(let t=0;t{let r=i.lineTable.length-1;const n=s.width-e._$widthMargin()-4;for(let a=0;an){Ti=_,r++,l.line=r;const t={mode:"wrap",text:"",x:0,y:0,w:0,h:0,line:r,textFormat:h._$clone()};let e=1,s=!0;const n=/[0-9a-zA-Z?!;:.,?!。、;:〜]/g;for(;;){const t=i.textTable.length-e;if(0>=t){s=!1,e=0;break}const r=i.textTable[t];if(!r){s=!1,e=0;break}if("text"!==r.mode){s=!1;break}if(" "===r.text){e--;break}if(!r.text.match(n)){e--;break}e++}if(i.widthTable[r]=0,i.heightTable[r]=0,i.ascentTable[r]=0,e>0&&s){const s=i.textTable.length-e;i.textTable.splice(s,0,t),i.lineTable.push(t);const n=r-1;i.widthTable[n]=0,i.heightTable[n]=0,i.ascentTable[n]=0;for(let t=0;t{const s=t.trim().split(";"),r=[];for(let t=0;t{for(let s=0;se.size&&(e.size=1));break;case"color":e.color=xt(r.value);break;case"letterSpacing":e.letterSpacing=+r.value;break;case"leading":e.leading=+r.value;break;case"leftMargin":e.leftMargin=+r.value;break;case"rightMargin":e.rightMargin=+r.value;break;case"underline":e.underline=!0;break;case"bold":e.bold=!0;break;case"italic":e.italic=!0}}},Mi=(t,e)=>{Ti=0;const i=t.lineTable.length;vi.font=e._$generateFontStyle();const s=vi.measureText(""),r={mode:"break",text:"",x:0,y:0,w:0,h:s.fontBoundingBoxAscent+s.fontBoundingBoxDescent,line:i,textFormat:e._$clone()};t.heightTable[i]=0,t.ascentTable[i]=0,t.widthTable[i]=0,t.lineTable.push(r),t.textTable.push(r)},wi=(t,e,i,s)=>{for(let r=0;r{const e=t.heightTable.length-1;for(let i=1;i0)continue;const e=t.lineTable[i];t.heightTable[i]=e.h=t.heightTable[i-1]}};class Ci extends te{constructor(){super(),this._$background=!1,this._$backgroundColor=16777215,this._$border=!1,this._$borderColor=0,this._$htmlText="",this._$multiline=!1,this._$text="",this._$wordWrap=!1,this._$scrollX=0,this._$scrollY=0,this._$maxChars=0,this._$stopIndex=-1,this._$compositionStartIndex=-1,this._$compositionEndIndex=-1;const t=new be;t._$setDefault(),this._$defaultTextFormat=t,this._$rawHtmlText="",this._$bounds={xMin:0,xMax:100,yMin:0,yMax:100},this._$originBounds={xMin:0,xMax:100,yMin:0,yMax:100},this._$restrict="",this._$isHTML=!1,this._$textData=null,this._$autoSize="none",this._$autoFontSize=!1,this._$focusVisible=!1,this._$timerId=-1,this._$focusIndex=-1,this._$selectIndex=-1,this._$scrollEnabled=!0,this._$xScrollShape=null,this._$yScrollShape=null,this._$type="static",this._$focus=!1,this._$copyText="",this._$thickness=0,this._$thicknessColor=0,this._$textFormats=null,this._$cacheKeys=ht(),this._$cacheParams=ht(0,0,0)}static toString(){return"[class TextField]"}static get namespace(){return"next2d.display.TextField"}toString(){return"[object TextField]"}get namespace(){return"next2d.display.TextField"}get autoFontSize(){return this._$autoFontSize}set autoFontSize(t){t!==this._$autoFontSize&&(this._$autoFontSize=t,this._$reload())}get autoSize(){return this._$autoSize}set autoSize(t){t!==this._$autoSize&&(this._$autoSize=t,this._$reload())}get background(){return this._$background}set background(t){t!==this._$background&&(this._$background=!!t,this._$reset())}get backgroundColor(){return this._$backgroundColor}set backgroundColor(t){(t=dt(xt(t),0,16777215,16777215))!==this._$backgroundColor&&(this._$backgroundColor=t,this._$reset())}get border(){return this._$border}set border(t){t!==this._$border&&(this._$border=!!t,this._$reset())}get borderColor(){return this._$borderColor}set borderColor(t){(t=dt(xt(t),0,16777215,0))!==this._$borderColor&&(this._$borderColor=t,this._$reset())}get stopIndex(){return this._$stopIndex}set stopIndex(t){if(t|=0,this._$stopIndex===t)return;this._$stopIndex=t;const e=this.getTextData();if(!e.textTable.length)return;let i=2,s=0;for(let r=0;r=t){s=r;break}"break"===n.mode&&(a=!0,this._$scrollX=0,i=2),a&&s++}const r=e.textTable[s].line;let n=0;for(let t=0;t<=r;++t)n+=e.heightTable[t];const a=this.height;let h=0;for(let t=r;t>-1;--t){const i=e.heightTable[t];if(aa){const t=(this.textHeight-a)/a;this._$scrollY=v.min((n-h)/t,a)}const o=this.width;let l=0;for(let t=s;t>0;--t){const i=e.textTable[t];if("text"===i.mode){if(oo){const t=(this.textWidth-o)/o;this._$scrollX=v.min((i-l)/t,o+.5)}this._$doChanged()}get defaultTextFormat(){return this._$defaultTextFormat._$clone()}set defaultTextFormat(t){t._$merge(this._$defaultTextFormat),this._$defaultTextFormat=t,this._$reset()}get focus(){return this._$focus}set focus(t){if(this._$focus===t)return;if("input"!==this._$type)return;this._$focus=!!t;const e=this._$focus?Rt.FOCUS_IN:Rt.FOCUS_OUT;this.willTrigger(e)&&this.dispatchEvent(new Rt(e)),tr.value="",this._$focus?tr.focus():(this._$focusIndex=-1,this._$selectIndex=-1,this._$focusVisible=!1,L(this._$timerId),tr.blur()),this._$doChanged(),x()}get htmlText(){if(this._$htmlText)return this._$htmlText;const t=this.getTextData();let e=t.textTable[0].textFormat,i="";continue}const n=r.textFormat;if(!e._$isSame(n)){i+="e){this._$doChanged(),this._$scrollX=t,this._$xScrollShape.width=e*e/this.textWidth;const i=this._$parent;if(i){this._$xScrollShape.hasLocalVariable("job")&&this._$xScrollShape.getLocalVariable("job").stop(),this._$xScrollShape.alpha=.9,this._$xScrollShape.x=this.x+1+(e-1-this._$xScrollShape.width)/(e-1)*(this._$scrollX-1),this._$xScrollShape.y=this.y+this.height-this._$xScrollShape.height-.5,i.addChildAt(this._$xScrollShape,i.getChildIndex(this)+1);const t=xe.add(this._$xScrollShape,{alpha:.9},{alpha:0},.5,.2,pe.outQuad);t.addEventListener(It.COMPLETE,(t=>{const e=t.target.target;e.deleteLocalVariable("job"),e.parent&&e.parent.removeChild(e)})),t.start(),this._$xScrollShape.setLocalVariable("job",t)}}this.willTrigger(It.SCROLL)&&this.dispatchEvent(new It(It.SCROLL,!0))}}get scrollY(){return this._$scrollY}set scrollY(t){if(this._$scrollEnabled&&"none"===this._$autoSize&&(this._$multiline||this._$wordWrap)&&!(this._$xScrollShape&&this._$xScrollShape.hasLocalVariable("job")||(t=dt(t,0,this.height,0),this._$scrollY===t))){const e=this.height;if(this._$yScrollShape&&this.textHeight>e){this._$doChanged(),this._$scrollY=t,this._$yScrollShape.height=e*e/this.textHeight;const i=this._$parent;if(i){this._$yScrollShape.hasLocalVariable("job")&&this._$yScrollShape.getLocalVariable("job").stop(),this._$yScrollShape.alpha=.9,this._$yScrollShape.x=this.x+this.width-this._$yScrollShape.width-.5,this._$yScrollShape.y=this.y+.5+(e-1-this._$yScrollShape.height)/(e-1)*(this._$scrollY-1),i.addChildAt(this._$yScrollShape,i.getChildIndex(this)+1);const t=xe.add(this._$yScrollShape,{alpha:.9},{alpha:0},.5,.2,pe.outQuad);t.addEventListener(It.COMPLETE,(t=>{const e=t.target.target;e.deleteLocalVariable("job"),e.parent&&e.parent.removeChild(e)})),t.start(),this._$yScrollShape.setLocalVariable("job",t)}}this.willTrigger(It.SCROLL)&&this.dispatchEvent(new It(It.SCROLL,!0))}}get text(){if(!this._$isHTML)return this._$text;if(this._$rawHtmlText)return this._$rawHtmlText;let t="";const e=this.getTextData();for(let i=1;i-1){const e=this._$getBounds(null),i=v.abs(e.xMin);this._$originBounds.xMax=t+i,this._$originBounds.xMin=i,this._$bounds.xMax=this._$originBounds.xMax,this._$bounds.xMin=this._$originBounds.xMin,super.width=t,this._$reload()}}get height(){return super.height}set height(t){if(!C(t=+t)&&t>-1){const e=this._$getBounds(null),i=v.abs(e.yMin);this._$originBounds.yMax=t+i,this._$bounds.yMax=this._$originBounds.yMax,this._$bounds.yMin=this._$originBounds.yMin,super.height=t,this._$reload()}}get x(){const t=this._$transform.matrix,e=this._$getBounds(null);return t._$matrix[4]+e.xMin}set x(t){const e=this._$getBounds(null);super.x=t-e.xMin}get y(){const t=this._$transform.matrix,e=this._$getBounds(null);return t._$matrix[5]+e.yMin}set y(t){const e=this._$getBounds(null);super.y=t-e.yMin}appendText(t){const e=this.text;this.text=e+`${t}`}getLineText(t){if(!this._$text&&!this._$htmlText)return"";t|=0;let e="";const i=this.getTextData();for(let s=0;st)break;r.line===t&&"text"===r.mode&&(e+=r.text)}return e}replaceText(t,e,i){if(e|=0,(t|=0)>-1&&e>-1&&e>=t){const s=this.text;t>=s.length?e>=s.length&&e>=t&&(this.text=s+`${i}`):this.text=s.slice(0,t)+`${i}`+s.slice(e,s.length)}}getTextData(t=0){return null!==this._$textData||(this._$isHTML?this._$textData=((t,e,i)=>{const s=new bi;if(!t)return s;const r=t.trim().replace(/\r?\n/g,"").replace(/\t/g,""),n=e._$clone();i.subFontSize&&i.subFontSize>0&&n.size&&(n.size-=i.subFontSize,1>n.size&&(n.size=1));const a=function(t,e){const i=new ui(void 0,e);return new Je(i,e).end(t),i.root}(r);return Mi(s,n),wi(a,n,s,i),Si(s),s})(this._$htmlText,this._$defaultTextFormat,{width:this.width,multiline:this._$multiline,wordWrap:this._$wordWrap,subFontSize:t,textFormats:this._$textFormats}):this._$textData=((t,e,i)=>{const s=new bi;if(!t)return s;const r=i.multiline?t.split("\n"):[t.replace("\n","")];for(let t=0;t0&&n.size&&(n.size-=i.subFontSize,1>n.size&&(n.size=1)),(0===t||i.wordWrap||i.multiline)&&Mi(s,n);const a=r[t];a&&(Ti=0,yi(a,n,s,i))}return Si(s),s})(this._$text,this._$defaultTextFormat,{width:this.width,multiline:this._$multiline,wordWrap:this._$wordWrap,subFontSize:t,textFormats:this._$textFormats})),this._$textData}selectAll(){const t=this.getTextData();t.textTable.length&&(this._$selectIndex=1,this._$focusIndex=t.textTable.length)}copy(){if(-1===this._$focusIndex||-1===this._$selectIndex)return;let t="";const e=v.min(this._$focusIndex,this._$selectIndex),i=v.max(this._$focusIndex,this._$selectIndex)+1,s=this.getTextData();for(let r=e;rs)break;i.line===s&&"text"===i.mode&&(r+=i.w)}let n=2;const a=s-1;for(let e=1;ea)return this._$focusIndex="text"===i.mode?e-1:e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking();if(i.line===a&&"text"===i.mode&&(n+=i.w,n>r))return this._$focusIndex=e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking()}}arrowDown(){if(-1===this._$focusIndex)return;const t=this.getTextData();if(!t.textTable.length)return;const e=t.textTable[this._$focusIndex],i="text"===e.mode?e.line:e.line-1;if(i===t.lineTable.length-1)return;let s=2;for(let e=1;ei)break;r.line===i&&"text"===r.mode&&(s+=r.w)}let r=2;const n=i+1;for(let e=1;en)return this._$focusIndex="text"===i.mode?e-1:e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking();if(i.line===n&&"text"===i.mode&&(r+=i.w,r>s))return this._$focusIndex=e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking()}this._$focusIndex=t.textTable.length,this._$selectIndex=-1,L(this._$timerId),this._$blinking()}arrowLeft(){this._$focusIndex&&(this.getTextData().textTable.length&&this._$focusIndex<2?this._$focusIndex=1:(this._$focusIndex--,this._$selectIndex=-1,L(this._$timerId),this._$blinking()))}arrowRight(){this.getTextData().textTable.length!==this._$focusIndex&&(this._$focusIndex++,this._$selectIndex=-1,L(this._$timerId),this._$blinking())}deleteText(){if(this._$compositionStartIndex>-1)return;let t=0,e=0;if(this._$selectIndex>-1)t=v.min(this._$focusIndex,this._$selectIndex),e=v.max(this._$focusIndex,this._$selectIndex)+1,this._$focusIndex=t;else{if(2>this._$focusIndex)return;this._$focusIndex--}const i=this.getTextData(),s=i.textTable[this._$focusIndex];s&&"wrap"===s.mode&&this._$focusIndex--;const r=ht();let n="";for(let s=1;ss))switch(a.mode){case"break":r.push(a.textFormat),n+="\n";break;case"text":r.push(a.textFormat),n+=a.text;break;default:continue}}if(i.textTable.length===this._$focusIndex&&(r.pop(),n=n.slice(0,-1)),this._$selectIndex=-1,n){const t=this.textWidth,e=this.textHeight;if(this._$textFormats=r,this.text=n,this._$scrollX>0){const e=this.textWidth,i=this.width;switch(!0){case i>e:this._$scrollY=0;break;case t!==e:this._$scrollY-=(t-e)/(e/i)}}if(this._$scrollY>0){const t=this.textHeight,i=this.height;switch(!0){case i>t:this._$scrollY=0;break;case e!==t:this._$scrollY-=(e-t)/(t/i)}}this._$textFormats=null,ot(r)}else this.text=null,this._$scrollX=0,this._$scrollY=0,this._$focusIndex=0}compositionStart(){this._$compositionStartIndex=this._$focusIndex}compositionUpdate(t){if(this._$compositionEndIndex>-1){const t=this._$compositionStartIndex;this._$focusIndex=this._$compositionStartIndex,this._$selectIndex=this._$compositionEndIndex-1,this._$compositionStartIndex=-1,this.deleteText(),this._$compositionStartIndex=t,this._$selectIndex=-1}let e=this.getTextData();const i=ht(),s=t.length;let r="";if(e.textTable.length){for(let n=1;nthis._$compositionStartIndex&&n++}}this._$compositionEndIndex=this._$focusIndex=n;const a=cr(),h=v.min(e.textTable.length-1,this._$compositionEndIndex),o=e.textTable[h];if(o){const t=o.line;let i=0;for(let s=0;s-1){const t=this.getTextData();for(let e=this._$compositionStartIndex;e-1)return;this._$selectIndex>-1&&this.deleteText();const e=this.getTextData(),i=ht();let s="";for(let r=1;ri&&this.textWidth+4>this.width;)this._$reset(),this.getTextData(i++);if(this.height&&this.textHeight)for(;t>i&&this.textHeight+4>this.height;)this._$reset(),this.getTextData(i++)}this._$resize()}_$blinking(){this._$focusVisible=!this._$focusVisible,this._$doChanged(),x(),this._$timerId=+B((()=>{this._$blinking()}),500),this._$timerId|=0}_$setIndex(t,e){if("input"!==this._$type)return;const i=this.getTextData();if(!i.textTable.length)return this._$focusIndex=0,this._$selectIndex=-1,void this.setBlinkingTimer();const s=this.width,r=this.height;let n=0;this._$scrollX>0&&(n+=this._$scrollX*(this.textWidth-s)/s);let h=0;this._$scrollY&&(h+=this._$scrollY*(this.textHeight-r)/r);const o=a(),l=this.globalToLocal(new Dt(t,e)),c=l.x+n,_=l.y+h;let $=2,u=2,d=u+i.heightTable[0];for(let t=1;t$&&_>u&&d>_&&s>c){const e=t;switch(o){case Cs:case Rs:this._$selectIndex!==e&&this._$focusIndex===e&&(this._$selectIndex=e,this._$focusIndex!==e&&(this._$focusVisible=!1,L(this._$timerId),this._$doChanged(),x()));break;default:(this._$focusIndex!==e||this._$selectIndex>-1)&&(this._$focusIndex=e,this._$selectIndex=-1,this.setBlinkingTimer())}return}$=2,u+=i.heightTable[e.line-1],d=u+i.heightTable[e.line];break;case"text":if(t===i.textTable.length-1&&c>$&&_>u&&d>_&&s>c){const t=i.textTable.length;switch(o){case Cs:case Rs:this._$selectIndex!==t&&(this._$selectIndex=t,this._$focusIndex!==t&&(this._$focusVisible=!1,L(this._$timerId),this._$doChanged(),x()));break;default:(this._$focusIndex!==t||this._$selectIndex>-1)&&(this._$focusIndex=t,this._$selectIndex=-1,this.setBlinkingTimer())}return}if(c>$&&_>u&&d>_&&$+e.w>c){let s=t;switch(o){case Cs:case Rs:this._$focusIndex>s?this._$focusIndex===s+1?$+e.w/2c&&(s=-1):$+e.w/2>c&&(s-=1),this._$selectIndex!==s&&(this._$selectIndex=s,this._$selectIndex>-1&&(this._$focusVisible=!1,L(this._$timerId)),this._$doChanged(),x());break;default:if($+e.w/2-1)&&(this._$focusIndex=s,this._$selectIndex=-1,this.setBlinkingTimer())}return}$+=e.w}}switch(o){case Cs:case Rs:this._$focusIndex=-1,this._$selectIndex=-1;break;default:this._$focusIndex=i.textTable.length,this._$selectIndex=-1,this.setBlinkingTimer()}}setBlinkingTimer(){this._$focusVisible=!1,this._$doChanged(),x(),L(this._$timerId),this._$timerId=+B((()=>{this._$blinking()}),500),this._$timerId|=0}_$resize(){if("none"!==this._$autoSize){const t=this._$defaultTextFormat,e=this.textWidth+4+t._$widthMargin();if(this._$wordWrap)this._$bounds.xMax=this._$originBounds.xMax,this._$bounds.xMin=this._$originBounds.xMin;else switch(this._$autoSize){case"left":case"center":this._$bounds.xMax=e+this._$bounds.xMin;break;case"right":this._$bounds.xMax=this._$originBounds.xMax-(this._$originBounds.xMax-this._$originBounds.xMin-(e-this._$originBounds.xMin))}this._$bounds.yMax=this.textHeight+this._$originBounds.yMin}else this._$scrollEnabled&&(this._$xScrollShape||(this._$xScrollShape=new ge,this._$xScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this._$xScrollShape.scale9Grid=new Vt(1.5,1.5,.1,.1)),this._$yScrollShape||(this._$yScrollShape=new ge,this._$yScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this._$yScrollShape.scale9Grid=new Vt(1.5,1.5,.1,.1)))}_$getAlignOffset(t,e){const i=this.getTextData().getLineWidth(t.line),s=t.textFormat,r=s.leftMargin||0;if(!this._$wordWrap&&i>e)return v.max(0,r);const n=s.rightMargin||0;return"center"===s.align||"center"===this._$autoSize?v.max(0,e/2-r-n-i/2-2):"right"===s.align||"right"===this._$autoSize?v.max(0,e-r-i-n-4):v.max(0,r)}_$getBounds(t=null){if(t){let e=t;const i=this._$transform._$rawMatrix();return 1===i[0]&&0===i[1]&&0===i[2]&&1===i[3]&&0===i[4]&&0===i[5]||(e=gt(t,i)),pt(this._$bounds,e)}return Q(this._$bounds.xMin,this._$bounds.xMax,this._$bounds.yMin,this._$bounds.yMax)}_$buildCharacter(t){const e=this._$defaultTextFormat;switch(e.font=t.font,e.size=0|t.size,e.align=t.align,e.color=0|t.color,e.leading=t.leading,e.letterSpacing=t.letterSpacing,e.leftMargin=t.leftMargin,e.rightMargin=t.rightMargin,t.fontType){case 1:e.bold=!0;break;case 2:e.italic=!0;break;case 3:e.bold=!0,e.italic=!0}switch(this._$type=t.inputType,this._$multiline=!!t.multiline,this._$wordWrap=!!t.wordWrap,this._$border=!!t.border,this._$scrollEnabled=!!t.scroll,this._$thickness=0|t.thickness,this._$thicknessColor=0|t.thicknessColor,this._$bounds.xMin=t.originBounds.xMin,this._$bounds.xMax=t.originBounds.xMax,this._$bounds.yMin=t.originBounds.yMin,this._$bounds.yMax=t.originBounds.yMax,this._$originBounds.xMin=t.originBounds.xMin,this._$originBounds.xMax=t.originBounds.xMax,this._$originBounds.yMin=t.originBounds.yMin,this._$originBounds.yMax=t.originBounds.yMax,t.autoSize){case 1:this.autoSize=t.align;break;case 2:this.autoFontSize=!0}this.text=t.text,Mr&&this._$stage&&this._$createWorkerInstance()}_$sync(t){this._$buildCharacter(t)}_$build(t,e){const i=this._$baseBuild(t,e);return this._$buildCharacter(i),i}_$clip(t,e){const i=this._$getBounds(),s=i.xMax,r=i.xMin,n=i.yMax,a=i.yMin;J(i);const h=v.ceil(v.abs(s-r)),o=v.ceil(v.abs(n-a));if(!h||!o)return;let l=e;const c=this._$transform._$rawMatrix();1===c[0]&&0===c[1]&&0===c[2]&&1===c[3]&&0===c[4]&&0===c[5]||(l=gt(e,c)),t.reset(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(h,0),t.lineTo(h,o),t.lineTo(0,o),t.lineTo(0,0),t.clip(),l!==e&&st(l)}_$draw(t,e,i){if(!this._$visible)return;if(-1===this._$focusIndex&&!this._$background&&!this._$border&&!this.text)return;let s=i;const r=this._$transform._$rawColorTransform();1===r[0]&&1===r[1]&&1===r[2]&&1===r[3]&&0===r[4]&&0===r[5]&&0===r[6]&&0===r[7]||(s=ft(i,r));const n=dt(s[3]+s[7]/255,0,1);if(!n)return;let a=e;const h=this._$transform._$rawMatrix();1===h[0]&&0===h[1]&&0===h[2]&&1===h[3]&&0===h[4]&&0===h[5]||(a=gt(e,h));const o=this._$getBounds(null);o.xMin-=this._$thickness,o.xMax+=this._$thickness,o.yMin-=this._$thickness,o.yMax+=this._$thickness;const l=pt(o,a),c=+l.xMax,_=+l.xMin,$=+l.yMax,u=+l.yMin;J(l);const d=v.ceil(v.abs(c-_)),g=v.ceil(v.abs($-u));switch(!0){case 0===d:case 0===g:case d===-1/0:case g===-1/0:case d===b:case g===b:return}let f=+v.sqrt(a[0]*a[0]+a[1]*a[1]);if(!E.isInteger(f)){const t=f.toString(),e=t.indexOf("e");-1!==e&&(f=+t.slice(0,e)),f=+f.toFixed(4)}let p=+v.sqrt(a[2]*a[2]+a[3]*a[3]);if(!E.isInteger(p)){const t=p.toString(),e=t.indexOf("e");-1!==e&&(p=+t.slice(0,e)),p=+p.toFixed(4)}const m=this._$filters||this.filters,x=null!==m&&m.length>0&&this._$canApply(m);let T=Q(0,d,0,g);if(x&&m)for(let t=0;tA.width||u-T.yMin>A.height)return void J(T);if(0>_+T.xMax||0>u+T.yMax)return void J(T);if(J(T),this._$isUpdated()&&(wt.removeCache(this._$instanceId),t.cachePosition=null,this._$cacheKeys.length=0),!this._$cacheKeys.length||this._$cacheParams[0]!==f||this._$cacheParams[1]!==p||this._$cacheParams[2]!==i[7]){const t=ht(f,p);this._$cacheKeys=wt.generateKeys(this._$instanceId,t),ot(t),this._$cacheParams[0]=f,this._$cacheParams[1]=p,this._$cacheParams[2]=i[7]}const M=this._$blendMode||this.blendMode;if(t.cachePosition=wt.get(this._$cacheKeys),!t.cachePosition){const e=v.min(1,v.max(f,p)),i=v.ceil(v.abs(o.xMax-o.xMin)*f),r=v.ceil(v.abs(o.yMax-o.yMin)*p),n=wt.getCanvas();n.width=i+2*e,n.height=r+2*e;const a=n.getContext("2d");if(!a)throw new Error("the context is null.");if(this._$background||this._$border){if(a.beginPath(),a.moveTo(0,0),a.lineTo(i,0),a.lineTo(i,r),a.lineTo(0,r),a.lineTo(0,0),this._$background){const t=Et(this._$backgroundColor),e=v.max(0,v.min(255*t.A+s[7],255))/255;a.fillStyle=`rgba(${t.R},${t.G},${t.B},${e})`,a.fill()}if(this._$border){const t=Et(this._$borderColor),i=v.max(0,v.min(255*t.A+s[7],255))/255;a.lineWidth=e,a.strokeStyle=`rgba(${t.R},${t.G},${t.B},${i})`,a.stroke()}}a.save(),a.beginPath(),a.moveTo(2,2),a.lineTo(i-2,2),a.lineTo(i-2,r-2),a.lineTo(2,r-2),a.lineTo(2,2),a.clip();let h=2;if(this._$scrollX>0){const t=(this.textWidth-this.width)/this.width;h+=-this._$scrollX*t}let l=2;if(this._$scrollY>0){const t=(this.textHeight-this.height)/this.height;l+=-this._$scrollY*t}a.setTransform(f,0,0,p,h*f,l*p),a.beginPath(),this._$doDraw(a,s,i/f,e),a.restore();const c=y.createCachePosition(i,r),_=y.createTextureFromCanvas(a.canvas);t.drawTextureFromRect(_,c),t.cachePosition=c,wt.set(this._$cacheKeys,c),wt.destroy(a)}let w=!1,S=0,C=0;if(m&&m.length&&this._$canApply(m)){w=!0;const e=this._$drawFilter(t,a,m,d,g);e.offsetX&&(S=e.offsetX),e.offsetY&&(C=e.offsetY),t.cachePosition=e}const I=v.atan2(a[1],a[0]),F=v.atan2(-a[2],a[3]);if(w||!I&&!F)t.setTransform(1,0,0,1,_-S,u-C);else{const e=o.xMin*f,i=o.yMin*p,s=v.cos(I),r=v.sin(I),n=v.cos(F),h=v.sin(F);t.setTransform(s,r,-h,n,e*s-i*h+a[4],e*r+i*n+a[5])}t.cachePosition&&(t.globalAlpha=n,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=M,t.drawInstance(_-S,u-C,c,$,i),t.cachePosition=null),J(o),a!==e&&st(a),s!==i&&nt(s)}_$doDraw(t,e,i,s){const r=this.getTextData();if(!r.textTable.length&&this._$focusIndex>-1&&this._$focusVisible){const i=this._$defaultTextFormat,s=Et(i.color||0),r=v.max(0,v.min(255*s.A+e[7],255))/255;return t.strokeStyle=`rgba(${s.R},${s.G},${s.B},${r})`,t.beginPath(),t.moveTo(0,0),t.lineTo(0,0+(i.size||12)),void t.stroke()}if(this._$selectIndex>-1&&this._$focusIndex>-1){const e=r.textTable.length-1;let s=0,n=0;this._$focusIndex<=this._$selectIndex?(s=v.min(this._$focusIndex,e),n=v.min(this._$selectIndex,e)):(s=v.min(this._$selectIndex,e),n=v.min(this._$focusIndex-1,e));const a=r.textTable[s],h=r.lineTable[a.line],o=this._$getAlignOffset(h,i);let l=0;if(s&&"text"===a.mode){let t=s;for(;t;){const e=r.textTable[--t];if("text"!==e.mode)break;l+=e.w}}t.fillStyle="#b4d7ff";let c=0;for(let e=s;e<=n;++e){const i=r.textTable[e];if("text"===i.mode&&(c+=i.w,e!==n))continue;let s=0;const a="text"===i.mode?i.line:i.line-1;for(let t=0;t0){const t=(this.textWidth-n)/n;a=this._$scrollX*t}const h=n+a,o=this.height;let l=0;if(this._$scrollY>0){const t=(this.textHeight-o)/o;l=this._$scrollY*t}const c=o+l;let _=0,$=0,u=0,d=0,g=!1,f=-1;for(let n=0;n-1&&f>this._$stopIndex))break;if(g&&"text"===o.mode)continue;const p=o.textFormat;if("none"===this._$autoSize){if($>c)break;if("text"===o.mode&&(a>_+o.w||_>h)){_+=o.w;continue}}const m=Et(p.color||0),x=v.max(0,v.min(255*m.A+e[7],255))/255;if(t.fillStyle=`rgba(${m.R},${m.G},${m.B},${x})`,this._$focusVisible&&this._$focusIndex===n){const e=_+u+.1;let i=o.line,s=o.y,n=r.ascentTable[i];"text"!==o.mode&&(s="break"===o.mode?o.h:r.ascentTable[i-1],i>0&&!r.ascentTable[i-1]?(i=o.line,n=r.ascentTable[i-1]):(i=o.line-1,n=r.ascentTable[i]));for(let t=0;t$+r.heightTable[b]){g=!0;continue}d=r.ascentTable[b],u=this._$getAlignOffset(o,i),g=!1;break;case"text":{t.beginPath(),t.font=At(p.font||"",p.size||0,!!p.italic,!!p.bold);const i=_+u,r=$+d;if(p.underline){const n=Et(p.color||0),a=v.max(0,v.min(255*n.A+e[7],255))/255;t.lineWidth=s,t.strokeStyle=`rgba(${n.R},${n.G},${n.B},${a})`,t.beginPath(),t.moveTo(i,r+2),t.lineTo(i+o.w,r+2),t.stroke()}this._$thickness&&t.strokeText(o.text,i,r),t.fillText(o.text,i,r),_+=o.w}}}if(this._$focusVisible&&this._$focusIndex>=r.textTable.length){const i=r.textTable[this._$focusIndex-1];if(i){const s=Et(i.textFormat.color||0),r=v.max(0,v.min(255*s.A+e[7],255))/255;t.strokeStyle=`rgba(${s.R},${s.G},${s.B},${r})`;const n=_+u+.1,a=$+d;t.beginPath(),"text"===i.mode?(t.moveTo(n,a-i.y),t.lineTo(n,a)):(t.moveTo(n,a+i.h),t.lineTo(n,a)),t.stroke()}}}_$mouseHit(t,e,i){return!!this._$visible&&this._$hit(t,e,i)}_$hit(t,e,i){let s=e;const r=this._$transform._$rawMatrix();1===r[0]&&0===r[1]&&0===r[2]&&1===r[3]&&0===r[4]&&0===r[5]||(s=gt(e,r));const n=this._$getBounds(null),a=pt(n,s),h=+a.xMax,o=+a.xMin,l=+a.yMax,c=+a.yMin;J(a),J(n);const _=v.ceil(v.abs(h-o)),$=v.ceil(v.abs(l-c));return t.setTransform(1,0,0,1,o,c),t.beginPath(),t.moveTo(0,0),t.lineTo(_,0),t.lineTo(_,$),t.lineTo(0,$),t.lineTo(0,0),s!==e&&st(s),t.isPointInPath(i.x,i.y)}_$createWorkerInstance(){if(this._$created||!Mr)return;this._$created=!0;const t=this._$getBounds(),e={command:"createTextField",buffer:new Float32Array,instanceId:this._$instanceId,parentId:this._$parent?this._$parent._$instanceId:-1,xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax,limitWidth:this.width,limitHeight:this.height,textHeight:this.textHeight,autoSize:this._$autoSize,wordWrap:this._$wordWrap,border:this._$border,background:this._$background,thickness:this._$thickness};this._$border&&(e.borderColor=this._$borderColor),this._$background&&(e.backgroundColor=this._$backgroundColor),this._$thickness&&(e.thicknessColor=this._$backgroundColor),this._$characterId>-1&&(e.characterId=this._$characterId),this._$loaderInfo&&(e.loaderInfoId=this._$loaderInfo._$id),this._$scale9Grid&&(e.grid={x:this._$scale9Grid.x,y:this._$scale9Grid.y,w:this._$scale9Grid.width,h:this._$scale9Grid.height}),Mr.postMessage(e)}_$postProperty(){if(!Mr)return;const t=this._$createMessage(),e=this._$getBounds(null);t.xMin=e.xMin,t.yMin=e.yMin,t.xMax=e.xMax,t.yMax=e.yMax,J(e),this._$isUpdated()&&(t.limitWidth=this.width,t.limitHeight=this.height,t.textHeight=this.textHeight,t.autoSize=this._$autoSize,t.wordWrap=this._$wordWrap,t.border=this._$border,this._$border&&(t.borderColor=this._$borderColor),t.background=this._$background,this._$background&&(t.backgroundColor=this._$backgroundColor),t.thickness=this._$thickness,this._$thickness&&(t.thicknessColor=this._$backgroundColor)),Mr.postMessage(t),this._$posted=!0,this._$updated=!1}}class Ii{constructor(){this._$rgb="rgb",this._$mode="pad",this._$type="linear",this._$focalPointRatio=0,this._$points=it(),this._$stops=ht()}dispose(){const t=this._$stops;for(let i=0;i{switch(!0){case t[0]>e[0]:return 1;case e[0]>t[0]:return-1;default:return 0}})),this._$stops}linear(t,e,i,s,r="rgb",n="pad"){return this._$type="linear",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$rgb=r,this._$mode=n,this._$stops.length&&(this._$stops.length=0),this}radial(t,e,i,s,r,n,a="rgb",h="pad",o=0){return this._$type="radial",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$points[4]=r,this._$points[5]=n,this._$rgb=a,this._$mode=h,this._$focalPointRatio=dt(o,-.975,.975,0),this._$stops.length&&(this._$stops.length=0),this}addColorStop(t,e){this._$stops.push(ht(t,e))}}class Fi{constructor(t,e,i,s){this._$context=t,this._$texture=e,this._$repeat=i,this._$colorTransform=s}get texture(){return this._$texture}get repeat(){return this._$repeat}get colorTransform(){return this._$colorTransform}}class Ri{constructor(){this._$fillStyle=Z(1,1,1,1),this._$strokeStyle=Z(1,1,1,1),this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5}get miterLimit(){return this._$miterLimit}set miterLimit(t){this._$miterLimit=t}get lineWidth(){return this._$lineWidth}set lineWidth(t){this._$lineWidth=t}get lineCap(){return this._$lineCap}set lineCap(t){this._$lineCap=t}get lineJoin(){return this._$lineJoin}set lineJoin(t){this._$lineJoin=t}get fillStyle(){return this._$fillStyle}set fillStyle(t){this._$fillStyle instanceof A&&tt(this._$fillStyle),this._$fillStyle=t}get strokeStyle(){return this._$strokeStyle}set strokeStyle(t){this._$strokeStyle instanceof A&&tt(this._$strokeStyle),this._$strokeStyle=t}clear(){this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5,this._$clearFill(),this._$clearStroke()}_$clearFill(){if(this._$fillStyle instanceof Ii)return this._$fillStyle.dispose(),void(this._$fillStyle=Z(1,1,1,1));this._$fillStyle instanceof Fi?this._$fillStyle=Z(1,1,1,1):this._$fillStyle.fill(1)}_$clearStroke(){if(this._$strokeStyle instanceof Ii)return this._$strokeStyle.dispose(),void(this._$strokeStyle=Z(1,1,1,1));this._$strokeStyle instanceof Fi?this._$strokeStyle=Z(1,1,1,1):this._$strokeStyle.fill(1)}}let Bi=2048;class Li{constructor(t){t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!0),this._$gl=t,this._$objectPool=[],this._$objectPoolArea=0,this._$activeTexture=-1,this._$boundTextures=[null,null,null],this._$maxWidth=0,this._$maxHeight=0,this._$atlasTextures=[],this._$atlasCacheMap=new Map,this._$positionObjectArray=[],this._$nodeObjectArray=[],this._$atlasNodes=new Map}createTextureAtlas(){const t=this._$gl.createTexture();t.width=Bi,t.height=Bi,this._$gl.activeTexture(this._$gl.TEXTURE3),this._$gl.bindTexture(this._$gl.TEXTURE_2D,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,this._$gl.NEAREST),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,this._$gl.NEAREST),this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,Bi,Bi),this._$gl.bindTexture(this._$gl.TEXTURE_2D,null),this._$activeTexture>-1&&this._$gl.activeTexture(this._$activeTexture);const e=this._$atlasTextures.length;this._$atlasNodes.set(e,[]),this._$atlasCacheMap.set(e,[]),this._$atlasTextures.push(t)}getAtlasTexture(t){return this._$atlasTextures[t]}getNode(t,e,i,s){const r=this._$nodeObjectArray.length?this._$nodeObjectArray.pop():{x:0,y:0,w:0,h:0};return r.x=t,r.y=e,r.w=i,r.h=s,r}createCachePosition(t,e){const i=this._$positionObjectArray.length?this._$positionObjectArray.pop():{index:0,x:0,y:0,w:0,h:0};i.x=i.y=0,i.w=t,i.h=e;for(const[s,r]of this._$atlasNodes){if(!r.length)return t>e?(Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,e)),Bi-e-1>0&&r.push(this.getNode(0,e+1,Bi,Bi-e-1))):(Bi-e-1>0&&r.push(this.getNode(0,e+1,t,Bi-e-1)),Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,Bi))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i;const n=r.length;for(let a=0;an.w||e>n.h))return i.index=s,i.x=n.x,i.y=n.y,this._$atlasCacheMap.get(i.index).push(i),n.w!==t||n.h!==e?t>e?(n.h-e-1>0&&r.push(this.getNode(n.x,n.y+e+1,n.w,n.h-e-1)),n.w-t-1>0?(n.x=n.x+t+1,n.w=n.w-t-1,n.h=e):(r.splice(a,1),this._$nodeObjectArray.push(n))):(n.w-t-1>0&&r.push(this.getNode(n.x+t+1,n.y,n.w-t-1,n.h)),n.h-e-1>0?(n.y=n.y+e+1,n.w=t,n.h=n.h-e-1):(r.splice(a,1),this._$nodeObjectArray.push(n))):(r.splice(a,1),this._$nodeObjectArray.push(n)),i}}const s=this._$atlasTextures.length;this.createTextureAtlas();const r=this._$atlasNodes.get(s);return t>e?(Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,e)),Bi-e-1>0&&r.push(this.getNode(0,e+1,Bi,Bi-e-1))):(Bi-e-1>0&&r.push(this.getNode(0,e+1,t,Bi-e-1)),Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,Bi))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i}releasePosition(t){var e;this._$atlasNodes.has(t.index)&&(null===(e=this._$atlasNodes.get(t.index))||void 0===e||e.unshift(this.getNode(t.x,t.y,t.w,t.h)),this._$positionObjectArray.push(t))}clearCache(){for(const t of this._$atlasCacheMap.values())t.length=0;for(const t of this._$atlasNodes.values())t.length=0}_$createTexture(t,e){const i=this._$gl.createTexture();return i.width=0,i.height=0,i.area=0,i.dirty=!0,i.smoothing=!0,this.bind0(i,!1),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,t,e),i}_$getTexture(t,e){for(let i=0;ithis._$maxWidth*this._$maxHeight*2)this._$gl.deleteTexture(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPool.length&&this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();this._$objectPoolArea-=t.area,this._$gl.deleteTexture(t)}}bind0(t,e=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,e)}bind01(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,e,i),this._$bindTexture(0,this._$gl.TEXTURE0,t,i)}bind012(t,e,i,s=null){this._$bindTexture(2,this._$gl.TEXTURE2,i,s),this._$bindTexture(1,this._$gl.TEXTURE1,e,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}bind02(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,e,i),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}_$bindTexture(t,e,i=null,s=null){const r=i!==this._$boundTextures[t],n=null!==s&&null!==i&&s!==i.smoothing;if((r||n||e===this._$gl.TEXTURE0)&&e!==this._$activeTexture&&(this._$activeTexture=e,this._$gl.activeTexture(e)),r&&(this._$boundTextures[t]=i,this._$gl.bindTexture(this._$gl.TEXTURE_2D,i)),n){i&&(i.smoothing=!!s);const t=s?this._$gl.LINEAR:this._$gl.NEAREST;this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,t)}}}class Pi{constructor(t){this._$gl=t,this._$objectPool=ht(),this._$objectPoolArea=0,this._$maxWidth=0,this._$maxHeight=0}set maxWidth(t){this._$maxWidth=t}set maxHeight(t){this._$maxHeight=t}_$createStencilBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the stencil buffer is null.");return t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getStencilBuffer(t,e){const i=this._$objectPool.length;for(let s=0;s100){const t=this._$objectPool.shift();if(t)return this._$objectPoolArea-=t.area,t}return this._$createStencilBuffer()}create(t,e){const i=this._$getStencilBuffer(t,e);return i.width===t&&i.height===e||(i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,i),this._$gl.renderbufferStorage(this._$gl.RENDERBUFFER,this._$gl.STENCIL_INDEX8,t,e)),i}release(t){if(t.area>this._$maxWidth*this._$maxHeight*2)this._$gl.deleteRenderbuffer(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();t&&(this._$objectPoolArea-=t.area,this._$gl.deleteRenderbuffer(t))}}}class ki{constructor(t,e){this._$gl=t,this._$samples=e,this._$objectPool=ht()}set samples(t){this._$samples=t}_$createColorBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the color buffer is null.");const e=this._$gl.createRenderbuffer();if(!e)throw new Error("the stencil buffer is null.");return t.stencil=e,t.samples=0,t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getColorBuffer(t){if(!this._$objectPool.length)return this._$createColorBuffer();const e=this._$bsearch(t);if(e1;){const s=v.floor((i+e)/2);t<=this._$objectPool[s].area?i=s:e=s}return i}}class Ni{constructor(t,e){this._$gl=t,this._$objectPool=[],this._$frameBuffer=t.createFramebuffer(),t.bindFramebuffer(t.READ_FRAMEBUFFER,this._$frameBuffer),this._$frameBufferTexture=t.createFramebuffer(),this._$currentAttachment=null,this._$isBinding=!1,this._$textureManager=new Li(t),this._$stencilBufferPool=new Pi(t),this._$colorBufferPool=new ki(t,e),this._$isRenderBinding=!1,this._$colorBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.RGBA8,Bi,Bi),this._$stencilBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.STENCIL_INDEX8,Bi,Bi)}bindRenderBuffer(){this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),this._$isRenderBinding||(this._$isRenderBinding=!0,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,this._$stencilBuffer))}get currentAttachment(){return this._$currentAttachment}get textureManager(){return this._$textureManager}createCacheAttachment(t,e,i=!1,s=0){const r=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},n=this._$textureManager.create(t,e);return r.width=t,r.height=e,i?(r.color=this._$colorBufferPool.create(t,e,s),r.texture=n,r.msaa=!0,r.stencil=r.color.stencil):(r.color=n,r.texture=n,r.msaa=!1,r.stencil=this._$stencilBufferPool.create(t,e)),r.mask=!1,r.clipLevel=0,r.isActive=!0,r}clearCache(){this._$textureManager.clearCache()}setMaxSize(t,e){this._$stencilBufferPool._$maxWidth=t,this._$stencilBufferPool._$maxHeight=e,this._$textureManager._$maxWidth=t,this._$textureManager._$maxHeight=e}createTextureAttachment(t,e){const i=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},s=this._$textureManager.create(t,e);return i.width=t,i.height=e,i.color=s,i.texture=s,i.msaa=!1,i.stencil=null,i.mask=!1,i.clipLevel=0,i.isActive=!0,i}createTextureAttachmentFrom(t){const e=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!0};return e.width=t.width,e.height=t.height,e.color=t,e.texture=t,e.msaa=!1,e.stencil=null,e.mask=!1,e.clipLevel=0,e.isActive=!0,e}releaseAttachment(t=null,e=!1){t&&t.isActive&&(t.msaa?t.color instanceof WebGLRenderbuffer&&this._$colorBufferPool.release(t.color):t.stencil&&this._$stencilBufferPool.release(t.stencil),e&&t.texture&&this._$textureManager.release(t.texture),t.color=null,t.texture=null,t.stencil=null,t.isActive=!1,this._$objectPool.push(t))}bind(t){this._$currentAttachment=t,this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),t.msaa?t.color instanceof WebGLRenderbuffer&&(this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.color),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,t.color)):t.color instanceof WebGLTexture&&(t.color&&this._$textureManager.bind0(t.color),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,t.color,0)),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.stencil),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,t.stencil),this._$isRenderBinding=!1}unbind(){this._$currentAttachment=null,this._$isBinding&&(this._$isBinding=!1,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,null))}transferToMainTexture(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,null),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBuffer)}createCachePosition(t,e){return this._$textureManager.createCachePosition(t,e)}transferTexture(t){this._$gl.disable(this._$gl.SCISSOR_TEST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture);const e=this._$textureManager.getAtlasTexture(t.index);this._$textureManager.bind0(e),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,e,0);const i=v.max(0,t.x-1),s=v.max(0,t.y-1),r=v.min(Bi,t.x+t.w+1),n=v.min(Bi,t.y+t.h+1);this._$gl.blitFramebuffer(i,s,r,n,i,s,r,n,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)}getTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");if(!this._$currentAttachment.msaa&&this._$currentAttachment.texture)return this._$currentAttachment.texture;const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");return i.dirty=!1,this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer),i}createTextureFromPixels(t,e,i=null,s=!1,r=!0){return this._$textureManager.create(t,e,i,s,r)}createTextureFromCanvas(t){return this._$textureManager.createFromCanvas(t)}createTextureFromImage(t,e=!1){return this._$textureManager.createFromImage(t,e)}createTextureFromVideo(t,e=!1){return this._$textureManager.createFromVideo(t,e)}createTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$textureManager.create(t,e);return this._$textureManager.bind0(i),this._$gl.copyTexSubImage2D(this._$gl.TEXTURE_2D,0,0,0,0,0,t,e),i}releaseTexture(t){this._$textureManager.release(t)}}class Oi{constructor(){this._$bezierConverterBuffer=new A(32)}cubicToQuad(t,e,i,s,r,n,a,h){this._$split2Cubic(t,e,i,s,r,n,a,h,0,16),this._$split2Cubic(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0,8),this._$split2Cubic(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16,24),this._$split2Quad(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0),this._$split2Quad(this._$bezierConverterBuffer[8],this._$bezierConverterBuffer[9],this._$bezierConverterBuffer[10],this._$bezierConverterBuffer[11],this._$bezierConverterBuffer[12],this._$bezierConverterBuffer[13],this._$bezierConverterBuffer[14],this._$bezierConverterBuffer[15],8),this._$split2Quad(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16),this._$split2Quad(this._$bezierConverterBuffer[24],this._$bezierConverterBuffer[25],this._$bezierConverterBuffer[26],this._$bezierConverterBuffer[27],this._$bezierConverterBuffer[28],this._$bezierConverterBuffer[29],this._$bezierConverterBuffer[30],this._$bezierConverterBuffer[31],24)}_$split2Cubic(t,e,i,s,r,n,a,h,o,l){const c=.125*(t+3*(i+r)+a),_=.125*(e+3*(s+n)+h),$=.125*(a+r-i-t),u=.125*(h+n-s-e);this._$bezierConverterBuffer[o]=t,this._$bezierConverterBuffer[o+1]=e,this._$bezierConverterBuffer[o+2]=.5*(t+i),this._$bezierConverterBuffer[o+3]=.5*(e+s),this._$bezierConverterBuffer[o+4]=c-$,this._$bezierConverterBuffer[o+5]=_-u,this._$bezierConverterBuffer[o+6]=c,this._$bezierConverterBuffer[o+7]=_,this._$bezierConverterBuffer[l]=c,this._$bezierConverterBuffer[l+1]=_,this._$bezierConverterBuffer[l+2]=c+$,this._$bezierConverterBuffer[l+3]=_+u,this._$bezierConverterBuffer[l+4]=.5*(r+a),this._$bezierConverterBuffer[l+5]=.5*(n+h),this._$bezierConverterBuffer[l+6]=a,this._$bezierConverterBuffer[l+7]=h}_$split2Quad(t,e,i,s,r,n,a,h,o){const l=.125*(t+3*(i+r)+a),c=.125*(e+3*(s+n)+h);this._$bezierConverterBuffer[o]=.25*t+.75*i,this._$bezierConverterBuffer[o+1]=.25*e+.75*s,this._$bezierConverterBuffer[o+2]=l,this._$bezierConverterBuffer[o+3]=c,this._$bezierConverterBuffer[o+4]=.75*r+.25*a,this._$bezierConverterBuffer[o+5]=.75*n+.25*h,this._$bezierConverterBuffer[o+6]=a,this._$bezierConverterBuffer[o+7]=h}}class Di{constructor(){this._$currentPath=ht(),this._$vertices=ht(),this._$bezierConverter=new Oi}get vertices(){return this._$pushCurrentPathToVertices(),this._$vertices}begin(){for(this._$currentPath.length=0;this._$vertices.length;)ot(this._$vertices.pop())}moveTo(t,e){this._$currentPath.length?this._$equalsToLastPoint(t,e)||(this._$pushCurrentPathToVertices(),this._$pushPointToCurrentPath(t,e,!1)):this._$pushPointToCurrentPath(t,e,!1)}lineTo(t,e){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}quadTo(t,e,i,s){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(i,s)||(this._$pushPointToCurrentPath(t,e,!0),this._$pushPointToCurrentPath(i,s,!1))}cubicTo(t,e,i,s,r,n){if(this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(r,n))return;const a=+this._$currentPath[this._$currentPath.length-3],h=+this._$currentPath[this._$currentPath.length-2];this._$bezierConverter.cubicToQuad(a,h,t,e,i,s,r,n);const o=this._$bezierConverter._$bezierConverterBuffer;for(let t=0;t<32;)this.quadTo(o[t++],o[t++],o[t++],o[t++])}drawCircle(t,e,i){const s=i,r=.5522847498307936*i;this.cubicTo(t+s,e+r,t+r,e+s,t,e+s),this.cubicTo(t-r,e+s,t-s,e+r,t-s,e),this.cubicTo(t-s,e-r,t-r,e-s,t,e-s),this.cubicTo(t+r,e-s,t+s,e-r,t+s,e)}close(){if(this._$currentPath.length<=6)return;const t=+this._$currentPath[0],e=+this._$currentPath[1];this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}_$equalsToLastPoint(t,e){const i=+this._$currentPath[this._$currentPath.length-3],s=+this._$currentPath[this._$currentPath.length-2];return t===i&&e===s}_$pushPointToCurrentPath(t,e,i){this._$currentPath.push(t,e,i)}_$pushCurrentPathToVertices(){this._$currentPath.length<4?this._$currentPath.length=0:(this._$vertices.push(this._$currentPath),this._$currentPath=ht())}createRectVertices(t,e,i,s){return ht(ht(t,e,!1,t+i,e,!1,t+i,e+s,!1,t,e+s,!1))}}class Ui{constructor(){this.enabled=!1,this.parentMatrixA=1,this.parentMatrixB=0,this.parentMatrixC=0,this.parentMatrixD=0,this.parentMatrixE=1,this.parentMatrixF=0,this.parentMatrixG=0,this.parentMatrixH=0,this.parentMatrixI=1,this.ancestorMatrixA=1,this.ancestorMatrixB=0,this.ancestorMatrixC=0,this.ancestorMatrixD=0,this.ancestorMatrixE=1,this.ancestorMatrixF=0,this.ancestorMatrixG=0,this.ancestorMatrixH=0,this.ancestorMatrixI=1,this.parentViewportX=0,this.parentViewportY=0,this.parentViewportW=0,this.parentViewportH=0,this.minXST=1e-5,this.minYST=1e-5,this.minXPQ=1e-5,this.minYPQ=1e-5,this.maxXST=.99999,this.maxYST=.99999,this.maxXPQ=.99999,this.maxYPQ=.99999}enable(t,e,i,s,r,n,a,h,o,l,c,_,$,u,d,g,f,p,m){const x=r.xMax-r.xMin,b=r.yMax-r.yMin,T=n.w,y=n.h,E=v.abs(v.ceil(x*a)),A=v.abs(v.ceil(b*a)),M=T>0?(n.x-r.xMin)/x:1e-5,w=y>0?(n.y-r.yMin)/b:1e-5,S=T>0?(n.x+n.w-r.xMin)/x:.99999,C=y>0?(n.y+n.h-r.yMin)/b:.99999;let I=E*M/i,F=A*w/s,R=(i-E*(1-S))/i,B=(s-A*(1-C))/s;if(I>=R){const t=M/(M+(1-S));I=v.max(t-1e-5,0),R=v.min(t+1e-5,1)}if(F>=B){const t=w/(w+(1-C));F=v.max(t-1e-5,0),B=v.min(t+1e-5,1)}this.enabled=!0,this.parentMatrixA=h,this.parentMatrixB=o,this.parentMatrixD=l,this.parentMatrixE=c,this.parentMatrixG=_,this.parentMatrixH=$,this.ancestorMatrixA=u,this.ancestorMatrixB=d,this.ancestorMatrixD=g,this.ancestorMatrixE=f,this.ancestorMatrixG=p,this.ancestorMatrixH=m,this.parentViewportX=t,this.parentViewportY=e,this.parentViewportW=i,this.parentViewportH=s,this.minXST=M,this.minYST=w,this.minXPQ=I,this.minYPQ=F,this.maxXST=S,this.maxYST=C,this.maxXPQ=R,this.maxYPQ=B}disable(){this.enabled=!1}}class Vi{constructor(t,e){this._$gl=t,this._$array=[],this._$map=ct();const i=this._$gl.getProgramParameter(e,this._$gl.ACTIVE_UNIFORMS);for(let t=0;t0&&(t.assign--,t.method(t.array)))}}}class Gi{constructor(){this._$attributes=[],this._$count=0}get attributes(){return this._$attributes}get count(){return this._$count}set count(t){this._$count=t}clear(){this._$attributes.length=0,this._$count=0}}class zi{constructor(t,e,i,s){this._$gl=t,this._$context=e,this._$program=this._$createProgram(i,s),this._$uniform=new Vi(t,this._$program),this._$instance=null}get instance(){return this._$instance||(this._$instance=new Gi),this._$instance}get uniform(){return this._$uniform}_$createProgram(t,e){const i=this._$gl.createProgram();i.id=p++;const s=this._$gl.createShader(this._$gl.VERTEX_SHADER);this._$gl.shaderSource(s,t),this._$gl.compileShader(s);const r=this._$gl.createShader(this._$gl.FRAGMENT_SHADER);return this._$gl.shaderSource(r,e),this._$gl.compileShader(r),this._$gl.attachShader(i,s),this._$gl.attachShader(i,r),this._$gl.linkProgram(i),this._$gl.detachShader(i,s),this._$gl.detachShader(i,r),this._$gl.deleteShader(s),this._$gl.deleteShader(r),i}_$attachProgram(){const t=this._$context.shaderList;t.currentProgramId!==this._$program.id&&(t.currentProgramId=this._$program.id,this._$gl.useProgram(this._$program))}drawArraysInstanced(t){this._$attachProgram(),this._$context.vao.bindInstnceArray(t),this._$gl.drawArraysInstanced(this._$gl.TRIANGLE_STRIP,0,4,t.count)}_$drawImage(){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindCommonVertexArray(),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$drawGradient(t,e){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindGradientVertexArray(t,e),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$stroke(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawElements(this._$gl.TRIANGLES,t.indexCount,this._$gl.UNSIGNED_SHORT,0)}_$fill(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t);const e=t.indexRanges,i=e[e.length-1];this._$gl.drawArrays(this._$gl.TRIANGLES,0,i.first+i.count)}_$containerClip(t,e,i){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.TRIANGLES,e,i)}_$drawPoints(t,e,i){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.POINTS,e,i)}}class Xi{static FUNCTION_GRID_OFF(){return"\n\nvec2 applyMatrix(in vec2 vertex) {\n mat3 matrix = mat3(\n u_highp[0].xyz,\n u_highp[1].xyz,\n u_highp[2].xyz\n );\n\n vec2 position = (matrix * vec3(vertex, 1.0)).xy;\n\n return position;\n}\n\n"}static FUNCTION_GRID_ON(t){return`\n\nvec2 applyMatrix(in vec2 vertex) {\n mat3 parent_matrix = mat3(\n u_highp[${t}].xyz,\n u_highp[${t+1}].xyz,\n u_highp[${t+2}].xyz\n );\n mat3 ancestor_matrix = mat3(\n u_highp[${t+3}].xyz,\n u_highp[${t+4}].xyz,\n u_highp[${t+5}].xyz\n );\n vec2 parent_offset = vec2(u_highp[${t+2}].w, u_highp[${t+3}].w);\n vec2 parent_size = vec2(u_highp[${t+4}].w, u_highp[${t+5}].w);\n vec4 grid_min = u_highp[${t+6}];\n vec4 grid_max = u_highp[${t+7}];\n\n vec2 position = (parent_matrix * vec3(vertex, 1.0)).xy;\n position = (position - parent_offset) / parent_size;\n\n vec4 ga = grid_min;\n vec4 gb = grid_max - grid_min;\n vec4 gc = vec4(1.0) - grid_max;\n\n vec2 pa = position;\n vec2 pb = position - grid_min.st;\n vec2 pc = position - grid_max.st;\n\n position = (ga.pq / ga.st) * min(pa, ga.st)\n + (gb.pq / gb.st) * clamp(pb, vec2(0.0), gb.st)\n + (gc.pq / gc.st) * max(vec2(0.0), pc);\n\n position = position * parent_size + parent_offset;\n position = (ancestor_matrix * vec3(position, 1.0)).xy;\n\n return position;\n}\n\n`}}class qi{static TEMPLATE(t,e,i,s){const r=e-1,n=i?this.VARYING_UV_ON():"",a=i?this.STATEMENT_UV_ON():"";return`#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\nlayout (location = 1) in vec2 a_option1;\nlayout (location = 2) in vec2 a_option2;\nlayout (location = 3) in float a_type;\n\nuniform vec4 u_highp[${t}];\n\n${n}\n\n${s?Xi.FUNCTION_GRID_ON(i?5:0):Xi.FUNCTION_GRID_OFF()}\n\nfloat crossVec2(in vec2 v1, in vec2 v2) {\n return v1.x * v2.y - v2.x * v1.y;\n}\n\nvec2 perpendicularVec2(in vec2 v1) {\n float face = u_highp[${r}][1];\n\n return face * vec2(v1.y, -v1.x);\n}\n\nvec2 calculateNormal(in vec2 direction) {\n vec2 normalized = normalize(direction);\n return perpendicularVec2(normalized);\n}\n\nvec2 calculateIntersection(in vec2 v1, in vec2 v2, in vec2 o1, in vec2 o2) {\n float t = crossVec2(o2 - o1, v2) / crossVec2(v1, v2);\n return (o1 + t * v1);\n}\n\nvec2 calculateAnchor(in vec2 position, in float convex, out vec2 v1, out vec2 v2, out vec2 o1, out vec2 o2) {\n float miter_limit = u_highp[${r}][2];\n\n vec2 a = applyMatrix(a_option1);\n vec2 b = applyMatrix(a_option2);\n\n v1 = convex * (position - a);\n v2 = convex * (b - position);\n o1 = calculateNormal(v1) + a;\n o2 = calculateNormal(v2) + position;\n\n vec2 anchor = calculateIntersection(v1, v2, o1, o2) - position;\n return normalize(anchor) * min(length(anchor), miter_limit);\n}\n\nvoid main() {\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\n float half_width = u_highp[${r}][0];\n\n vec2 position = applyMatrix(a_vertex);\n vec2 offset = vec2(0.0);\n vec2 v1, v2, o1, o2;\n\n if (a_type == 1.0 || a_type == 2.0) { // 線分\n offset = calculateNormal(a_option2 * (applyMatrix(a_option1) - position));\n } else if (a_type == 10.0) { // スクエア線端\n offset = normalize(position - applyMatrix(a_option1));\n offset += a_option2 * perpendicularVec2(offset);\n } else if (a_type == 21.0) { // マイター結合(線分Bの凸側)\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\n } else if (a_type == 22.0) { // マイター結合(線分Aの凸側)\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\n } else if (a_type == 23.0) { // マイター結合(線分Aの凹側)\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\n } else if (a_type == 24.0) { // マイター結合(線分Bの凹側)\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\n } else if (a_type >= 30.0) { // ラウンド結合\n float face = u_highp[${r}][1];\n float rad = face * (a_type - 30.0) * 0.3488888889; /* 0.3488888889 = PI / 9.0 */\n offset = mat2(cos(rad), sin(rad), -sin(rad), cos(rad)) * vec2(1.0, 0.0);\n }\n \n offset *= half_width;\n position += offset;\n ${a}\n\n position /= viewport;\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n`}static VARYING_UV_ON(){return"\nout vec2 v_uv;\n"}static STATEMENT_UV_ON(){return"\n mat3 uv_matrix = mat3(\n u_highp[0].xyz,\n u_highp[1].xyz,\n u_highp[2].xyz\n );\n mat3 inverse_matrix = mat3(\n u_highp[3].xyz,\n u_highp[4].xyz,\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\n );\n\n v_uv = (uv_matrix * vec3(a_vertex, 1.0)).xy;\n v_uv += offset;\n v_uv = (inverse_matrix * vec3(v_uv, 1.0)).xy;\n"}}class Yi{static TEMPLATE(t,e,i,s){const r=i?this.ATTRIBUTE_BEZIER_ON():"",n=i?this.VARYING_BEZIER_ON():e?this.VARYING_UV_ON():"",a=i?this.STATEMENT_BEZIER_ON():e?this.STATEMENT_UV_ON():"";return`#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n${r}\n\nuniform vec4 u_highp[${t}];\n\n${n}\n\n${s?Xi.FUNCTION_GRID_ON(e?5:0):Xi.FUNCTION_GRID_OFF()}\n\nvoid main() {\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\n\n ${a}\n\n vec2 pos = applyMatrix(a_vertex) / viewport;\n pos = pos * 2.0 - 1.0;\n gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0);\n}\n\n`}static ATTRIBUTE_BEZIER_ON(){return"\nlayout (location = 1) in vec2 a_bezier;\n"}static VARYING_UV_ON(){return"\nout vec2 v_uv;\n"}static VARYING_BEZIER_ON(){return"\nout vec2 v_bezier;\n"}static STATEMENT_UV_ON(){return"\n mat3 uv_matrix = mat3(\n u_highp[0].xyz,\n u_highp[1].xyz,\n u_highp[2].xyz\n );\n mat3 inverse_matrix = mat3(\n u_highp[3].xyz,\n u_highp[4].xyz,\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\n );\n\n v_uv = (inverse_matrix * uv_matrix * vec3(a_vertex, 1.0)).xy;\n"}static STATEMENT_BEZIER_ON(){return"\n v_bezier = a_bezier;\n"}}class Hi{static FUNCTION_IS_INSIDE(){return"\n\nfloat isInside(in vec2 uv) {\n return step(4.0, dot(step(vec4(0.0, uv.x, 0.0, uv.y), vec4(uv.x, 1.0, uv.y, 1.0)), vec4(1.0)));\n}\n\n"}static STATEMENT_INSTANCED_COLOR_TRANSFORM_ON(){return"\n src.rgb /= max(0.0001, src.a);\n src = clamp(src * mul + add, 0.0, 1.0);\n src.rgb *= src.a;\n"}static STATEMENT_COLOR_TRANSFORM_ON(t){return`\n vec4 mul = u_mediump[${t}];\n vec4 add = u_mediump[${t+1}];\n${Hi.STATEMENT_INSTANCED_COLOR_TRANSFORM_ON()}\n`}}class ji{static SOLID_COLOR(){return"#version 300 es\nprecision mediump float;\n\nuniform vec4 u_mediump;\n\nout vec4 o_color;\n\nvoid main() {\n o_color = vec4(u_mediump.rgb * u_mediump.a, u_mediump.a);\n}\n\n"}static BITMAP_CLIPPED(){return`#version 300 es\nprecision mediump float;\n\nuniform sampler2D u_texture;\nuniform vec4 u_mediump[3];\n\nin vec2 v_uv;\nout vec4 o_color;\n\nvoid main() {\n vec2 uv = vec2(v_uv.x, u_mediump[0].y - v_uv.y) / u_mediump[0].xy;\n\n vec4 src = texture(u_texture, uv);\n ${Hi.STATEMENT_COLOR_TRANSFORM_ON(1)}\n o_color = src;\n}`}static BITMAP_PATTERN(){return`#version 300 es\nprecision mediump float;\n\nuniform sampler2D u_texture;\nuniform vec4 u_mediump[3];\n\nin vec2 v_uv;\nout vec4 o_color;\n\nvoid main() {\n vec2 uv = fract(vec2(v_uv.x, -v_uv.y) / u_mediump[0].xy);\n \n vec4 src = texture(u_texture, uv);\n ${Hi.STATEMENT_COLOR_TRANSFORM_ON(1)}\n o_color = src;\n}`}static MASK(){return"#version 300 es\nprecision mediump float;\n\nin vec2 v_bezier;\nout vec4 o_color;\n\nvoid main() {\n vec2 px = dFdx(v_bezier);\n vec2 py = dFdy(v_bezier);\n\n vec2 f = (2.0 * v_bezier.x) * vec2(px.x, py.x) - vec2(px.y, py.y);\n float alpha = 0.5 - (v_bezier.x * v_bezier.x - v_bezier.y) / length(f);\n\n if (alpha > 0.0) {\n o_color = vec4(min(alpha, 1.0));\n } else {\n discard;\n } \n}\n\n"}}class Wi{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=ct()}getSolidColorShapeShader(t,e){const i=`s${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?qi.TEMPLATE(s,r,!1,e):Yi.TEMPLATE(s,!1,!1,e);const a=new zi(this._$gl,this._$context,n,ji.SOLID_COLOR());return this._$collection.set(i,a),a}getBitmapShapeShader(t,e,i){const s=`b${t?"y":"n"}${e?"y":"n"}${i?"y":"n"}`;if(this._$collection.has(s)){const t=this._$collection.get(s);if(t)return t}const r=(i?13:5)+(t?1:0),n=r;let a;a=t?qi.TEMPLATE(r,n,!0,i):Yi.TEMPLATE(r,!0,!1,i);const h=e?ji.BITMAP_PATTERN():ji.BITMAP_CLIPPED(),o=new zi(this._$gl,this._$context,a,h);return this._$collection.set(s,o),o}getMaskShapeShader(t,e){const i=`m${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?qi.TEMPLATE(s,r,!1,e):Yi.TEMPLATE(s,!1,!0,e);const a=new zi(this._$gl,this._$context,n,ji.MASK());return this._$collection.set(i,a),a}setSolidColorShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_){const $=t.highp;let u;n?($[0]=l.parentMatrixA,$[1]=l.parentMatrixB,$[2]=l.parentMatrixC,$[4]=l.parentMatrixD,$[5]=l.parentMatrixE,$[6]=l.parentMatrixF,$[8]=l.parentMatrixG,$[9]=l.parentMatrixH,$[10]=l.parentMatrixI,$[12]=l.ancestorMatrixA,$[13]=l.ancestorMatrixB,$[14]=l.ancestorMatrixC,$[16]=l.ancestorMatrixD,$[17]=l.ancestorMatrixE,$[18]=l.ancestorMatrixF,$[20]=l.ancestorMatrixG,$[21]=l.ancestorMatrixH,$[22]=l.ancestorMatrixI,$[3]=h,$[7]=o,$[11]=l.parentViewportX,$[15]=l.parentViewportY,$[19]=l.parentViewportW,$[23]=l.parentViewportH,$[24]=l.minXST,$[25]=l.minYST,$[26]=l.minXPQ,$[27]=l.minYPQ,$[28]=l.maxXST,$[29]=l.maxYST,$[30]=l.maxXPQ,$[31]=l.maxYPQ,u=32):($[0]=a[0],$[1]=a[1],$[2]=a[2],$[4]=a[3],$[5]=a[4],$[6]=a[5],$[8]=a[6],$[9]=a[7],$[10]=a[8],$[3]=h,$[7]=o,u=12),e&&($[u]=i,$[u+1]=s,$[u+2]=r);const d=t.mediump;d[0]=c[0],d[1]=c[1],d[2]=c[2],d[3]=c[3]*_}setBitmapShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_,$,u,d,g,f,p,m,x,b){const v=t.highp;let T;v[0]=a[0],v[1]=a[1],v[2]=a[2],v[4]=a[3],v[5]=a[4],v[6]=a[5],v[8]=a[6],v[9]=a[7],v[10]=a[8],v[12]=h[0],v[13]=h[1],v[14]=h[2],v[16]=h[3],v[17]=h[4],v[18]=h[5],v[11]=h[6],v[15]=h[7],v[19]=h[8],v[3]=o,v[7]=l,T=20,n&&(v[T]=c.parentMatrixA,v[T+1]=c.parentMatrixB,v[T+2]=c.parentMatrixC,v[T+4]=c.parentMatrixD,v[T+5]=c.parentMatrixE,v[T+6]=c.parentMatrixF,v[T+8]=c.parentMatrixG,v[T+9]=c.parentMatrixH,v[T+10]=c.parentMatrixI,v[T+12]=c.ancestorMatrixA,v[T+13]=c.ancestorMatrixB,v[T+14]=c.ancestorMatrixC,v[T+16]=c.ancestorMatrixD,v[T+17]=c.ancestorMatrixE,v[T+18]=c.ancestorMatrixF,v[T+20]=c.ancestorMatrixG,v[T+21]=c.ancestorMatrixH,v[T+22]=c.ancestorMatrixI,v[T+11]=c.parentViewportX,v[T+15]=c.parentViewportY,v[T+19]=c.parentViewportW,v[T+23]=c.parentViewportH,v[T+24]=c.minXST,v[T+25]=c.minYST,v[T+26]=c.minXPQ,v[T+27]=c.minYPQ,v[T+28]=c.maxXST,v[T+29]=c.maxYST,v[T+30]=c.maxXPQ,v[T+31]=c.maxYPQ,T=52),e&&(v[T]=i,v[T+1]=s,v[T+2]=r);const y=t.mediump;y[0]=_,y[1]=$,y[4]=u,y[5]=d,y[6]=g,y[7]=f,y[8]=p,y[9]=m,y[10]=x,y[11]=b}setMaskShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_,$,u=null){const d=t.highp;e&&u?(d[0]=u.parentMatrixA,d[1]=u.parentMatrixB,d[2]=u.parentMatrixC,d[4]=u.parentMatrixD,d[5]=u.parentMatrixE,d[6]=u.parentMatrixF,d[8]=u.parentMatrixG,d[9]=u.parentMatrixH,d[10]=u.parentMatrixI,d[12]=u.ancestorMatrixA,d[13]=u.ancestorMatrixB,d[14]=u.ancestorMatrixC,d[16]=u.ancestorMatrixD,d[17]=u.ancestorMatrixE,d[18]=u.ancestorMatrixF,d[20]=u.ancestorMatrixG,d[21]=u.ancestorMatrixH,d[22]=u.ancestorMatrixI,d[3]=_,d[7]=$,d[11]=u.parentViewportX,d[15]=u.parentViewportY,d[19]=u.parentViewportW,d[23]=u.parentViewportH,d[24]=u.minXST,d[25]=u.minYST,d[26]=u.minXPQ,d[27]=u.minYPQ,d[28]=u.maxXST,d[29]=u.maxYST,d[30]=u.maxXPQ,d[31]=u.maxYPQ):(d[0]=i,d[1]=s,d[2]=r,d[4]=n,d[5]=a,d[6]=h,d[8]=o,d[9]=l,d[10]=c,d[3]=_,d[7]=$)}setMaskShapeUniformIdentity(t,e,i){const s=t.highp;s[0]=1,s[1]=0,s[2]=0,s[4]=0,s[5]=1,s[6]=0,s[8]=0,s[9]=0,s[10]=1,s[3]=e,s[7]=i}}class Ki{static TEMPLATE(t,e,i,s,r){const n=i?this.STATEMENT_GRADIENT_TYPE_RADIAL(e,s):this.STATEMENT_GRADIENT_TYPE_LINEAR(e);let a;switch(r){case"reflect":a="1.0 - abs(fract(t * 0.5) * 2.0 - 1.0)";break;case"repeat":a="fract(t)";break;default:a="clamp(t, 0.0, 1.0)"}return`#version 300 es\nprecision highp float;\n\nuniform sampler2D u_texture;\nuniform vec4 u_highp[${t}];\n\nin vec2 v_uv;\nout vec4 o_color;\n\nvoid main() {\n vec2 p = v_uv;\n ${n}\n t = ${a};\n o_color = texture(u_texture, vec2(t, 0.5));\n}\n\n`}static STATEMENT_GRADIENT_TYPE_LINEAR(t){return`\n vec2 a = u_highp[${t}].xy;\n vec2 b = u_highp[${t}].zw;\n\n vec2 ab = b - a;\n vec2 ap = p - a;\n\n float t = dot(ab, ap) / dot(ab, ab);\n`}static STATEMENT_GRADIENT_TYPE_RADIAL(t,e){return`\n float radius = u_highp[${t}][0];\n\n vec2 coord = p / radius;\n ${e?this.STATEMENT_FOCAL_POINT_ON(t):this.STATEMENT_FOCAL_POINT_OFF()}\n`}static STATEMENT_FOCAL_POINT_OFF(){return"\n float t = length(coord);\n"}static STATEMENT_FOCAL_POINT_ON(t){return`\n vec2 focal = vec2(u_highp[${t}][1], 0.0);\n\n vec2 dir = normalize(coord - focal);\n\n float a = dot(dir, dir);\n float b = 2.0 * dot(dir, focal);\n float c = dot(focal, focal) - 1.0;\n float x = (-b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a);\n\n float t = distance(focal, coord) / distance(focal, focal + dir * x);\n`}}class Qi{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=ct()}getGradientShapeShader(t,e,i,s,r){const n=this.createCollectionKey(t,e,i,s,r);if(this._$collection.has(n)){const t=this._$collection.get(n);if(t)return t}const a=(e?13:5)+(t?1:0)+1,h=a-1;let o;o=t?qi.TEMPLATE(a,h,!0,e):Yi.TEMPLATE(a,!0,!1,e);const l=new zi(this._$gl,this._$context,o,Ki.TEMPLATE(a,h,i,s,r));return this._$collection.set(n,l),l}createCollectionKey(t,e,i,s,r){const n=t?"y":"n",a=e?"y":"n",h=i?"y":"n",o=i&&s?"y":"n";let l=0;switch(r){case"reflect":l=1;break;case"repeat":l=2}return`${n}${a}${h}${o}${l}`}setGradientShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_,$,u){const d=t.highp;d[0]=a[0],d[1]=a[1],d[2]=a[2],d[4]=a[3],d[5]=a[4],d[6]=a[5],d[8]=a[6],d[9]=a[7],d[10]=a[8],d[12]=h[0],d[13]=h[1],d[14]=h[2],d[16]=h[3],d[17]=h[4],d[18]=h[5],d[11]=h[6],d[15]=h[7],d[19]=h[8],d[3]=o,d[7]=l;let g=20;n&&(d[g]=c.parentMatrixA,d[g+1]=c.parentMatrixB,d[g+2]=c.parentMatrixC,d[g+4]=c.parentMatrixD,d[g+5]=c.parentMatrixE,d[g+6]=c.parentMatrixF,d[g+8]=c.parentMatrixG,d[g+9]=c.parentMatrixH,d[g+10]=c.parentMatrixI,d[g+12]=c.ancestorMatrixA,d[g+13]=c.ancestorMatrixB,d[g+14]=c.ancestorMatrixC,d[g+16]=c.ancestorMatrixD,d[g+17]=c.ancestorMatrixE,d[g+18]=c.ancestorMatrixF,d[g+20]=c.ancestorMatrixG,d[g+21]=c.ancestorMatrixH,d[g+22]=c.ancestorMatrixI,d[g+11]=c.parentViewportX,d[g+15]=c.parentViewportY,d[g+19]=c.parentViewportW,d[g+23]=c.parentViewportH,d[g+24]=c.minXST,d[g+25]=c.minYST,d[g+26]=c.minXPQ,d[g+27]=c.minYPQ,d[g+28]=c.maxXST,d[g+29]=c.maxYST,d[g+30]=c.maxXPQ,d[g+31]=c.maxYPQ,g=52),e&&(d[g]=i,d[g+1]=s,d[g+2]=r,g+=4),_?(d[g]=$[5],d[g+1]=u):(d[g]=$[0],d[g+1]=$[1],d[g+2]=$[2],d[g+3]=$[3])}}class Ji{static TEXTURE(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nout vec2 v_coord;\n\nvoid main() {\n v_coord = a_vertex;\n\n vec2 position = a_vertex * 2.0 - 1.0;\n gl_Position = vec4(position, 0.0, 1.0);\n}\n\n"}static BLEND(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nuniform vec4 u_highp[4];\n\nout vec2 v_coord;\n\nvoid main() {\n v_coord = a_vertex;\n\n vec2 offset = u_highp[0].xy;\n vec2 size = u_highp[0].zw;\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position = position * size + offset;\n position = (matrix * vec3(position, 1.0)).xy;\n position /= viewport;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}static INSTANCE_BLEND(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nuniform vec4 u_highp[5];\n\nout vec2 v_src_coord;\nout vec2 v_dst_coord;\n\nvoid main() {\n vec4 rect = vec4(u_highp[0].x, u_highp[0].y, u_highp[0].z, u_highp[0].w);\n vec2 size = vec2(u_highp[4].x, u_highp[4].y);\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\n\n v_src_coord = a_vertex * rect.zw + rect.xy;\n v_dst_coord = a_vertex;\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position = position * size;\n position = (matrix * vec3(position, 1.0)).xy;\n position /= viewport;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}static INSTANCE(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\nlayout (location = 1) in vec4 a_rect;\nlayout (location = 2) in vec4 a_size;\nlayout (location = 3) in vec2 a_offset;\nlayout (location = 4) in vec4 a_matrix;\nlayout (location = 5) in vec4 a_mul;\nlayout (location = 6) in vec4 a_add;\n\nout vec2 v_coord;\nout vec4 mul;\nout vec4 add;\n\nvoid main() {\n v_coord = a_vertex * a_rect.zw + a_rect.xy;\n mul = a_mul;\n add = a_add;\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position = position * a_size.xy;\n mat3 matrix = mat3(a_matrix.x, a_matrix.y, 0.0, a_matrix.z, a_matrix.w, 0.0, a_offset.x, a_offset.y, 1.0);\n position = (matrix * vec3(position, 1.0)).xy;\n position /= a_size.zw;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}static BLEND_CLIP(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nuniform vec4 u_highp[4];\n\nout vec2 v_coord;\n\nvoid main() {\n v_coord = a_vertex;\n\n vec2 offset = u_highp[0].xy;\n vec2 size = u_highp[0].zw;\n mat3 inv_matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position *= viewport;\n position = (inv_matrix * vec3(position, 1.0)).xy;\n position = (position - offset) / size;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}}class Zi{static TEMPLATE(t,e,i){let s="";for(let t=1;t>16)/255,h[a++]=(e>>8&255)/255,h[a++]=(255&e)/255,h[a++]=s[t]}for(let t=r;tthis._$vertexBufferData.length){const t=new A(2*this._$vertexBufferData.length);t.set(this._$vertexBufferData),this._$vertexBufferData=t}}static _$expandIndexBufferIfNeeded(t){if(this._$indexBufferPos+t>this._$indexBufferData.length){const t=new w(2*this._$indexBufferData.length);t.set(this._$indexBufferData),this._$indexBufferData=t}}static _$generateLineSegment(t){const e=t.length-5;for(let i=0;it*s-i*e;class ds{constructor(t){this._$gl=t,this._$fillVertexArrayPool=[],this._$strokeVertexArrayPool=[],this._$boundVertexArray=null,this._$fillAttrib_vertex=0,this._$fillAttrib_bezier=1,this._$strokeAttrib_vertex=0,this._$strokeAttrib_option1=1,this._$strokeAttrib_option2=2,this._$strokeAttrib_type=3,this._$vertexBufferData=new Float32Array([0,0,0,1,1,0,1,1]),this._$attributeVertexBuffer=t.createBuffer(),this._$attributeBuffer=new Float32Array(22),this._$instanceVertexArray=this._$getCommonVertexArray(),this._$commonVertexArray=this._$getVertexArray(0,1)}_$getCommonVertexArray(){const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1]),this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,this._$attributeVertexBuffer),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(1,4,this._$gl.FLOAT,!1,88,0),this._$gl.vertexAttribDivisor(1,1),this._$gl.enableVertexAttribArray(2),this._$gl.vertexAttribPointer(2,4,this._$gl.FLOAT,!1,88,16),this._$gl.vertexAttribDivisor(2,1),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(3,2,this._$gl.FLOAT,!1,88,32),this._$gl.vertexAttribDivisor(3,1),this._$gl.enableVertexAttribArray(4),this._$gl.vertexAttribPointer(4,4,this._$gl.FLOAT,!1,88,40),this._$gl.vertexAttribDivisor(4,1),this._$gl.enableVertexAttribArray(5),this._$gl.vertexAttribPointer(5,4,this._$gl.FLOAT,!1,88,56),this._$gl.vertexAttribDivisor(5,1),this._$gl.enableVertexAttribArray(6),this._$gl.vertexAttribPointer(6,4,this._$gl.FLOAT,!1,88,72),this._$gl.vertexAttribDivisor(6,1),t}_$getVertexArray(t,e){const i=this._$gl.createVertexArray();this.bind(i);const s=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s),this._$vertexBufferData[0]=t,this._$vertexBufferData[2]=t,this._$vertexBufferData[4]=e,this._$vertexBufferData[6]=e,this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$vertexBufferData,this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),i}_$getFillVertexArray(){if(this._$fillVertexArrayPool.length){const t=this._$fillVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(this._$fillAttrib_vertex,2,this._$gl.FLOAT,!1,16,0),this._$gl.vertexAttribPointer(this._$fillAttrib_bezier,2,this._$gl.FLOAT,!1,16,8),t}_$getStrokeVertexArray(){if(this._$strokeVertexArrayPool.length){const t=this._$strokeVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e);const i=this._$gl.createBuffer();return t.indexBuffer=i,t.indexLength=0,this._$gl.bindBuffer(this._$gl.ELEMENT_ARRAY_BUFFER,i),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.enableVertexAttribArray(2),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(this._$strokeAttrib_vertex,2,this._$gl.FLOAT,!1,28,0),this._$gl.vertexAttribPointer(this._$strokeAttrib_option1,2,this._$gl.FLOAT,!1,28,8),this._$gl.vertexAttribPointer(this._$strokeAttrib_option2,2,this._$gl.FLOAT,!1,28,16),this._$gl.vertexAttribPointer(this._$strokeAttrib_type,1,this._$gl.FLOAT,!1,28,24),t}createFill(t){const e=$s.generate(t),i=e.vertexBufferData,s=this._$getFillVertexArray();return s.indexRanges=e.indexRanges,this.bind(s),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s.vertexBuffer),s.vertexLengththis._$attributeBuffer.length&&(this._$attributeBuffer=new Float32Array(t.attributes.length),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW)),this._$attributeBuffer.set(t.attributes),this._$gl.bufferSubData(this._$gl.ARRAY_BUFFER,0,this._$attributeBuffer.subarray(0,t.attributes.length))}bindCommonVertexArray(){this.bind(this._$commonVertexArray)}bindGradientVertexArray(t,e){const i=this._$getVertexArray(t,e);this.bind(i)}}class gs{constructor(t,e){this._$context=t,this._$gl=e,this._$clips=[],this._$poolClip=[],this._$clipStatus=!1,this._$containerClip=!1,this._$currentClip=!1}get containerClip(){return this._$containerClip}set containerClip(t){this._$containerClip=t}_$onClear(t){t&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0)}_$onBind(t){!t&&this._$currentClip?(this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1):t&&!this._$currentClip&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0,this._$endClipDef())}_$onClearRect(){this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1}_$enterClip(){this._$currentClip||(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0);const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");t.mask=!0,++t.clipLevel}_$beginClipDef(){const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.stencilMask(1<7&&(this._$unionStencilMask(e,a,h),n=e)}n>e+1&&this._$unionStencilMask(e,a,h)}_$unionStencilMask(t,e,i){const s=this._$context.path.createRectVertices(0,0,e,i),r=this._$context.vao.createFill(s);ot(s.pop()),ot(s);const n=this._$context.shaderList.shapeShaderVariants,a=n.getMaskShapeShader(!1,!1),h=a.uniform;n.setMaskShapeUniformIdentity(h,e,i);const o=r.indexRanges[0];this._$gl.stencilFunc(this._$gl.LEQUAL,1<this._$maxTextureSize?this._$maxTextureSize/i:1}drawInstacedArray(){this.blend.drawInstacedArray()}clearInstacedArray(){this.blend.clearInstacedArray()}bindRenderBuffer(t){this._$frameBufferManager.bindRenderBuffer(),this._$gl.clearColor(0,0,0,0),this._$gl.clear(this._$gl.COLOR_BUFFER_BIT|this._$gl.STENCIL_BUFFER_BIT),this._$viewportWidth=t.w,this._$viewportHeight=t.h,this._$gl.viewport(t.x,t.y,t.w,t.h),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(t.x,t.y,t.w,t.h)}getTextureFromRect(t){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t.index),s=e.currentAttachment,r=e.createTextureAttachment(t.w,t.h);this._$bind(r),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(i,-t.x,-i.height+t.h+t.y,i.width,i.height),this.restore();const n=r.texture;return e.releaseAttachment(r),this._$bind(s),n}drawBitmap(t){const e=this._$shaderList.blendShaderVariants,i=e.getNormalBlendShader(!1);e.setNormalBlendUniform(i.uniform,0,0,t.width,t.height,this._$matrix,this._$viewportWidth,this._$viewportHeight,!1,1,1,1,1,0,0,0,0),this._$frameBufferManager.textureManager.bind0(t,this._$imageSmoothingEnabled),this.blend.toOperation("normal"),i._$drawImage()}drawTextureFromRect(t,e){const i=this._$frameBufferManager,s=i.currentAttachment;this.bindRenderBuffer(e),i.transferTexture(e);const r=i.textureManager.getAtlasTexture(e.index),n=i.createTextureAttachmentFrom(r);this._$bind(n),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(e.x,e.y,e.w,e.h),this._$gl.clearColor(0,0,0,0),this._$gl.disable(this._$gl.SCISSOR_TEST),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(t,e.x,r.height-e.h-e.y,t.width,t.height),this.restore(),i.releaseAttachment(n),this._$bind(s),i.textureManager.release(t)}stopStencil(){this._$mask._$onClearRect()}_$bind(t=null){if(!t)return;this._$frameBufferManager.bind(t);const e=t.color,i=t.stencil,s=t.width,r=t.height;this._$viewportWidth===s&&this._$viewportHeight===r||(this._$viewportWidth=s,this._$viewportHeight=r,this._$gl.viewport(0,0,s,r)),(e&&e.dirty||i&&i.dirty)&&(e&&(e.dirty=!1),i&&(i.dirty=!1),this._$gl.clearColor(0,0,0,0),this.clearRect(0,0,this._$viewportWidth,this._$viewportHeight),this._$gl.clearColor(this._$clearColorR,this._$clearColorG,this._$clearColorB,this._$clearColorA),this._$mask._$onClear(t.mask)),this._$mask._$onBind(t.mask)}setTransform(t,e,i,s,r,n){this._$matrix[0]=t,this._$matrix[1]=e,this._$matrix[3]=i,this._$matrix[4]=s,this._$matrix[6]=r,this._$matrix[7]=n}setMaxSize(t,e){this._$frameBufferManager.setMaxSize(t,e)}transform(t,e,i,s,r,n){const a=this._$matrix[0],h=this._$matrix[1],o=this._$matrix[3],l=this._$matrix[4],c=this._$matrix[6],_=this._$matrix[7];this._$matrix[0]=t*a+e*o,this._$matrix[1]=t*h+e*l,this._$matrix[3]=i*a+s*o,this._$matrix[4]=i*h+s*l,this._$matrix[6]=r*a+n*o+c,this._$matrix[7]=r*h+n*l+_}debug(t=0){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t),s=e.currentAttachment,r=e.createTextureAttachmentFrom(i);this._$bind(r);const n=new Uint8Array(i.width*i.height*4);this._$gl.readPixels(0,0,i.width,i.height,this._$gl.RGBA,this._$gl.UNSIGNED_BYTE,n);const a=document.createElement("canvas");a.width=i.width,a.height=i.height;const h=a.getContext("2d"),o=new ImageData(i.width,i.height);for(let t=0;ts.length||e.push(s)}if(!e.length)return void ot(e);const i=this._$vao.createFill(e),s=this.fillStyle;let r,n,a,h=this._$matrix;const o=this._$grid.enabled;if(s instanceof Ii){const t=s.stops,e="linearRGB"===s.rgb;if(r=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0(r,!0),this._$frameBufferManager.bindRenderBuffer(),n=this._$shaderList.gradientShapeShaderVariants,"linear"===s.type)a=n.getGradientShapeShader(!1,o,!1,!1,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,s.points,0);else{h=this._$stack[this._$stack.length-1];const t=0!==s.focalPointRatio;a=n.getGradientShapeShader(!1,o,!0,t,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,s.points,s.focalPointRatio)}}else if(s instanceof Fi){h=this._$stack[this._$stack.length-1];const t=s.colorTransform;r=s.texture,this._$frameBufferManager.textureManager.bind0(r,this._$imageSmoothingEnabled),n=this._$shaderList.shapeShaderVariants,a=n.getBitmapShapeShader(!1,s.repeat,o),t?n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,1,1,1,this._$globalAlpha,0,0,0,0)}else n=this._$shaderList.shapeShaderVariants,a=n.getSolidColorShapeShader(!1,this._$grid.enabled),n.setSolidColorShapeUniform(a.uniform,!1,0,0,0,o,h,this._$viewportWidth,this._$viewportHeight,this._$grid,s,this._$globalAlpha);const l=this._$shaderList.shapeShaderVariants,c=l.getMaskShapeShader(!1,o);l.setMaskShapeUniform(c.uniform,o,h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8],this._$viewportWidth,this._$viewportHeight,this._$grid),this._$gl.enable(this._$gl.STENCIL_TEST),this._$gl.stencilMask(255),this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.colorMask(!1,!1,!1,!1),c._$fill(i),this._$gl.disable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.NOTEQUAL,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.ZERO,this._$gl.ZERO),this._$gl.colorMask(!0,!0,!0,!0),a._$fill(i),this._$gl.disable(this._$gl.STENCIL_TEST),this.releaseFillVertexArray(i)}releaseFillVertexArray(t){this._$vao.releaseFill(t);const e=t.indexRanges;for(let t=0;tn.width||i>n.height||0>e&&0>=s+e||0>i&&0>=r+i||(this._$maskBounds.xMin=v.max(0,v.min(this._$maskBounds.xMin,e)),this._$maskBounds.yMin=v.max(0,v.min(this._$maskBounds.yMin,i)),this._$maskBounds.xMax=v.min(n.width,v.min(this._$maskBounds.xMax,s)),this._$maskBounds.yMax=v.min(n.height,v.min(this._$maskBounds.yMax,r)),0))}_$endClipDef(){this._$mask._$endClipDef()}_$leaveClip(){this.drawInstacedArray(),this._$mask._$leaveClip()}_$drawContainerClip(){this._$mask._$drawContainerClip()}closePath(){this._$path.close()}stroke(){const t=this._$path.vertices;if(!t.length)return;const e=ht();for(let i=0;is.length||e.push(s)}if(!e.length)return void ot(e);const i=this._$vao.createStroke(t,this.lineCap,this.lineJoin);let s=this._$matrix;const r=this.strokeStyle;let n=v.sign(s[0]*s[4]);n>0&&0!==s[1]&&0!==s[3]&&(n=-v.sign(s[1]*s[3]));let a,h,o=.5*this.lineWidth;this._$grid.enabled?(a=v.abs(this._$grid.ancestorMatrixA+this._$grid.ancestorMatrixD),h=v.abs(this._$grid.ancestorMatrixB+this._$grid.ancestorMatrixE)):(a=v.abs(s[0]+s[3]),h=v.abs(s[1]+s[4]));const l=v.min(a,h),c=v.max(a,h);o*=c*(1-.3*v.cos(.5*v.PI*(l/c))),o=v.max(1,o);const _=this._$grid.enabled;let $,u,d;if(r instanceof Ii){"radial"===r.type&&(s=this._$stack[this._$stack.length-1]);const t=r.stops,e="linearRGB"===r.rgb;if($=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0($,!0),u=this._$shaderList.gradientShapeShaderVariants,"linear"===r.type)d=u.getGradientShapeShader(!0,_,!1,!1,r.mode),u.setGradientShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,r.points,0);else{s=this._$stack[this._$stack.length-1];const t=0!==r.focalPointRatio;d=u.getGradientShapeShader(!0,_,!0,t,r.mode),u.setGradientShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,r.points,r.focalPointRatio)}}else if(r instanceof Fi){s=this._$stack[this._$stack.length-1];const t=r.colorTransform;$=r.texture,this._$frameBufferManager.textureManager.bind0($),u=this._$shaderList.shapeShaderVariants,d=u.getBitmapShapeShader(!0,r.repeat,this._$grid.enabled),t?u.setBitmapShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,$.width,$.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):u.setBitmapShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,$.width,$.height,1,1,1,this._$globalAlpha,0,0,0,0)}else u=this._$shaderList.shapeShaderVariants,d=u.getSolidColorShapeShader(!0,this._$grid.enabled),u.setSolidColorShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,this._$viewportWidth,this._$viewportHeight,this._$grid,r,this._$globalAlpha);d._$stroke(i),this._$vao.releaseStroke(i)}arc(t,e,i){this._$path.drawCircle(t,e,i)}clip(){const t=this._$path.vertices;if(!t.length)return;const e=ht();for(let i=0;is.length||e.push(s)}if(!e.length)return void ot(e);const i=this._$vao.createFill(e),s=this._$shaderList.shapeShaderVariants,r=s.getMaskShapeShader(!1,!1),n=r.uniform;s.setMaskShapeUniform(n,!1,this._$matrix[0],this._$matrix[1],this._$matrix[2],this._$matrix[3],this._$matrix[4],this._$matrix[5],this._$matrix[6],this._$matrix[7],this._$matrix[8],this._$viewportWidth,this._$viewportHeight,null),this._$mask._$onClip(i,this._$matrix,this._$viewportWidth,this._$viewportHeight)||(r._$fill(i),this.beginPath())}save(){const t=this._$matrix;this._$stack.push(at(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])),this._$mask._$onSave()}restore(){var t;this._$stack.length&&(t=this._$matrix,Y.push(t),this._$matrix=this._$stack.pop()||at()),this._$mask._$onRestore()}createPattern(t,e,i){return new Fi(this,t,e,i)}createLinearGradient(t,e,i,s,r="rgb",n="pad"){return(new Ii).linear(t,e,i,s,r,n)}createRadialGradient(t,e,i,s,r,n,a="rgb",h="pad",o=0){return(new Ii).radial(t,e,i,s,r,n,a,h,o)}_$applyBlurFilter(t,e,i){const s=this._$frameBufferManager,r=s.currentAttachment;if(!r)throw new Error("the current attachment is null.");const n=r.width,a=r.height;s.textureManager.bind0(t,!0);const h=v.ceil(.5*i),o=1-(h-.5*i),l=1+i,c=this._$shaderList.filterShaderVariants,_=c.getBlurFilterShader(h);c.setBlurFilterUniform(_.uniform,n,a,e,o,l),_._$drawImage()}_$applyBitmapFilter(t,e,i,s,r,n,a,h,o,l,c,_,$,u,d,g=null,f=null,p=null,m=0,x=0,b=0,v=0,T=0,y=0,E=0,A=0){const M=this._$frameBufferManager,w="inner"===$,S=M.currentAttachment,C=M.getTextureFromCurrentAttachment();let I=null;const F=null!==g&&null!==f&&null!==p;let R;null!==g&&null!==f&&null!==p&&(I=this._$gradientLUT.generateForFilter(g,f,p)),w?F&&I?M.textureManager.bind02(t,I,!0):M.textureManager.bind0(t):(R=this._$frameBufferManager.createTextureAttachment(e,i),this._$bind(R),F&&I?M.textureManager.bind012(t,C,I,!0):M.textureManager.bind01(t,C));const B=!(w||"full"===$&&u),L=!(e===h&&i===o&&0===l&&0===c),P=!(1===d),k=this._$shaderList.filterShaderVariants,N=k.getBitmapFilterShader(B,L,_,$,u,P,F);k.setBitmapFilterUniform(N.uniform,e,i,s,r,n,a,h,o,l,c,_,d,m,x,b,v,T,y,E,A,B,L,P,F),w?u?this.blend.toSourceIn():this.blend.toSourceAtop():this.blend.toOneZero(),N._$drawImage(),w||M.releaseAttachment(S,!0)}_$applyColorMatrixFilter(t,e){this._$frameBufferManager.textureManager.bind0(t,!0);const i=this._$shaderList.filterShaderVariants,s=i.getColorMatrixFilterShader();i.setColorMatrixFilterUniform(s.uniform,e),this.blend.reset(),s._$drawImage()}_$applyConvolutionFilter(t,e,i,s,r,n,a,h,o,l,c,_){const $=t.width,u=t.height,d=this._$frameBufferManager.createTextureAttachment($,u);this._$bind(d),this._$frameBufferManager.textureManager.bind0(t,!0);const g=this._$shaderList.filterShaderVariants,f=g.getConvolutionFilterShader(e,i,a,h);g.setConvolutionFilterUniform(f.uniform,$,u,s,r,n,h,o,l,c,_),this.blend.reset(),f._$drawImage()}_$applyDisplacementMapFilter(t,e,i,s,r,n,a,h,o,l,c,_,$,u){const d=t.width,g=t.height,f=this._$frameBufferManager.createTextureAttachment(d,g);this._$bind(f),r||(r={x:0,y:0});const p=this._$frameBufferManager.createTextureFromImage(e);this._$frameBufferManager.textureManager.bind01(t,p);const m=this._$shaderList.filterShaderVariants,x=m.getDisplacementMapFilterShader(n,a,l);m.setDisplacementMapFilterUniform(x.uniform,e.width,e.height,i,s,r.x,r.y,h,o,l,c,_,$,u),this.blend.reset(),x._$drawImage(),this._$frameBufferManager.releaseTexture(p)}_$startLayer(t){this._$positions.push(t),this._$blends.push(this._$isLayer),this._$isLayer=!0}_$endLayer(){const t=this._$positions.pop();t&&J(t),this._$isLayer=!!this._$blends.pop()}_$saveAttachment(t,e,i=!1){this.drawInstacedArray();const s=this._$frameBufferManager;this._$attachmentArray.push(s.currentAttachment),this._$bind(s.createCacheAttachment(t,e,i))}_$restoreAttachment(t=!1){const e=this._$frameBufferManager;e.releaseAttachment(e.currentAttachment,t),this._$bind(this._$attachmentArray.pop())}getCurrentPosition(){return this._$positions[this._$positions.length-1]}textureScale(t,e){const i=v.max(t,e);return i>this._$maxTextureSize?this._$maxTextureSize/i:1}}class ms{constructor(){var t;t=window.devicePixelRatio,f=t,this._$stage=new fe,this._$stage._$player=this,this._$mode="loader",this._$actionOffset=0,this._$actions=ht(),this._$loaders=ht(),this._$sounds=ct(),this._$hitObject={x:0,y:0,pointer:"",hit:null},this._$rollOverObject=null,this._$mouseOverTarget=null,this._$ratio=f,this._$stopFlag=!0,this._$startTime=0,this._$fps=16,this._$loadStatus=0,this._$width=0,this._$height=0,this._$baseWidth=0,this._$baseHeight=0,this._$scale=1,this._$matrix=it(1,0,0,1,0,0),this._$tx=0,this._$ty=0,this._$state="up",this._$hitTestStart=!1,this._$stageX=-1,this._$stageY=-1,this._$deltaX=0,this._$deltaY=0,this._$broadcastEvents=ct(),this._$optionWidth=0,this._$optionHeight=0,this._$tagId="",this._$bgColor="transparent",this._$base="",this._$fullScreen=!1,this._$quality="high",this._$sources=ht(),this._$videos=ht(),this._$textField=null,this._$timerId=-1,this._$loadId=-1,this._$context=null,this._$attachment=null,this._$clickTarget=null,this._$actionProcess=!1,this._$canvas=d.createElement("canvas")}static get LOAD_START(){return 1}static get LOAD_END(){return 2}get cacheStore(){return wt}get canvas(){return this._$canvas}get broadcastEvents(){return this._$broadcastEvents}get context(){return this._$context}set context(t){this._$context=t}get base(){return this._$base}set base(t){if(-1===t.indexOf("//")){const e=t.split("/");""!==e[0]&&"."!==e[0]||e.shift(),e.pop(),this._$base=`${location.origin}/`,e.length&&(this._$base+=`${e.join("/")}/`)}else if(-1===t.indexOf("?"))this._$base="/"===t.slice(-1)?t:`${t}/`;else{const e=t.split("?")[0];this._$base="/"===e.slice(-1)?e:`${e}/`}}get stage(){return this._$stage}get x(){return this._$tx}get y(){return this._$ty}get scaleX(){return this._$matrix[0]}get scaleY(){return this._$matrix[3]}get mode(){return this._$mode}set mode(t){this._$mode=t}get contentElementId(){return ws}get width(){return this._$baseWidth}set width(t){this._$baseWidth=0|t}get height(){return this._$baseHeight}set height(t){this._$baseHeight=0|t}get bgColor(){return this._$bgColor}set bgColor(t){this._$bgColor=`${t}`}play(){if(this._$stopFlag){this._$stopFlag=!1,this._$timerId>-1&&F(this._$timerId),this._$startTime=R.now();const t=this._$stage._$frameRate;this._$fps=1e3/t|0,this._$timerId=I((t=>{this._$run(t)}))}}stop(){this._$timerId>-1&&F(this._$timerId),this._$stopFlag=!0,this._$timerId=-1,oe.stopAll(),wt.reset(),Mr&&Mr.postMessage({command:"stop"})}removeCache(t){wt.removeCache(t),Mr&&Mr.postMessage({command:"removeCache",id:t})}setOptions(t=null){t&&(this._$optionWidth=t.width||this._$optionWidth,this._$optionHeight=t.height||this._$optionHeight,this._$tagId=t.tagId||this._$tagId,this.base=t.base||this._$base,this._$bgColor=t.bgColor||this._$bgColor,this._$fullScreen=!!t.fullScreen)}_$loadWebAudio(t=null){t&&this._$canvas.removeEventListener(Bs,this._$loadWebAudio),Ns||mr()}_$updateLoadStatus(){if(this._$loadStatus===ms.LOAD_END)return this._$loadId>-1&&F(this._$loadId),this._$loadId=-1,void this._$loaded();this._$loadId=I((()=>{this._$updateLoadStatus()}))}_$loaded(){const t=d.getElementById(this.contentElementId);if(t){this._$setBackgroundColor(this._$bgColor),this._$deleteNode(),t.appendChild(this._$canvas),t.appendChild(tr),this._$stage._$prepareActions(),this._$broadcastEvents.has(It.FRAME_CONSTRUCTED)&&this._$dispatchEvent(new It(It.FRAME_CONSTRUCTED)),this._$doAction(),this._$broadcastEvents.has(It.EXIT_FRAME)&&this._$dispatchEvent(new It(It.EXIT_FRAME));const e=this._$loaders.length;for(let t=0;t`);const e=d.getElementById(t);if(!e)throw new Error("the content element is null.");const i=e.parentElement;if(i){this._$initStyle(e),this._$buildWait();const t=this._$optionWidth?this._$optionWidth:"BODY"===i.tagName?u.innerWidth:i.offsetWidth,s=this._$optionHeight?this._$optionHeight:"BODY"===i.tagName?u.innerHeight:i.offsetHeight;"loader"===this._$mode&&t&&s&&(this._$baseWidth=t,this._$baseHeight=s,this._$resize())}"loader"===this._$mode?(this._$loadStatus=ms.LOAD_START,this._$updateLoadStatus()):(this._$resize(),this._$loaded())}_$initStyle(t){const e=t.style;e.position="relative",e.top="0",e.left="0",e.backgroundColor="transparent",e.overflow="hidden",e.padding="0",e.margin="0",e.userSelect="none",e.outline="none";const i=this._$optionWidth,s=this._$optionHeight,r=t.parentElement;if(!r)throw new Error("the parentElement is null.");if("BODY"===r.tagName)return e.width=i?`${i}px`:`${window.innerWidth}px`,void(e.height=s?`${s}px`:`${window.innerHeight}px`);e.width=i?`${i}px`:`${r.offsetWidth}px`,e.height=s?`${s}px`:`${r.offsetHeight}px`}_$buildWait(){const t=d.getElementById(this.contentElementId);if(t){const e=`${this.contentElementId}_loading`;t.innerHTML=``;const i=d.createElement("div");i.id=e,t.appendChild(i)}}_$deleteNode(){const t=d.getElementById(this.contentElementId);if(t)for(;t.childNodes.length;)t.removeChild(t.childNodes[0])}_$initializeCanvas(){if(this._$canvas.width=1,this._$canvas.height=1,Mr){const t=this._$canvas.transferControlToOffscreen(),e=hr();let i=0;e[i++]=this._$stage._$instanceId,e[i++]=+Ws,e[i++]=f,e[i++]=this._$getSamples();const s=ht(t,e.buffer);Mr.postMessage({command:"initialize",canvas:t,buffer:e},s),ot(s)}else{const t=this._$canvas.getContext("webgl2",{stencil:!0,premultipliedAlpha:!0,antialias:!1,depth:!1,preserveDrawingBuffer:!0});t?(this._$context=new ps(t,this._$getSamples()),wt.context=this._$context):alert("WebGL setting is off. Please turn the setting on.")}const t=()=>{if(this._$canvas.removeEventListener(Bs,t),this._$canvas.removeEventListener(Is,t),!Ns){mr();for(let t=0;t{c(t),h(Ss),this._$hitTest()})),this._$canvas.addEventListener(Cs,(t=>{c(t),h(Cs),this._$hitTest()})),this._$canvas.addEventListener(Is,(t=>{c(t),h(Is),this._$hitTest()})),this._$canvas.addEventListener(Cs,(t=>{c(t),h(Cs),this._$hitTest()}),{passive:!1}),this._$canvas.addEventListener(Fs,(t=>{c(t),h(Fs),t.button||this._$hitTest()})),this._$canvas.addEventListener(Ps,(t=>{c(t),h(Ps),t.button||this._$hitTest()})),this._$canvas.addEventListener(ks,(t=>{c(t),h(ks),this._$hitTest(),c(null),this._$stageX=-1,this._$stageY=-1})),this._$canvas.addEventListener(Bs,(t=>{c(t),h(Bs),t.button||this._$hitTest()})),this._$canvas.addEventListener(Rs,(t=>{c(t),h(Rs),this._$hitTest()})),this._$canvas.addEventListener(Ls,(t=>{t.defaultPrevented||(c(t),h(Ls),this._$hitTest())}),{passive:!1});let e="";e+="position: absolute;",e+="top: 0;",e+="left: 0;",e+="-webkit-tap-highlight-color: rgba(0,0,0,0);",e+="backface-visibility: hidden;",e+="transform-origin: 0 0;",1!==f&&(e+=`transform: scale(${1/f});`),this._$canvas.setAttribute("style",e)}_$resize(){const t=d.getElementById(this.contentElementId);if(t){const e=t.parentElement;if(!e)throw new Error("the parentElement is null.");const i=this._$optionWidth?this._$optionWidth:"BODY"===e.tagName?u.innerWidth:e.offsetWidth?e.offsetWidth:parseFloat(e.style.width),s=this._$optionHeight?this._$optionHeight:"BODY"===e.tagName?u.innerHeight:e.offsetHeight?e.offsetHeight:parseFloat(e.style.height),r="BODY"===e.tagName?u.innerWidth:e.offsetWidth,n=v.min(i/this._$baseWidth,s/this._$baseHeight);let a=this._$fullScreen?i:this._$baseWidth*n|0,h=this._$fullScreen?s:this._$baseHeight*n|0;const o=t.style;if(o.width=`${a}px`,o.height=`${h}px`,o.top="0",o.left=this._$fullScreen?"0":r/2-a/2+"px",a*=f,h*=f,this._$width===a&&this._$height===h)return;this._$stage._$doChanged(),wt.reset(),this._$scale=n,this._$width=a,this._$height=h;const l=this._$scale*this._$ratio;this._$matrix[0]=l,this._$matrix[3]=l,this._$fullScreen&&(this._$tx=(a-this._$baseWidth*n*f)/2,this._$ty=(h-this._$baseHeight*n*f)/2,this._$matrix[4]=this._$tx,this._$matrix[5]=this._$ty),this._$resizeCanvas(a,h,l,this._$tx,this._$ty),this._$ratio>1&&f>1&&(this._$canvas.style.transform=`scale(${1/this._$ratio})`),t.children.length>1&&t.children[1].dispatchEvent(new Event(`${ws}_blur`))}}_$setBackgroundColor(t="transparent"){if(Mr){const e=hr();e[0]="transparent"===t?-1:xt(t);const i=or();i.command="setBackgroundColor",i.buffer=e;const s=ht(e.buffer);Mr.postMessage(i,s),lr(i),ot(s)}else{const e=this._$context;if(!e)return;if("transparent"===t)e._$setColor(0,0,0,0);else{const i=bt(xt(t));e._$setColor(i.R/255,i.G/255,i.B/255,1)}}}_$resizeCanvas(t,e,i,s=0,r=0){if(Mr){const n=hr();let a=0;n[a++]=t,n[a++]=e,n[a++]=i,n[a++]=s,n[a++]=r;const h=or(),o=ht(n.buffer);h.command="resize",h.buffer=n,Mr.postMessage(h,o),lr(h),ot(o)}else{const i=this._$context;if(!i)return;i.clearInstacedArray(),this._$canvas.width=t,this._$canvas.height=e,i._$gl.viewport(0,0,t,e);const s=i.frameBuffer;this._$attachment&&(s.unbind(),s.releaseAttachment(this._$attachment,!0)),this._$attachment=s.createCacheAttachment(t,e,!0),i.setMaxSize(t,e),i._$bind(this._$attachment)}}_$getSamples(){switch(this._$quality){case"high":return 4;case"medium":return 2;default:return 0}}_$dispatchEvent(t){if(this._$broadcastEvents.size&&this._$broadcastEvents.has(t.type)){const e=this._$broadcastEvents.get(t.type).slice(0);t.eventPhase=Ct.AT_TARGET;for(let i=0;ithis._$fps){if(this._$startTime=t-e%this._$fps,this._$action(),this._$sounds.size){for(const t of this._$sounds.values())t._$soundPlay();this._$sounds.clear()}this._$draw(),!Zs&&!this._$hitTestStart&&"up"===this._$state&&this._$stageX>-1&&this._$stageY>-1&&l()&&this._$pointerCheck()}else this._$videos.length&&!Mr&&this._$draw();this._$timerId=I((t=>{this._$run(t)}))}_$pointerCheck(){const t=this._$stageX,e=this._$stageY;this._$hitObject.x=t,this._$hitObject.y=e,this._$hitObject.pointer="",this._$hitObject.hit=null,rr.setTransform(1,0,0,1,0,0),rr.beginPath(),zs[4]=this._$tx/this._$scale/f,zs[5]=this._$ty/this._$scale/f,this._$stage._$mouseHit(rr,zs,this._$hitObject,!0);let i=null,s=null,r=!1,n=!1;if(this._$hitObject.hit){if(i=this._$hitObject.hit,this._$mouseOverTarget&&this._$mouseOverTarget!==i){const t=this._$mouseOverTarget;t.willTrigger(Pt.MOUSE_OUT)&&t.dispatchEvent(new Pt(Pt.MOUSE_OUT,!0,!1))}if(this._$rollOverObject!==i){let r=null;if(this._$rollOverObject)for(s=this._$rollOverObject,s.willTrigger(Pt.ROLL_OUT)&&s.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),r=s._$parent;r&&r._$root!==r&&r!==i;){if(r._$mouseEnabled&&r._$outCheck(t,e)){let t=!1,e=i;for(;e&&e._$root!==e;){if(e===r){t=!0;break}e=e._$parent}if(!t&&r._$parent===i._$parent&&r._$index>i._$index&&(t=!0),t)break}r.willTrigger(Pt.ROLL_OUT)&&r.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),r=r._$parent}for(s=i;s.willTrigger(Pt.ROLL_OVER)&&s.dispatchEvent(new Pt(Pt.ROLL_OVER,!1,!1)),s=s._$parent,s&&s!==r&&s.stage!==s;);}switch(this._$rollOverObject=i,!0){case null===this._$mouseOverTarget:case this._$mouseOverTarget!==i:i&&i.willTrigger(Pt.MOUSE_OVER)&&i.dispatchEvent(new Pt(Pt.MOUSE_OVER,!0,!1)),this._$mouseOverTarget=i}if("up"===this._$state&&(this._$clickTarget=null),!Zs&&"up"===this._$state)for(s=i;s&&s.root!==s;){if("_$text"in s&&"input"===s.type){r=!0;break}if("buttonMode"in s&&s.buttonMode){n=!0;break}s=s._$parent}}else{if(this._$mouseOverTarget&&(i=this._$mouseOverTarget,i.willTrigger(Pt.MOUSE_OUT)&&i.dispatchEvent(new Pt(Pt.MOUSE_OUT,!0,!1))),this._$rollOverObject)for(s=this._$rollOverObject;s&&s.root!==s;)s.willTrigger(Pt.ROLL_OUT)&&s.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),s=s._$parent;this._$rollOverObject=null,this._$mouseOverTarget=null}switch(!0){case r:this._$canvas.style.cursor="text";break;case n:this._$canvas.style.cursor="pointer";break;case!Zs&&"up"===this._$state:this._$canvas.style.cursor="auto"}this._$actions.length>1&&this._$doAction()}_$action(){if(this._$stopFlag)return;let t=null;const e=this._$loaders.length;if(e){t=this._$loaders.slice(0),this._$loaders.length=0;for(let i=0;ie._$index&&(i=!0),i)break}t.willTrigger(Pt.ROLL_OUT)&&t.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),t=t._$parent}for(i=e;i.willTrigger(Pt.ROLL_OVER)&&i.dispatchEvent(new Pt(Pt.ROLL_OVER,!1,!1)),i=i._$parent,i&&i!==t&&i.stage!==i;);}switch(this._$rollOverObject=e,!0){case null===this._$mouseOverTarget:case this._$mouseOverTarget!==e:e.willTrigger(Pt.MOUSE_OVER)&&e.dispatchEvent(new Pt(Pt.MOUSE_OVER,!0,!1)),this._$mouseOverTarget=e}"up"===this._$state?this._$clickTarget=null:this._$textField&&this._$textField._$setIndex(c,_);break;case Ss:case Fs:this._$textField&&e!==this._$textField&&(this._$textField.focus=!1,this._$textField=null),"_$text"in e&&(e.focus=!0,e._$setIndex(c,_),this._$textField=e,tr.style.left=`${h}px`,tr.style.top=`${o}px`),e.willTrigger(Pt.MOUSE_DOWN)&&e.dispatchEvent(new Pt(Pt.MOUSE_DOWN,!0,!1)),this._$clickTarget=e;break;case Is:case Bs:e.willTrigger(Pt.MOUSE_UP)&&e.dispatchEvent(new Pt(Pt.MOUSE_UP,!0,!1)),this._$clickTarget===e&&e.willTrigger(Pt.CLICK)&&e.dispatchEvent(new Pt(Pt.CLICK,!0,!1)),this._$clickTarget=null;break;case Ls:e.willTrigger(Pt.MOUSE_WHEEL)&&e.dispatchEvent(new Pt(Pt.MOUSE_WHEEL)),e.scrollEnabled&&("deltaX"in t&&(e.scrollX+=t.deltaX/(e.textWidth/e.width)),"deltaY"in t&&(e.scrollY+=t.deltaY/(e.textHeight/e.height)));break;case Ps:e.willTrigger(Pt.DOUBLE_CLICK)&&e.dispatchEvent(new Pt(Pt.DOUBLE_CLICK))}if(!g&&!Zs&&"up"===this._$state)for(i=e;i&&i.root!==i;){if("_$text"in i){if("input"===i.type){$=!0;break}}else if(i._$buttonMode){p=!0;break}i=i._$parent}}switch(!0){case $:this._$canvas.style.cursor="text";break;case p:this._$canvas.style.cursor="pointer";break;case!Zs&&"up"===this._$state:this._$canvas.style.cursor="auto"}!this._$actionProcess&&this._$actions.length>1&&this._$doAction(),m&&(this._$stage._$prepareActions(),this._$actionProcess||this._$doAction()),this._$hitTestStart=!1}}const xs={Event:It,EventDispatcher:Ft,EventPhase:Ct,FocusEvent:Rt,HTTPStatusEvent:Bt,IOErrorEvent:Lt,MouseEvent:Pt,ProgressEvent:kt,VideoEvent:Nt};Object.entries(xs).forEach((([t,e])=>{Object.defineProperty(xs,t,{get:()=>e})}));const bs={DisplayObject:Zt,InteractiveObject:te,DisplayObjectContainer:ee,Sprite:$e,MovieClip:ue,BitmapData:ie,BlendMode:class{static toString(){return"[class BlendMode]"}static get namespace(){return"next2d.display.BlendMode"}toString(){return"[object BlendMode]"}get namespace(){return"next2d.display.BlendMode"}static get ADD(){return"add"}static get ALPHA(){return"alpha"}static get DARKEN(){return"darken"}static get DIFFERENCE(){return"difference"}static get ERASE(){return"erase"}static get HARDLIGHT(){return"hardlight"}static get INVERT(){return"invert"}static get LAYER(){return"layer"}static get LIGHTEN(){return"lighten"}static get MULTIPLY(){return"multiply"}static get NORMAL(){return"normal"}static get OVERLAY(){return"overlay"}static get SCREEN(){return"screen"}static get SUBTRACT(){return"subtract"}},FrameLabel:se,Graphics:ae,Loader:de,LoaderInfo:he,Shape:ge,Stage:fe,TextField:Ci};Object.entries(bs).forEach((([t,e])=>{Object.defineProperty(bs,t,{get:()=>e})}));const vs={BevelFilter:Xt,BlurFilter:zt,ColorMatrixFilter:qt,ConvolutionFilter:Yt,DisplacementMapFilter:Ht,DropShadowFilter:jt,GlowFilter:Wt,GradientBevelFilter:Kt,GradientGlowFilter:Qt};Object.entries(vs).forEach((([t,e])=>{Object.defineProperty(vs,t,{get:()=>e})}));const Ts={ColorTransform:Ot,Matrix:Ut,Point:Dt,Rectangle:Vt,Transform:Jt};Object.entries(Ts).forEach((([t,e])=>{Object.defineProperty(Ts,t,{get:()=>e})}));const ys={Sound:le,SoundMixer:oe,SoundTransform:ce,Video:_e};Object.entries(ys).forEach((([t,e])=>{Object.defineProperty(ys,t,{get:()=>e})}));const Es={URLRequest:St,URLRequestHeader:g};Object.entries(Es).forEach((([t,e])=>{Object.defineProperty(Es,t,{get:()=>e})}));const As={TextFormat:be};Object.entries(As).forEach((([t,e])=>{Object.defineProperty(As,t,{get:()=>e})}));const Ms={Easing:pe,Job:me,Tween:xe};Object.entries(Ms).forEach((([t,e])=>{Object.defineProperty(Ms,t,{get:()=>e})}));const ws="__next2d__",Ss="touchstart",Cs="touchmove",Is="touchend",Fs="mousedown",Rs="mousemove",Bs="mouseup",Ls="wheel",Ps="dblclick",ks="mouseleave";let Ns=null;const Os=new Map;let Ds=null;const Us=t=>{Ds=t},Vs={lock:!1,position:{x:0,y:0},bounds:null},Gs=new Float32Array(256);new Float32Array(256);for(let t=0;t<256;++t)Gs[t]=v.pow(t/255,2.23333333),Gs[t]=t/255;const zs=new Float32Array([1,0,0,1,0,0]),Xs=[],qs=[],Ys=[],Hs=new Map;let js=!1,Ws=!1,Ks=!1,Qs=!1,Js=!1,Zs=!1;const tr=d.createElement("textarea");let er="";er+="position: fixed;",er+="top: 0;",er+="left: 0;",er+="font-size: 16px;",er+="border: 0;",er+="resize: none;",er+="opacity: 0;",er+="z-index: -1;",er+="pointer-events: none;",tr.setAttribute("style","position: fixed;top: 0;left: 0;font-size: 16px;border: 0;resize: none;opacity: 0;z-index: -1;pointer-events: none;"),tr.tabIndex=-1,tr.addEventListener("compositionstart",(()=>{const t=u.next2d.player._$textField;t&&t.compositionStart()})),tr.addEventListener("compositionupdate",(t=>{const e=u.next2d.player._$textField;e&&e.compositionUpdate(t.data)})),tr.addEventListener("compositionend",(()=>{const t=u.next2d.player._$textField;t&&t.compositionEnd()})),tr.addEventListener("input",(t=>{if(!t.data)return;const e=u.next2d.player._$textField;e&&e.insertText(t.data)})),tr.addEventListener("keydown",(t=>{const e=u.next2d.player._$textField;if(e)switch(t.key){case"Backspace":case"Delete":e.deleteText();break;case"Enter":e.insertText("\n");break;case"ArrowLeft":e.arrowLeft();break;case"ArrowRight":e.arrowRight();break;case"ArrowUp":e.arrowUp();break;case"ArrowDown":e.arrowDown();break;case"a":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.selectAll());break;case"v":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.paste());break;case"c":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.copy())}}));const ir=d.createElement("canvas");ir.width=1,ir.height=1;const sr=ir.getContext("2d");if(!sr)throw new Error("the CanvasRenderingContext2D is null.");sr.globalAlpha=0,sr.imageSmoothingEnabled=!1;const rr=sr,nr=[],ar=[],hr=()=>nr.length?nr.pop():new Float32Array(64),or=()=>ar.length?ar.pop():{command:""},lr=t=>{t.buffer=null,ar.push(t),console.log("renderMessageArray: ",ar)},cr=()=>u.next2d.player,_r=()=>{const t=l();if(!t)return new Dt;const e=cr();let i=u.scrollX,s=u.scrollY;const r=d.getElementById(e.contentElementId);if(r){const t=r.getBoundingClientRect();i+=t.left,s+=t.top}let n=0,a=0;if("changedTouches"in t){const e=t.changedTouches[0];n=e.pageX,a=e.pageY}else"pageX"in t&&(n=t.pageX,a=t.pageY);const h=(n-i)/e._$scale-e.x/e._$scale/f,o=(a-s)/e._$scale-e.y/e._$scale/f;return new Dt(h,o)},$r=(t=1,e=0,i=0,s=1,r=0,n=0)=>{const a=qs.pop();return a?(a.setTo(t,e,i,s,r,n),a):new Ut(t,e,i,s,r,n)},ur=t=>{qs.push(t)},dr=(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0)=>{const o=Ys.length?Ys.pop():null;return o?(o.redMultiplier=t,o.greenMultiplier=e,o.blueMultiplier=i,o.alphaMultiplier=s,o.redOffset=r,o.greenOffset=n,o.blueOffset=a,o.alphaOffset=h,o):new Ot(t,e,i,s,r,n,a,h)},gr=t=>{Ys.push(t)},fr=(t,e)=>{t._$character?t._$character.audioBuffer=e:t._$audioBuffer=e},pr=t=>{if(!Ns)throw new Error("the AudioContext is null.");let e=null;if(t._$character){const i=t._$character.buffer;i&&(e=new Uint8Array(i).buffer,ot(i),t._$character.buffer=null)}else e=t._$arrayBuffer;return e?Ns.decodeAudioData(e).then((e=>(fr(t,e),Promise.resolve(t)))).catch((()=>{if(!e)throw new Error;return((t,e)=>{if(!Ns)throw new Error("the Audio Context is null.");const i=new Uint8Array(e);let s=0;for(;s=i.indexOf(255,s),-1!==s&&224!=(224&i[s+1]);)++s;if(s>-1)return Ns.decodeAudioData(i.subarray(s).buffer).then((e=>(fr(t,e),Promise.resolve(t)))).catch((()=>{throw new Error("This voice data is not available.")}));throw new Error("This voice data is not available.")})(t,e)})):Promise.resolve(t)},mr=()=>{if(Ns||(Ns=new AudioContext,Ns.resume()),Ns){const t=ht();for(let e=0;e{Xs.length=0,cr()._$loaders.push(...t)}))}};let xr=-1;const br=()=>{const t=cr();if(t._$loadStatus===ms.LOAD_END){t._$resize();const e=t.stage;e.willTrigger(It.RESIZE)&&e.dispatchEvent(new It(It.RESIZE))}};u.addEventListener("resize",(()=>{L(xr),xr=B(br,300)}));const vr=t=>{let e=null;switch(t.method.toUpperCase()){case"GET":if(t.data){const e=t.url.split("?");e[1]=1===e.length?t.data.toString():`${e[1]}&${t.data.toString()}`,t.url=e.join("?")}break;case"PUT":case"POST":t.data&&(e=t.data.toString())}const i=new XMLHttpRequest;if(i.open(t.method,t.url,!0),i.responseType=t.format,i.withCredentials=t.withCredentials,t.event){const e=Object.keys(t.event);for(let s=0;s{const e=ht();if(t){const i=t.trim().split("\n"),s=i.length;for(let t=0;tyr.has(t)&&yr.get(t)||1,Ar=t=>{switch(t){case ue.namespace:return new ue;case ge.namespace:return new ge;case Ci.namespace:return new Ci;case $e.namespace:return new $e;case _e.namespace:return new _e}};let Mr=null,wr=null,Sr=null;const Cr=URL.createObjectURL(new Blob(['(()=>{"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,a=new r([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,0,0,0]),t=new r([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,0,0]),i=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),o=function(r,a){for(var t=new n(31),i=0;i<31;++i)t[i]=a+=1<>1|(21845&s)<<1;w=(61680&(w=(52428&w)>>2|(13107&w)<<2))>>4|(3855&w)<<4,d[s]=((65280&w)>>8|(255&w)<<8)>>1}var h=function(r,e,a){for(var t=r.length,i=0,o=new n(e);i>v]=c}else for(f=new n(t),i=0;i>15-r[i]);return f},y=new r(288);for(s=0;s<144;++s)y[s]=8;for(s=144;s<256;++s)y[s]=9;for(s=256;s<280;++s)y[s]=7;for(s=280;s<288;++s)y[s]=8;var b=new r(32);for(s=0;s<32;++s)b[s]=5;var g=h(y,9,1),p=h(b,5,1),m=function(r){for(var n=r[0],e=1;en&&(n=r[e]);return n},k=function(r,n,e){var a=n/8|0;return(r[a]|r[a+1]<<8)>>(7&n)&e},x=function(r,n){var e=n/8|0;return(r[e]|r[e+1]<<8|r[e+2]<<16)>>(7&n)},T=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],z=function(r,n,e){var a=new Error(n||T[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,z),!e)throw a;return a},E=function(n,e,o,f){var v=n.length,c=f?f.length:0;if(!v||e.f&&!e.l)return o||new r(0);var d=!o||2!=e.i,s=e.i;o||(o=new r(3*v));var w,y=function(n){var e=o.length;if(n>e){var a=new r(Math.max(2*e,n));a.set(o),o=a}},b=e.f||0,T=e.p||0,E=e.b||0,M=e.l,S=e.d,U=e.m,A=e.n,C=8*v;do{if(!M){b=k(n,T,1);var q=k(n,T+1,3);if(T+=3,!q){var D=n[(w=T,(G=4+((w+7)/8|0))-4)]|n[G-3]<<8,F=G+D;if(F>v){s&&z(0);break}d&&y(E+D),o.set(n.subarray(G,F),E),e.b=E+=D,e.p=T=8*F,e.f=b;continue}if(1==q)M=g,S=p,U=9,A=5;else if(2==q){var I=k(n,T,31)+257,O=k(n,T+10,15)+4,J=I+k(n,T+5,31)+1;T+=14;for(var L=new r(J),N=new r(19),P=0;P>4)<16)L[P++]=G;else{var K=0,Q=0;for(16==G?(Q=3+k(n,T,3),T+=2,K=L[P-1]):17==G?(Q=3+k(n,T,7),T+=3):18==G&&(Q=11+k(n,T,127),T+=7);Q--;)L[P++]=K}}var V=L.subarray(0,I),W=L.subarray(I);U=m(V),A=m(W),M=h(V,U,1),S=h(W,A,1)}else z(1);if(T>C){s&&z(0);break}}d&&y(E+131072);for(var X=(1<>4;if((T+=15&K)>C){s&&z(0);break}if(K||z(2),$<256)o[E++]=$;else{if(256==$){Z=T,M=null;break}var _=$-254;if($>264){var rr=a[P=$-257];_=k(n,T,(1<>4;if(nr||z(3),T+=15&nr,W=l[er],er>3&&(rr=t[er],W+=x(n,T)&(1<C){s&&z(0);break}d&&y(E+131072);var ar=E+_;if(En.length)&&(a=n.length);var t=new r(a-e);return t.set(n.subarray(e,a)),t}(o,0,E)},M=new r(0);function S(n,e){var a,t,i=function(r){31==r[0]&&139==r[1]&&8==r[2]||z(6,"invalid gzip data");var n=r[3],e=10;4&n&&(e+=2+(r[10]|r[11]<<8));for(var a=(n>>3&1)+(n>>4&1);a>0;a-=!r[e++]);return e+(2&n)}(n);return i+8>n.length&&z(6,"invalid gzip data"),E(n.subarray(i,-8),{i:2},e&&e.out||new r((t=(a=n).length,(a[t-4]|a[t-3]<<8|a[t-2]<<16|a[t-1]<<24)>>>0)),e&&e.dictionary)}function U(r,n){return E(r.subarray((e=r,a=n&&n.dictionary,(8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31)&&z(6,"invalid zlib data"),(e[1]>>5&1)==+!a&&z(6,"invalid zlib data: "+(32&e[1]?"need":"unexpected")+" dictionary"),2+(e[1]>>3&4)),-4),{i:2},n&&n.out,n&&n.dictionary);var e,a}var A="undefined"!=typeof TextDecoder&&new TextDecoder;try{A.decode(M,{stream:!0})}catch(r){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout;self.addEventListener("message",(r=>{return n=void 0,e=void 0,t=function*(){const n=31==(e=r.data)[0]&&139==e[1]&&8==e[2]?S(e,a):8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31?function(r,n){return E(r,{i:2},n&&n.out,n&&n.dictionary)}(e,a):U(e,a);var e,a;let t="";for(let r=0;r(Fr||(Fr=new Worker(Cr)),Fr);let Br=!1;const Lr=t=>{Br=t},Pr=()=>Br,kr=()=>{if("OffscreenCanvas"in window){const t=new OffscreenCanvas(0,0).getContext("webgl2");Mr=null!==t?new Worker(URL.createObjectURL(new Blob(['(()=>{"use strict";let t=1,e=0,i=!1;const s=1/0,r=Math,n=Array,a=Map,h=Number,o=Float32Array,_=Int32Array,l=Int16Array,c=OffscreenCanvas,$=isNaN,u=requestAnimationFrame,d=setTimeout,g=clearTimeout,f=new o([1,0,0,1,0,0]),m=new o([1,1,1,1,0,0,0,0]),p=r.PI/180,x=(r.PI,[]),b=[],v=[],T=[],A=[],M=[],y=[],E=[],C=[],S=new c(1,1).getContext("2d"),F=(t=0,e=0,i=0,s=0)=>{const r=C.pop()||{xMin:0,xMax:0,yMin:0,yMax:0};return r.xMin=t,r.xMax=e,r.yMin=i,r.yMax=s,r},B=t=>{C.push(t)},w=(t=0,e=0,i=0,s=0)=>{const r=v.pop()||new o(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},R=t=>{v.push(t)},I=(t=0,e=0,i=0,s=0)=>{const r=b.pop()||new _(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},P=(t=0,e=0,i=0,s=0,r=0,n=0)=>{const a=T.pop()||new o(6);return a[0]=t,a[1]=e,a[2]=i,a[3]=s,a[4]=r,a[5]=n,a},N=t=>{T.push(t)},k=(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0)=>{const _=A.pop()||new o(8);return _[0]=t,_[1]=e,_[2]=i,_[3]=s,_[4]=r,_[5]=n,_[6]=a,_[7]=h,_},L=t=>{A.push(t)},O=(t=0,e=0,i=0,s=0,r=0,n=0,a=0,h=0,_=0)=>{const l=M.pop()||new o(9);return l[0]=t,l[1]=e,l[2]=i,l[3]=s,l[4]=r,l[5]=n,l[6]=a,l[7]=h,l[8]=_,l},U=(...t)=>{const e=y.pop()||[];return t.length&&e.push(...t),e},D=(t=null)=>{t&&(t.length&&(t.length=0),y.push(t))},X=t=>{t.size&&t.clear(),E.push(t)},V=()=>E.pop()||new a,Y=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t),z=t=>{const e=1/(t[0]*t[4]-t[3]*t[1]),i=t[3]*t[7]-t[4]*t[6],s=t[1]*t[6]-t[0]*t[7];return O(t[4]*e,0-t[1]*e,0,0-t[3]*e,t[0]*e,0,i*e,s*e,1)},G=(t,e,i,s=null)=>{const n=+t;return $(n)&&null!==s?s:r.min(r.max(e,$(n)?0:n),i)},H=(t,e)=>P(t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],t[0]*e[4]+t[2]*e[5]+t[4],t[1]*e[4]+t[3]*e[5]+t[5]),W=(t,e)=>k(t[0]*e[0],t[1]*e[1],t[2]*e[2],t[3]*e[3],t[0]*e[4]+t[4],t[1]*e[5]+t[5],t[2]*e[6]+t[6],t[3]*e[7]+t[7]),q=(t,e)=>{const i=t.xMax*e[0]+t.yMax*e[2]+e[4],s=t.xMax*e[0]+t.yMin*e[2]+e[4],n=t.xMin*e[0]+t.yMax*e[2]+e[4],a=t.xMin*e[0]+t.yMin*e[2]+e[4],o=t.xMax*e[1]+t.yMax*e[3]+e[5],_=t.xMax*e[1]+t.yMin*e[3]+e[5],l=t.xMin*e[1]+t.yMax*e[3]+e[5],c=t.xMin*e[1]+t.yMin*e[3]+e[5],$=r.min(h.MAX_VALUE,i,s,n,a),u=r.max(0-h.MAX_VALUE,i,s,n,a),d=r.min(h.MAX_VALUE,o,_,l,c),g=r.max(0-h.MAX_VALUE,o,_,l,c);return F($,u,d,g)},j=t=>$(+t)?(t=>{if(!S)return 0;S.fillStyle=t;const e=+`0x${S.fillStyle.slice(1)}`;return S.fillStyle="rgba(0, 0, 0, 1)",e})(`${t}`):+t,K=(t,e,i)=>(t>>16)*(i?e:1)/255,Q=(t,e,i)=>(t>>8&255)*(i?e:1)/255,J=(t,e,i)=>(255&t)*(i?e:1)/255,Z=(t,e=1)=>({R:(16711680&t)>>16,G:(65280&t)>>8,B:255&t,A:255*e}),tt=(t,e,i=!1,s=!1)=>{let r="";return i&&(r="italic "),s&&(r+="bold "),`${r}${e}px \'${t}\',\'sans-serif\'`},et=t=>{t.color&&L(t.color),t.isLayer=!1,t.isUpdated=null,t.canApply=null,t.matrix=null,t.color=null,t.filters=null,t.blendMode="normal",t.sw=0,t.sh=0,x.push(t)},it=new Map([[1,"normal"],[2,"layer"],[3,"multiply"],[4,"screen"],[5,"lighten"],[6,"darken"],[7,"difference"],[8,"add"],[9,"subtract"],[10,"invert"],[11,"alpha"],[12,"erase"],[13,"overlay"],[14,"hardlight"]]),st=t=>it.has(t)&&it.get(t)||"normal",rt=new class{constructor(){this._$pool=[],this._$store=new Map,this._$timerMap=new Map,this._$context=null}set context(t){this._$context=t}reset(){for(const t of this._$store.values()){for(const e of t.values())this.destroy(e);X(t)}this._$store.clear(),this._$context&&this._$context.frameBuffer.clearCache()}destroy(t=null){if(t&&"object"==typeof t)if(t instanceof WebGLTexture)u((()=>{this._$context&&this._$context.frameBuffer.releaseTexture(t)}));else{if("canvas"in t&&t instanceof CanvasRenderingContext2D){const e=t.canvas,i=e.width,s=e.height;t.clearRect(0,0,i+1,s+1),e.width=e.height=1,this._$pool.push(e)}this._$context&&"index"in t&&this._$context.frameBuffer.textureManager.releasePosition(t)}}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(t,e){if(!this._$store.has(t))return;const i=this._$store.get(t);i.has(e)&&(i.delete(e),i.size||(X(i),this._$store.delete(t)))}stopTimer(t){t=`${t}`,this._$timerMap.has(t)&&(g(this._$timerMap.get(t)),this._$timerMap.delete(t))}removeCache(t){if(t=`${t}`,this._$store.has(t)){const e=this._$store.get(t);for(const t of e.values())this.destroy(t);e.clear(),X(e),this._$store.delete(t)}this._$timerMap.delete(t)}setRemoveTimer(t){if(t=`${t}`,this.stopTimer(t),this._$store.has(t)){const e=d((()=>{this.removeCache(t)}),5e3);this._$timerMap.set(t,e)}}get(t){const e=`${t[0]}`,i=`${t[1]}`;if(this._$store.has(e)){this.stopTimer(e);const t=this._$store.get(e);if(t.has(i))return t.get(i)}return null}set(t,e=null){const i=`${t[0]}`,s=`${t[1]}`;this._$store.has(i)||this._$store.set(i,V());const r=this._$store.get(i);if(null===e){if(!r.has(s))return;return this.destroy(r.get(s)),r.delete(s),void(r.size||(X(r),this._$store.delete(i)))}r.set(s,e)}has(t){const e=`${t[0]}`;return!!this._$store.has(e)&&this._$store.get(e).has(`${t[1]}`)}generateKeys(t,e=null,i=null){let s="";e&&e.length&&(s+=`${e[0]}_${e[1]}`),i&&i.length&&(s+=0===i[7]?"":`_${i[7]}`);const r=U();if(s){let t=0;const e=s.length;for(let i=0;i{i=t})()}}class at extends nt{constructor(t=4,e=4,i=1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this.blurX=t,this.blurY=e,this.quality=i}static toString(){return"[class BlurFilter]"}static get namespace(){return"next2d.filters.BlurFilter"}toString(){return"[object BlurFilter]"}get namespace(){return"next2d.filters.BlurFilter"}static get STEP(){return[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5]}get blurX(){return this._$blurX}set blurX(t){(t=G(+t,0,255,0))!==this._$blurX&&(this._$blurX=t,this._$doChanged())}get blurY(){return this._$blurY}set blurY(t){(t=G(+t,0,255,0))!==this._$blurY&&(this._$blurY=t,this._$doChanged())}get quality(){return this._$quality}set quality(t){(t=G(0|t,0,15,1))!==this._$quality&&(this._$quality=t,this._$doChanged())}clone(){return new at(this._$blurX,this._$blurY,this._$quality)}_$toArray(){return U(1,this._$blurX,this._$blurY,this._$quality)}_$generateFilterRect(t,e=0,i=0){const s=F(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$quality)return s;const n=at.STEP[this._$quality-1];let a=0>=this._$blurX?1:this._$blurX*n,h=0>=this._$blurY?1:this._$blurY*n;return e?a*=e:a=r.round(a),i?h*=i:h=r.round(h),s.xMin-=a,s.xMax+=2*a,s.yMin-=h,s.yMax+=2*h,s}_$canApply(){return 0!==this._$blurX&&0!==this._$blurY}_$applyFilter(e,i,s=!0){this._$updated=!1;const n=e.frameBuffer,a=n.currentAttachment,h=n.getTextureFromCurrentAttachment();if(!this._$canApply())return s?h:n.createTextureFromCurrentAttachment();let o=r.sqrt(i[0]*i[0]+i[1]*i[1]),_=r.sqrt(i[2]*i[2]+i[3]*i[3]);o/=t,_/=t,o*=2,_*=2;const l=F(0,h.width,0,h.height),c=this._$generateFilterRect(l,o,_);B(l);const $=0|r.ceil(c.xMax),u=0|r.ceil(c.yMax),d=r.ceil(r.abs(c.xMin)+.5*r.abs($-c.xMax)),g=r.ceil(r.abs(c.yMin)+.5*r.abs(u-c.yMax));e._$offsetX=d+e._$offsetX,e._$offsetY=g+e._$offsetY;const f=this._$blurX*o,m=this._$blurY*_;let p=1,x=1;f>128?p=.0625:f>64?p=.125:f>32?p=.25:f>16&&(p=.5),m>128?x=.0625:m>64?x=.125:m>32?x=.25:m>16&&(x=.5);const b=f*p,v=m*x,T=r.ceil($*p),A=r.ceil(u*x),M=n.createTextureAttachment(T,A),y=[M,n.createTextureAttachment(T,A)];let E=0;e._$bind(M),e.reset(),e.setTransform(p,0,0,x,0,0),e.drawImage(h,d,g,h.width,h.height),e.blend.toOneZero();let C=n.getTextureFromCurrentAttachment();for(let t=0;t0){E=(E+1)%2;const t=y[E];e._$bind(t),e._$applyBlurFilter(C,!0,b),C=n.getTextureFromCurrentAttachment()}if(this._$blurY>0){E=(E+1)%2;const t=y[E];e._$bind(t),e._$applyBlurFilter(C,!1,v),C=n.getTextureFromCurrentAttachment()}}if(e.blend.reset(),1!==p||1!==x){const t=n.createTextureAttachment($,u);e._$bind(t),e.reset(),e.imageSmoothingEnabled=!0,e.setTransform(1/p,0,0,1/x,0,0),e.drawImage(C,0,0,T,A),C=n.getTextureFromCurrentAttachment(),e.reset(),e.setTransform(1,0,0,1,0,0),n.releaseAttachment(y[0],!0),n.releaseAttachment(y[1],!0),s?n.releaseAttachment(a,!0):n.releaseAttachment(t,!1)}else n.releaseAttachment(y[(E+1)%2],!0),s?n.releaseAttachment(a,!0):n.releaseAttachment(y[E],!1);return C}}class ht extends nt{constructor(t=4,e=45,i=16777215,s=1,r=0,n=1,a=4,h=4,o=1,_=1,l="inner",c=!1){super(),this._$blurFilter=new at(a,h,_),this._$distance=4,this._$angle=45,this._$highlightColor=16777215,this._$highlightAlpha=1,this._$shadowColor=0,this._$shadowAlpha=1,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.highlightColor=i,this.highlightAlpha=s,this.shadowColor=r,this.shadowAlpha=n,this.strength=o,this.type=l,this.knockout=c}static toString(){return"[class BevelFilter]"}static get namespace(){return"next2d.filters.BevelFilter"}toString(){return"[object BevelFilter]"}get namespace(){return"next2d.filters.BevelFilter"}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=G(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get distance(){return this._$distance}set distance(t){(t=G(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get highlightAlpha(){return this._$highlightAlpha}set highlightAlpha(t){(t=G(+t,0,1,0))!==this._$highlightAlpha&&(this._$highlightAlpha=t,this._$doChanged())}get highlightColor(){return this._$highlightColor}set highlightColor(t){(t=G(j(t),0,16777215,16777215))!==this._$highlightColor&&(this._$highlightColor=t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get shadowAlpha(){return this._$shadowAlpha}set shadowAlpha(t){(t=G(+t,0,1,0))!==this._$shadowAlpha&&(this._$shadowAlpha=t,this._$doChanged())}get shadowColor(){return this._$shadowColor}set shadowColor(t){(t=G(j(t),0,16777215,0))!==this._$shadowColor&&(this._$shadowColor=t,this._$doChanged())}get strength(){return this._$strength}set strength(t){(t=G(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}get type(){return this._$type}set type(t){(t=`${t}`)!==this._$type&&(this._$type=t,this._$doChanged())}clone(){return new ht(this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$toArray(){return U(0,this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=F(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const n=this._$angle*p;let a=r.abs(r.cos(n)*this._$distance),h=r.abs(r.sin(n)*this._$distance);return e&&(a*=e),i&&(h*=i),s.xMin=r.min(s.xMin,a),a>0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$strength>0&&0!==this._$distance&&this._$blurFilter._$canApply()}_$applyFilter(e,i){this._$updated=!1;const s=e.frameBuffer,n=s.currentAttachment;if(!n)throw new Error("the current attachment is null.");e.setTransform(1,0,0,1,0,0);const a=s.getTextureFromCurrentAttachment();if(!this._$canApply())return a;const h=n.width,o=n.height,_=e._$offsetX,l=e._$offsetY;let c=r.sqrt(i[0]*i[0]+i[1]*i[1]),$=r.sqrt(i[2]*i[2]+i[3]*i[3]);c/=t,$/=t,c*=2,$*=2;const u=this._$angle*p,d=r.cos(u)*this._$distance*c,g=r.sin(u)*this._$distance*$,f=s.createTextureAttachment(h,o);e._$bind(f),e.reset(),e.drawImage(a,0,0,h,o),e.globalCompositeOperation="erase",e.drawImage(a,2*d,2*g,h,o);const m=this._$blurFilter._$applyFilter(e,i,!1),x=m.width,b=m.height,v=r.ceil(x+2*r.abs(d)),T=r.ceil(b+2*r.abs(g)),A="inner"===this._$type,M=A?h:v,y=A?o:T,E=r.abs(d),C=r.abs(g),S=(x-h)/2,F=(b-o)/2,B=A?0:E+S,w=A?0:C+F,R=A?-S-d:E-d,I=A?-F-g:C-g;return e._$bind(n),s.releaseAttachment(f,!0),e._$applyBitmapFilter(m,M,y,h,o,B,w,x,b,R,I,!1,this._$type,this._$knockout,this._$strength,null,null,null,K(this._$highlightColor,this._$highlightAlpha,!0),Q(this._$highlightColor,this._$highlightAlpha,!0),J(this._$highlightColor,this._$highlightAlpha,!0),this._$highlightAlpha,K(this._$shadowColor,this._$shadowAlpha,!0),Q(this._$shadowColor,this._$shadowAlpha,!0),J(this._$shadowColor,this._$shadowAlpha,!0),this._$shadowAlpha),e._$offsetX=_+B,e._$offsetY=l+w,s.releaseTexture(m),s.getTextureFromCurrentAttachment()}}class ot extends nt{constructor(t=null){super(),this._$matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix=t}static toString(){return"[class ColorMatrixFilter]"}static get namespace(){return"next2d.filters.ColorMatrixFilter"}toString(){return"[object ColorMatrixFilter]"}get namespace(){return"next2d.filters.ColorMatrixFilter"}get matrix(){return this._$matrix}set matrix(t){if(t&&n.isArray(t)&&20===t.length){for(let e=0;e<20;++e)if(t[e]!==this._$matrix[e]){this._$doChanged();break}this._$matrix=t}}clone(){return new ot(this._$matrix)}_$toArray(){return U(2,this._$matrix)}_$generateFilterRect(t){return t}_$canApply(){return!0}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment(),r=s.width,n=s.height,a=e.createTextureAttachment(r,n);return t._$bind(a),t.reset(),t._$applyColorMatrixFilter(s,this._$matrix),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()}}class _t extends nt{constructor(t=0,e=0,i=null,s=1,r=0,n=!0,a=!0,h=0,o=0){super(),this._$matrixX=0,this._$matrixY=0,this._$matrix=null,this._$divisor=1,this._$bias=0,this._$preserveAlpha=!0,this._$clamp=!0,this._$color=0,this._$alpha=0,this.matrixX=t,this.matrixY=e,this.matrix=i,this.divisor=s,this.bias=r,this.preserveAlpha=n,this.clamp=a,this.color=h,this.alpha=o}static toString(){return"[class ConvolutionFilter]"}static get namespace(){return"next2d.filters.ConvolutionFilter"}toString(){return"[object ConvolutionFilter]"}get namespace(){return"next2d.filters.ConvolutionFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get bias(){return this._$bias}set bias(t){t!==this._$bias&&(this._$bias=0|t,this._$doChanged())}get clamp(){return this._$clamp}set clamp(t){t!==this._$clamp&&(this._$clamp=!!t,this._$doChanged())}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get divisor(){return this._$divisor}set divisor(t){t!==this._$divisor&&(this._$divisor=0|t,this._$doChanged())}get matrix(){return this._$matrix}set matrix(t){n.isArray(this._$matrix)&&D(this._$matrix),this._$matrix=n.isArray(t)?t:null,this._$doChanged()}get matrixX(){return this._$matrixX}set matrixX(t){(t=0|G(0|t,0,15,0))!==this._$matrixX&&(this._$matrixX=t,this._$doChanged())}get matrixY(){return this._$matrixY}set matrixY(t){(t=0|G(0|t,0,15,0))!==this._$matrixY&&(this._$matrixY=t,this._$doChanged())}get preserveAlpha(){return this._$preserveAlpha}set preserveAlpha(t){t!==this._$preserveAlpha&&(this._$preserveAlpha=!!t,this._$doChanged())}clone(){return new _t(this._$matrixX,this._$matrixY,this._$matrix?this._$matrix.slice():null,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$toArray(){return U(3,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$matrix&&this._$matrixX*this._$matrixY===this._$matrix.length}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment();return this._$canApply()&&this._$matrix?(t._$applyConvolutionFilter(s,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,K(this._$color,this._$alpha,!1),Q(this._$color,this._$alpha,!1),J(this._$color,this._$alpha,!1),this._$alpha),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()):s}}class lt extends nt{constructor(t=null,e=null,i=0,s=0,r=0,n=0,a="wrap",h=0,o=0){super(),this._$mapBitmap=null,this._$mapPoint=null,this._$componentX=0,this._$componentY=0,this._$scaleX=0,this._$scaleY=0,this._$mode="wrap",this._$color=0,this._$alpha=0,this.mapBitmap=t,this.mapPoint=e,this.componentX=i,this.componentY=s,this.scaleX=r,this.scaleY=n,this.mode=a,this.color=h,this.alpha=o}static toString(){return"[class DisplacementMapFilter]"}static get namespace(){return"next2d.filters.DisplacementMapFilter"}toString(){return"[object DisplacementMapFilter]"}get namespace(){return"next2d.filters.DisplacementMapFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get componentX(){return this._$componentX}set componentX(t){t!==this._$componentX&&(this._$componentX=t,this._$doChanged())}get componentY(){return this._$componentY}set componentY(t){t!==this._$componentY&&(this._$componentY=t,this._$doChanged())}get mapBitmap(){return this._$mapBitmap}set mapBitmap(t){t!==this._$mapBitmap&&(this._$mapBitmap=t,this._$doChanged())}get mapPoint(){return this._$mapPoint}set mapPoint(t){t!==this._$mapPoint&&(this._$mapPoint=t,this._$doChanged())}get mode(){return this._$mode}set mode(t){t!==this._$mode&&(this._$mode=t,this._$doChanged())}get scaleX(){return this._$scaleX}set scaleX(t){(t=G(+t,-65535,65535,0))!==this._$scaleX&&(this._$scaleX=t,this._$doChanged())}get scaleY(){return this._$scaleY}set scaleY(t){(t=G(+t,-65535,65535,0))!==this._$scaleY&&(this._$scaleY=t,this._$doChanged())}clone(){return new lt(this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$toArray(){return U(4,this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$mapBitmap&&this._$componentX>0&&this._$componentY>0&&0!==this._$scaleX&&0!==this._$scaleY}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;t.setTransform(1,0,0,1,0,0);const n=i.getTextureFromCurrentAttachment();if(!this._$canApply()||!s||!this._$mapBitmap)return n;const a=r.sqrt(e[0]*e[0]+e[1]*e[1]),h=r.sqrt(e[2]*e[2]+e[3]*e[3]);return t._$applyDisplacementMapFilter(n,this._$mapBitmap,n.width/a,n.height/h,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,K(this._$color,this._$alpha,!0),Q(this._$color,this._$alpha,!0),J(this._$color,this._$alpha,!0),this._$alpha),i.releaseAttachment(s,!0),i.getTextureFromCurrentAttachment()}}class ct extends nt{constructor(t=4,e=45,i=0,s=1,r=4,n=4,a=1,h=1,o=!1,_=!1,l=!1){super(),this._$blurFilter=new at(r,n,h),this._$distance=4,this._$angle=45,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this._$hideObject=!1,this.distance=t,this.angle=e,this.color=i,this.alpha=s,this.strength=a,this.inner=o,this.knockout=_,this.hideObject=l}static toString(){return"[class DropShadowFilter]"}static get namespace(){return"next2d.filters.DropShadowFilter"}toString(){return"[object DropShadowFilter]"}get namespace(){return"next2d.filters.DropShadowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=G(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get distance(){return this._$distance}set distance(t){(t=G(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get hideObject(){return this._$hideObject}set hideObject(t){t!==this._$hideObject&&(this._$hideObject=!!t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=G(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new ct(this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$toArray(){return U(5,this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=F(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const n=this._$angle*p;let a=r.cos(n)*this._$distance,h=r.sin(n)*this._$distance;return e&&(a*=e),i&&(h*=i),s.xMin=r.min(s.xMin,a),a>0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(e,i){const s=e.frameBuffer,n=s.currentAttachment;if(!n)throw new Error("the current attachment is null.");if(e.setTransform(1,0,0,1,0,0),!this._$canApply())return s.getTextureFromCurrentAttachment();const a=n.width,h=n.height,o=e._$offsetX,_=e._$offsetY,l=this._$blurFilter._$applyFilter(e,i,!1),c=l.width,$=l.height,u=e._$offsetX,d=e._$offsetY,g=u-o,f=d-_;let m=r.sqrt(i[0]*i[0]+i[1]*i[1]),x=r.sqrt(i[2]*i[2]+i[3]*i[3]);m/=t,x/=t,m*=2,x*=2;const b=this._$angle*p,v=r.cos(b)*this._$distance*m,T=r.sin(b)*this._$distance*x,A=this._$inner?a:c+r.max(0,r.abs(v)-g),M=this._$inner?h:$+r.max(0,r.abs(T)-f),y=r.ceil(A),E=r.ceil(M),C=(y-A)/2,S=(E-M)/2,F=this._$inner?0:r.max(0,g-v)+C,B=this._$inner?0:r.max(0,f-T)+S,w=this._$inner?v-u:(v>0?r.max(0,v-g):0)+C,R=this._$inner?T-d:(T>0?r.max(0,T-f):0)+S;let I,P;return this._$inner?(I="inner",P=this._$knockout||this._$hideObject):!this._$knockout&&this._$hideObject?(I="full",P=!0):(I="outer",P=this._$knockout),e._$bind(n),e._$applyBitmapFilter(l,y,E,a,h,F,B,c,$,w,R,!0,I,P,this._$strength,null,null,null,K(this._$color,this._$alpha,!0),Q(this._$color,this._$alpha,!0),J(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),e._$offsetX=o+F,e._$offsetY=_+B,s.releaseTexture(l),s.getTextureFromCurrentAttachment()}}class $t extends nt{constructor(t=0,e=1,i=4,s=4,r=1,n=1,a=!1,h=!1){super(),this._$blurFilter=new at(i,s,n),this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this.color=t,this.alpha=e,this.strength=r,this.inner=a,this.knockout=h}static toString(){return"[class GlowFilter]"}static get namespace(){return"next2d.filters.GlowFilter"}toString(){return"[object GlowFilter]"}get namespace(){return"next2d.filters.GlowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,4))!==this._$color&&(this._$color=t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=G(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new $t(this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$toArray(){return U(6,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){const s=F(t.xMin,t.xMax,t.yMin,t.yMax);return this._$canApply()?this._$blurFilter._$generateFilterRect(s,e,i):s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(t,e){const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");if(this._$updated=!1,t.setTransform(1,0,0,1,0,0),!this._$canApply())return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),_=o.width,l=o.height,c=t._$offsetX,$=t._$offsetY,u=this._$inner?r:_,d=this._$inner?n:l,g=this._$inner?0:c-a,f=this._$inner?0:$-h,m=this._$inner?-c:0,p=this._$inner?-$:0,x=this._$inner?"inner":"outer";return t._$bind(s),t._$applyBitmapFilter(o,u,d,r,n,g,f,_,l,m,p,!0,x,this._$knockout,this._$strength,null,null,null,K(this._$color,this._$alpha,!0),Q(this._$color,this._$alpha,!0),J(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),t._$offsetX=a+g,t._$offsetY=h+f,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class ut extends nt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,_="inner",l=!1){super(),this._$blurFilter=new at(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=_,this.knockout=l}static toString(){return"[class GradientBevelFilter]"}static get namespace(){return"next2d.filters.GradientBevelFilter"}toString(){return"[object GradientBevelFilter]"}get namespace(){return"next2d.filters.GradientBevelFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,n.isArray(t)){for(let e=0;e0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(e,i){this._$updated=!1;const s=e.frameBuffer,n=s.currentAttachment;e.setTransform(1,0,0,1,0,0);const a=s.getTextureFromCurrentAttachment();if(!this._$canApply()||!n)return a;const h=n.width,o=n.height,_=e._$offsetX,l=e._$offsetY;let c=r.sqrt(i[0]*i[0]+i[1]*i[1]),$=r.sqrt(i[2]*i[2]+i[3]*i[3]);c/=t,$/=t,c*=2,$*=2;const u=+this._$angle*p,d=+r.cos(u)*this._$distance*c,g=+r.sin(u)*this._$distance*$,f=s.createTextureAttachment(h,o);e._$bind(f),e.reset(),e.drawImage(a,0,0,h,o),e.globalCompositeOperation="erase",e.drawImage(a,2*d,2*g,h,o);const m=this._$blurFilter._$applyFilter(e,i,!1),x=m.width,b=m.height,v=r.ceil(x+2*r.abs(d)),T=r.ceil(b+2*r.abs(g)),A="inner"===this._$type,M=A?h:v,y=A?o:T,E=r.abs(d),C=r.abs(g),S=(x-h)/2,F=(b-o)/2,B=A?0:E+S,w=A?0:C+F,R=A?-S-d:E-d,I=A?-F-g:C-g;return e._$bind(n),e._$applyBitmapFilter(m,M,y,h,o,B,w,x,b,R,I,!1,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),e._$offsetX=_+B,e._$offsetY=l+w,s.releaseAttachment(f,!0),s.getTextureFromCurrentAttachment()}}class dt extends nt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,_="inner",l=!1){super(),this._$blurFilter=new at(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=_,this.knockout=l}static toString(){return"[class GradientGlowFilter]"}static get namespace(){return"next2d.filters.GradientGlowFilter"}toString(){return"[object GradientGlowFilter]"}get namespace(){return"next2d.filters.GradientGlowFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,n.isArray(t)){for(let e=0;e0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(e,i){this._$updated=!1;const s=e.frameBuffer,n=s.currentAttachment;if(e.setTransform(1,0,0,1,0,0),!this._$canApply()||!n)return s.getTextureFromCurrentAttachment();const a=n.width,h=n.height,o=e._$offsetX,_=e._$offsetY,l=this._$blurFilter._$applyFilter(e,i,!1),c=l.width,$=l.height,u=e._$offsetX,d=e._$offsetY,g=u-o,f=d-_;let m=r.sqrt(i[0]*i[0]+i[1]*i[1]),x=r.sqrt(i[2]*i[2]+i[3]*i[3]);m/=t,x/=t,m*=2,x*=2;const b=+this._$angle*p,v=+r.cos(b)*this._$distance*m,T=+r.sin(b)*this._$distance*x,A="inner"===this.type,M=A?a:c+r.max(0,r.abs(v)-g),y=A?h:$+r.max(0,r.abs(T)-f),E=r.ceil(M),C=r.ceil(y),S=(E-M)/2,F=(C-y)/2,B=A?0:r.max(0,g-v)+S,w=A?0:r.max(0,f-T)+F,R=A?v-u:(v>0?r.max(0,v-g):0)+S,I=A?T-d:(T>0?r.max(0,T-f):0)+F;return e._$bind(n),e._$applyBitmapFilter(l,E,C,a,h,B,w,c,$,R,I,!0,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),e._$offsetX=o+B,e._$offsetY=_+w,s.releaseTexture(l),s.getTextureFromCurrentAttachment()}}class gt{constructor(){this._$instanceId=-1,this._$parentId=-1,this._$loaderInfoId=-1,this._$characterId=-1,this._$clipDepth=0,this._$depth=0,this._$isMask=!1,this._$updated=!0,this._$matrix=P(1,0,0,1,0,0),this._$colorTransform=k(1,1,1,1,0,0,0,0),this._$blendMode="normal",this._$filters=null,this._$visible=!0,this._$maskId=-1,this._$maskMatrix=null,this._$isMask=!1,this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$scale9Grid=null,this._$matrixBase=null}_$shouldClip(t){const e=this._$getBounds(t),i=r.abs(e.xMax-e.xMin),s=r.abs(e.yMax-e.yMin);return B(e),!(!i||!s)}_$getLayerBounds(e){const i=this._$getBounds(),s=q(i,e);B(i);const n=this._$filters;if(!n||!n.length)return s;let a=F(0,r.abs(s.xMax-s.xMin),0,r.abs(s.yMax-s.yMin));B(s);let h=+r.sqrt(e[0]*e[0]+e[1]*e[1]),o=+r.sqrt(e[2]*e[2]+e[3]*e[3]);h/=t,o/=t,h*=2,o*=2;for(let t=0;t-1){const t=le.instances;if(!t.has(this._$parentId))return;const e=t.get(this._$parentId);e._$updated||e._$doChanged()}}_$update(t){if(this._$doChanged(),this._$visible=t.visible,"depth"in t&&(this._$depth=t.depth),"isMask"in t&&(this._$isMask=t.isMask),"clipDepth"in t&&(this._$clipDepth=t.clipDepth),"maskId"in t&&(this._$maskId=t.maskId,this._$maskId>-1&&t.maskMatrix&&(this._$maskMatrix=t.maskMatrix)),this._$matrix[0]="a"in t?t.a:1,this._$matrix[1]="b"in t?t.b:0,this._$matrix[2]="c"in t?t.c:0,this._$matrix[3]="d"in t?t.d:1,this._$matrix[4]="tx"in t?t.tx:0,this._$matrix[5]="ty"in t?t.ty:0,this._$colorTransform[0]="f0"in t?t.f0:1,this._$colorTransform[1]="f1"in t?t.f1:1,this._$colorTransform[2]="f2"in t?t.f2:1,this._$colorTransform[3]="f3"in t?t.f3:1,this._$colorTransform[4]="f4"in t?t.f4:0,this._$colorTransform[5]="f5"in t?t.f5:0,this._$colorTransform[6]="f6"in t?t.f6:0,this._$colorTransform[7]="f7"in t?t.f7:0,this._$blendMode=t.blendMode||"normal",this._$filters=null,t.filters&&t.filters.length){this._$filters=U();for(let e=0;e-1&&this._$characterId&&rt.setRemoveTimer(`${this._$loaderInfoId}@${this._$characterId}`),t.instances.delete(this._$instanceId),this._$instanceId=-1,this._$parentId=-1,this._$loaderInfoId=-1,this._$characterId=-1,this._$blendMode="normal",this._$filters=null,this._$visible=!0,this._$maskId=-1,this._$isMask=!1,this._$depth=0,this._$clipDepth=0,this._$scale9Grid=null}_$isUpdated(){return this._$updated}_$isFilterUpdated(t,e=null,i=!1){if(this._$isUpdated())return!0;if(i&&e)for(let t=0;tc||s._$clipDepth>0)&&(t.restore(),l&&t._$leaveClip(),c=0,l=!0),!l)continue;if(s._$clipDepth>0){c=s._$clipDepth,l=s._$shouldClip(o),l&&(t.save(),l=s._$startClip(t,o));continue}const a=s._$maskId>-1&&$.has(s._$maskId)?$.get(s._$maskId):null;if(a){let e;if(a._$updated=!1,this._$instanceId===a._$parentId)e=o;else{e=f;let i=$.get(a._$parentId);for(;i||i._$instanceId!==i._$parentId;)e=H(i._$matrix,e),i=$.get(i._$parentId);const s=le.scaleX,r=P(s,0,0,s,0,0);if(e=H(r,e),N(r),t.isLayer){const i=t.getCurrentPosition();e[4]-=i.xMin,e[5]-=i.yMin}}if(!a._$shouldClip(e))continue;const i=a._$startClip(t,e);if(t.save(),!i){t.restore();continue}}s._$draw(t,o,_),s._$updated=!1,a&&(t.restore(),t._$leaveClip())}if(c&&(t.restore(),l&&t._$leaveClip()),h.isLayer)return this._$postDraw(t,e,s,h);h.matrix!==e&&N(h.matrix),s!==i&&L(s),et(h)}_$getLayerBounds(e){const i=this._$children;if(!i.length)return F(0,0,0,0);const s=h.MAX_VALUE;let n=s,a=-s,o=s,_=-s;const l=le.instances;for(let t=0;t0){const s=this._$getBounds(null),o=q(s,i);B(s);const _=+o.xMax,l=+o.xMin,c=+o.yMax,$=+o.yMin;B(o);const u=r.ceil(r.abs(_-l)),d=r.ceil(r.abs(c-$));if(0>=u||0>=d)return et(n),i!==e&&N(i),null;let g=+r.sqrt(i[0]*i[0]+i[1]*i[1]);if(!h.isInteger(g)){const t=g.toString(),e=t.indexOf("e");-1!==e&&(g=+t.slice(0,e)),g=+g.toFixed(4)}let f=+r.sqrt(i[2]*i[2]+i[3]*i[3]);if(!h.isInteger(f)){const t=f.toString(),e=t.indexOf("e");-1!==e&&(f=+t.slice(0,e)),f=+f.toFixed(4)}n.canApply=this._$canApply(this._$filters);let m=F(0,u,0,d);if(n.canApply&&this._$filters)for(let t=0;tp.width||$-m.yMin>p.height)return B(m),et(n),i!==e&&N(i),null;if(0>l+m.xMax||0>$+m.yMax)return B(m),et(n),i!==e&&N(i),null;let x=i[4]-l,b=i[5]-$;t._$startLayer(F(l,_,$,c));const v=this._$isFilterUpdated(i,this._$filters,n.canApply),T=this._$getLayerBounds(i),A=r.ceil(r.abs(T.xMax-T.xMin)),M=r.ceil(r.abs(T.yMax-T.yMin));B(T);const y=A-m.xMax+m.xMin,E=M-m.yMax+m.yMin;x+=y,b+=E,n.sw=y,n.sh=E,v&&t._$saveAttachment(r.ceil(u+y),r.ceil(d+E),!0),n.isLayer=!0,n.isUpdated=v,n.filters=this._$filters,n.blendMode=a,n.color=k(),n.matrix=P(i[0],i[1],i[2],i[3],x,b),i!==e&&N(i),B(m)}return n}_$postDraw(t,e,i,s){t.drawInstacedArray();const r=U(this._$instanceId,"f"),n=t.frameBuffer,a=s.matrix;let h=0,o=0,_=rt.get(r);if(!_||s.isUpdated){_&&rt.set(r,null),_=n.getTextureFromCurrentAttachment();const i=s.filters;let l=!1;if(i&&i.length){for(let s=0;s{switch(!0){case t[0]>e[0]:return 1;case e[0]>t[0]:return-1;default:return 0}})),this._$stops}linear(t,e,i,s,r="rgb",n="pad"){return this._$type="linear",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$rgb=r,this._$mode=n,this._$stops.length&&(this._$stops.length=0),this}radial(t,e,i,s,r,n,a="rgb",h="pad",o=0){return this._$type="radial",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$points[4]=r,this._$points[5]=n,this._$rgb=a,this._$mode=h,this._$focalPointRatio=G(o,-.975,.975,0),this._$stops.length&&(this._$stops.length=0),this}addColorStop(t,e){this._$stops.push(U(t,e))}}class pt{constructor(t,e,i,s){this._$context=t,this._$texture=e,this._$repeat=i,this._$colorTransform=s}get texture(){return this._$texture}get repeat(){return this._$repeat}get colorTransform(){return this._$colorTransform}}class xt{constructor(){this._$fillStyle=w(1,1,1,1),this._$strokeStyle=w(1,1,1,1),this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5}get miterLimit(){return this._$miterLimit}set miterLimit(t){this._$miterLimit=t}get lineWidth(){return this._$lineWidth}set lineWidth(t){this._$lineWidth=t}get lineCap(){return this._$lineCap}set lineCap(t){this._$lineCap=t}get lineJoin(){return this._$lineJoin}set lineJoin(t){this._$lineJoin=t}get fillStyle(){return this._$fillStyle}set fillStyle(t){this._$fillStyle instanceof o&&R(this._$fillStyle),this._$fillStyle=t}get strokeStyle(){return this._$strokeStyle}set strokeStyle(t){this._$strokeStyle instanceof o&&R(this._$strokeStyle),this._$strokeStyle=t}clear(){this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5,this._$clearFill(),this._$clearStroke()}_$clearFill(){if(this._$fillStyle instanceof mt)return this._$fillStyle.dispose(),void(this._$fillStyle=w(1,1,1,1));this._$fillStyle instanceof pt?this._$fillStyle=w(1,1,1,1):this._$fillStyle.fill(1)}_$clearStroke(){if(this._$strokeStyle instanceof mt)return this._$strokeStyle.dispose(),void(this._$strokeStyle=w(1,1,1,1));this._$strokeStyle instanceof pt?this._$strokeStyle=w(1,1,1,1):this._$strokeStyle.fill(1)}}let bt=2048;class vt{constructor(t){t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!0),this._$gl=t,this._$objectPool=[],this._$objectPoolArea=0,this._$activeTexture=-1,this._$boundTextures=[null,null,null],this._$maxWidth=0,this._$maxHeight=0,this._$atlasTextures=[],this._$atlasCacheMap=new Map,this._$positionObjectArray=[],this._$nodeObjectArray=[],this._$atlasNodes=new Map}createTextureAtlas(){const t=this._$gl.createTexture();t.width=bt,t.height=bt,this._$gl.activeTexture(this._$gl.TEXTURE3),this._$gl.bindTexture(this._$gl.TEXTURE_2D,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,this._$gl.NEAREST),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,this._$gl.NEAREST),this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,bt,bt),this._$gl.bindTexture(this._$gl.TEXTURE_2D,null),this._$activeTexture>-1&&this._$gl.activeTexture(this._$activeTexture);const e=this._$atlasTextures.length;this._$atlasNodes.set(e,[]),this._$atlasCacheMap.set(e,[]),this._$atlasTextures.push(t)}getAtlasTexture(t){return this._$atlasTextures[t]}getNode(t,e,i,s){const r=this._$nodeObjectArray.length?this._$nodeObjectArray.pop():{x:0,y:0,w:0,h:0};return r.x=t,r.y=e,r.w=i,r.h=s,r}createCachePosition(t,e){const i=this._$positionObjectArray.length?this._$positionObjectArray.pop():{index:0,x:0,y:0,w:0,h:0};i.x=i.y=0,i.w=t,i.h=e;for(const[s,r]of this._$atlasNodes){if(!r.length)return t>e?(bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,e)),bt-e-1>0&&r.push(this.getNode(0,e+1,bt,bt-e-1))):(bt-e-1>0&&r.push(this.getNode(0,e+1,t,bt-e-1)),bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,bt))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i;const n=r.length;for(let a=0;an.w||e>n.h))return i.index=s,i.x=n.x,i.y=n.y,this._$atlasCacheMap.get(i.index).push(i),n.w!==t||n.h!==e?t>e?(n.h-e-1>0&&r.push(this.getNode(n.x,n.y+e+1,n.w,n.h-e-1)),n.w-t-1>0?(n.x=n.x+t+1,n.w=n.w-t-1,n.h=e):(r.splice(a,1),this._$nodeObjectArray.push(n))):(n.w-t-1>0&&r.push(this.getNode(n.x+t+1,n.y,n.w-t-1,n.h)),n.h-e-1>0?(n.y=n.y+e+1,n.w=t,n.h=n.h-e-1):(r.splice(a,1),this._$nodeObjectArray.push(n))):(r.splice(a,1),this._$nodeObjectArray.push(n)),i}}const s=this._$atlasTextures.length;this.createTextureAtlas();const r=this._$atlasNodes.get(s);return t>e?(bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,e)),bt-e-1>0&&r.push(this.getNode(0,e+1,bt,bt-e-1))):(bt-e-1>0&&r.push(this.getNode(0,e+1,t,bt-e-1)),bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,bt))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i}releasePosition(t){var e;this._$atlasNodes.has(t.index)&&(null===(e=this._$atlasNodes.get(t.index))||void 0===e||e.unshift(this.getNode(t.x,t.y,t.w,t.h)),this._$positionObjectArray.push(t))}clearCache(){for(const t of this._$atlasCacheMap.values())t.length=0;for(const t of this._$atlasNodes.values())t.length=0}_$createTexture(t,e){const i=this._$gl.createTexture();return i.width=0,i.height=0,i.area=0,i.dirty=!0,i.smoothing=!0,this.bind0(i,!1),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,t,e),i}_$getTexture(t,e){for(let i=0;ithis._$maxWidth*this._$maxHeight*2)this._$gl.deleteTexture(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPool.length&&this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();this._$objectPoolArea-=t.area,this._$gl.deleteTexture(t)}}bind0(t,e=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,e)}bind01(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,e,i),this._$bindTexture(0,this._$gl.TEXTURE0,t,i)}bind012(t,e,i,s=null){this._$bindTexture(2,this._$gl.TEXTURE2,i,s),this._$bindTexture(1,this._$gl.TEXTURE1,e,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}bind02(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,e,i),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}_$bindTexture(t,e,i=null,s=null){const r=i!==this._$boundTextures[t],n=null!==s&&null!==i&&s!==i.smoothing;if((r||n||e===this._$gl.TEXTURE0)&&e!==this._$activeTexture&&(this._$activeTexture=e,this._$gl.activeTexture(e)),r&&(this._$boundTextures[t]=i,this._$gl.bindTexture(this._$gl.TEXTURE_2D,i)),n){i&&(i.smoothing=!!s);const t=s?this._$gl.LINEAR:this._$gl.NEAREST;this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,t)}}}class Tt{constructor(t){this._$gl=t,this._$objectPool=U(),this._$objectPoolArea=0,this._$maxWidth=0,this._$maxHeight=0}set maxWidth(t){this._$maxWidth=t}set maxHeight(t){this._$maxHeight=t}_$createStencilBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the stencil buffer is null.");return t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getStencilBuffer(t,e){const i=this._$objectPool.length;for(let s=0;s100){const t=this._$objectPool.shift();if(t)return this._$objectPoolArea-=t.area,t}return this._$createStencilBuffer()}create(t,e){const i=this._$getStencilBuffer(t,e);return i.width===t&&i.height===e||(i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,i),this._$gl.renderbufferStorage(this._$gl.RENDERBUFFER,this._$gl.STENCIL_INDEX8,t,e)),i}release(t){if(t.area>this._$maxWidth*this._$maxHeight*2)this._$gl.deleteRenderbuffer(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();t&&(this._$objectPoolArea-=t.area,this._$gl.deleteRenderbuffer(t))}}}class At{constructor(t,e){this._$gl=t,this._$samples=e,this._$objectPool=U()}set samples(t){this._$samples=t}_$createColorBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the color buffer is null.");const e=this._$gl.createRenderbuffer();if(!e)throw new Error("the stencil buffer is null.");return t.stencil=e,t.samples=0,t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getColorBuffer(t){if(!this._$objectPool.length)return this._$createColorBuffer();const e=this._$bsearch(t);if(e1;){const s=r.floor((i+e)/2);t<=this._$objectPool[s].area?i=s:e=s}return i}}class Mt{constructor(t,e){this._$gl=t,this._$objectPool=[],this._$frameBuffer=t.createFramebuffer(),t.bindFramebuffer(t.READ_FRAMEBUFFER,this._$frameBuffer),this._$frameBufferTexture=t.createFramebuffer(),this._$currentAttachment=null,this._$isBinding=!1,this._$textureManager=new vt(t),this._$stencilBufferPool=new Tt(t),this._$colorBufferPool=new At(t,e),this._$isRenderBinding=!1,this._$colorBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.RGBA8,bt,bt),this._$stencilBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.STENCIL_INDEX8,bt,bt)}bindRenderBuffer(){this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),this._$isRenderBinding||(this._$isRenderBinding=!0,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,this._$stencilBuffer))}get currentAttachment(){return this._$currentAttachment}get textureManager(){return this._$textureManager}createCacheAttachment(t,e,i=!1,s=0){const r=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},n=this._$textureManager.create(t,e);return r.width=t,r.height=e,i?(r.color=this._$colorBufferPool.create(t,e,s),r.texture=n,r.msaa=!0,r.stencil=r.color.stencil):(r.color=n,r.texture=n,r.msaa=!1,r.stencil=this._$stencilBufferPool.create(t,e)),r.mask=!1,r.clipLevel=0,r.isActive=!0,r}clearCache(){this._$textureManager.clearCache()}setMaxSize(t,e){this._$stencilBufferPool._$maxWidth=t,this._$stencilBufferPool._$maxHeight=e,this._$textureManager._$maxWidth=t,this._$textureManager._$maxHeight=e}createTextureAttachment(t,e){const i=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},s=this._$textureManager.create(t,e);return i.width=t,i.height=e,i.color=s,i.texture=s,i.msaa=!1,i.stencil=null,i.mask=!1,i.clipLevel=0,i.isActive=!0,i}createTextureAttachmentFrom(t){const e=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!0};return e.width=t.width,e.height=t.height,e.color=t,e.texture=t,e.msaa=!1,e.stencil=null,e.mask=!1,e.clipLevel=0,e.isActive=!0,e}releaseAttachment(t=null,e=!1){t&&t.isActive&&(t.msaa?t.color instanceof WebGLRenderbuffer&&this._$colorBufferPool.release(t.color):t.stencil&&this._$stencilBufferPool.release(t.stencil),e&&t.texture&&this._$textureManager.release(t.texture),t.color=null,t.texture=null,t.stencil=null,t.isActive=!1,this._$objectPool.push(t))}bind(t){this._$currentAttachment=t,this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),t.msaa?t.color instanceof WebGLRenderbuffer&&(this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.color),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,t.color)):t.color instanceof WebGLTexture&&(t.color&&this._$textureManager.bind0(t.color),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,t.color,0)),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.stencil),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,t.stencil),this._$isRenderBinding=!1}unbind(){this._$currentAttachment=null,this._$isBinding&&(this._$isBinding=!1,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,null))}transferToMainTexture(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,null),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBuffer)}createCachePosition(t,e){return this._$textureManager.createCachePosition(t,e)}transferTexture(t){this._$gl.disable(this._$gl.SCISSOR_TEST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture);const e=this._$textureManager.getAtlasTexture(t.index);this._$textureManager.bind0(e),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,e,0);const i=r.max(0,t.x-1),s=r.max(0,t.y-1),n=r.min(bt,t.x+t.w+1),a=r.min(bt,t.y+t.h+1);this._$gl.blitFramebuffer(i,s,n,a,i,s,n,a,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)}getTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");if(!this._$currentAttachment.msaa&&this._$currentAttachment.texture)return this._$currentAttachment.texture;const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");return i.dirty=!1,this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer),i}createTextureFromPixels(t,e,i=null,s=!1,r=!0){return this._$textureManager.create(t,e,i,s,r)}createTextureFromCanvas(t){return this._$textureManager.createFromCanvas(t)}createTextureFromImage(t,e=!1){return this._$textureManager.createFromImage(t,e)}createTextureFromVideo(t,e=!1){return this._$textureManager.createFromVideo(t,e)}createTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$textureManager.create(t,e);return this._$textureManager.bind0(i),this._$gl.copyTexSubImage2D(this._$gl.TEXTURE_2D,0,0,0,0,0,t,e),i}releaseTexture(t){this._$textureManager.release(t)}}class yt{constructor(){this._$bezierConverterBuffer=new o(32)}cubicToQuad(t,e,i,s,r,n,a,h){this._$split2Cubic(t,e,i,s,r,n,a,h,0,16),this._$split2Cubic(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0,8),this._$split2Cubic(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16,24),this._$split2Quad(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0),this._$split2Quad(this._$bezierConverterBuffer[8],this._$bezierConverterBuffer[9],this._$bezierConverterBuffer[10],this._$bezierConverterBuffer[11],this._$bezierConverterBuffer[12],this._$bezierConverterBuffer[13],this._$bezierConverterBuffer[14],this._$bezierConverterBuffer[15],8),this._$split2Quad(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16),this._$split2Quad(this._$bezierConverterBuffer[24],this._$bezierConverterBuffer[25],this._$bezierConverterBuffer[26],this._$bezierConverterBuffer[27],this._$bezierConverterBuffer[28],this._$bezierConverterBuffer[29],this._$bezierConverterBuffer[30],this._$bezierConverterBuffer[31],24)}_$split2Cubic(t,e,i,s,r,n,a,h,o,_){const l=.125*(t+3*(i+r)+a),c=.125*(e+3*(s+n)+h),$=.125*(a+r-i-t),u=.125*(h+n-s-e);this._$bezierConverterBuffer[o]=t,this._$bezierConverterBuffer[o+1]=e,this._$bezierConverterBuffer[o+2]=.5*(t+i),this._$bezierConverterBuffer[o+3]=.5*(e+s),this._$bezierConverterBuffer[o+4]=l-$,this._$bezierConverterBuffer[o+5]=c-u,this._$bezierConverterBuffer[o+6]=l,this._$bezierConverterBuffer[o+7]=c,this._$bezierConverterBuffer[_]=l,this._$bezierConverterBuffer[_+1]=c,this._$bezierConverterBuffer[_+2]=l+$,this._$bezierConverterBuffer[_+3]=c+u,this._$bezierConverterBuffer[_+4]=.5*(r+a),this._$bezierConverterBuffer[_+5]=.5*(n+h),this._$bezierConverterBuffer[_+6]=a,this._$bezierConverterBuffer[_+7]=h}_$split2Quad(t,e,i,s,r,n,a,h,o){const _=.125*(t+3*(i+r)+a),l=.125*(e+3*(s+n)+h);this._$bezierConverterBuffer[o]=.25*t+.75*i,this._$bezierConverterBuffer[o+1]=.25*e+.75*s,this._$bezierConverterBuffer[o+2]=_,this._$bezierConverterBuffer[o+3]=l,this._$bezierConverterBuffer[o+4]=.75*r+.25*a,this._$bezierConverterBuffer[o+5]=.75*n+.25*h,this._$bezierConverterBuffer[o+6]=a,this._$bezierConverterBuffer[o+7]=h}}class Et{constructor(){this._$currentPath=U(),this._$vertices=U(),this._$bezierConverter=new yt}get vertices(){return this._$pushCurrentPathToVertices(),this._$vertices}begin(){for(this._$currentPath.length=0;this._$vertices.length;)D(this._$vertices.pop())}moveTo(t,e){this._$currentPath.length?this._$equalsToLastPoint(t,e)||(this._$pushCurrentPathToVertices(),this._$pushPointToCurrentPath(t,e,!1)):this._$pushPointToCurrentPath(t,e,!1)}lineTo(t,e){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}quadTo(t,e,i,s){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(i,s)||(this._$pushPointToCurrentPath(t,e,!0),this._$pushPointToCurrentPath(i,s,!1))}cubicTo(t,e,i,s,r,n){if(this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(r,n))return;const a=+this._$currentPath[this._$currentPath.length-3],h=+this._$currentPath[this._$currentPath.length-2];this._$bezierConverter.cubicToQuad(a,h,t,e,i,s,r,n);const o=this._$bezierConverter._$bezierConverterBuffer;for(let t=0;t<32;)this.quadTo(o[t++],o[t++],o[t++],o[t++])}drawCircle(t,e,i){const s=i,r=.5522847498307936*i;this.cubicTo(t+s,e+r,t+r,e+s,t,e+s),this.cubicTo(t-r,e+s,t-s,e+r,t-s,e),this.cubicTo(t-s,e-r,t-r,e-s,t,e-s),this.cubicTo(t+r,e-s,t+s,e-r,t+s,e)}close(){if(this._$currentPath.length<=6)return;const t=+this._$currentPath[0],e=+this._$currentPath[1];this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}_$equalsToLastPoint(t,e){const i=+this._$currentPath[this._$currentPath.length-3],s=+this._$currentPath[this._$currentPath.length-2];return t===i&&e===s}_$pushPointToCurrentPath(t,e,i){this._$currentPath.push(t,e,i)}_$pushCurrentPathToVertices(){this._$currentPath.length<4?this._$currentPath.length=0:(this._$vertices.push(this._$currentPath),this._$currentPath=U())}createRectVertices(t,e,i,s){return U(U(t,e,!1,t+i,e,!1,t+i,e+s,!1,t,e+s,!1))}}class Ct{constructor(){this.enabled=!1,this.parentMatrixA=1,this.parentMatrixB=0,this.parentMatrixC=0,this.parentMatrixD=0,this.parentMatrixE=1,this.parentMatrixF=0,this.parentMatrixG=0,this.parentMatrixH=0,this.parentMatrixI=1,this.ancestorMatrixA=1,this.ancestorMatrixB=0,this.ancestorMatrixC=0,this.ancestorMatrixD=0,this.ancestorMatrixE=1,this.ancestorMatrixF=0,this.ancestorMatrixG=0,this.ancestorMatrixH=0,this.ancestorMatrixI=1,this.parentViewportX=0,this.parentViewportY=0,this.parentViewportW=0,this.parentViewportH=0,this.minXST=1e-5,this.minYST=1e-5,this.minXPQ=1e-5,this.minYPQ=1e-5,this.maxXST=.99999,this.maxYST=.99999,this.maxXPQ=.99999,this.maxYPQ=.99999}enable(t,e,i,s,n,a,h,o,_,l,c,$,u,d,g,f,m,p,x){const b=n.xMax-n.xMin,v=n.yMax-n.yMin,T=a.w,A=a.h,M=r.abs(r.ceil(b*h)),y=r.abs(r.ceil(v*h)),E=T>0?(a.x-n.xMin)/b:1e-5,C=A>0?(a.y-n.yMin)/v:1e-5,S=T>0?(a.x+a.w-n.xMin)/b:.99999,F=A>0?(a.y+a.h-n.yMin)/v:.99999;let B=M*E/i,w=y*C/s,R=(i-M*(1-S))/i,I=(s-y*(1-F))/s;if(B>=R){const t=E/(E+(1-S));B=r.max(t-1e-5,0),R=r.min(t+1e-5,1)}if(w>=I){const t=C/(C+(1-F));w=r.max(t-1e-5,0),I=r.min(t+1e-5,1)}this.enabled=!0,this.parentMatrixA=o,this.parentMatrixB=_,this.parentMatrixD=l,this.parentMatrixE=c,this.parentMatrixG=$,this.parentMatrixH=u,this.ancestorMatrixA=d,this.ancestorMatrixB=g,this.ancestorMatrixD=f,this.ancestorMatrixE=m,this.ancestorMatrixG=p,this.ancestorMatrixH=x,this.parentViewportX=t,this.parentViewportY=e,this.parentViewportW=i,this.parentViewportH=s,this.minXST=E,this.minYST=C,this.minXPQ=B,this.minYPQ=w,this.maxXST=S,this.maxYST=F,this.maxXPQ=R,this.maxYPQ=I}disable(){this.enabled=!1}}class St{constructor(t,e){this._$gl=t,this._$array=[],this._$map=V();const i=this._$gl.getProgramParameter(e,this._$gl.ACTIVE_UNIFORMS);for(let t=0;t0&&(t.assign--,t.method(t.array)))}}}class Ft{constructor(){this._$attributes=[],this._$count=0}get attributes(){return this._$attributes}get count(){return this._$count}set count(t){this._$count=t}clear(){this._$attributes.length=0,this._$count=0}}class Bt{constructor(t,e,i,s){this._$gl=t,this._$context=e,this._$program=this._$createProgram(i,s),this._$uniform=new St(t,this._$program),this._$instance=null}get instance(){return this._$instance||(this._$instance=new Ft),this._$instance}get uniform(){return this._$uniform}_$createProgram(t,i){const s=this._$gl.createProgram();s.id=e++;const r=this._$gl.createShader(this._$gl.VERTEX_SHADER);this._$gl.shaderSource(r,t),this._$gl.compileShader(r);const n=this._$gl.createShader(this._$gl.FRAGMENT_SHADER);return this._$gl.shaderSource(n,i),this._$gl.compileShader(n),this._$gl.attachShader(s,r),this._$gl.attachShader(s,n),this._$gl.linkProgram(s),this._$gl.detachShader(s,r),this._$gl.detachShader(s,n),this._$gl.deleteShader(r),this._$gl.deleteShader(n),s}_$attachProgram(){const t=this._$context.shaderList;t.currentProgramId!==this._$program.id&&(t.currentProgramId=this._$program.id,this._$gl.useProgram(this._$program))}drawArraysInstanced(t){this._$attachProgram(),this._$context.vao.bindInstnceArray(t),this._$gl.drawArraysInstanced(this._$gl.TRIANGLE_STRIP,0,4,t.count)}_$drawImage(){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindCommonVertexArray(),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$drawGradient(t,e){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindGradientVertexArray(t,e),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$stroke(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawElements(this._$gl.TRIANGLES,t.indexCount,this._$gl.UNSIGNED_SHORT,0)}_$fill(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t);const e=t.indexRanges,i=e[e.length-1];this._$gl.drawArrays(this._$gl.TRIANGLES,0,i.first+i.count)}_$containerClip(t,e,i){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.TRIANGLES,e,i)}_$drawPoints(t,e,i){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.POINTS,e,i)}}class wt{static FUNCTION_GRID_OFF(){return"\\n\\nvec2 applyMatrix(in vec2 vertex) {\\n mat3 matrix = mat3(\\n u_highp[0].xyz,\\n u_highp[1].xyz,\\n u_highp[2].xyz\\n );\\n\\n vec2 position = (matrix * vec3(vertex, 1.0)).xy;\\n\\n return position;\\n}\\n\\n"}static FUNCTION_GRID_ON(t){return`\\n\\nvec2 applyMatrix(in vec2 vertex) {\\n mat3 parent_matrix = mat3(\\n u_highp[${t}].xyz,\\n u_highp[${t+1}].xyz,\\n u_highp[${t+2}].xyz\\n );\\n mat3 ancestor_matrix = mat3(\\n u_highp[${t+3}].xyz,\\n u_highp[${t+4}].xyz,\\n u_highp[${t+5}].xyz\\n );\\n vec2 parent_offset = vec2(u_highp[${t+2}].w, u_highp[${t+3}].w);\\n vec2 parent_size = vec2(u_highp[${t+4}].w, u_highp[${t+5}].w);\\n vec4 grid_min = u_highp[${t+6}];\\n vec4 grid_max = u_highp[${t+7}];\\n\\n vec2 position = (parent_matrix * vec3(vertex, 1.0)).xy;\\n position = (position - parent_offset) / parent_size;\\n\\n vec4 ga = grid_min;\\n vec4 gb = grid_max - grid_min;\\n vec4 gc = vec4(1.0) - grid_max;\\n\\n vec2 pa = position;\\n vec2 pb = position - grid_min.st;\\n vec2 pc = position - grid_max.st;\\n\\n position = (ga.pq / ga.st) * min(pa, ga.st)\\n + (gb.pq / gb.st) * clamp(pb, vec2(0.0), gb.st)\\n + (gc.pq / gc.st) * max(vec2(0.0), pc);\\n\\n position = position * parent_size + parent_offset;\\n position = (ancestor_matrix * vec3(position, 1.0)).xy;\\n\\n return position;\\n}\\n\\n`}}class Rt{static TEMPLATE(t,e,i,s){const r=e-1,n=i?this.VARYING_UV_ON():"",a=i?this.STATEMENT_UV_ON():"";return`#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\nlayout (location = 1) in vec2 a_option1;\\nlayout (location = 2) in vec2 a_option2;\\nlayout (location = 3) in float a_type;\\n\\nuniform vec4 u_highp[${t}];\\n\\n${n}\\n\\n${s?wt.FUNCTION_GRID_ON(i?5:0):wt.FUNCTION_GRID_OFF()}\\n\\nfloat crossVec2(in vec2 v1, in vec2 v2) {\\n return v1.x * v2.y - v2.x * v1.y;\\n}\\n\\nvec2 perpendicularVec2(in vec2 v1) {\\n float face = u_highp[${r}][1];\\n\\n return face * vec2(v1.y, -v1.x);\\n}\\n\\nvec2 calculateNormal(in vec2 direction) {\\n vec2 normalized = normalize(direction);\\n return perpendicularVec2(normalized);\\n}\\n\\nvec2 calculateIntersection(in vec2 v1, in vec2 v2, in vec2 o1, in vec2 o2) {\\n float t = crossVec2(o2 - o1, v2) / crossVec2(v1, v2);\\n return (o1 + t * v1);\\n}\\n\\nvec2 calculateAnchor(in vec2 position, in float convex, out vec2 v1, out vec2 v2, out vec2 o1, out vec2 o2) {\\n float miter_limit = u_highp[${r}][2];\\n\\n vec2 a = applyMatrix(a_option1);\\n vec2 b = applyMatrix(a_option2);\\n\\n v1 = convex * (position - a);\\n v2 = convex * (b - position);\\n o1 = calculateNormal(v1) + a;\\n o2 = calculateNormal(v2) + position;\\n\\n vec2 anchor = calculateIntersection(v1, v2, o1, o2) - position;\\n return normalize(anchor) * min(length(anchor), miter_limit);\\n}\\n\\nvoid main() {\\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\\n float half_width = u_highp[${r}][0];\\n\\n vec2 position = applyMatrix(a_vertex);\\n vec2 offset = vec2(0.0);\\n vec2 v1, v2, o1, o2;\\n\\n if (a_type == 1.0 || a_type == 2.0) { // 線分\\n offset = calculateNormal(a_option2 * (applyMatrix(a_option1) - position));\\n } else if (a_type == 10.0) { // スクエア線端\\n offset = normalize(position - applyMatrix(a_option1));\\n offset += a_option2 * perpendicularVec2(offset);\\n } else if (a_type == 21.0) { // マイター結合(線分Bの凸側)\\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\\n } else if (a_type == 22.0) { // マイター結合(線分Aの凸側)\\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\\n } else if (a_type == 23.0) { // マイター結合(線分Aの凹側)\\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\\n } else if (a_type == 24.0) { // マイター結合(線分Bの凹側)\\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\\n } else if (a_type >= 30.0) { // ラウンド結合\\n float face = u_highp[${r}][1];\\n float rad = face * (a_type - 30.0) * 0.3488888889; /* 0.3488888889 = PI / 9.0 */\\n offset = mat2(cos(rad), sin(rad), -sin(rad), cos(rad)) * vec2(1.0, 0.0);\\n }\\n \\n offset *= half_width;\\n position += offset;\\n ${a}\\n\\n position /= viewport;\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n`}static VARYING_UV_ON(){return"\\nout vec2 v_uv;\\n"}static STATEMENT_UV_ON(){return"\\n mat3 uv_matrix = mat3(\\n u_highp[0].xyz,\\n u_highp[1].xyz,\\n u_highp[2].xyz\\n );\\n mat3 inverse_matrix = mat3(\\n u_highp[3].xyz,\\n u_highp[4].xyz,\\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\\n );\\n\\n v_uv = (uv_matrix * vec3(a_vertex, 1.0)).xy;\\n v_uv += offset;\\n v_uv = (inverse_matrix * vec3(v_uv, 1.0)).xy;\\n"}}class It{static TEMPLATE(t,e,i,s){const r=i?this.ATTRIBUTE_BEZIER_ON():"",n=i?this.VARYING_BEZIER_ON():e?this.VARYING_UV_ON():"",a=i?this.STATEMENT_BEZIER_ON():e?this.STATEMENT_UV_ON():"";return`#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n${r}\\n\\nuniform vec4 u_highp[${t}];\\n\\n${n}\\n\\n${s?wt.FUNCTION_GRID_ON(e?5:0):wt.FUNCTION_GRID_OFF()}\\n\\nvoid main() {\\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\\n\\n ${a}\\n\\n vec2 pos = applyMatrix(a_vertex) / viewport;\\n pos = pos * 2.0 - 1.0;\\n gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0);\\n}\\n\\n`}static ATTRIBUTE_BEZIER_ON(){return"\\nlayout (location = 1) in vec2 a_bezier;\\n"}static VARYING_UV_ON(){return"\\nout vec2 v_uv;\\n"}static VARYING_BEZIER_ON(){return"\\nout vec2 v_bezier;\\n"}static STATEMENT_UV_ON(){return"\\n mat3 uv_matrix = mat3(\\n u_highp[0].xyz,\\n u_highp[1].xyz,\\n u_highp[2].xyz\\n );\\n mat3 inverse_matrix = mat3(\\n u_highp[3].xyz,\\n u_highp[4].xyz,\\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\\n );\\n\\n v_uv = (inverse_matrix * uv_matrix * vec3(a_vertex, 1.0)).xy;\\n"}static STATEMENT_BEZIER_ON(){return"\\n v_bezier = a_bezier;\\n"}}class Pt{static FUNCTION_IS_INSIDE(){return"\\n\\nfloat isInside(in vec2 uv) {\\n return step(4.0, dot(step(vec4(0.0, uv.x, 0.0, uv.y), vec4(uv.x, 1.0, uv.y, 1.0)), vec4(1.0)));\\n}\\n\\n"}static STATEMENT_INSTANCED_COLOR_TRANSFORM_ON(){return"\\n src.rgb /= max(0.0001, src.a);\\n src = clamp(src * mul + add, 0.0, 1.0);\\n src.rgb *= src.a;\\n"}static STATEMENT_COLOR_TRANSFORM_ON(t){return`\\n vec4 mul = u_mediump[${t}];\\n vec4 add = u_mediump[${t+1}];\\n${Pt.STATEMENT_INSTANCED_COLOR_TRANSFORM_ON()}\\n`}}class Nt{static SOLID_COLOR(){return"#version 300 es\\nprecision mediump float;\\n\\nuniform vec4 u_mediump;\\n\\nout vec4 o_color;\\n\\nvoid main() {\\n o_color = vec4(u_mediump.rgb * u_mediump.a, u_mediump.a);\\n}\\n\\n"}static BITMAP_CLIPPED(){return`#version 300 es\\nprecision mediump float;\\n\\nuniform sampler2D u_texture;\\nuniform vec4 u_mediump[3];\\n\\nin vec2 v_uv;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 uv = vec2(v_uv.x, u_mediump[0].y - v_uv.y) / u_mediump[0].xy;\\n\\n vec4 src = texture(u_texture, uv);\\n ${Pt.STATEMENT_COLOR_TRANSFORM_ON(1)}\\n o_color = src;\\n}`}static BITMAP_PATTERN(){return`#version 300 es\\nprecision mediump float;\\n\\nuniform sampler2D u_texture;\\nuniform vec4 u_mediump[3];\\n\\nin vec2 v_uv;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 uv = fract(vec2(v_uv.x, -v_uv.y) / u_mediump[0].xy);\\n \\n vec4 src = texture(u_texture, uv);\\n ${Pt.STATEMENT_COLOR_TRANSFORM_ON(1)}\\n o_color = src;\\n}`}static MASK(){return"#version 300 es\\nprecision mediump float;\\n\\nin vec2 v_bezier;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 px = dFdx(v_bezier);\\n vec2 py = dFdy(v_bezier);\\n\\n vec2 f = (2.0 * v_bezier.x) * vec2(px.x, py.x) - vec2(px.y, py.y);\\n float alpha = 0.5 - (v_bezier.x * v_bezier.x - v_bezier.y) / length(f);\\n\\n if (alpha > 0.0) {\\n o_color = vec4(min(alpha, 1.0));\\n } else {\\n discard;\\n } \\n}\\n\\n"}}class kt{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=V()}getSolidColorShapeShader(t,e){const i=`s${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?Rt.TEMPLATE(s,r,!1,e):It.TEMPLATE(s,!1,!1,e);const a=new Bt(this._$gl,this._$context,n,Nt.SOLID_COLOR());return this._$collection.set(i,a),a}getBitmapShapeShader(t,e,i){const s=`b${t?"y":"n"}${e?"y":"n"}${i?"y":"n"}`;if(this._$collection.has(s)){const t=this._$collection.get(s);if(t)return t}const r=(i?13:5)+(t?1:0),n=r;let a;a=t?Rt.TEMPLATE(r,n,!0,i):It.TEMPLATE(r,!0,!1,i);const h=e?Nt.BITMAP_PATTERN():Nt.BITMAP_CLIPPED(),o=new Bt(this._$gl,this._$context,a,h);return this._$collection.set(s,o),o}getMaskShapeShader(t,e){const i=`m${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?Rt.TEMPLATE(s,r,!1,e):It.TEMPLATE(s,!1,!0,e);const a=new Bt(this._$gl,this._$context,n,Nt.MASK());return this._$collection.set(i,a),a}setSolidColorShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c){const $=t.highp;let u;n?($[0]=_.parentMatrixA,$[1]=_.parentMatrixB,$[2]=_.parentMatrixC,$[4]=_.parentMatrixD,$[5]=_.parentMatrixE,$[6]=_.parentMatrixF,$[8]=_.parentMatrixG,$[9]=_.parentMatrixH,$[10]=_.parentMatrixI,$[12]=_.ancestorMatrixA,$[13]=_.ancestorMatrixB,$[14]=_.ancestorMatrixC,$[16]=_.ancestorMatrixD,$[17]=_.ancestorMatrixE,$[18]=_.ancestorMatrixF,$[20]=_.ancestorMatrixG,$[21]=_.ancestorMatrixH,$[22]=_.ancestorMatrixI,$[3]=h,$[7]=o,$[11]=_.parentViewportX,$[15]=_.parentViewportY,$[19]=_.parentViewportW,$[23]=_.parentViewportH,$[24]=_.minXST,$[25]=_.minYST,$[26]=_.minXPQ,$[27]=_.minYPQ,$[28]=_.maxXST,$[29]=_.maxYST,$[30]=_.maxXPQ,$[31]=_.maxYPQ,u=32):($[0]=a[0],$[1]=a[1],$[2]=a[2],$[4]=a[3],$[5]=a[4],$[6]=a[5],$[8]=a[6],$[9]=a[7],$[10]=a[8],$[3]=h,$[7]=o,u=12),e&&($[u]=i,$[u+1]=s,$[u+2]=r);const d=t.mediump;d[0]=l[0],d[1]=l[1],d[2]=l[2],d[3]=l[3]*c}setBitmapShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c,$,u,d,g,f,m,p,x,b){const v=t.highp;let T;v[0]=a[0],v[1]=a[1],v[2]=a[2],v[4]=a[3],v[5]=a[4],v[6]=a[5],v[8]=a[6],v[9]=a[7],v[10]=a[8],v[12]=h[0],v[13]=h[1],v[14]=h[2],v[16]=h[3],v[17]=h[4],v[18]=h[5],v[11]=h[6],v[15]=h[7],v[19]=h[8],v[3]=o,v[7]=_,T=20,n&&(v[T]=l.parentMatrixA,v[T+1]=l.parentMatrixB,v[T+2]=l.parentMatrixC,v[T+4]=l.parentMatrixD,v[T+5]=l.parentMatrixE,v[T+6]=l.parentMatrixF,v[T+8]=l.parentMatrixG,v[T+9]=l.parentMatrixH,v[T+10]=l.parentMatrixI,v[T+12]=l.ancestorMatrixA,v[T+13]=l.ancestorMatrixB,v[T+14]=l.ancestorMatrixC,v[T+16]=l.ancestorMatrixD,v[T+17]=l.ancestorMatrixE,v[T+18]=l.ancestorMatrixF,v[T+20]=l.ancestorMatrixG,v[T+21]=l.ancestorMatrixH,v[T+22]=l.ancestorMatrixI,v[T+11]=l.parentViewportX,v[T+15]=l.parentViewportY,v[T+19]=l.parentViewportW,v[T+23]=l.parentViewportH,v[T+24]=l.minXST,v[T+25]=l.minYST,v[T+26]=l.minXPQ,v[T+27]=l.minYPQ,v[T+28]=l.maxXST,v[T+29]=l.maxYST,v[T+30]=l.maxXPQ,v[T+31]=l.maxYPQ,T=52),e&&(v[T]=i,v[T+1]=s,v[T+2]=r);const A=t.mediump;A[0]=c,A[1]=$,A[4]=u,A[5]=d,A[6]=g,A[7]=f,A[8]=m,A[9]=p,A[10]=x,A[11]=b}setMaskShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c,$,u=null){const d=t.highp;e&&u?(d[0]=u.parentMatrixA,d[1]=u.parentMatrixB,d[2]=u.parentMatrixC,d[4]=u.parentMatrixD,d[5]=u.parentMatrixE,d[6]=u.parentMatrixF,d[8]=u.parentMatrixG,d[9]=u.parentMatrixH,d[10]=u.parentMatrixI,d[12]=u.ancestorMatrixA,d[13]=u.ancestorMatrixB,d[14]=u.ancestorMatrixC,d[16]=u.ancestorMatrixD,d[17]=u.ancestorMatrixE,d[18]=u.ancestorMatrixF,d[20]=u.ancestorMatrixG,d[21]=u.ancestorMatrixH,d[22]=u.ancestorMatrixI,d[3]=c,d[7]=$,d[11]=u.parentViewportX,d[15]=u.parentViewportY,d[19]=u.parentViewportW,d[23]=u.parentViewportH,d[24]=u.minXST,d[25]=u.minYST,d[26]=u.minXPQ,d[27]=u.minYPQ,d[28]=u.maxXST,d[29]=u.maxYST,d[30]=u.maxXPQ,d[31]=u.maxYPQ):(d[0]=i,d[1]=s,d[2]=r,d[4]=n,d[5]=a,d[6]=h,d[8]=o,d[9]=_,d[10]=l,d[3]=c,d[7]=$)}setMaskShapeUniformIdentity(t,e,i){const s=t.highp;s[0]=1,s[1]=0,s[2]=0,s[4]=0,s[5]=1,s[6]=0,s[8]=0,s[9]=0,s[10]=1,s[3]=e,s[7]=i}}class Lt{static TEMPLATE(t,e,i,s,r){const n=i?this.STATEMENT_GRADIENT_TYPE_RADIAL(e,s):this.STATEMENT_GRADIENT_TYPE_LINEAR(e);let a;switch(r){case"reflect":a="1.0 - abs(fract(t * 0.5) * 2.0 - 1.0)";break;case"repeat":a="fract(t)";break;default:a="clamp(t, 0.0, 1.0)"}return`#version 300 es\\nprecision highp float;\\n\\nuniform sampler2D u_texture;\\nuniform vec4 u_highp[${t}];\\n\\nin vec2 v_uv;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 p = v_uv;\\n ${n}\\n t = ${a};\\n o_color = texture(u_texture, vec2(t, 0.5));\\n}\\n\\n`}static STATEMENT_GRADIENT_TYPE_LINEAR(t){return`\\n vec2 a = u_highp[${t}].xy;\\n vec2 b = u_highp[${t}].zw;\\n\\n vec2 ab = b - a;\\n vec2 ap = p - a;\\n\\n float t = dot(ab, ap) / dot(ab, ab);\\n`}static STATEMENT_GRADIENT_TYPE_RADIAL(t,e){return`\\n float radius = u_highp[${t}][0];\\n\\n vec2 coord = p / radius;\\n ${e?this.STATEMENT_FOCAL_POINT_ON(t):this.STATEMENT_FOCAL_POINT_OFF()}\\n`}static STATEMENT_FOCAL_POINT_OFF(){return"\\n float t = length(coord);\\n"}static STATEMENT_FOCAL_POINT_ON(t){return`\\n vec2 focal = vec2(u_highp[${t}][1], 0.0);\\n\\n vec2 dir = normalize(coord - focal);\\n\\n float a = dot(dir, dir);\\n float b = 2.0 * dot(dir, focal);\\n float c = dot(focal, focal) - 1.0;\\n float x = (-b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a);\\n\\n float t = distance(focal, coord) / distance(focal, focal + dir * x);\\n`}}class Ot{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=V()}getGradientShapeShader(t,e,i,s,r){const n=this.createCollectionKey(t,e,i,s,r);if(this._$collection.has(n)){const t=this._$collection.get(n);if(t)return t}const a=(e?13:5)+(t?1:0)+1,h=a-1;let o;o=t?Rt.TEMPLATE(a,h,!0,e):It.TEMPLATE(a,!0,!1,e);const _=new Bt(this._$gl,this._$context,o,Lt.TEMPLATE(a,h,i,s,r));return this._$collection.set(n,_),_}createCollectionKey(t,e,i,s,r){const n=t?"y":"n",a=e?"y":"n",h=i?"y":"n",o=i&&s?"y":"n";let _=0;switch(r){case"reflect":_=1;break;case"repeat":_=2}return`${n}${a}${h}${o}${_}`}setGradientShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c,$,u){const d=t.highp;d[0]=a[0],d[1]=a[1],d[2]=a[2],d[4]=a[3],d[5]=a[4],d[6]=a[5],d[8]=a[6],d[9]=a[7],d[10]=a[8],d[12]=h[0],d[13]=h[1],d[14]=h[2],d[16]=h[3],d[17]=h[4],d[18]=h[5],d[11]=h[6],d[15]=h[7],d[19]=h[8],d[3]=o,d[7]=_;let g=20;n&&(d[g]=l.parentMatrixA,d[g+1]=l.parentMatrixB,d[g+2]=l.parentMatrixC,d[g+4]=l.parentMatrixD,d[g+5]=l.parentMatrixE,d[g+6]=l.parentMatrixF,d[g+8]=l.parentMatrixG,d[g+9]=l.parentMatrixH,d[g+10]=l.parentMatrixI,d[g+12]=l.ancestorMatrixA,d[g+13]=l.ancestorMatrixB,d[g+14]=l.ancestorMatrixC,d[g+16]=l.ancestorMatrixD,d[g+17]=l.ancestorMatrixE,d[g+18]=l.ancestorMatrixF,d[g+20]=l.ancestorMatrixG,d[g+21]=l.ancestorMatrixH,d[g+22]=l.ancestorMatrixI,d[g+11]=l.parentViewportX,d[g+15]=l.parentViewportY,d[g+19]=l.parentViewportW,d[g+23]=l.parentViewportH,d[g+24]=l.minXST,d[g+25]=l.minYST,d[g+26]=l.minXPQ,d[g+27]=l.minYPQ,d[g+28]=l.maxXST,d[g+29]=l.maxYST,d[g+30]=l.maxXPQ,d[g+31]=l.maxYPQ,g=52),e&&(d[g]=i,d[g+1]=s,d[g+2]=r,g+=4),c?(d[g]=$[5],d[g+1]=u):(d[g]=$[0],d[g+1]=$[1],d[g+2]=$[2],d[g+3]=$[3])}}class Ut{static TEXTURE(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nout vec2 v_coord;\\n\\nvoid main() {\\n v_coord = a_vertex;\\n\\n vec2 position = a_vertex * 2.0 - 1.0;\\n gl_Position = vec4(position, 0.0, 1.0);\\n}\\n\\n"}static BLEND(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nuniform vec4 u_highp[4];\\n\\nout vec2 v_coord;\\n\\nvoid main() {\\n v_coord = a_vertex;\\n\\n vec2 offset = u_highp[0].xy;\\n vec2 size = u_highp[0].zw;\\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position = position * size + offset;\\n position = (matrix * vec3(position, 1.0)).xy;\\n position /= viewport;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}static INSTANCE_BLEND(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nuniform vec4 u_highp[5];\\n\\nout vec2 v_src_coord;\\nout vec2 v_dst_coord;\\n\\nvoid main() {\\n vec4 rect = vec4(u_highp[0].x, u_highp[0].y, u_highp[0].z, u_highp[0].w);\\n vec2 size = vec2(u_highp[4].x, u_highp[4].y);\\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\\n\\n v_src_coord = a_vertex * rect.zw + rect.xy;\\n v_dst_coord = a_vertex;\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position = position * size;\\n position = (matrix * vec3(position, 1.0)).xy;\\n position /= viewport;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}static INSTANCE(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\nlayout (location = 1) in vec4 a_rect;\\nlayout (location = 2) in vec4 a_size;\\nlayout (location = 3) in vec2 a_offset;\\nlayout (location = 4) in vec4 a_matrix;\\nlayout (location = 5) in vec4 a_mul;\\nlayout (location = 6) in vec4 a_add;\\n\\nout vec2 v_coord;\\nout vec4 mul;\\nout vec4 add;\\n\\nvoid main() {\\n v_coord = a_vertex * a_rect.zw + a_rect.xy;\\n mul = a_mul;\\n add = a_add;\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position = position * a_size.xy;\\n mat3 matrix = mat3(a_matrix.x, a_matrix.y, 0.0, a_matrix.z, a_matrix.w, 0.0, a_offset.x, a_offset.y, 1.0);\\n position = (matrix * vec3(position, 1.0)).xy;\\n position /= a_size.zw;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}static BLEND_CLIP(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nuniform vec4 u_highp[4];\\n\\nout vec2 v_coord;\\n\\nvoid main() {\\n v_coord = a_vertex;\\n\\n vec2 offset = u_highp[0].xy;\\n vec2 size = u_highp[0].zw;\\n mat3 inv_matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position *= viewport;\\n position = (inv_matrix * vec3(position, 1.0)).xy;\\n position = (position - offset) / size;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}}class Dt{static TEMPLATE(t,e,i){let s="";for(let t=1;t>16)/255,h[a++]=(e>>8&255)/255,h[a++]=(255&e)/255,h[a++]=s[t]}for(let t=r;tthis._$vertexBufferData.length){const t=new o(2*this._$vertexBufferData.length);t.set(this._$vertexBufferData),this._$vertexBufferData=t}}static _$expandIndexBufferIfNeeded(t){if(this._$indexBufferPos+t>this._$indexBufferData.length){const t=new l(2*this._$indexBufferData.length);t.set(this._$indexBufferData),this._$indexBufferData=t}}static _$generateLineSegment(t){const e=t.length-5;for(let i=0;it*s-i*e;class ee{constructor(t){this._$gl=t,this._$fillVertexArrayPool=[],this._$strokeVertexArrayPool=[],this._$boundVertexArray=null,this._$fillAttrib_vertex=0,this._$fillAttrib_bezier=1,this._$strokeAttrib_vertex=0,this._$strokeAttrib_option1=1,this._$strokeAttrib_option2=2,this._$strokeAttrib_type=3,this._$vertexBufferData=new Float32Array([0,0,0,1,1,0,1,1]),this._$attributeVertexBuffer=t.createBuffer(),this._$attributeBuffer=new Float32Array(22),this._$instanceVertexArray=this._$getCommonVertexArray(),this._$commonVertexArray=this._$getVertexArray(0,1)}_$getCommonVertexArray(){const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1]),this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,this._$attributeVertexBuffer),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(1,4,this._$gl.FLOAT,!1,88,0),this._$gl.vertexAttribDivisor(1,1),this._$gl.enableVertexAttribArray(2),this._$gl.vertexAttribPointer(2,4,this._$gl.FLOAT,!1,88,16),this._$gl.vertexAttribDivisor(2,1),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(3,2,this._$gl.FLOAT,!1,88,32),this._$gl.vertexAttribDivisor(3,1),this._$gl.enableVertexAttribArray(4),this._$gl.vertexAttribPointer(4,4,this._$gl.FLOAT,!1,88,40),this._$gl.vertexAttribDivisor(4,1),this._$gl.enableVertexAttribArray(5),this._$gl.vertexAttribPointer(5,4,this._$gl.FLOAT,!1,88,56),this._$gl.vertexAttribDivisor(5,1),this._$gl.enableVertexAttribArray(6),this._$gl.vertexAttribPointer(6,4,this._$gl.FLOAT,!1,88,72),this._$gl.vertexAttribDivisor(6,1),t}_$getVertexArray(t,e){const i=this._$gl.createVertexArray();this.bind(i);const s=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s),this._$vertexBufferData[0]=t,this._$vertexBufferData[2]=t,this._$vertexBufferData[4]=e,this._$vertexBufferData[6]=e,this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$vertexBufferData,this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),i}_$getFillVertexArray(){if(this._$fillVertexArrayPool.length){const t=this._$fillVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(this._$fillAttrib_vertex,2,this._$gl.FLOAT,!1,16,0),this._$gl.vertexAttribPointer(this._$fillAttrib_bezier,2,this._$gl.FLOAT,!1,16,8),t}_$getStrokeVertexArray(){if(this._$strokeVertexArrayPool.length){const t=this._$strokeVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e);const i=this._$gl.createBuffer();return t.indexBuffer=i,t.indexLength=0,this._$gl.bindBuffer(this._$gl.ELEMENT_ARRAY_BUFFER,i),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.enableVertexAttribArray(2),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(this._$strokeAttrib_vertex,2,this._$gl.FLOAT,!1,28,0),this._$gl.vertexAttribPointer(this._$strokeAttrib_option1,2,this._$gl.FLOAT,!1,28,8),this._$gl.vertexAttribPointer(this._$strokeAttrib_option2,2,this._$gl.FLOAT,!1,28,16),this._$gl.vertexAttribPointer(this._$strokeAttrib_type,1,this._$gl.FLOAT,!1,28,24),t}createFill(t){const e=Zt.generate(t),i=e.vertexBufferData,s=this._$getFillVertexArray();return s.indexRanges=e.indexRanges,this.bind(s),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s.vertexBuffer),s.vertexLengththis._$attributeBuffer.length&&(this._$attributeBuffer=new Float32Array(t.attributes.length),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW)),this._$attributeBuffer.set(t.attributes),this._$gl.bufferSubData(this._$gl.ARRAY_BUFFER,0,this._$attributeBuffer.subarray(0,t.attributes.length))}bindCommonVertexArray(){this.bind(this._$commonVertexArray)}bindGradientVertexArray(t,e){const i=this._$getVertexArray(t,e);this.bind(i)}}class ie{constructor(t,e){this._$context=t,this._$gl=e,this._$clips=[],this._$poolClip=[],this._$clipStatus=!1,this._$containerClip=!1,this._$currentClip=!1}get containerClip(){return this._$containerClip}set containerClip(t){this._$containerClip=t}_$onClear(t){t&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0)}_$onBind(t){!t&&this._$currentClip?(this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1):t&&!this._$currentClip&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0,this._$endClipDef())}_$onClearRect(){this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1}_$enterClip(){this._$currentClip||(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0);const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");t.mask=!0,++t.clipLevel}_$beginClipDef(){const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.stencilMask(1<7&&(this._$unionStencilMask(e,a,h),n=e)}n>e+1&&this._$unionStencilMask(e,a,h)}_$unionStencilMask(t,e,i){const s=this._$context.path.createRectVertices(0,0,e,i),r=this._$context.vao.createFill(s);D(s.pop()),D(s);const n=this._$context.shaderList.shapeShaderVariants,a=n.getMaskShapeShader(!1,!1),h=a.uniform;n.setMaskShapeUniformIdentity(h,e,i);const o=r.indexRanges[0];this._$gl.stencilFunc(this._$gl.LEQUAL,1<this._$maxTextureSize?this._$maxTextureSize/i:1}drawInstacedArray(){this.blend.drawInstacedArray()}clearInstacedArray(){this.blend.clearInstacedArray()}bindRenderBuffer(t){this._$frameBufferManager.bindRenderBuffer(),this._$gl.clearColor(0,0,0,0),this._$gl.clear(this._$gl.COLOR_BUFFER_BIT|this._$gl.STENCIL_BUFFER_BIT),this._$viewportWidth=t.w,this._$viewportHeight=t.h,this._$gl.viewport(t.x,t.y,t.w,t.h),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(t.x,t.y,t.w,t.h)}getTextureFromRect(t){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t.index),s=e.currentAttachment,r=e.createTextureAttachment(t.w,t.h);this._$bind(r),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(i,-t.x,-i.height+t.h+t.y,i.width,i.height),this.restore();const n=r.texture;return e.releaseAttachment(r),this._$bind(s),n}drawBitmap(t){const e=this._$shaderList.blendShaderVariants,i=e.getNormalBlendShader(!1);e.setNormalBlendUniform(i.uniform,0,0,t.width,t.height,this._$matrix,this._$viewportWidth,this._$viewportHeight,!1,1,1,1,1,0,0,0,0),this._$frameBufferManager.textureManager.bind0(t,this._$imageSmoothingEnabled),this.blend.toOperation("normal"),i._$drawImage()}drawTextureFromRect(t,e){const i=this._$frameBufferManager,s=i.currentAttachment;this.bindRenderBuffer(e),i.transferTexture(e);const r=i.textureManager.getAtlasTexture(e.index),n=i.createTextureAttachmentFrom(r);this._$bind(n),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(e.x,e.y,e.w,e.h),this._$gl.clearColor(0,0,0,0),this._$gl.disable(this._$gl.SCISSOR_TEST),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(t,e.x,r.height-e.h-e.y,t.width,t.height),this.restore(),i.releaseAttachment(n),this._$bind(s),i.textureManager.release(t)}stopStencil(){this._$mask._$onClearRect()}_$bind(t=null){if(!t)return;this._$frameBufferManager.bind(t);const e=t.color,i=t.stencil,s=t.width,r=t.height;this._$viewportWidth===s&&this._$viewportHeight===r||(this._$viewportWidth=s,this._$viewportHeight=r,this._$gl.viewport(0,0,s,r)),(e&&e.dirty||i&&i.dirty)&&(e&&(e.dirty=!1),i&&(i.dirty=!1),this._$gl.clearColor(0,0,0,0),this.clearRect(0,0,this._$viewportWidth,this._$viewportHeight),this._$gl.clearColor(this._$clearColorR,this._$clearColorG,this._$clearColorB,this._$clearColorA),this._$mask._$onClear(t.mask)),this._$mask._$onBind(t.mask)}setTransform(t,e,i,s,r,n){this._$matrix[0]=t,this._$matrix[1]=e,this._$matrix[3]=i,this._$matrix[4]=s,this._$matrix[6]=r,this._$matrix[7]=n}setMaxSize(t,e){this._$frameBufferManager.setMaxSize(t,e)}transform(t,e,i,s,r,n){const a=this._$matrix[0],h=this._$matrix[1],o=this._$matrix[3],_=this._$matrix[4],l=this._$matrix[6],c=this._$matrix[7];this._$matrix[0]=t*a+e*o,this._$matrix[1]=t*h+e*_,this._$matrix[3]=i*a+s*o,this._$matrix[4]=i*h+s*_,this._$matrix[6]=r*a+n*o+l,this._$matrix[7]=r*h+n*_+c}debug(t=0){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t),s=e.currentAttachment,r=e.createTextureAttachmentFrom(i);this._$bind(r);const n=new Uint8Array(i.width*i.height*4);this._$gl.readPixels(0,0,i.width,i.height,this._$gl.RGBA,this._$gl.UNSIGNED_BYTE,n);const a=document.createElement("canvas");a.width=i.width,a.height=i.height;const h=a.getContext("2d"),o=new ImageData(i.width,i.height);for(let t=0;ts.length||e.push(s)}if(!e.length)return void D(e);const i=this._$vao.createFill(e),s=this.fillStyle;let r,n,a,h=this._$matrix;const o=this._$grid.enabled;if(s instanceof mt){const t=s.stops,e="linearRGB"===s.rgb;if(r=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0(r,!0),this._$frameBufferManager.bindRenderBuffer(),n=this._$shaderList.gradientShapeShaderVariants,"linear"===s.type)a=n.getGradientShapeShader(!1,o,!1,!1,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,s.points,0);else{h=this._$stack[this._$stack.length-1];const t=0!==s.focalPointRatio;a=n.getGradientShapeShader(!1,o,!0,t,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,s.points,s.focalPointRatio)}}else if(s instanceof pt){h=this._$stack[this._$stack.length-1];const t=s.colorTransform;r=s.texture,this._$frameBufferManager.textureManager.bind0(r,this._$imageSmoothingEnabled),n=this._$shaderList.shapeShaderVariants,a=n.getBitmapShapeShader(!1,s.repeat,o),t?n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,1,1,1,this._$globalAlpha,0,0,0,0)}else n=this._$shaderList.shapeShaderVariants,a=n.getSolidColorShapeShader(!1,this._$grid.enabled),n.setSolidColorShapeUniform(a.uniform,!1,0,0,0,o,h,this._$viewportWidth,this._$viewportHeight,this._$grid,s,this._$globalAlpha);const _=this._$shaderList.shapeShaderVariants,l=_.getMaskShapeShader(!1,o);_.setMaskShapeUniform(l.uniform,o,h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8],this._$viewportWidth,this._$viewportHeight,this._$grid),this._$gl.enable(this._$gl.STENCIL_TEST),this._$gl.stencilMask(255),this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.colorMask(!1,!1,!1,!1),l._$fill(i),this._$gl.disable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.NOTEQUAL,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.ZERO,this._$gl.ZERO),this._$gl.colorMask(!0,!0,!0,!0),a._$fill(i),this._$gl.disable(this._$gl.STENCIL_TEST),this.releaseFillVertexArray(i)}releaseFillVertexArray(t){this._$vao.releaseFill(t);const e=t.indexRanges;for(let t=0;ta.width||i>a.height||0>e&&0>=s+e||0>i&&0>=n+i||(this._$maskBounds.xMin=r.max(0,r.min(this._$maskBounds.xMin,e)),this._$maskBounds.yMin=r.max(0,r.min(this._$maskBounds.yMin,i)),this._$maskBounds.xMax=r.min(a.width,r.min(this._$maskBounds.xMax,s)),this._$maskBounds.yMax=r.min(a.height,r.min(this._$maskBounds.yMax,n)),0))}_$endClipDef(){this._$mask._$endClipDef()}_$leaveClip(){this.drawInstacedArray(),this._$mask._$leaveClip()}_$drawContainerClip(){this._$mask._$drawContainerClip()}closePath(){this._$path.close()}stroke(){const t=this._$path.vertices;if(!t.length)return;const e=U();for(let i=0;is.length||e.push(s)}if(!e.length)return void D(e);const i=this._$vao.createStroke(t,this.lineCap,this.lineJoin);let s=this._$matrix;const n=this.strokeStyle;let a=r.sign(s[0]*s[4]);a>0&&0!==s[1]&&0!==s[3]&&(a=-r.sign(s[1]*s[3]));let h,o,_=.5*this.lineWidth;this._$grid.enabled?(h=r.abs(this._$grid.ancestorMatrixA+this._$grid.ancestorMatrixD),o=r.abs(this._$grid.ancestorMatrixB+this._$grid.ancestorMatrixE)):(h=r.abs(s[0]+s[3]),o=r.abs(s[1]+s[4]));const l=r.min(h,o),c=r.max(h,o);_*=c*(1-.3*r.cos(.5*r.PI*(l/c))),_=r.max(1,_);const $=this._$grid.enabled;let u,d,g;if(n instanceof mt){"radial"===n.type&&(s=this._$stack[this._$stack.length-1]);const t=n.stops,e="linearRGB"===n.rgb;if(u=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0(u,!0),d=this._$shaderList.gradientShapeShaderVariants,"linear"===n.type)g=d.getGradientShapeShader(!0,$,!1,!1,n.mode),d.setGradientShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,n.points,0);else{s=this._$stack[this._$stack.length-1];const t=0!==n.focalPointRatio;g=d.getGradientShapeShader(!0,$,!0,t,n.mode),d.setGradientShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,n.points,n.focalPointRatio)}}else if(n instanceof pt){s=this._$stack[this._$stack.length-1];const t=n.colorTransform;u=n.texture,this._$frameBufferManager.textureManager.bind0(u),d=this._$shaderList.shapeShaderVariants,g=d.getBitmapShapeShader(!0,n.repeat,this._$grid.enabled),t?d.setBitmapShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,u.width,u.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):d.setBitmapShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,u.width,u.height,1,1,1,this._$globalAlpha,0,0,0,0)}else d=this._$shaderList.shapeShaderVariants,g=d.getSolidColorShapeShader(!0,this._$grid.enabled),d.setSolidColorShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,this._$viewportWidth,this._$viewportHeight,this._$grid,n,this._$globalAlpha);g._$stroke(i),this._$vao.releaseStroke(i)}arc(t,e,i){this._$path.drawCircle(t,e,i)}clip(){const t=this._$path.vertices;if(!t.length)return;const e=U();for(let i=0;is.length||e.push(s)}if(!e.length)return void D(e);const i=this._$vao.createFill(e),s=this._$shaderList.shapeShaderVariants,r=s.getMaskShapeShader(!1,!1),n=r.uniform;s.setMaskShapeUniform(n,!1,this._$matrix[0],this._$matrix[1],this._$matrix[2],this._$matrix[3],this._$matrix[4],this._$matrix[5],this._$matrix[6],this._$matrix[7],this._$matrix[8],this._$viewportWidth,this._$viewportHeight,null),this._$mask._$onClip(i,this._$matrix,this._$viewportWidth,this._$viewportHeight)||(r._$fill(i),this.beginPath())}save(){const t=this._$matrix;this._$stack.push(O(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])),this._$mask._$onSave()}restore(){var t;this._$stack.length&&(t=this._$matrix,M.push(t),this._$matrix=this._$stack.pop()||O()),this._$mask._$onRestore()}createPattern(t,e,i){return new pt(this,t,e,i)}createLinearGradient(t,e,i,s,r="rgb",n="pad"){return(new mt).linear(t,e,i,s,r,n)}createRadialGradient(t,e,i,s,r,n,a="rgb",h="pad",o=0){return(new mt).radial(t,e,i,s,r,n,a,h,o)}_$applyBlurFilter(t,e,i){const s=this._$frameBufferManager,n=s.currentAttachment;if(!n)throw new Error("the current attachment is null.");const a=n.width,h=n.height;s.textureManager.bind0(t,!0);const o=r.ceil(.5*i),_=1-(o-.5*i),l=1+i,c=this._$shaderList.filterShaderVariants,$=c.getBlurFilterShader(o);c.setBlurFilterUniform($.uniform,a,h,e,_,l),$._$drawImage()}_$applyBitmapFilter(t,e,i,s,r,n,a,h,o,_,l,c,$,u,d,g=null,f=null,m=null,p=0,x=0,b=0,v=0,T=0,A=0,M=0,y=0){const E=this._$frameBufferManager,C="inner"===$,S=E.currentAttachment,F=E.getTextureFromCurrentAttachment();let B=null;const w=null!==g&&null!==f&&null!==m;let R;null!==g&&null!==f&&null!==m&&(B=this._$gradientLUT.generateForFilter(g,f,m)),C?w&&B?E.textureManager.bind02(t,B,!0):E.textureManager.bind0(t):(R=this._$frameBufferManager.createTextureAttachment(e,i),this._$bind(R),w&&B?E.textureManager.bind012(t,F,B,!0):E.textureManager.bind01(t,F));const I=!(C||"full"===$&&u),P=!(e===h&&i===o&&0===_&&0===l),N=!(1===d),k=this._$shaderList.filterShaderVariants,L=k.getBitmapFilterShader(I,P,c,$,u,N,w);k.setBitmapFilterUniform(L.uniform,e,i,s,r,n,a,h,o,_,l,c,d,p,x,b,v,T,A,M,y,I,P,N,w),C?u?this.blend.toSourceIn():this.blend.toSourceAtop():this.blend.toOneZero(),L._$drawImage(),C||E.releaseAttachment(S,!0)}_$applyColorMatrixFilter(t,e){this._$frameBufferManager.textureManager.bind0(t,!0);const i=this._$shaderList.filterShaderVariants,s=i.getColorMatrixFilterShader();i.setColorMatrixFilterUniform(s.uniform,e),this.blend.reset(),s._$drawImage()}_$applyConvolutionFilter(t,e,i,s,r,n,a,h,o,_,l,c){const $=t.width,u=t.height,d=this._$frameBufferManager.createTextureAttachment($,u);this._$bind(d),this._$frameBufferManager.textureManager.bind0(t,!0);const g=this._$shaderList.filterShaderVariants,f=g.getConvolutionFilterShader(e,i,a,h);g.setConvolutionFilterUniform(f.uniform,$,u,s,r,n,h,o,_,l,c),this.blend.reset(),f._$drawImage()}_$applyDisplacementMapFilter(t,e,i,s,r,n,a,h,o,_,l,c,$,u){const d=t.width,g=t.height,f=this._$frameBufferManager.createTextureAttachment(d,g);this._$bind(f),r||(r={x:0,y:0});const m=this._$frameBufferManager.createTextureFromImage(e);this._$frameBufferManager.textureManager.bind01(t,m);const p=this._$shaderList.filterShaderVariants,x=p.getDisplacementMapFilterShader(n,a,_);p.setDisplacementMapFilterUniform(x.uniform,e.width,e.height,i,s,r.x,r.y,h,o,_,l,c,$,u),this.blend.reset(),x._$drawImage(),this._$frameBufferManager.releaseTexture(m)}_$startLayer(t){this._$positions.push(t),this._$blends.push(this._$isLayer),this._$isLayer=!0}_$endLayer(){const t=this._$positions.pop();t&&B(t),this._$isLayer=!!this._$blends.pop()}_$saveAttachment(t,e,i=!1){this.drawInstacedArray();const s=this._$frameBufferManager;this._$attachmentArray.push(s.currentAttachment),this._$bind(s.createCacheAttachment(t,e,i))}_$restoreAttachment(t=!1){const e=this._$frameBufferManager;e.releaseAttachment(e.currentAttachment,t),this._$bind(this._$attachmentArray.pop())}getCurrentPosition(){return this._$positions[this._$positions.length-1]}textureScale(t,e){const i=r.max(t,e);return i>this._$maxTextureSize?this._$maxTextureSize/i:1}}class ne extends gt{constructor(){super(),this._$recodes=null,this._$maxAlpha=0,this._$canDraw=!1,this._$uniqueKey="",this._$cacheKeys=U(),this._$cacheParams=U(0,0,0),this._$bitmapId=0,this._$mode="shape"}_$clip(t,e){if(!this._$recodes)return;const i=this._$getBounds(),n=q(i,e);B(i);const a=r.ceil(r.abs(n.xMax-n.xMin)),h=r.ceil(r.abs(n.yMax-n.yMin));switch(B(n),!0){case 0===a:case 0===h:case a===-1/0:case h===-1/0:case a===s:case h===s:return}t.reset(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),this._$runCommand(t,this._$recodes,null,!0),t.clip()}_$createCacheKey(){if(!this._$recodes)return"";let t=0;for(let e=0;e0&&this._$canApply(a);let T=F(0,m,0,p);if(v&&a)for(let t=0;tM.width||f-T.yMin>M.height)return void B(T);if(0>d+T.xMax||0>f+T.yMax)return void B(T);if(B(T),""===this._$uniqueKey&&(!l&&this._$loaderInfoId>-1&&this._$characterId>-1?this._$uniqueKey=`${this._$loaderInfoId}@${this._$characterId}`:this._$uniqueKey=this._$createCacheKey()),"bitmap"===this._$mode)this._$cacheKeys.length||(this._$cacheKeys=rt.generateKeys(this._$uniqueKey));else if(!this._$cacheKeys.length||this._$cacheParams[0]!==x||this._$cacheParams[1]!==b||this._$cacheParams[2]!==i[7]){const t=U();t[0]=x,t[1]=b,this._$cacheKeys=rt.generateKeys(this._$uniqueKey,t,i),D(t),this._$cacheParams[0]=x,this._$cacheParams[1]=b,this._$cacheParams[2]=i[7]}if(t.cachePosition=rt.get(this._$cacheKeys),!t.cachePosition){const s=A.currentAttachment;s&&s.mask&&t.stopStencil();let n=0,a=0;if("shape"===this._$mode){n=r.ceil(r.abs(c.xMax-c.xMin)*x),a=r.ceil(r.abs(c.yMax-c.yMin)*b);const e=t._$getTextureScale(n,a);e<1&&(n*=e,a*=e)}else n=r.ceil(r.abs(c.xMax-c.xMin)),a=r.ceil(r.abs(c.yMax-c.yMin));if(t.cachePosition=A.createCachePosition(n,a),t.bindRenderBuffer(t.cachePosition),t.reset(),"shape"===this._$mode?t.setTransform(x,0,0,b,-c.xMin*x,-c.yMin*b):t.setTransform(1,0,0,1,-c.xMin,-c.yMin),l){const i=le.scaleX,s=P(i,0,0,i,0,0),n=H(s,_);N(s);const a=this._$matrixBase,h=P(a[0],a[1],a[2],a[3],a[4]*i-d,a[5]*i-f),o=H(h,n),l=o[4]-(e[4]-d),$=o[5]-(e[5]-f);N(o);const u=q(c,n),g=+u.xMax,m=+u.xMin,p=+u.yMax,x=+u.yMin,b=r.ceil(r.abs(g-m)),v=r.ceil(r.abs(p-x));B(u),t.grid.enable(m,x,b,v,c,this._$scale9Grid,i,n[0],n[1],n[2],n[3],n[4],n[5],h[0],h[1],h[2],h[3],h[4]-l,h[5]-$),N(n),N(h)}this._$runCommand(t,this._$recodes,i,!1),l&&t.grid.disable(),A.transferTexture(t.cachePosition),rt.set(this._$cacheKeys,t.cachePosition),t._$bind(s)}let y=0,E=0;if(v&&a){const i=this._$createBitmapTexture(t,t.cachePosition,x,b,m,p),s=this._$drawFilter(t,e,a,m,p,i);s.offsetX&&(y=s.offsetX),s.offsetY&&(E=s.offsetY),t.cachePosition=s}if(v||"bitmap"!==this._$mode){const i=r.atan2(e[1],e[0]),s=r.atan2(-e[2],e[3]);if(v||!i&&!s)t.setTransform(1,0,0,1,d-y,f-E);else{const n=c.xMin*x,a=c.yMin*b,h=r.cos(i),o=r.sin(i),_=r.cos(s),l=r.sin(s);t.setTransform(h,o,-l,_,n*h-a*l+e[4],n*o+a*_+e[5])}}else t.setTransform(e[0],e[1],e[2],e[3],c.xMin*e[0]+c.yMin*e[2]+e[4],c.xMin*e[1]+c.yMin*e[3]+e[5]);t.cachePosition&&(t.globalAlpha=o,t.imageSmoothingEnabled="shape"===this._$mode,t.globalCompositeOperation=n,t.drawInstance(d-y,f-E,u,g,i),t.cachePosition=null),B(c)}setupStroke(t,e,i,s,r){switch(t.lineWidth=e,i){case 0:t.lineCap="none";break;case 1:t.lineCap="round";break;case 2:t.lineCap="square"}switch(s){case 0:t.lineJoin="bevel";break;case 1:t.lineJoin="miter";break;case 2:t.lineJoin="round"}t.miterLimit=r}createGradientStyle(t,e,i,s,n,a,h,o=null){let _,l="pad";switch(n){case 0:l="reflect";break;case 1:l="repeat"}if(0===e){const e=(t=>{const e=-819.2*t[0]-819.2*t[2]+t[4],i=819.2*t[0]-819.2*t[2]+t[4],s=-819.2*t[0]+819.2*t[2]+t[4],n=-819.2*t[1]-819.2*t[3]+t[5],a=819.2*t[1]-819.2*t[3]+t[5];let h=s-e,o=-819.2*t[1]+819.2*t[3]+t[5]-n;const _=r.sqrt(h*h+o*o);_?(h/=_,o/=_):(h=0,o=0);const l=(i-e)*h+(a-n)*o;return w(e+l*h,n+l*o,i,a)})(s);_=t.createLinearGradient(e[0],e[1],e[2],e[3],a?"rgb":"linearRGB",l)}else t.save(),t.transform(s[0],s[1],s[2],s[3],s[4],s[5]),_=t.createRadialGradient(0,0,0,0,0,819.2,a?"rgb":"linearRGB",l,h);for(let t=0;t-1&&this._$characterId>-1&&rt.removeCache(`${this._$loaderInfoId}@${this._$characterId}`))}}class ae extends ne{_$clip(t,e){let i=e;const n=this._$matrix;1===n[0]&&0===n[1]&&0===n[2]&&1===n[3]&&0===n[4]&&0===n[5]||(i=H(e,n));const a=this._$getBounds(),h=q(a,i);B(a);const o=r.ceil(r.abs(h.xMax-h.xMin)),_=r.ceil(r.abs(h.yMax-h.yMin));switch(B(h),!0){case 0===o:case 0===_:case o===-1/0:case _===-1/0:case o===s:case _===s:return}super._$clip(t,i),i!==e&&N(i)}_$draw(t,e,i){if(!this._$visible||!this._$maxAlpha||!this._$canDraw)return;let s=i;const r=this._$colorTransform;if(1===r[0]&&1===r[1]&&1===r[2]&&1===r[3]&&0===r[4]&&0===r[5]&&0===r[6]&&0===r[7]||(s=W(i,r)),!G(s[3]+s[7]/255,0,1,0))return void(s!==i&&L(s));let n=e;const a=this._$matrix;1===a[0]&&0===a[1]&&0===a[2]&&1===a[3]&&0===a[4]&&0===a[5]||(n=H(e,a)),super._$draw(t,n,s,this._$blendMode,this._$filters),n!==e&&N(n),s!==i&&L(s)}_$remove(){this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$recodes=null,super._$remove(),ce.push(this)}}class he extends gt{constructor(){super(),this._$background=!1,this._$backgroundColor=16777215,this._$border=!1,this._$borderColor=0,this._$wordWrap=!1,this._$textData=U(),this._$textAreaActive=!1,this._$thickness=0,this._$thicknessColor=0,this._$limitWidth=0,this._$limitHeight=0,this._$autoSize="none",this._$widthTable=U(),this._$heightTable=U(),this._$objectTable=U(),this._$textHeightTable=U(),this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$maxScrollV=null,this._$scrollV=1,this._$textHeight=0,this._$verticalAlign="top",this._$cacheKeys=U(),this._$cacheParams=U(0,0,0)}get width(){const t=q(this._$getBounds(null),this._$matrix),e=r.abs(t.xMax-t.xMin);switch(B(t),!0){case 0===e:case e===s:case e===-1/0:return 0;default:return e}}get height(){const t=q(this._$getBounds(null),this._$matrix),e=r.abs(t.yMax-t.yMin);switch(B(t),e){case 0:case s:case-1/0:return 0;default:return e}}get maxScrollV(){if(null===this._$maxScrollV){this._$maxScrollV=1;const t=this._$textHeightTable.length,e=this.height;if(e>this._$textHeight)return this._$maxScrollV;let i=0,s=0;for(;t>s&&(i+=this._$textHeightTable[s++],!(i>e));)this._$maxScrollV++}return this._$maxScrollV}_$clip(t,e){const i=this._$getBounds(),s=i.xMax,n=i.xMin,a=i.yMax,h=i.yMin;B(i);const o=r.ceil(r.abs(s-n)),_=r.ceil(r.abs(a-h));if(!o||!_)return;let l=e;const c=this._$matrix;1===c[0]&&0===c[1]&&0===c[2]&&1===c[3]&&0===c[4]&&0===c[5]||(l=H(e,c)),t.reset(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(o,0),t.lineTo(o,_),t.lineTo(0,_),t.lineTo(0,0),t.clip(),l!==e&&N(l)}_$draw(t,e,i){if(!this._$visible||this._$textAreaActive)return;if(!this._$background&&!this._$border&&2>this._$textData.length)return;let n=i;const a=this._$colorTransform;1===a[0]&&1===a[1]&&1===a[2]&&1===a[3]&&0===a[4]&&0===a[5]&&0===a[6]&&0===a[7]||(n=W(i,a));const o=G(n[3]+n[7]/255,0,1);if(!o)return;let _=e;const l=this._$matrix;1===l[0]&&0===l[1]&&0===l[2]&&1===l[3]&&0===l[4]&&0===l[5]||(_=H(e,l));const c=this._$getBounds(null);c.xMin-=this._$thickness,c.xMax+=this._$thickness,c.yMin-=this._$thickness,c.yMax+=this._$thickness;const $=q(c,_),u=+$.xMax,d=+$.xMin,g=+$.yMax,f=+$.yMin;B($);const m=r.ceil(r.abs(u-d)),p=r.ceil(r.abs(g-f));switch(!0){case 0===m:case 0===p:case m===-1/0:case p===-1/0:case m===s:case p===s:return}let x=+r.sqrt(_[0]*_[0]+_[1]*_[1]);if(!h.isInteger(x)){const t=x.toString(),e=t.indexOf("e");-1!==e&&(x=+t.slice(0,e)),x=+x.toFixed(4)}let b=+r.sqrt(_[2]*_[2]+_[3]*_[3]);if(!h.isInteger(b)){const t=b.toString(),e=t.indexOf("e");-1!==e&&(b=+t.slice(0,e)),b=+b.toFixed(4)}const v=this._$filters,T=null!==v&&v.length>0&&this._$canApply(v);let A=F(0,m,0,p);if(T&&v)for(let t=0;ty.width||f-A.yMin>y.height)return void B(A);if(0>d+A.xMax||0>f+A.yMax)return void B(A);if(B(A),this._$isUpdated()&&(rt.removeCache(this._$instanceId),t.cachePosition=null,this._$cacheKeys.length=0),!this._$cacheKeys.length||this._$cacheParams[0]!==x||this._$cacheParams[1]!==b||this._$cacheParams[2]!==i[7]){const t=U(x,b);this._$cacheKeys=rt.generateKeys(this._$instanceId,t),D(t),this._$cacheParams[0]=x,this._$cacheParams[1]=b,this._$cacheParams[2]=i[7]}if(t.cachePosition=rt.get(this._$cacheKeys),!t.cachePosition){const s=r.min(1,r.max(x,b)),a=r.ceil(r.abs(c.xMax-c.xMin)*x),h=r.ceil(r.abs(c.yMax-c.yMin)*b);n[3]=1;const o=new OffscreenCanvas(a+2*s,h+2*s).getContext("2d");if(!o)return;if(this._$background||this._$border){if(o.beginPath(),o.moveTo(0,0),o.lineTo(a,0),o.lineTo(a,h),o.lineTo(0,h),o.lineTo(0,0),this._$background){const t=Z(this._$backgroundColor),e=r.max(0,r.min(255*t.A*i[3]+i[7],255))/255;o.fillStyle=`rgba(${t.R},${t.G},${t.B},${e})`,o.fill()}if(this._$border){const t=Z(this._$borderColor),e=r.max(0,r.min(255*t.A*i[3]+i[7],255))/255;o.lineWidth=s,o.strokeStyle=`rgba(${t.R},${t.G},${t.B},${e})`,o.stroke()}}o.save(),o.beginPath(),o.moveTo(2,2),o.lineTo(a-2,2),o.lineTo(a-2,h-2),o.lineTo(2,h-2),o.lineTo(2,2),o.clip(),o.beginPath(),o.setTransform(x,0,0,b,0,0),this._$doDraw(o,e,i,a/x),o.restore();const _=M.createCachePosition(m,p),l=M.createTextureFromCanvas(o.canvas);t.drawTextureFromRect(l,_),t.cachePosition=_,rt.set(this._$cacheKeys,_)}let E=!1,C=0,S=0;if(v&&v.length&&this._$canApply(v)){E=!0;const e=this._$drawFilter(t,_,v,m,p);e.offsetX&&(C=e.offsetX),e.offsetY&&(S=e.offsetY),t.cachePosition=e}const w=r.atan2(_[1],_[0]),R=r.atan2(-_[2],_[3]);if(E||!w&&!R)t.setTransform(1,0,0,1,d-C,f-S);else{const e=c.xMin*x,i=c.yMin*b,s=r.cos(w),n=r.sin(w),a=r.cos(R),h=r.sin(R);t.setTransform(s,n,-h,a,e*s-i*h+_[4],e*n+i*a+_[5])}t.cachePosition&&(t.globalAlpha=o,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=this._$blendMode,t.drawInstance(d-C,f-S,u,g,i),t.cachePosition=null),B(c),_!==e&&N(_),n!==i&&L(n)}_$doDraw(t,e,i,s){const n=this.width,a=this.height;let h=0,o=0,_=0,l=0;if("top"!==this._$verticalAlign&&this.height>this._$textHeight)switch(this._$verticalAlign){case"middle":l=(this.height-this._$textHeight+2)/2;break;case"bottom":l=this.height-this._$textHeight+2}const c=this._$textData.length;for(let $=0;$a||u>n))continue;const d=c.textFormat,g=Z(c.textFormat._$color),f=r.max(0,r.min(255*g.A*i[3]+i[7],255))/255;if(t.fillStyle=`rgba(${g.R},${g.G},${g.B},${f})`,this._$thickness){const e=Z(this._$thicknessColor),s=r.max(0,r.min(255*e.A*i[3]+i[7],255))/255;t.lineWidth=this._$thickness,t.strokeStyle=`rgba(${e.R},${e.G},${e.B},${s})`}const m=c.yIndex;switch(c.mode){case"break":case"wrap":if(_++,this._$scrollV>_)continue;if(o+=this._$textHeightTable[m],h=this._$getAlignOffset(this._$objectTable[m],s),d._$underline){const s=c.textFormat._$size/12,n=Z(d._$color),a=r.max(0,r.min(255*n.A*i[3]+i[7],255))/255;t.lineWidth=r.max(1,1/r.min(e[0],e[3])),t.strokeStyle=`rgba(${n.R},${n.G},${n.B},${a})`,t.beginPath(),t.moveTo(h,l+o-s),t.lineTo(h+this._$widthTable[m],l+o-s),t.stroke()}break;case"text":{if(this._$scrollV>_)continue;let e=o-this._$heightTable[0];_e||(e+=c.textFormat._$size/12*2),t.beginPath(),t.textBaseline="top",t.font=tt(d._$font,d._$size,d._$italic,d._$bold),this._$thickness&&t.strokeText(c.text,u,l+e),t.fillText(c.text,u,l+e)}break;case"image":if(!c.loaded)continue;t.beginPath(),t.drawImage(c.image,c.hspace,l+c.y,c.width,c.height)}}}_$getAlignOffset(t,e){const i=this._$widthTable[t.yIndex],s=t.textFormat,n=s._$blockIndent+s._$leftMargin>0?s._$blockIndent+s._$leftMargin:0;switch(!0){case!this._$wordWrap&&i>e:return r.max(0,n);case"center"===s._$align:case"center"===this._$autoSize:return r.max(0,e/2-n-s._$rightMargin-i/2);case"right"===s._$align:case"right"===this._$autoSize:return r.max(0,e-n-i-s._$rightMargin-2);default:return r.max(0,n+2)}}_$remove(){this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$textData.length=0,this._$widthTable.length=0,this._$heightTable.length=0,this._$objectTable.length=0,this._$textHeightTable.length=0,this._$textAreaActive=!1,super._$remove(),$e.push(this)}_$updateProperty(t){this._$textAreaActive=!!t.textAreaActive,this._$textData.length=0,this._$widthTable.length=0,this._$heightTable.length=0,this._$objectTable.length=0,this._$textHeightTable.length=0,this._$textData.push(...t.textData),this._$widthTable.push(...t.widthTable),this._$heightTable.push(...t.heightTable),this._$objectTable.push(...t.objectTable),this._$textHeightTable.push(...t.textHeightTable),this._$wordWrap=t.wordWrap,this._$limitWidth=t.limitWidth,this._$limitHeight=t.limitHeight,this._$autoSize=t.autoSize,this._$scrollV=t.scrollV,this._$textHeight=t.textHeight,this._$verticalAlign=t.verticalAlign,this._$border=t.border,this._$border&&(this._$borderColor=t.borderColor),this._$background=t.background,this._$background&&(this._$backgroundColor=t.backgroundColor),"thickness"in t&&(this._$thickness=t.thickness,this._$thicknessColor=t.thicknessColor)}_$update(t){super._$update(t),this._$textAreaActive=!!t.textAreaActive,this._$xMin=t.xMin,this._$yMin=t.yMin,this._$xMax=t.xMax,this._$yMax=t.yMax,t.textData&&this._$updateProperty(t)}}class oe extends gt{constructor(){super(),this._$imageBitmap=null,this._$context=null,this._$smoothing=!0,this._$cacheKeys=U(),this._$cacheParams=U(0,0,0)}_$clip(t,e){const i=this._$xMax,s=this._$yMax;if(!i||!s)return;let r=e;const n=this._$matrix;1===n[0]&&0===n[1]&&0===n[2]&&1===n[3]&&0===n[4]&&0===n[5]||(r=H(e,n)),t.reset(),t.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),t.clip(),r!==e&&N(r)}_$draw(t,e,i){if(!this._$visible||!this._$imageBitmap||!this._$context)return;let n=i;const a=this._$colorTransform;1===a[0]&&1===a[1]&&1===a[2]&&1===a[3]&&0===a[4]&&0===a[5]&&0===a[6]&&0===a[7]||(n=W(i,a));const o=G(n[3]+n[7]/255,0,1,0);if(!o)return void(n!==i&&L(n));let _=e;const l=this._$matrix;1===l[0]&&0===l[1]&&0===l[2]&&1===l[3]&&0===l[4]&&0===l[5]||(_=H(e,l));const c=this._$getBounds();B(c);const $=q(c,_),u=+$.xMax,d=+$.xMin,g=+$.yMax,f=+$.yMin;B($);const m=r.ceil(r.abs(u-d)),p=r.ceil(r.abs(g-f));switch(!0){case 0===m:case 0===p:case m===-1/0:case p===-1/0:case m===s:case p===s:return}let x=+r.sqrt(_[0]*_[0]+_[1]*_[1]);if(!h.isInteger(x)){const t=x.toString(),e=t.indexOf("e");-1!==e&&(x=+t.slice(0,e)),x=+x.toFixed(4)}let b=+r.sqrt(_[2]*_[2]+_[3]*_[3]);if(!h.isInteger(b)){const t=b.toString(),e=t.indexOf("e");-1!==e&&(b=+t.slice(0,e)),b=+b.toFixed(4)}const v=this._$filters,T=null!==v&&v.length>0&&this._$canApply(v);let A=F(0,m,0,p);if(T&&v)for(let t=0;ty.width||f-A.yMin>y.height)return void B(A);if(0>d+A.xMax||0>f+A.yMax)return void B(A);if(B(A),!this._$cacheKeys.length||this._$cacheParams[0]!==x||this._$cacheParams[1]!==b||this._$cacheParams[2]!==i[7]){const t=U();t[0]=x,t[1]=b,this._$cacheKeys=rt.generateKeys(this._$instanceId,t,i),D(t),this._$cacheParams[0]=x,this._$cacheParams[1]=b,this._$cacheParams[2]=i[7]}if(t.cachePosition=rt.get(this._$cacheKeys),!t.cachePosition){const e=r.ceil(r.abs(this._$xMax-this._$xMin)),i=r.ceil(r.abs(this._$yMax-this._$yMin)),s=M.createCachePosition(e,i);t.cachePosition=s,rt.set(this._$cacheKeys,s)}this._$context.drawImage(this._$imageBitmap,0,0);const E=M.textureManager._$createFromElement(this._$imageBitmap.width,this._$imageBitmap.height,this._$context.canvas,this._$smoothing);let C=0,S=0;if(T&&v){const e=M.currentAttachment,i=M.createCacheAttachment(m,p);t._$bind(i),t.reset();const s=P(x,0,0,b,m/2,p/2),r=P(1,0,0,1,-E.width/2,-E.height/2),n=H(s,r);N(s),N(r),t.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t.drawImage(E,0,0,E.width,E.height);const a=M.getTextureFromCurrentAttachment();t._$bind(e),M.releaseAttachment(i),t.drawTextureFromRect(E,t.cachePosition);const h=this._$drawFilter(t,_,v,m,p,a);h.offsetX&&(C=h.offsetX),h.offsetY&&(S=h.offsetY),t.cachePosition=h,t.setTransform(1,0,0,1,d-C,f-S)}else t.drawTextureFromRect(E,t.cachePosition),t.setTransform(_[0],_[1],_[2],_[3],_[4],_[5]);t.cachePosition&&(t.globalAlpha=o,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=this._$blendMode,t.drawInstance(d-C,f-S,u,g,i),t.cachePosition=null),_!==e&&N(_),n!==i&&L(n)}_$remove(){this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$context=null,this._$imageBitmap=null,this._$smoothing=!0,super._$remove(),de.push(this)}_$updateProperty(t){if(this._$xMin=t.xMin,this._$yMin=t.yMin,this._$xMax=t.xMax,this._$yMax=t.yMax,this._$imageBitmap=t.imageBitmap,this._$smoothing=t.smoothing,!this._$context&&this._$imageBitmap){const t=new c(this._$imageBitmap.width,this._$imageBitmap.height);this._$context=t.getContext("2d")}}_$update(t){super._$update(t),this._$updateProperty(t)}}let _e=!1;const le=new class{constructor(){this._$instances=new Map,this._$matrix=P(1,0,0,1,0,0),this._$width=0,this._$height=0,this._$stage=new ft,this._$canvas=null,this._$context=null,this._$attachment=null}get instances(){return this._$instances}get context(){return this._$context}get scaleX(){return this._$matrix[0]}stop(){rt.reset()}_$initialize(e,i){let s=0;var r,n;this._$setStage(e[s++]),n=1===e[s++],_e=n,r=e[s++],t=r,this._$canvas=i;const a=i.getContext("webgl2",{stencil:!0,premultipliedAlpha:!0,antialias:!1,depth:!1,preserveDrawingBuffer:!0});if(a){const t=new re(a,e[s++]);this._$context=t,rt.context=t}}_$setBackgroundColor(t){if(!this._$context)return;const e=t[0];if(-1===e)this._$context._$setColor(0,0,0,0);else{const t={A:(i=e)>>>24,R:(16711680&i)>>16,G:(65280&i)>>8,B:255&i};this._$context._$setColor(t.R/255,t.G/255,t.B/255,1)}var i}_$bitmapDraw(t,e,i,s){const r=this._$context;if(!r)return;r._$bind(this._$attachment),r.reset(),r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,this._$width,this._$height),r.beginPath(),t._$draw(r,e,i),r.frameBuffer.transferToMainTexture();const n=s.getContext("2d");n&&this._$canvas&&n.drawImage(this._$canvas,0,0)}_$draw(){if(!this._$width||!this._$height)return;const t=this._$context;t&&(t.reset(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,this._$width,this._$height),t.beginPath(),this._$stage._$draw(t,this._$matrix,m),this._$stage._$updated=!1,t.drawInstacedArray(),t.frameBuffer.transferToMainTexture())}_$resize(t){let e=0;const i=t[e++],s=t[e++];if(this._$width=i,this._$height=s,!this._$canvas)return;if(this._$canvas.width===i&&this._$canvas.height===s)return;const r=this._$context;if(!r)return;const n=t[e++];this._$matrix[0]=n,this._$matrix[3]=n,this._$matrix[4]=t[e++],this._$matrix[5]=t[e++],this._$stage._$updated=!0,rt.reset(),r.clearInstacedArray(),this._$canvas.width=i,this._$canvas.height=s,r._$gl.viewport(0,0,i,s);const a=r.frameBuffer;this._$attachment&&(a.unbind(),a.releaseAttachment(this._$attachment,!0)),this._$attachment=a.createCacheAttachment(i,s,!0),r.setMaxSize(i,s),r._$bind(this._$attachment)}_$setStage(t){this._$stage._$instanceId=t,this._$instances.set(t,this._$stage)}_$updateStage(){this._$stage._$updated=!0}_$createDisplayObjectContainer(t){const e=ge();let i=0;e._$instanceId=t[i++],e._$parentId=t[i++],this._$setProperty(e,t,2),this._$instances.set(e._$instanceId,e)}_$setProperty(t,e,i){t._$visible=1===e[i++],t._$depth=e[i++],t._$clipDepth=e[i++],t._$isMask=1===e[i++],1===e[i++]?(t._$maskId=e[i++],t._$maskMatrix||(t._$maskMatrix=P()),t._$maskMatrix[0]=e[i++],t._$maskMatrix[1]=e[i++],t._$maskMatrix[2]=e[i++],t._$maskMatrix[3]=e[i++],t._$maskMatrix[4]=e[i++],t._$maskMatrix[5]=e[i++]):(t._$maskId=-1,t._$maskMatrix&&(N(t._$maskMatrix),t._$maskMatrix=null),i+=7),t._$visible?(t._$matrix[0]=e[i++],t._$matrix[1]=e[i++],t._$matrix[2]=e[i++],t._$matrix[3]=e[i++],t._$matrix[4]=e[i++],t._$matrix[5]=e[i++],t._$colorTransform[0]=e[i++],t._$colorTransform[1]=e[i++],t._$colorTransform[2]=e[i++],t._$colorTransform[3]=e[i++],t._$colorTransform[4]=e[i++],t._$colorTransform[5]=e[i++],t._$colorTransform[6]=e[i++],t._$colorTransform[7]=e[i++]):(i+=6,i+=8),t._$blendMode=st(e[i++]),e[i++]?t._$scale9Grid={x:e[i++],y:e[i++],w:e[i++],h:e[i++]}:t._$scale9Grid=null,t._$blendMode=st(e[i++]),e[i++]?t._$scale9Grid={x:e[i++],y:e[i++],w:e[i++],h:e[i++]}:t._$scale9Grid=null}_$registerShapeRecodes(t,e){this._$instances.has(t)||this._$instances.set(t,pe()),this._$instances.get(t)._$recodes=e}_$createShape(t){let e=0;const i=t[e++];this._$instances.has(i)||this._$instances.set(i,pe());const s=this._$instances.get(i);s._$instanceId=i,s._$parentId=t[e++],s._$maxAlpha=t[e++],s._$canDraw=1===t[e++],s._$xMin=t[e++],s._$yMin=t[e++],s._$xMax=t[e++],s._$yMax=t[e++],s._$characterId=t[e++],s._$loaderInfoId=t[e++],this._$setProperty(s,t,10)}_$createVideo(t){const e=me();t.characterId&&(e._$characterId=t.characterId),"loaderInfoId"in t&&(e._$loaderInfoId=t.loaderInfoId||0),e._$updateProperty(t),this._$instances.set(e._$instanceId,e)}_$createTextField(t){const e=fe();e._$xMin=t.xMin||0,e._$yMin=t.yMin||0,e._$xMax=t.xMax||0,e._$yMax=t.yMax||0,t.characterId&&(e._$characterId=t.characterId),"loaderInfoId"in t&&(e._$loaderInfoId=t.loaderInfoId||0),e._$updateProperty(t),this._$instances.set(e._$instanceId,e)}},ce=[],$e=[],ue=[],de=[],ge=()=>ue.pop()||new ft,fe=()=>$e.pop()||new he,me=()=>de.pop()||new oe,pe=()=>ce.pop()||new ae;const xe=new class{constructor(){this.state="deactivate",this.queue=[],this._$options=[]}execute(){this.state="active";let t=!0;for(;this.queue.length;){const e=this.queue.shift();if(console.log(e),e){switch(t=!0,e.command){case"draw":le._$draw();break;case"setProperty":if(!le.instances.has(e.instanceId))continue;break;case"setChildren":{t=!1;const i=e.buffer,s=le.instances;if(!s.has(i[0]))continue;const r=s.get(i[0]);r._$doChanged(),r._$children=i.subarray(1)}break;case"remove":{const t=le.instances;if(!t.has(e.instanceId))continue;t.get(e.instanceId)._$remove(),t.delete(e.instanceId)}break;case"createShape":le._$createShape(e.buffer);break;case"createDisplayObjectContainer":le._$createDisplayObjectContainer(e.buffer);break;case"createTextField":le._$createTextField(e);break;case"createVideo":le._$createVideo(e);break;case"resize":le._$resize(e.buffer);break;case"initialize":le._$initialize(e.buffer,e.canvas);break;case"setBackgroundColor":le._$setBackgroundColor(e.buffer);break;case"stop":le.stop();break;case"removeCache":rt.removeCache(e.id);break;case"bitmapDraw":{const t=le.instances;if(!t.has(e.sourceId))continue;const i=t.get(e.sourceId),s=new c(e.width,e.height);le._$bitmapDraw(i,e.matrix||f,e.colorTransform||m,s);const r=s.transferToImageBitmap();globalThis.postMessage({command:"bitmapDraw",sourceId:e.sourceId,imageBitmap:r},[r])}break;default:if(e.command.indexOf("shapeRecodes")>-1){t=!1;const i=+e.command.split("@")[1];le._$registerShapeRecodes(i,e.buffer)}}e.buffer&&t&&(this._$options.length=0)}}this.state="deactivate"}};self.addEventListener("message",(t=>{return e=void 0,i=void 0,r=function*(){xe.queue.push(t.data),"deactivate"===xe.state&&xe.execute()},new((s=void 0)||(s=Promise))((function(t,n){function a(t){try{o(r.next(t))}catch(t){n(t)}}function h(t){try{o(r.throw(t))}catch(t){n(t)}}function o(e){var i;e.done?t(e.value):(i=e.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,h)}o((r=r.apply(e,i||[])).next())}));var e,i,s,r}))})();'],{type:"text/javascript"}))):null,Mr=null,Mr&&(Sr=t=>{t._$createWorkerInstance(),t._$postProperty();const e=t._$needsChildren?t._$getChildren():t._$children,i=ht();for(let t=0;t{t._$removeWorkerInstance();const e=t._$needsChildren?t._$getChildren():t._$children;for(let t=0;t{const e=navigator.userAgentData;if(e)e.getHighEntropyValues(["platform","mobile"]).then((e=>{const i=e.brands;for(let t=0;t-1,Js=e.indexOf("iPhone")>-1||e.indexOf("iPod")>-1,js=e.indexOf("Chrome")>-1,Ks=e.indexOf("Firefox")>-1,Ws=-1===e.indexOf("Chrome")&&e.indexOf("Safari")>-1,Zs=Qs||Js,t()}}))};"next2d"in window||(console.log("%c Next2D Player %c 1.18.0 %c https://next2d.app","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),window.next2d=new class{constructor(t){this._$promises=t,this._$player=new ms,this.display=bs,this.events=xs,this.filters=vs,this.geom=Ts,this.media=ys,this.net=Es,this.text=As,this.ui=Ms}get player(){return this._$player}load(t,e){Promise.all(this._$promises).then((()=>{if(ot(this._$promises),"develop"===t){const e=location.search.slice(1).split("&")[0];if(!e)return;t=`${location.origin}/${e}`}if(!t)return;"/"===t.charAt(1)&&(t=t.slice(1)),e&&"base"in e||!(t.indexOf("//")>-1)||(this._$player.base=t),this._$player.setOptions(e),this._$player._$initialize();const i=new de;i.contentLoaderInfo.addEventListener(Lt.IO_ERROR,(t=>{t.target&&t.target.removeEventListener(Lt.IO_ERROR,t.listener),alert("Error: "+t.text)})),i.contentLoaderInfo.addEventListener(It.COMPLETE,(t=>{const e=t.target,i=this._$player;if(e.removeEventListener(It.COMPLETE,t.listener),e._$data){const t=e._$data.stage;i.bgColor=t.bgColor,i._$setBackgroundColor(t.bgColor),i.stage.addChild(e.content),i.width=t.width,i.height=t.height,i.stage._$frameRate=dt(+t.fps,1,60,60)}i._$resize()})),i.load(new St(t))}))}createRootMovieClip(t=240,e=240,i=24,s=null){return r=this,n=void 0,h=function*(){yield Promise.all(this._$promises),ot(this._$promises);const r=this._$player;r.width=0|t,r.height=0|e,r.mode="create",r.stage._$frameRate=0|i,r.setOptions(s),r._$initialize();const n=r.stage.addChild(new $e);return r._$loadStatus=ms.LOAD_END,r.play(),n},new((a=void 0)||(a=Promise))((function(t,e){function i(t){try{o(h.next(t))}catch(t){e(t)}}function s(t){try{o(h.throw(t))}catch(t){e(t)}}function o(e){var r;e.done?t(e.value):(r=e.value,r instanceof a?r:new a((function(t){t(r)}))).then(i,s)}o((h=h.apply(r,n||[])).next())}));var r,n,a,h}}([new Promise((t=>{if("loading"===document.readyState){const e=()=>{window.removeEventListener("DOMContentLoaded",e),kr().then((()=>{cr()._$initializeCanvas(),t()}))};window.addEventListener("DOMContentLoaded",e)}else kr().then((()=>{cr()._$initializeCanvas(),t()}))}))]))})(); \ No newline at end of file +const on="__next2d__",Ze=Math.min(2,window.devicePixelRatio),Vt=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)},Er=document.createElement("canvas");Er.width=Er.height=1;const Tr=Er.getContext("2d");let ci=null;const _s=e=>{ci=e};let li=null;const Ds=e=>{li=e},ui=()=>li,vt=()=>ci,ft=new Float32Array([1,0,0,1,0,0]),gt=new Float32Array([1,0,0,1,0,0]),ie={x:0,y:0,pointer:"",hit:null};let hi=null;const Cn=e=>{hi=e},fi=()=>hi,Ls=(e,t=1)=>{let r="";r+="-webkit-tap-highlight-color: rgba(0,0,0,0);",r+="backface-visibility: hidden;",r+="touch-action: none;",r+="user-select: none;",r+="-webkit-user-select: none;",r+="-webkit-touch-callout: none;",t>1&&(r+=`transform: scale(${1/t});`),e.width=1,e.height=1,e.setAttribute("style",r)},di=`(function(){"use strict";let ut=2048;const Xc=t=>{ut=Math.max(2048,t/2)};let bs=4;const Yc=t=>{bs=t};let p;const Wc=t=>{p=t};let O;const jc=t=>{O=t};let Pn=!1;const It=()=>{Pn||(Pn=!0,p.enable(p.SCISSOR_TEST))},yt=()=>{Pn&&(Pn=!1,p.disable(p.SCISSOR_TEST))};let An=!1;const Yr=()=>{An||(An=!0,p.enable(p.STENCIL_TEST))},Wr=()=>{An&&(An=!1,p.disable(p.STENCIL_TEST))},jr=(t,e,r,n=null)=>{const s=+t;return isNaN(s)&&n!==null?n:Math.min(Math.max(e,isNaN(s)?0:s),r)},li=[],Hr=(...t)=>{const e=li.pop()||[];return t.length&&e.push(...t),e},ui=(t=null)=>{t&&(t.length&&(t.length=0),li.push(t))},Fn=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),fi=[],hi=(t=0,e=0,r=0,n=0)=>{const s=fi.pop()||new Float32Array(4);return s[0]=t,s[1]=e,s[2]=r,s[3]=n,s},di=t=>{fi.push(t)},pi=[],xs=(t=0,e=0,r=0,n=0,s=0,o=0,i=0,l=0,c=0)=>{const u=pi.pop()||new Float32Array(9);return u[0]=t,u[1]=e,u[2]=r,u[3]=n,u[4]=s,u[5]=o,u[6]=i,u[7]=l,u[8]=c,u},Hc=t=>{pi.push(t)},mi=[],dr=(t=0,e=0,r=0,n=0,s=0,o=0)=>{const i=mi.pop()||new Float32Array(6);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i[4]=s,i[5]=o,i},Kr=t=>{mi.push(t)},ys=t=>{const e=1/(t[0]*t[4]-t[3]*t[1]),r=t[3]*t[7]-t[4]*t[6],n=t[1]*t[6]-t[0]*t[7];return xs(t[4]*e,0-t[1]*e,0,0-t[3]*e,t[0]*e,0,r*e,n*e,1)};let pt=0,mt=0;const Kc=(t,e)=>{pt=t,mt=e},qc=t=>{const e=-819.2*t[0]-819.2*t[2]+t[4],r=819.2*t[0]-819.2*t[2]+t[4],n=-819.2*t[0]+819.2*t[2]+t[4],s=-819.2*t[1]-819.2*t[3]+t[5],o=819.2*t[1]-819.2*t[3]+t[5],i=-819.2*t[1]+819.2*t[3]+t[5];let l=n-e,c=i-s;const u=Math.sqrt(l*l+c*c);u?(l=l/u,c=c/u):(l=0,c=0);const a=(r-e)*l+(o-s)*c;return hi(e+a*l,s+a*c,r,o)};let vt=1;const Qc=t=>{vt=t},Zc=(t,e)=>{const r=t[0],n=t[1],s=t[2],o=t[3],i=t[4],l=t[5],c=e[0],u=e[1],a=e[2],h=e[3],d=e[4],g=e[5];return dr(r*c+s*u,n*c+o*u,r*a+s*h,n*a+o*h,r*d+s*g+i,n*d+o*g+l)},Jc=()=>typeof crypto?.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)}),me=Hr(),Kt=Hr(),pr=(t=!1)=>{const e=t?6:9;me.length>=e&&Kt.push(me.slice(0)),me.length=0;const r=[];for(let n=0;n=e&&r.push(s)}return Kt.length=0,r},el=()=>{for(me.length=0;Kt.length;)ui(Kt.pop())},mr=(t,e,r)=>{me.push(t,e,r)},qr=(t,e)=>{const r=me.length,n=+me[r-3],s=+me[r-2];return t===n&&e===s},tl=()=>{if(me.length<3){me.length=0;return}Kt.push(me.slice(0)),me.length=0},wn=(t,e)=>{if(!me.length){mr(t,e,!1);return}qr(t,e)||(tl(),mr(t,e,!1))},rl=(t,e)=>{me.length||wn(t,e),!qr(t,e)&&mr(t,e,!1)},gi=(t,e,r,n)=>{me.length||wn(0,0),!qr(r,n)&&(mr(t,e,!0),mr(r,n,!1))},nl=()=>{if(me.length<7)return;const t=+me[0],e=+me[1];qr(t,e)||mr(t,e,!1)};let Re=new Float32Array(64),bi=0;const vs=.5,Ms=2,sl=8,ol=(t,e,r,n,s,o,i,l)=>{const c=3*r-2*t-i,u=3*n-2*e-l,a=3*s-2*i-t,h=3*o-2*l-e;return Math.max(c*c+u*u,a*a+h*h)},il=(t,e,r,n,s,o,i,l)=>{const c=ol(t,e,r,n,s,o,i,l);if(c{Re.length{bi=t},Ss=[];let $s=0;const xi=()=>{$s=0},Se=()=>($s>=Ss.length&&Ss.push(new Float32Array(8)),Ss[$s++]),ft=(t,e,r,n,s,o,i,l,c,u,a)=>{const h=1-c,d=h*t+c*r,g=h*e+c*n,m=h*r+c*s,f=h*n+c*o,b=h*s+c*i,x=h*o+c*l,y=h*d+c*m,P=h*g+c*f,S=h*m+c*b,M=h*f+c*x,$=h*y+c*S,T=h*P+c*M;u[0]=t,u[1]=e,u[2]=d,u[3]=g,u[4]=y,u[5]=P,u[6]=$,u[7]=T,a[0]=$,a[1]=T,a[2]=S,a[3]=M,a[4]=b,a[5]=x,a[6]=i,a[7]=l},Ye=(t,e,r,n,s,o,i,l,c,u)=>{const a=(3*r+3*s-t-i)*.25,h=(3*n+3*o-e-l)*.25;c[u]=a,c[u+1]=h,c[u+2]=i,c[u+3]=l},Mt=new Float32Array(8),St=new Float32Array(8),ll=(t,e,r,n,s,o,i,l)=>{const c=il(t,e,r,n,s,o,i,l),u=c*4;al(u);let a=0;if(c<=2)ft(t,e,r,n,s,o,i,l,.5,Mt,St),Ye(Mt[0],Mt[1],Mt[2],Mt[3],Mt[4],Mt[5],Mt[6],Mt[7],Re,a),a+=4,Ye(St[0],St[1],St[2],St[3],St[4],St[5],St[6],St[7],Re,a),a+=4;else if(c<=4){xi();const h=Se(),d=Se();ft(t,e,r,n,s,o,i,l,.5,h,d);const g=Se(),m=Se(),f=Se(),b=Se();ft(h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],.5,g,m),ft(d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],.5,f,b),Ye(g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],Re,a),a+=4,Ye(m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],Re,a),a+=4,Ye(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],Re,a),a+=4,Ye(b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7],Re,a),a+=4}else{xi();const h=Se(),d=Se();ft(t,e,r,n,s,o,i,l,.5,h,d);const g=Se(),m=Se(),f=Se(),b=Se();ft(h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],.5,g,m),ft(d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],.5,f,b);const x=Se(),y=Se(),P=Se(),S=Se(),M=Se(),$=Se(),T=Se(),w=Se();ft(g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],.5,x,y),ft(m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],.5,P,S),ft(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],.5,M,$),ft(b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7],.5,T,w),Ye(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],Re,a),a+=4,Ye(y[0],y[1],y[2],y[3],y[4],y[5],y[6],y[7],Re,a),a+=4,Ye(P[0],P[1],P[2],P[3],P[4],P[5],P[6],P[7],Re,a),a+=4,Ye(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],Re,a),a+=4,Ye(M[0],M[1],M[2],M[3],M[4],M[5],M[6],M[7],Re,a),a+=4,Ye($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],Re,a),a+=4,Ye(T[0],T[1],T[2],T[3],T[4],T[5],T[6],T[7],Re,a),a+=4,Ye(w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],Re,a),a+=4}return cl(a/4),{buffer:Re,count:bi}},Qr=(t,e,r,n,s,o)=>{if(me.length||wn(0,0),qr(s,o))return;const i=me.length,l=+me[i-3],c=+me[i-2],u=ll(l,c,t,e,r,n,s,o),a=u.buffer,h=u.count;for(let d=0;d{const n=r,s=r*.5522847498307936;Qr(t+n,e+s,t+s,e+n,t,e+n),Qr(t-s,e+n,t-n,e+s,t-n,e),Qr(t-n,e-s,t-s,e-n,t,e-n),Qr(t+s,e-n,t+n,e-s,t+n,e)},fl=(t,e,r,n,s)=>{t.$clearColorR=jr(e,0,1,0),t.$clearColorG=jr(r,0,1,0),t.$clearColorB=jr(n,0,1,0),t.$clearColorA=jr(s,0,1,0)},hl=(t,e,r,n)=>{p.clearColor(t,e,r,n),p.clear(p.COLOR_BUFFER_BIT|p.STENCIL_BUFFER_BIT),p.clearColor(0,0,0,0)},$t=[],yi=t=>{let e=-1,r=$t.length;for(;Math.abs(r-e)>1;){const n=Math.floor((r+e)/2);t<=$t[n].area?r=n:e=n}return r},dl=t=>{if($t.indexOf(t)>-1)return;const e=yi(t.area);t.dirty=!0,$t.splice(e,0,t)},ae=t=>{p.deleteTexture(t.resource)},et=[],pl=t=>{if(!(et.indexOf(t)>-1)){if(et.length>10){p.deleteRenderbuffer(t.resource);return}t.dirty=!0,et.push(t)}},Ts=[];let Tt;const ml=t=>{Tt=t.createFramebuffer()};let vi=null;const gl=t=>{vi=t.createFramebuffer()};let On=null;const bl=(t,e)=>{On=t.createFramebuffer(),t.bindFramebuffer(t.FRAMEBUFFER,On),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.resource,0),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,On)};let Bs=null;const Mi=t=>{Bs=t};let Ps=!1;const As=t=>{Ps=t};let Fs=null,Zr=null,Si=null,$i=null;const xl=t=>{Zr=t.createFramebuffer(),Fs=t.createFramebuffer(),Si=t.createFramebuffer(),$i=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,$i)},be=(t,e=!0)=>{t.msaa?(dl(t.color),t.color=null,t.stencil=null):(e&&ae(t.texture),t.texture=null,pl(t.stencil),t.stencil=null),Ts.push(t)};let yl=0;const vl=()=>({id:yl++,width:0,height:0,clipLevel:0,msaa:!1,mask:!1,color:null,texture:null,stencil:null}),Ml=()=>{const t={id:0,resource:p.createRenderbuffer(),width:0,height:0,area:0,dirty:!1};return{resource:p.createRenderbuffer(),stencil:t,width:0,height:0,area:0,dirty:!1}},Sl=t=>{if(!$t.length)return Ml();const e=yi(t);if(e<$t.length){const n=$t[e];return $t.splice(e,1),n}const r=$t.shift();if(!r)throw new Error("the color buffer is void.");return r},$l=(t,e)=>{t=Math.max(256,Fn(t)),e=Math.max(256,Fn(e));const r=Sl(t*e);return(r.width({id:Tl++,resource:p.createRenderbuffer(),width:0,height:0,area:0,dirty:!1}),Pl=(t,e)=>{if(!et.length)return Bl();let r=-1,n=1/0;for(let s=0;s=t&&o.height>=e&&o.area{const r=Pl(t,e);return(r.width!==t||r.height!==e)&&(r.width=t,r.height=e,r.area=t*e,r.dirty=!1,p.bindRenderbuffer(p.RENDERBUFFER,r.resource),p.renderbufferStorage(p.RENDERBUFFER,p.STENCIL_INDEX8,t,e)),r};let Fl=0;const Ti=(t,e)=>({id:Fl++,resource:p.createTexture(),width:t,height:e,area:t*e,smooth:!1});let gr=-1;const Bi=t=>{gr=t},ws=[null,null,null],wl=(t,e=!1)=>{gr!==p.TEXTURE0&&(Bi(p.TEXTURE0),p.activeTexture(p.TEXTURE0)),ws[0]=t,p.bindTexture(p.TEXTURE_2D,t.resource),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,e?p.LINEAR:p.NEAREST),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,e?p.LINEAR:p.NEAREST),p.texStorage2D(p.TEXTURE_2D,1,p.RGBA8,t.width,t.height)},Jr=(t,e,r=!1)=>{const n=Ti(t,e);return wl(n,r),n},we=(t,e,r=!1)=>{const n=Ts.length?Ts.pop():vl();return n.width=t,n.height=e,r?(n.msaa=!0,n.texture=null,n.color=$l(t,e),n.stencil=n.color.stencil):(n.msaa=!1,n.texture=Jr(t,e),n.color=null,n.stencil=Al(t,e)),n.mask=!1,n.clipLevel=0,n},Ol=()=>{Mi(null),Ps&&(As(!1),p.bindFramebuffer(p.FRAMEBUFFER,null))},El=()=>{const t=Ti(ut,ut);return p.activeTexture(p.TEXTURE3),p.bindTexture(p.TEXTURE_2D,t.resource),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,p.NEAREST),p.texStorage2D(p.TEXTURE_2D,1,p.RGBA8,t.width,t.height),p.activeTexture(gr!==-1?gr:p.TEXTURE0),t},Os=Number.MAX_VALUE,Es=-Number.MAX_VALUE;let qt=0;const Qt=t=>{qt=t},En=[],Rl=()=>En,Cl=t=>{En[qt]=t},Ul=()=>(qt in En||Cl(we(ut,ut,!0)),En[qt]),br=[];let Rs=null;const Pi=()=>(Rs||(Rs=El()),Rs),en=[],Ai=t=>(t in en||(en[t]=new Float32Array([Os,Os,Es,Es])),en[t]),Gl=()=>{for(let t=0;t{Cs=t},Ll=()=>{br.length=0,Qt(0);const t=Rl();for(let e=0;e{if(t.clearArraysInstanced(),t.$stackAttachmentObject.length)for(let s=0;s{It(),p.scissor(t,e,r,n),p.clear(p.COLOR_BUFFER_BIT|p.STENCIL_BUFFER_BIT),yt()},Ke=(t,e,r=null,n=!1)=>{(gr===-1||e!==gr)&&(Bi(e),p.activeTexture(e));const s=ws[t];s!==null&&r!==null&&s.id===r.id||r===s||(ws[t]=r,p.bindTexture(p.TEXTURE_2D,r?r.resource:null),r&&r.smooth!==n&&(r.smooth=n,p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,n?p.LINEAR:p.NEAREST),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,n?p.LINEAR:p.NEAREST)))},$e=(t,e=!1)=>{Ke(2,p.TEXTURE2,null),Ke(1,p.TEXTURE1,null),Ke(0,p.TEXTURE0,t,e)},_l=t=>{Mi(t),Ps||(As(!0),p.bindFramebuffer(p.FRAMEBUFFER,Tt)),t.msaa?(p.bindRenderbuffer(p.RENDERBUFFER,t.color.resource),p.framebufferRenderbuffer(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.RENDERBUFFER,t.color.resource)):($e(t.texture),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,t.texture.resource,0),Ke(0,p.TEXTURE0,null)),p.bindRenderbuffer(p.RENDERBUFFER,t.stencil.resource),p.framebufferRenderbuffer(p.FRAMEBUFFER,p.STENCIL_ATTACHMENT,p.RENDERBUFFER,t.stencil.resource)},Us=()=>{const t=O.currentAttachmentObject;if(!t)return;const e=t.clipLevel;let r=0;for(let n=0;n{wi=t},Gs=()=>wi,tn=new Map,rn=new Map,Vl=t=>{!t&&Gs()?(Rn(!1),Wr(),yt()):t&&!Gs()&&(Rn(!0),Yr(),Us())},Dl=(t,e)=>{const r=Bs;if(r&&e.id===r.id)return;_l(e),(!r||r.width!==e.width||r.height!==e.height)&&(Kc(e.width,e.height),p.viewport(0,0,e.width,e.height));const n=e.msaa?e.color:e.stencil;n.dirty&&(n.dirty=!1,t.clearRect(0,0,e.width,e.height)),Vl(e.mask)},Nl=t=>{t.$stack.push(xs(...t.$matrix))},zl=t=>{if(!t.$stack.length)return;const e=t.$stack.pop();t.$matrix[0]=e[0],t.$matrix[1]=e[1],t.$matrix[3]=e[3],t.$matrix[4]=e[4],t.$matrix[6]=e[6],t.$matrix[7]=e[7],Hc(e)},Xl=(t,e,r,n,s,o,i)=>{t[0]=e,t[1]=r,t[3]=n,t[4]=s,t[6]=o,t[7]=i},Yl=(t,e,r,n,s,o,i)=>{const l=t.$matrix[0],c=t.$matrix[1],u=t.$matrix[3],a=t.$matrix[4],h=t.$matrix[6],d=t.$matrix[7];t.$matrix[0]=e*l+r*u,t.$matrix[1]=e*c+r*a,t.$matrix[3]=n*l+s*u,t.$matrix[4]=n*c+s*a,t.$matrix[6]=o*l+i*u+h,t.$matrix[7]=o*c+i*a+d},Wl=t=>{t.globalAlpha=1,t.globalCompositeOperation="normal",t.imageSmoothingEnabled=!1},jl=t=>{t.$fillStyle.fill(1),t.$strokeStyle.fill(1)},Hl=(t,e,r,n)=>{It(),p.scissor(t,e,r+1,n+1),p.clear(p.COLOR_BUFFER_BIT|p.STENCIL_BUFFER_BIT),p.scissor(t,e,r,n)},Kl=()=>{yt()},ql=(t,e,r,n,s,o,i,l,c,u,a,h,d)=>{const g=t.length-5;for(let m=3;m(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t);let nn=new Float32Array(128),xr=0;const Ql=()=>nn,Zl=()=>xr,yr=t=>{const e=t.length+xr;if(e>nn.length){const r=new Float32Array(Oi(e));r.set(nn),r.set(t,xr),nn=r}else nn.set(t,xr);xr+=t.length},We=[],Bt=[],Ei=()=>{Bt.length=0,xr=0,We.length=0};let Ls=new Float32Array(32);const Jl=t=>(Ls.length{const r=e==="fill"?O.$fillStyle:O.$strokeStyle,n=r[0],s=r[1],o=r[2],i=r[3],l=O.$matrix,c=pt,u=mt,a=l[0]/c,h=l[3]/c,d=l[6]/c,g=l[1]/u,m=l[4]/u,f=l[7]/u;let b=0;for(let P=0;P{const e=pr();if(!e.length)return;Bt.push(t);const r=Cn(e);yr(r.buffer),We.push(r.indexCount)},qe=[],tu=(t,e,r,n,s,o)=>{const i=pr();if(!i.length)return;Bt.push(t===0?"linear":"radial");const l=Cn(i);yr(l.buffer),We.push(l.indexCount),qe.push(e,r,n,s),t===1&&qe.push(o)},ru=(t,e,r)=>{const n=Math.sqrt(t*t+e*e);return{x:-(e/n)*r,y:t/n*r}},nu=(t,e,r)=>{const n={x:e.x-t.x,y:e.y-t.y},s=ru(n.x,n.y,r),o={x:t.x+s.x,y:t.y+s.y},i={x:e.x+s.x,y:e.y+s.y},l={x:t.x-s.x,y:t.y-s.y},c={x:e.x-s.x,y:e.y-s.y};return[o.x,o.y,!1,i.x,i.y,!1,c.x,c.y,!1,l.x,l.y,!1,o.x,o.y,!1]},ks=(t,e,r)=>({x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r}),su=(t,e,r,n=.5)=>{const s=ks(t,e,n),o=ks(e,r,n),i=ks(s,o,n);return[[t,s,i],[i,o,r]]},ou=(t,e,r,n=4)=>{let s=[[t,e,r]];for(let o=0;o({x:(1-t)**2*e.x+2*(1-t)*t*r.x+t**2*n.x,y:(1-t)**2*e.y+2*(1-t)*t*r.y+t**2*n.y}),au=(t,e,r,n)=>({x:2*(1-t)*(r.x-e.x)+2*t*(n.x-r.x),y:2*(1-t)*(r.y-e.y)+2*t*(n.y-r.y)}),cu=t=>{const e=Math.sqrt(t.x*t.x+t.y*t.y);return e===0?{x:0,y:0}:{x:t.x/e,y:t.y/e}},Ri=(t,e,r,n)=>{const s=[0,.5,1],o=[];for(let i=0;i{const s=ou(t,e,r,5),o=[],i=[];for(let h=0;h{const s=[];for(let i=0;i1e-4||s.push(l,c)}return s},Mr=new OffscreenCanvas(1,1).getContext("2d"),Sr=(t,e)=>{Mr.beginPath(),Mr.moveTo(e[0],e[1]);for(let r=3;r{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=n[o].length>15,c=n[i].length>15;if(l&&c)return;const u=vr(t,e,r,n[o]),a=vr(t,e,r,n[i]),h=Sr(u,n[i]);if(!h)return;const d=Sr(a,n[o]);if(!d)return;const g=Math.atan2(h[1]-e,h[0]-t);let f=Math.atan2(d[1]-e,d[0]-t)-g;f>Math.PI?f-=2*Math.PI:f<-Math.PI&&(f+=2*Math.PI);const b=Math.abs(f);if(b<.1||b>Math.PI-.1)return;const x=8,y=f/x,P=[t,e,!1];for(let S=0;S<=x;S++){const M=g+S*y,$=t+r*Math.cos(M),T=e+r*Math.sin(M);P.push($,T,!1)}n.splice(-1,0,P)},Ui=(t,e,r,n,s=!1)=>{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=n[o].length>15,c=n[i].length>15;if(l&&c)return;const u=vr(t,e,r,n[o]),a=vr(t,e,r,n[i]);if(u[0]===a[0]&&u[1]===a[1]||u[0]===a[2]&&u[1]===a[3])return;const h=Sr(u,n[i]);if(!h)return;const d=Sr(a,n[o]);d&&n.splice(-1,0,[t,e,!1,h[0],h[1],!1,d[0],d[1],!1,t,e,!1])},uu=(t,e,r)=>{for(let n=0;n<2;++n){let s=0,o=0,i=0,l=0;n===0?(s=t[0],o=t[1],i=t[3],l=t[4]):(s=t[t.length-3],o=t[t.length-2],i=t[t.length-6],l=t[t.length-5]);const c=i-s,u=l-o,a=Math.atan2(u,c),h=a+Math.PI/2,d=a-Math.PI/2,g=16,m=(d-h)/g,f=[];for(let b=0;b<=g;b++){const x=d+m*b,y=s+e*Math.cos(x),P=o+e*Math.sin(x);f.push(y,P,!1)}n===0?r.unshift(f):r.push(f)}},fu=(t,e,r)=>{for(let n=0;n<2;++n){let s=0,o=0,i=0,l=0;n===0?(s=t[0],o=t[1],i=t[3],l=t[4]):(s=t[t.length-3],o=t[t.length-2],i=t[t.length-6],l=t[t.length-5]);const c=-(i-s),u=-(l-o),a=Math.sqrt(c*c+u*u);if(a===0)continue;const h=c/a,d=u/a,g=s+e*h,m=o+e*d,f=-d,b=h,x=[g+e*h+e*f,m+e*d+e*b,!1,g+e*h-e*f,m+e*d-e*b,!1,g-e*h-e*f,m-e*d-e*b,!1,g+e*h+e*f,m+e*d+e*b,!1,g-e*h-e*f,m-e*d-e*b,!1,g-e*h+e*f,m-e*d+e*b,!1];n===0?r.unshift(x):r.push(x)}},Gi=(t,e,r,n,s,o=!1)=>{const i=o?0:s.length-1,l=o?s.length-1:s.length-2,c=s[i].length>15,u=s[l].length>15;if(c&&u)return;const a=vr(t.x,t.y,n,s[i]),h=vr(t.x,t.y,n,s[l]);if(a[0]===h[0]&&a[1]===h[1]||a[0]===h[2]&&a[1]===h[3])return;const d=Sr(a,s[l]);if(!d)return;const g=Sr(h,s[i]);if(!g)return;const m=e.x-t.x,f=e.y-t.y,b=Math.hypot(m,f),x={x:m/b,y:f/b},y=r.x-t.x,P=r.y-t.y,S=Math.hypot(y,P),M={x:y/S,y:P/S},$=x.x,T=x.y,w=M.x,E=M.y,F=$*E-T*w;if(F===0){s.splice(-1,0,[t.x,t.y,!1,d[0],d[1],!1,g[0],g[1],!1]);return}const A=((g[0]-d[0])*E-(g[1]-d[1])*w)/F,R=d[0]+A*$,v=d[1]+A*T;s.splice(-1,0,[t.x,t.y,!1,d[0],d[1],!1,R,v,!1,t.x,t.y,!1,g[0],g[1],!1,R,v,!1])},hu={x:0,y:0},du={x:0,y:0},pu={x:0,y:0},mu={x:0,y:0},gu=(t,e)=>{const r=hu;r.x=t[0],r.y=t[1];const n=du;n.x=0,n.y=0;const s=pu;s.x=0,s.y=0;const o=mu;o.x=0,o.y=0;const i=[];for(let g=3;g1)switch(O.joints){case 0:Ui(r.x,r.y,e,i);break;case 1:o.x=t[g-6],o.y=t[g-5],Gi(r,s,o,e,i);break;case 2:Ci(r.x,r.y,e,i);break}r.x=s.x,r.y=s.y}const l=t[0],c=t[1],u=t[t.length-3],a=t[t.length-2],h=1e-4;if(Math.abs(l-u)1)switch(O.joints){case 0:Ui(l,c,e,i,!0);break;case 1:r.x=l,r.y=c,s.x=t[3],s.y=t[4],o.x=t[t.length-6],o.y=t[t.length-5],Gi(r,s,o,e,i,!0);break;case 2:Ci(l,c,e,i,!0);break}else switch(O.caps){case 1:uu(t,e,i);break;case 2:fu(t,e,i);break}return i},Is=t=>{const e=O.thickness/2,r=Hr();for(let s=0;s{const i=pr(!0);if(!i.length)return;Bt.push(t===0?"linear":"radial");const l=Is(i);yr(l.buffer),We.push(l.indexCount),qe.push(e,r,n,s),t===1&&qe.push(o)},$r=new Map,Li=()=>{$r.clear()},xu=t=>{$r.set(We.length,t)},Un=()=>({id:Jc(),resource:p.createVertexArray(),vertexBuffer:p.createBuffer(),vertexLength:0});let _s;const Pt=t=>{_s&&_s.id===t.id||(_s=t,p.bindVertexArray(t.resource))},yu=()=>{const t=Un();Pt(t),p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer);const e=new Float32Array([0,0,1,0,1,1,0,0,1,1,0,1]);return p.bufferData(p.ARRAY_BUFFER,e,p.STATIC_DRAW),p.enableVertexAttribArray(0),p.vertexAttribPointer(0,2,p.FLOAT,!1,0,0),t},Gn=[],tt=new Float32Array([0,0,0,1,1,0,1,1]);let Vs;const vu=t=>{Vs=t.createBuffer()};let ki;const Mu=t=>{ki=t};let Ds;const Ln=()=>(Ds||(Ds=yu()),Ds),Su=()=>{if(Gn.length)return Gn.pop();const t=Un();return Pt(t),p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer),p.enableVertexAttribArray(0),p.enableVertexAttribArray(1),p.enableVertexAttribArray(2),p.enableVertexAttribArray(3),p.enableVertexAttribArray(4),p.enableVertexAttribArray(5),p.vertexAttribPointer(0,2,p.FLOAT,!1,68,0),p.vertexAttribPointer(1,2,p.FLOAT,!1,68,8),p.vertexAttribPointer(2,4,p.FLOAT,!1,68,16),p.vertexAttribPointer(3,3,p.FLOAT,!1,68,32),p.vertexAttribPointer(4,3,p.FLOAT,!1,68,44),p.vertexAttribPointer(5,3,p.FLOAT,!1,68,56),t},Ii=()=>{const t=Su();Pt(t);const e=Ql(),r=Zl();return p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer),t.vertexLength{Gn.indexOf(t)>-1||Gn.push(t)};let $u=0;const Tu=(t,e)=>{const r=p.createProgram(),n=p.createShader(p.VERTEX_SHADER);p.shaderSource(n,t),p.compileShader(n);const s=p.createShader(p.FRAGMENT_SHADER);return p.shaderSource(s,e),p.compileShader(s),p.attachShader(r,n),p.attachShader(r,s),p.linkProgram(r),p.detachShader(r,n),p.detachShader(r,s),p.deleteShader(n),p.deleteShader(s),{id:$u++,resource:r}},Bu=(t,e,r=!1)=>{const n=p.getProgramParameter(t,p.ACTIVE_UNIFORMS);for(let s=0;s{Vi!==t.id&&(Vi=t.id,p.useProgram(t.resource))},Au=t=>{for(const e of t.values())e.method===void 0||e.assign===void 0||(e.assign<0?e.method(e.array):e.assign>0&&(e.assign--,e.method(e.array)))};class _e{_$programObject;_$uniformMap;highp;mediump;textures;constructor(e,r,n=!1){this._$programObject=Tu(e,r),this._$uniformMap=new Map,Bu(this._$programObject.resource,this._$uniformMap,n);const s=new Float32Array(0);this.highp=this._$uniformMap.get("u_highp")?.array??s,this.mediump=this._$uniformMap.get("u_mediump")?.array??s,this.textures=this._$uniformMap.get("u_textures")?.array??s}useProgram(){Pu(this._$programObject)}bindUniform(){Au(this._$uniformMap)}}const At=new Map,Fu=()=>\` +vec2 applyMatrix(in vec2 vertex) { + mat3 matrix = mat3(a_matrix0, a_matrix1, a_matrix2); + return (matrix * vec3(vertex, 1.0)).xy; +}\`,wu=t=>\` +vec2 applyMatrix(in vec2 vertex) { + mat3 parent_matrix = mat3( + u_highp[\${t}].xyz, + u_highp[\${t+1}].xyz, + u_highp[\${t+2}].xyz + ); + mat3 ancestor_matrix = mat3( + u_highp[\${t+3}].xyz, + u_highp[\${t+4}].xyz, + u_highp[\${t+5}].xyz + ); + + vec2 parent_offset = vec2(u_highp[\${t+2}].w, u_highp[\${t+3}].w); + vec2 parent_size = vec2(u_highp[\${t+4}].w, u_highp[\${t+5}].w); + vec4 grid_min = u_highp[\${t+6}]; + vec4 grid_max = u_highp[\${t+7}]; + + vec2 position = (parent_matrix * vec3(vertex, 1.0)).xy; + position = (position - parent_offset) / parent_size; + + vec4 ga = grid_min; + vec4 gb = grid_max - grid_min; + vec4 gc = vec4(1.0) - grid_max; + + vec2 pa = position; + vec2 pb = position - grid_min.st; + vec2 pc = position - grid_max.st; + + position = (ga.pq / ga.st) * min(pa, ga.st) + + (gb.pq / gb.st) * clamp(pb, vec2(0.0), gb.st) + + (gc.pq / gc.st) * max(vec2(0.0), pc); + + position = position * parent_size + parent_offset; + position = (ancestor_matrix * vec3(position, 1.0)).xy; + + position = position + vec2(u_highp[\${t+8}].x, u_highp[\${t+8}].y); + return position / vec2(u_highp[0].w, u_highp[1].w); +}\`,Ou=()=>"layout (location = 1) in vec2 a_bezier;",Eu=()=>\`layout (location = 3) in vec3 a_matrix0; +layout (location = 4) in vec3 a_matrix1; +layout (location = 5) in vec3 a_matrix2;\`,Ru=()=>"out vec2 v_uv;",Cu=()=>"out vec2 v_bezier;",Uu=()=>\` + mat3 uv_matrix = mat3( + u_highp[0].xyz, + u_highp[1].xyz, + u_highp[2].xyz + ); + mat3 inverse_matrix = mat3( + u_highp[3].xyz, + u_highp[4].xyz, + vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w) + ); + v_uv = (inverse_matrix * uv_matrix * vec3(a_vertex, 1.0)).xy;\`,Gu=()=>"v_bezier = a_bezier;",Lu=()=>"layout (location = 2) in vec4 a_color;",ku=()=>"out vec4 v_color;",Iu=()=>"v_color = a_color;",kn=(t,e,r,n)=>{const s=r?Ou():"",o=r?Cu():e?Ru():"",i=r?Gu():e?Uu():"",l=n?wu(e?5:0):Fu(),c=r?"":Lu(),u=r?"":ku(),a=r?"":Iu(),h=n?"":Eu(),d=t>1?\`uniform vec4 u_highp[\${t}];\`:"";return\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +\${s} +\${c} +\${h} + +\${d} +\${o} +\${u} +\${l} + +void main() { + \${a} + \${i} + vec2 pos = applyMatrix(a_vertex); + pos = pos * 2.0 - 1.0; + gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0); +}\`},_u=()=>\`#version 300 es +layout (location = 0) in vec2 a_vertex; +void main() { + vec2 pos = a_vertex * 2.0 - 1.0; + gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0); +}\`,Vu=()=>\`#version 300 es +precision mediump float; + +in vec4 v_color; +out vec4 o_color; + +void main() { + o_color = vec4(v_color.rgb * v_color.a, v_color.a); +}\`,Du=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump[1]; + +in vec2 v_uv; +out vec4 o_color; + +void main() { + vec2 uv = vec2(v_uv.x, u_mediump[0].y - v_uv.y) / u_mediump[0].xy; + + vec4 src = texture(u_texture, uv); + o_color = src; +}\`,Nu=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump[1]; + +in vec2 v_uv; +out vec4 o_color; + +void main() { + vec2 uv = fract(vec2(v_uv.x, -v_uv.y) / u_mediump[0].xy); + + vec4 src = texture(u_texture, uv); + o_color = src; +}\`,zu=()=>\`#version 300 es +precision mediump float; + +in vec2 v_bezier; +out vec4 o_color; + +void main() { + float f_val = v_bezier.x * v_bezier.x - v_bezier.y; + + float dx = dFdx(f_val); + float dy = dFdy(f_val); + + float dist = f_val / length(vec2(dx, dy)); + float alpha = smoothstep(0.5, -0.5, dist); + + if (alpha > 0.001) { + o_color = vec4(min(alpha, 1.0)); + } else { + discard; + } +}\`,Xu=()=>\`#version 300 es +precision mediump float; +out vec4 o_color; +void main() { + o_color = vec4(1.0); +}\`,sn=t=>{const e=\`m\${t?"y":"n"}\`;if(At.has(e))return At.get(e);const r=new _e(kn(t?9:0,!1,!0,t),zu());return At.set(e,r),r},on=(t,e)=>{const r=t.highp;r[0]=e[0],r[1]=e[1],r[2]=0,r[4]=e[2],r[5]=e[3],r[6]=0,r[8]=e[4],r[9]=e[5],r[10]=1,r[12]=e[6],r[13]=e[7],r[14]=0,r[16]=e[8],r[17]=e[9],r[18]=0,r[20]=e[10],r[21]=e[11],r[22]=1,r[3]=pt,r[7]=mt,r[11]=e[12],r[15]=e[13],r[19]=e[14],r[23]=e[15],r[24]=e[16],r[25]=e[17],r[26]=e[18],r[27]=e[19],r[28]=e[20],r[29]=e[21],r[30]=e[22],r[31]=e[23],r[32]=e[24],r[33]=e[25]};let In="normal";const Di=t=>{In=t};let Ft=600;const _t=t=>{Ft=t},Ce=()=>{Ft!==613&&(_t(613),p.blendFunc(p.ONE,p.ONE_MINUS_SRC_ALPHA))},rt=(t,e,r,n)=>{t.useProgram(),t.bindUniform(),Ce(),Pt(e),p.drawArrays(p.TRIANGLES,r,n)},Ns=()=>{const t="rmnn";if(At.has(t))return At.get(t);const e=new _e(_u(),Xu());return At.set(t,e),e},Yu=()=>{const t=O.currentAttachmentObject;if(!t)return;const e=1<{const t=O.currentAttachmentObject;if(!t)return;const e=tn.get(t.clipLevel),r=e[0],n=e[1],s=e[2],o=e[3],i=Math.ceil(Math.abs(s-r)),l=Math.ceil(Math.abs(o-n));It(),p.scissor(r,t.height-n-l,i,l);const c=Ii();let u=rn.get(t.clipLevel),a=0,h=null;const d=We.length;for(let g=0;g7&&(Yu(),u=t.clipLevel+1)}rn.set(t.clipLevel,u),_i(c),Ei(),Li(),yt()},ju=(t,e,r)=>{if(t.used){const l=t.left?.insert(e,r);return l||t.right?.insert(e,r)||null}if(e>t.w||r>t.h)return null;if(e===t.w&&r===t.h)return t.used=!0,t;const n=e+1,s=r+1,o=t.w-n,i=t.h-s;return o>i?(t.left=t.create(t.index,t.x,t.y,e,t.h),t.right=t.create(t.index,t.x+n,t.y,o,t.h)):(t.left=t.create(t.index,t.x,t.y,t.w,r),t.right=t.create(t.index,t.x,t.y+s,t.w,i)),t.used=!0,t.left.insert(e,r)},Hu=(t,e,r,n,s)=>t.left?.dispose(e,r,n,s)?(!t.left.used&&!t.right?.used&&(t.left&&t.left.release(),t.right&&t.right.release(),t.left=t.right=null,t.used=!1),!0):t.right?.dispose(e,r,n,s)?(!t.right.used&&!t.left?.used&&(t.left&&t.left.release(),t.right&&t.right.release(),t.left=t.right=null,t.used=!1),!0):e===t.x&&r===t.y&&n===t.w&&s===t.h?(t.used=!1,!0):!1,zs=[];class Xs{index;x;y;w;h;left;right;used;constructor(e,r,n,s,o){this.index=e,this.x=r,this.y=n,this.w=s,this.h=o,this.left=null,this.right=null,this.used=!1}insert(e,r){return ju(this,e,r)}dispose(e,r,n,s){return Hu(this,e,r,n,s)}create(e,r,n,s,o){const i=zs.length?zs.pop():new Xs(e,0,0,0,0);return i.index=e,i.x=r,i.y=n,i.w=s,i.h=o,i.left=null,i.right=null,i.used=!1,i}release(){this.left&&(this.left.release(),this.left=null),this.right&&(this.right.release(),this.right=null),this.used=!1,zs.push(this)}}class Ni{_$root;constructor(e,r,n){this._$root=new Xs(e,0,0,r,n)}insert(e,r){return this._$root.insert(e,r)}dispose(e,r,n,s){return this._$root.dispose(e,r,n,s)}}const Ys=(t,e)=>{const r=qt;br[r]||(br[r]=new Ni(r,ut,ut));const s=br[r].insert(t,e);if(s)return s;for(let o=0;o<10;o++){if(r===o)continue;Qt(o);const i=br[o];if(!i)return Ys(t,e);const l=i.insert(t,e);if(l)return l}return Ys(t,e)},Ku=t=>{const e=br[t.index];e&&e.dispose(t.x,t.y,t.w,t.h)},Ws=()=>\` +float isInside(in vec2 uv) { + return step(4.0, dot(step(vec4(0.0, uv.x, 0.0, uv.y), vec4(uv.x, 1.0, uv.y, 1.0)), vec4(1.0))); +}\`,zi=t=>\` + vec4 mul = u_mediump[\${t}]; + vec4 add = u_mediump[\${t+1}]; + + if (mul.x != 1.0 || mul.y != 1.0 || mul.z != 1.0 || mul.w != 1.0 + || add.x != 0.0 || add.y != 0.0 || add.z != 0.0 + ) { + src.rgb /= max(0.0001, src.a); + src = clamp(src * mul + add, 0.0, 1.0); + src.rgb *= src.a; + } +\`,Xi=t=>{const e=t?"uniform vec4 u_mediump[2];":"",r=t?zi(0):"";return\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +\${e} + +in vec2 v_coord; +out vec4 o_color; + +void main() { + vec4 src = texture(u_texture, v_coord); + \${r} + o_color = src; +}\`},qu=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; + +in vec4 v_mul; +in vec4 v_add; +in vec2 v_coord; +out vec4 o_color; + +void main() { + vec4 src = texture(u_texture, v_coord); + + if (v_mul.x != 1.0 || v_mul.y != 1.0 || v_mul.z != 1.0 || v_mul.w != 1.0 + || v_add.x != 0.0 || v_add.y != 0.0 || v_add.z != 0.0 + ) { + src.rgb /= max(0.0001, src.a); + src = clamp(src * v_mul + v_add, 0.0, 1.0); + src.rgb *= src.a; + } + + o_color = src; +}\`,Qu=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t);class Zu{buffer;offset;constructor(){this.buffer=new Float32Array(256),this.offset=0}push(...e){this.buffer.length\`#version 300 es + +layout (location = 0) in vec2 a_vertex; + +out vec2 v_coord; + +void main() { + v_coord = a_vertex; + + vec2 position = a_vertex * 2.0 - 1.0; + gl_Position = vec4(position, 0.0, 1.0); +}\`,ef=()=>\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +uniform vec4 u_highp[3]; + +out vec2 v_coord; + +void main() { + v_coord = a_vertex; + + mat3 matrix = mat3( + u_highp[0].x, u_highp[0].y, 0.0, + u_highp[0].z, u_highp[0].w, 0.0, + u_highp[1].x, u_highp[1].y, 1.0 + ); + + vec2 size = u_highp[1].zw; + vec2 viewport = vec2(u_highp[2].x, u_highp[2].y); + + vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y); + position = position * size; + position = (matrix * vec3(position, 1.0)).xy; + position /= viewport; + + position = position * 2.0 - 1.0; + gl_Position = vec4(position.x, -position.y, 0.0, 1.0); +}\`,tf=()=>\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +uniform vec4 u_highp[2]; + +out vec2 v_coord; + +void main() { + v_coord = a_vertex; + + vec2 offset = u_highp[0].xy; + vec2 size = u_highp[0].zw; + vec2 viewport = vec2(u_highp[1].x, u_highp[1].y); + + vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y); + position = position * size + offset; + position /= viewport; + + position = position * 2.0 - 1.0; + gl_Position = vec4(position.x, -position.y, 0.0, 1.0); +}\`,rf=()=>\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +layout (location = 1) in vec4 a_rect; +layout (location = 2) in vec4 a_size; +layout (location = 3) in vec2 a_offset; +layout (location = 4) in vec4 a_matrix; +layout (location = 5) in vec4 a_mul; +layout (location = 6) in vec4 a_add; + +out vec2 v_coord; +out vec4 v_mul; +out vec4 v_add; + +void main() { + v_coord = a_vertex * a_rect.zw + a_rect.xy; + v_mul = a_mul; + v_add = a_add; + + vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y); + position = position * a_size.xy; + + mat3 matrix = mat3( + a_matrix.x, a_matrix.y, 0.0, + a_matrix.z, a_matrix.w, 0.0, + a_offset.x, a_offset.y, 1.0 + ); + + position = (matrix * vec3(position, 1.0)).xy; + position /= a_size.zw; + + position = position * 2.0 - 1.0; + gl_Position = vec4(position.x, -position.y, 0.0, 1.0); +}\`,nt=new Map,js=()=>{if(nt.has("i"))return nt.get("i");const e=new Ju(rf(),qu());return nt.set("i",e),e},nf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + return src + dst - dst * src.a; +}\`,sf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(dst.rgb - src.rgb, src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,of=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + vec4 c = src * dst; + + return a + b + c; +}\`,af=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(mix(src.rgb, dst.rgb, step(src.rgb, dst.rgb)), src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,cf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(mix(src.rgb, dst.rgb, step(dst.rgb, src.rgb)), src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,lf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 mul = src * dst; + vec3 c1 = 2.0 * mul.rgb; + vec3 c2 = 2.0 * (src.rgb + dst.rgb - mul.rgb) - 1.0; + vec4 c = vec4(mix(c1, c2, step(vec3(0.5), dst.rgb)), mul.a); + c.rgb *= c.a; + + return a + b + c; +}\`,uf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 mul = src * dst; + vec3 c1 = 2.0 * mul.rgb; + vec3 c2 = 2.0 * (src.rgb + dst.rgb - mul.rgb) - 1.0; + vec4 c = vec4(mix(c1, c2, step(vec3(0.5), src.rgb)), mul.a); + c.rgb *= c.a; + + return a + b + c; +}\`,ff=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(abs(src.rgb - dst.rgb), src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,hf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 b = dst - dst * src.a; + vec4 c = vec4(src.a - dst.rgb * src.a, src.a); + + return b + c; +}\`,df=(t,e)=>{let r;switch(t){case"subtract":r=sf();break;case"multiply":r=of();break;case"lighten":r=af();break;case"darken":r=cf();break;case"overlay":r=lf();break;case"hardlight":r=uf();break;case"difference":r=ff();break;case"invert":r=hf();break;default:r=nf();break}const n="uniform vec4 u_mediump[2];",s=zi(0);return\`#version 300 es +precision mediump float; + +uniform sampler2D u_textures[2]; +\${n} + +in vec2 v_coord; +out vec4 o_color; + +\${r} + +void main() { + vec4 dst = texture(u_textures[0], v_coord); + vec4 src = texture(u_textures[1], v_coord); + \${s} + o_color = blend(src, dst); +}\`},Yi=(t,e)=>{const r=\`i\${t}y\`;if(nt.has(r))return nt.get(r);const n=new _e(Zt(),df(t));return nt.set(r,n),n},Wi=()=>{if(!O.newDrawState)return;const t=O.currentAttachmentObject,e=O.atlasAttachmentObject;O.bind(e),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,On),As(!1);const n=Ai(qt);It(),p.scissor(n[0],n[1],n[2]-n[0],n[3]-n[1]),p.blitFramebuffer(0,0,e.width,e.height,0,0,e.width,e.height,p.COLOR_BUFFER_BIT,p.NEAREST),yt(),t&&O.bind(t),O.newDrawState=!1},ji=t=>{const e=qt;Qt(t.index),Wi(),p.bindFramebuffer(p.FRAMEBUFFER,Fs);const r=Pi();p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,r.resource,0),p.bindFramebuffer(p.FRAMEBUFFER,Zr);const n=Jr(t.w,t.h);return p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,n.resource,0),p.bindFramebuffer(p.FRAMEBUFFER,null),p.bindFramebuffer(p.READ_FRAMEBUFFER,Fs),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,Zr),p.blitFramebuffer(t.x,t.y,t.x+t.w,t.y+t.h,0,0,t.w,t.h,p.COLOR_BUFFER_BIT,p.NEAREST),Qt(e),p.bindFramebuffer(p.READ_FRAMEBUFFER,Tt),p.bindFramebuffer(p.FRAMEBUFFER,Tt),n},_n=(t,e,r=!1)=>{Ke(2,p.TEXTURE2,null,r),Ke(1,p.TEXTURE1,e,r),Ke(0,p.TEXTURE0,t,r)},Jt=()=>{if(nt.has("p"))return nt.get("p");const e=new _e(tf(),Xi(!1));return nt.set("p",e),e},wt=(t,e,r)=>{const n=t.highp,s=O.$matrix;n[0]=s[6],n[1]=s[7],n[2]=e,n[3]=r,n[4]=pt,n[5]=mt},xe=t=>{t.useProgram(),t.bindUniform(),Pt(Ln()),p.drawArrays(p.TRIANGLES,0,6)};let er=null;const Hi=(t,e,r,n)=>{const s=O.currentAttachmentObject,o=O.$mainAttachmentObject;return O.bind(o),p.bindFramebuffer(p.FRAMEBUFFER,Zr),(!er||er.width!==o.width||er.height!==o.height)&&(er=Jr(o.width,o.height)),$e(er),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,er.resource,0),p.bindFramebuffer(p.FRAMEBUFFER,null),p.bindFramebuffer(p.READ_FRAMEBUFFER,Tt),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,Zr),It(),p.scissor(t,o.height-e-n,r+1,n+1),p.blitFramebuffer(0,0,o.width,o.height,0,0,o.width,o.height,p.COLOR_BUFFER_BIT,p.NEAREST),yt(),p.bindFramebuffer(p.FRAMEBUFFER,Tt),s&&O.bind(s),er},Vn=(t,e,r,n)=>{const s=O.currentAttachmentObject,o=Hi(t,e,r,n),i=we(r,n,!1);O.bind(i),O.save(),O.setTransform(1,0,0,1,-t,-e);const l=Jt();wt(l,o.width,o.height),Ce(),$e(o),xe(l);const c=i.texture;return O.restore(),be(i,!1),s&&O.bind(s),c},Tr=()=>{Ft!==610&&(_t(610),p.blendFunc(p.ONE,p.ZERO))},Ki=t=>{$e(t),Tr();const e=Jt();wt(e,t.width,t.height),xe(e),Ce()},qi=(t,e,r,n,s,o,i,l,c)=>{const u=t.textures;u[0]=0,u[1]=1;const a=t.mediump;a[0]=e,a[1]=r,a[2]=n,a[3]=s,a[4]=o,a[5]=i,a[6]=l,a[7]=c},Dn=(t=!1)=>{const e=\`m\${t?"y":"n"}\`;if(nt.has(e))return nt.get(e);const r=new _e(ef(),Xi(t));return nt.set(e,r),r},Nn=(t,e,r)=>{const n=t.highp,s=O.$matrix;n[0]=s[0],n[1]=s[1],n[2]=s[3],n[3]=s[4],n[4]=s[6],n[5]=s[7],n[6]=e,n[7]=r,n[8]=pt,n[9]=mt},pf=(t,e,r,n,s,o)=>{const i=o[0],l=o[1],c=o[2],u=O.globalAlpha,a=o[4]/255,h=o[5]/255,d=o[6]/255,g=0,m=O.$matrix;switch(O.globalCompositeOperation){case"normal":case"layer":case"add":case"screen":case"alpha":case"erase":case"copy":{if(In!==O.globalCompositeOperation||Cs!==t.index){Qt(Cs);const b=O.globalCompositeOperation;O.globalCompositeOperation=In,O.newDrawState=!0,O.drawArraysInstanced(),O.newDrawState=!0,O.globalCompositeOperation=b,Di(O.globalCompositeOperation),Fi(t.index),Qt(t.index)}const f=js();Ve.pushDisplayObjectBuffer((t.x+.5)/ut,(t.y+.5)/ut,(t.w-1)/ut,(t.h-1)/ut,t.w,t.h,pt,mt,m[6],m[7],m[0],m[1],m[3],m[4],i,l,c,u,a,h,d,g),f.count++}break;default:{const f=O.currentAttachmentObject;O.drawArraysInstanced();const b=Math.ceil(Math.abs(n-e)),x=Math.ceil(Math.abs(s-r));let y=0,P=0,S=ji(t);if(m[0]!==1||m[1]!==0||m[3]!==0||m[4]!==1){const w=we(b,x,!1),E=dr(m[0],m[1],m[3],m[4],b/2,x/2),F=dr(1,0,0,1,-t.w/2,-t.h/2),A=dr(E[0]*F[0]+E[2]*F[1],E[1]*F[0]+E[3]*F[1],E[0]*F[2]+E[2]*F[3],E[1]*F[2]+E[3]*F[3],E[0]*F[4]+E[2]*F[5]+E[4],E[1]*F[4]+E[3]*F[5]+E[5]);O.save(),O.bind(w),O.setTransform(A[0],A[1],A[2],A[3],A[4],A[5]),y=A[4],P=A[5];const R=Dn();Nn(R,S.width,S.height),$e(S,!0),xe(R),ae(S),S=w.texture,be(w,!1),f&&O.bind(f),O.restore()}(y||P)&&(m[6]-=y,m[7]-=P);const M=Vn(m[6],m[7],b,x),$=we(b,x,!1);O.bind($),_n(M,S);const T=Yi(O.globalCompositeOperation);qi(T,i,l,c,u,a,h,d,g),xe(T),f&&O.bind(f),Ki($.texture),(y||P)&&(m[6]+=y,m[7]+=P),ae(S),ae(M),be($),Di(O.globalCompositeOperation),Fi(t.index),Qt(t.index)}break}},mf=()=>{js().clear()};let Hs=0;const gf=()=>{Pt(ki),p.bindBuffer(p.ARRAY_BUFFER,Vs),Ve.buffer.length>Hs&&(Hs=Ve.buffer.length,p.bufferData(p.ARRAY_BUFFER,Hs*4,p.STREAM_DRAW)),p.bufferSubData(p.ARRAY_BUFFER,0,Ve.buffer,0,Ve.offset)},bf=t=>{t.useProgram(),t.bindUniform(),gf(),p.drawArraysInstanced(p.TRIANGLES,0,6,t.count)},xf=()=>{Ft!==611&&(_t(611),p.blendFunc(p.ONE,p.ONE))},yf=()=>{Ft!==641&&(_t(641),p.blendFunc(p.ONE_MINUS_DST_COLOR,p.ONE))},vf=()=>{Ft!==606&&(_t(606),p.blendFunc(p.ZERO,p.SRC_ALPHA))},Ks=()=>{Ft!==603&&(_t(603),p.blendFunc(p.ZERO,p.ONE_MINUS_SRC_ALPHA))},Qi=t=>{switch(t){case"add":xf();break;case"screen":yf();break;case"alpha":vf();break;case"erase":Ks();break;case"copy":Tr();break;default:Ce();break}},Mf=()=>{const t=js();t.count&&(Wi(),Qi(In),bf(t),t.clear())},Sf=()=>{const t=Un();return Pt(t),p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer),p.bufferData(p.ARRAY_BUFFER,new Float32Array([0,0,1,0,1,1,0,0,1,1,0,1]),p.STATIC_DRAW),p.enableVertexAttribArray(0),p.vertexAttribPointer(0,2,p.FLOAT,!1,0,0),p.bindBuffer(p.ARRAY_BUFFER,Vs),p.bufferData(p.ARRAY_BUFFER,Ve.buffer.length,p.STREAM_DRAW),p.enableVertexAttribArray(1),p.vertexAttribPointer(1,4,p.FLOAT,!1,88,0),p.vertexAttribDivisor(1,1),p.enableVertexAttribArray(2),p.vertexAttribPointer(2,4,p.FLOAT,!1,88,16),p.vertexAttribDivisor(2,1),p.enableVertexAttribArray(3),p.vertexAttribPointer(3,2,p.FLOAT,!1,88,32),p.vertexAttribDivisor(3,1),p.enableVertexAttribArray(4),p.vertexAttribPointer(4,4,p.FLOAT,!1,88,40),p.vertexAttribDivisor(4,1),p.enableVertexAttribArray(5),p.vertexAttribPointer(5,4,p.FLOAT,!1,88,56),p.vertexAttribDivisor(5,1),p.enableVertexAttribArray(6),p.vertexAttribPointer(6,4,p.FLOAT,!1,88,72),p.vertexAttribDivisor(6,1),t},$f=t=>{vu(t),Mu(Sf())},Tf=()=>{const t=O.$mainAttachmentObject;O.bind(t),p.bindFramebuffer(p.READ_FRAMEBUFFER,Tt),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,null);const e=t.width,r=t.height;p.blitFramebuffer(0,0,e,r,0,0,e,r,p.COLOR_BUFFER_BIT,p.NEAREST),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,vi),p.bindFramebuffer(p.FRAMEBUFFER,Tt)},Bf=()=>{p.enable(p.BLEND),Ce()},Pf=()=>{const t=O.currentAttachmentObject;t&&(t.mask=!0,t.clipLevel++,rn.set(t.clipLevel,t.clipLevel),Gs()||(Rn(!0),Yr(),p.enable(p.SAMPLE_ALPHA_TO_COVERAGE),p.stencilFunc(p.ALWAYS,0,255),p.stencilOp(p.ZERO,p.INVERT,p.INVERT),p.colorMask(!1,!1,!1,!1)))},Af=(t,e,r,n)=>{const s=O.currentAttachmentObject;if(!s)return;tn.set(s.clipLevel,hi(t,e,r,n));const o=Math.ceil(Math.abs(r-t)),i=Math.ceil(Math.abs(n-e));It(),p.scissor(t,s.height-e-i,o,i)},Ff=()=>{const t=O.currentAttachmentObject;if(!t)return;const e=t.clipLevel,r=tn.get(e),n=r[0],s=r[1],o=r[2],i=r[3];tn.delete(e),rn.delete(e),di(r);const l=Math.ceil(Math.abs(o-n)),c=Math.ceil(Math.abs(i-s));if(It(),p.scissor(n,t.height-s-c,l,c),--t.clipLevel,!t.clipLevel){t.mask=!1,Rn(!1),p.clear(p.STENCIL_BUFFER_BIT),Wr(),yt(),rn.clear(),tn.clear();return}p.stencilMask(1<{const s=Jr(t,e,n);return p.texSubImage2D(p.TEXTURE_2D,0,0,0,t,e,p.RGBA,p.UNSIGNED_BYTE,r),s},wf=(t,e)=>{const r=qs(t.w,t.h,e),n=Jt();wt(n,t.w,t.h),Ce(),xe(n),ae(r)},Of=(t,e,r,n=!1)=>{const s=Jr(t,e,n);return p.texSubImage2D(p.TEXTURE_2D,0,0,0,p.RGBA,p.UNSIGNED_BYTE,r),s},Ef=(t,e)=>{const r=Of(t.w,t.h,e),n=Jt();wt(n,t.w,t.h),Ce(),xe(n),ae(r)},Vt=[],Rf=(t,e,r,n,s,o)=>{const i=pr();if(!i.length)return;Bt.push("bitmap");const l=Cn(i);yr(l.buffer),We.push(l.indexCount),Vt.push(t,e,r,n,s,o)},Cf=(t,e,r,n,s,o)=>{const i=pr(!0);if(!i.length)return;Bt.push("bitmap");const l=Is(i);yr(l.buffer),We.push(l.indexCount),Vt.push(t,e,r,n,s,o)},Uf=()=>{const t=pr(!0);if(!t.length)return;Bt.push("fill");const e=Is(t);yr(e.buffer),We.push(e.indexCount)},Gf=t=>{const e=t.toFixed(1);return\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump; + +in vec2 v_coord; +out vec4 o_color; + +void main() { + vec2 offset = u_mediump.xy; + float fraction = u_mediump.z; + float samples = u_mediump.w; + + vec4 color = texture(u_texture, v_coord); + + for (float i = 1.0; i < \${e}; i += 1.0) { + color += texture(u_texture, v_coord + offset * i); + color += texture(u_texture, v_coord - offset * i); + } + color += texture(u_texture, v_coord + offset * \${e}) * fraction; + color += texture(u_texture, v_coord - offset * \${e}) * fraction; + color /= samples; + + o_color = color; +}\`},De=new Map,Lf=t=>{const e=\`b\${t}\`;if(De.has(e))return De.get(e);const r=new _e(Zt(),Gf(t));return De.set(e,r),r},kf=(t,e,r,n,s,o)=>{const i=t.mediump;n?(i[0]=1/e,i[1]=0):(i[0]=0,i[1]=1/r),i[2]=s,i[3]=o},Zi=(t,e,r)=>{$e(t,!0);const n=Math.ceil(r*.5),s=1-(n-r*.5),o=1+r,i=Lf(n);kf(i,t.width,t.height,e,s,o),xe(i)},re={x:0,y:0},Br=(t,e,r)=>(t>>16)*(r?e:1)/255,Pr=(t,e,r)=>(t>>8&255)*(r?e:1)/255,Ar=(t,e,r)=>(t&255)*(r?e:1)/255,If=[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5],tr=(t,e,r=4,n=4,s=1,o=!0)=>{const i=O.currentAttachmentObject,l=Math.sqrt(e[0]*e[0]+e[1]*e[1]),c=Math.sqrt(e[2]*e[2]+e[3]*e[3]),u=vt,a=r*(l/u),h=n*(c/u),d=If[s-1],g=Math.round(a*d),m=Math.round(h*d);re.x+=g,re.y+=m;const f=t.width+g*2,b=t.height+m*2;let x=1,y=1;a>128?x=.0625:a>64?x=.125:a>32?x=.25:a>16&&(x=.5),h>128?y=.0625:h>64?y=.125:h>32?y=.25:h>16&&(y=.5);const P=Math.ceil(f*x),S=Math.ceil(b*y),M=we(P,S,!1),$=we(P,S,!1),T=[M,$];O.bind(M),O.reset(),O.setTransform(x,0,0,y,g*x,m*y),$e(t);const w=Dn();Nn(w,t.width,t.height),xe(w),o&&ae(t);const E=a*x,F=h*y;let A=0,R=M.texture;$e(R,!0),Tr();for(let v=0;v0){A=(A+1)%2;const U=T[A];O.bind(U),Zi(R,!0,E),R=U.texture}if(n>0){A=(A+1)%2;const U=T[A];O.bind(U),Zi(R,!1,F),R=U.texture}}if(Ce(),x!==1||y!==1){const v=we(f,b,!1);O.bind(v),O.setTransform(1/x,0,0,1/y,0,0),$e(R,!0),Nn(w,R.width,R.height),xe(w),R=v.texture,be(T[0]),be(T[1]),be(v,!1)}else A=(A+1)%2,be(T[A]),A=(A+1)%2,be(T[A],!1);return i&&O.bind(i),R},_f=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump[5]; + +in vec2 v_coord; +out vec4 o_color; + +void main() { + mat4 mul = mat4(u_mediump[0], u_mediump[1], u_mediump[2], u_mediump[3]); + vec4 add = u_mediump[4]; + + vec4 color = texture(u_texture, v_coord); + + color.rgb /= max(0.0001, color.a); + color = clamp(color * mul + add, 0.0, 1.0); + color.rgb *= color.a; + + o_color = color; +}\`,Vf=()=>{if(De.has("m"))return De.get("m");const e=new _e(Zt(),_f());return De.set("m",e),e},Df=(t,e)=>{const r=t.mediump;r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[5],r[5]=e[6],r[6]=e[7],r[7]=e[8],r[8]=e[10],r[9]=e[11],r[10]=e[12],r[11]=e[13],r[12]=e[15],r[13]=e[16],r[14]=e[17],r[15]=e[18],r[16]=e[4]/255,r[17]=e[9]/255,r[18]=e[14]/255,r[19]=e[19]/255},Ji=(t,e)=>{const r=O.currentAttachmentObject,n=we(t.width,t.height,!1);O.bind(n),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t),Ce();const s=Vf();Df(s,e),xe(s);const o=n.texture;return ae(t),be(n,!1),r&&O.bind(r),o},Nf=(t,e,r=!1)=>{Ke(2,p.TEXTURE2,e,r),Ke(1,p.TEXTURE1,null),Ke(0,p.TEXTURE0,t,r)},zf=(t,e,r,n=!1)=>{Ke(2,p.TEXTURE2,r,n),Ke(1,p.TEXTURE1,e,n),Ke(0,p.TEXTURE0,t,n)},Xf=()=>{Ft!==670&&(_t(670),p.blendFunc(p.DST_ALPHA,p.ZERO))},Yf=()=>{Ft!==673&&(_t(673),p.blendFunc(p.DST_ALPHA,p.ONE_MINUS_SRC_ALPHA))},Wf=t=>\` + vec2 base_scale = u_mediump[\${t}].xy; + vec2 base_offset = u_mediump[\${t}].zw; + + vec2 uv = v_coord * base_scale - base_offset; + vec4 base = mix(vec4(0.0), texture(u_textures[1], uv), isInside(uv)); +\`,jf=()=>\` + vec4 blur = texture(u_textures[0], v_coord); +\`,Hf=t=>\` + vec2 blur_scale = u_mediump[\${t}].xy; + vec2 blur_offset = u_mediump[\${t}].zw; + + vec2 st = v_coord * blur_scale - blur_offset; + vec4 blur = mix(vec4(0.0), texture(u_textures[0], st), isInside(st)); +\`,Kf=t=>{const e=Math.floor(t/4),r=t%4;return\` + float strength = u_mediump[\${e}][\${r}]; + blur.a = clamp(blur.a * strength, 0.0, 1.0); +\`},qf=t=>\` + vec4 color = u_mediump[\${t}]; + blur = color * blur.a; +\`,Qf=t=>\` + blur = texture(u_textures[\${t?2:1}], vec2(blur.a, 0.5)); +\`,ea=(t,e,r,n,s,o)=>{const i=t?"blur.a = 1.0 - blur.a;":"",l=r?Kf(o):"",c=n?Qf(e):qf(s);return\` + \${i} + \${l} + \${c} +\`},Zf=()=>\` + vec4 blur2 = texture(u_textures[0], 1.0 - v_coord); +\`,Jf=()=>\` + vec2 pq = (1.0 - v_coord) * blur_scale - blur_offset; + vec4 blur2 = mix(vec4(0.0), texture(u_textures[0], pq), isInside(pq)); +\`,eh=t=>{const e=Math.floor(t/4),r=t%4;return\` + float strength = u_mediump[\${e}][\${r}]; + highlight_alpha *= strength; + shadow_alpha *= strength; +\`},th=t=>\` + vec4 highlight_color = u_mediump[\${t}]; + vec4 shadow_color = u_mediump[\${t+1}]; + blur = highlight_color * highlight_alpha + shadow_color * shadow_alpha; +\`,rh=t=>\` + blur = texture(u_textures[\${t?2:1}], vec2( + 0.5019607843137255 - 0.5019607843137255 * shadow_alpha + 0.4980392156862745 * highlight_alpha, + 0.5 + )); +\`,nh=(t,e,r,n,s,o,i,l,c)=>{let u=0;const a=r?Wf(u++):"",h=n?Hf(u++):jf(),d=o==="inner",g=u;let m=u*4,f;c?f=s?ea(!1,r,l,c,g,m):ta(r,n,l,c,g,m):s?(m+=4,f=ea(d,r,l,c,g,m)):(m+=8,f=ta(r,n,l,c,g,m));let b;switch(o){case"outer":b=i?"blur - blur * base.a":"base + blur - blur * base.a";break;case"full":b=i?"blur":"base - base * blur.a + blur";break;default:b="blur";break}return\`#version 300 es +precision mediump float; + +uniform sampler2D u_textures[\${t}]; +uniform vec4 u_mediump[\${e}]; + +in vec2 v_coord; +out vec4 o_color; + +\${Ws()} + +void main() { + \${a} + \${h} + \${f} + o_color = \${b}; +}\`},ta=(t,e,r,n,s,o)=>{const i=e?Jf():Zf(),l=r?eh(o):"",c=n?rh(t):th(s);return\` + \${i} + float highlight_alpha = blur.a - blur2.a; + float shadow_alpha = blur2.a - blur.a; + \${l} + highlight_alpha = clamp(highlight_alpha, 0.0, 1.0); + shadow_alpha = clamp(shadow_alpha, 0.0, 1.0); + \${c} +\`},sh=(t,e,r,n,s,o,i)=>{const g=\`f\${t?"y":"n"}\${e?"y":"n"}\${r?"y":"n"}\${n}\${s?"y":"n"}\${o?"y":"n"}\${i?"y":"n"}\`;if(De.has(g))return De.get(g);let m=1;t&&m++,i&&m++;let f=(t?4:0)+(e?4:0)+(o?1:0);i||(f+=r?4:8),f=Math.ceil(f/4);const b=new _e(Zt(),nh(m,f,t,e,r,n,s,o,i));return De.set(g,b),b},oh=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f,b,x,y,P,S,M,$,T,w)=>{let E;M?(E=t.textures,E[0]=0,E[1]=1,w&&(E[2]=2)):w&&(E=t.textures,E[0]=0,E[1]=2);const F=t.mediump;let A=0;M&&(F[A++]=e/n,F[A++]=r/s,F[A++]=o/n,F[A++]=(r-s-i)/s),$&&(F[A++]=e/l,F[A++]=r/c,F[A++]=u/l,F[A++]=(r-c-a)/c),w||(h?(F[A++]=g,F[A++]=m,F[A++]=f,F[A++]=b):(F[A++]=g,F[A++]=m,F[A++]=f,F[A++]=b,F[A++]=x,F[A++]=y,F[A++]=P,F[A++]=S)),T&&(F[A]=d)},ih=16,zn=new Map,Dt=[],ah=(t,e)=>{const r=Dt.indexOf(t);for(r!==-1&&Dt.splice(r,1);zn.size>=ih&&Dt.length>0;){const n=Dt.shift();n&&zn.delete(n)}zn.set(t,e),Dt.push(t)},ch=t=>{const e=zn.get(t);if(e){const r=Dt.indexOf(t);r!==-1&&(Dt.splice(r,1),Dt.push(t))}return e},lh=(t,e,r)=>{let n="";for(let o=1;o{const s=\`l\${("00"+t).slice(-3)}\${e?"y":"n"}\`,o=ch(s);if(o)return o;const i=Math.ceil(t*5/4),l=new _e(Zt(),lh(i,t,e));return ah(s,l),l},uh=(t,e,r,n,s,o)=>{const i=t.mediump;let l=0;for(let c=s;c>16)/255,i[l++]=(u>>8&255)/255,i[l++]=(u&255)/255,i[l++]=n[c]}for(let c=s;c{const r=Un();return Pt(r),p.bindBuffer(p.ARRAY_BUFFER,r.vertexBuffer),tt[0]=t,tt[2]=t,tt[4]=e,tt[6]=e,p.bufferData(p.ARRAY_BUFFER,tt,p.STATIC_DRAW),p.enableVertexAttribArray(0),p.vertexAttribPointer(0,2,p.FLOAT,!1,0,0),r};let Qs;const hh=(t,e)=>(Qs?(tt[0]!==t||tt[4]!==e)&&(tt[0]=t,tt[2]=t,tt[4]=e,tt[6]=e,p.bufferSubData(p.ARRAY_BUFFER,0,tt)):Qs=fh(t,e),Qs),na=(t,e,r)=>{t.useProgram(),t.bindUniform(),Pt(hh(e,r)),p.drawArrays(p.TRIANGLE_STRIP,0,4)},Zs=new Map,dh=t=>t<=4?256:t<=8?512:1024,sa=t=>{if(!Zs.has(t)){const e=we(t,1,!1);Zs.set(t,e)}return Zs.get(t)},ph=()=>sa(512);let oa=0;const ia=()=>oa,mh=t=>{oa=Math.floor(t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS)*.75)},aa=new Float32Array(256),ca=new Float32Array(256);for(let t=0;t<256;++t){const e=t/255;aa[t]=Math.pow(e,2.23333333),ca[t]=e}const gh=(t,e,r)=>{const n=O.currentAttachmentObject,s=ph();O.bind(s);const o=t.length;Tr();const i=ia();for(let l=0;l{const A=O.currentAttachmentObject,R=we(r,n,!1);O.bind(R);const v=g==="inner",U=b!==null&&x!==null&&y!==null;let L=null;if(U&&(L=gh(b,x,y)),v){O.reset(),O.setTransform(1,0,0,1,0,0),$e(t,!0);const _=Jt();wt(_,t.width,t.height),xe(_),U&&L?Nf(e,L,!0):$e(e,!0)}else U&&L?zf(e,t,L,!0):_n(e,t,!0);const D=!(v||g==="full"&&m),G=!(r===c&&n===u&&a===0&&h===0),B=f!==1;v?m?Xf():Yf():Tr();const z=sh(D,G,d,g,m,B,U);oh(z,r,n,s,o,i,l,c,u,a,h,d,f,P,S,M,$,T,w,E,F,D,G,B,U),xe(z);const k=R.texture;return be(R,!1),Ce(),A&&O.bind(A),k},la=(t,e,r=0,n=1,s=4,o=4,i=1,l=1,c=!1,u=!1)=>{const a=O.currentAttachmentObject,h=t.width,d=t.height,g=re.x,m=re.y,f=tr(t,e,s,o,l,!1),b=f.width,x=f.height,y=re.x,P=re.y,S=c?h:b,M=c?d:x,$=y-g,T=P-m,w=c?0:$,E=c?0:T,F=c?-$:0,A=c?-T:0,v=an(t,f,S,M,h,d,w,E,b,x,F,A,!0,c?"inner":"outer",u,i,null,null,null,Br(r,n,!0),Pr(r,n,!0),Ar(r,n,!0),n,0,0,0,0);return ae(t),ae(f),a&&O.bind(a),v},bh=Math.PI/180,ua=(t,e,r=4,n=45,s=0,o=1,i=4,l=4,c=1,u=1,a=!1,h=!1,d=!1)=>{const g=O.currentAttachmentObject,m=t.width,f=t.height,b=re.x,x=re.y,y=tr(t,e,i,l,u,!1),P=y.width,S=y.height,M=re.x,$=re.y,T=M-b,w=$-x,E=Math.sqrt(e[0]*e[0]+e[1]*e[1]),F=Math.sqrt(e[2]*e[2]+e[3]*e[3]),A=vt,R=n*bh,v=Math.cos(R)*r*(E/A),U=Math.sin(R)*r*(F/A),L=a?m:P+Math.max(0,Math.abs(v)-T),D=a?f:S+Math.max(0,Math.abs(U)-w),G=Math.ceil(L),B=Math.ceil(D),z=(G-L)/2,k=(B-D)/2,_=a?0:Math.max(0,T-v)+z,I=a?0:Math.max(0,w-U)+k,V=a?v-M:(v>0?Math.max(0,v-T):0)+z,X=a?U-$:(U>0?Math.max(0,U-w):0)+k;let Y="",W;a?(Y="inner",W=h||d):!h&&d?(Y="full",W=!0):(Y="outer",W=h);const K=an(t,y,G,B,m,f,_,I,P,S,V,X,!0,Y,W,c,null,null,null,Br(s,o,!0),Pr(s,o,!0),Ar(s,o,!0),o,0,0,0,0);return ae(t),ae(y),g&&O.bind(g),K},xh=Math.PI/180,fa=(t,e,r=4,n=45,s=16777215,o=1,i=0,l=1,c=4,u=4,a=1,h=1,d=0,g=!1)=>{const m=t.width,f=t.height,b=re.x,x=re.y,y=Math.sqrt(e[0]*e[0]+e[1]*e[1]),P=Math.sqrt(e[2]*e[2]+e[3]*e[3]),S=vt,M=n*xh,$=Math.cos(M)*r*(y/S),T=Math.sin(M)*r*(P/S),w=O.currentAttachmentObject,E=we(m,f,!1);O.bind(E),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t);const F=Jt();wt(F,t.width,t.height),xe(F),O.setTransform(1,0,0,1,$*2,T*2),Ks(),wt(F,t.width,t.height),xe(F),Ce();const A=E.texture;w&&O.bind(w);const R=tr(A,e,c,u,h,!1);be(E);const v=R.width,U=R.height,L=Math.ceil(v+Math.abs($)*2),D=Math.ceil(U+Math.abs(T)*2);let G="";switch(d){case 0:G="full";break;case 1:G="inner";break;case 2:G="outer";break}const B=G==="inner",z=B?m:L,k=B?f:D,_=Math.abs($),I=Math.abs(T),V=(v-m)/2,X=(U-f)/2,Y=B?0:_+V,W=B?0:I+X,K=B?-V-$:_-$,q=B?-X-T:I-T,ce=an(t,R,z,k,m,f,Y,W,v,U,K,q,!1,G,g,a,null,null,null,Br(s,o,!0),Pr(s,o,!0),Ar(s,o,!0),o,Br(i,l,!0),Pr(i,l,!0),Ar(i,l,!0),l);return re.x=b+Y,re.y=x+W,ae(t),ae(R),ce},yh=Math.PI/180,ha=(t,e,r=4,n=45,s,o,i,l=4,c=4,u=1,a=1,h=0,d=!1)=>{const g=t.width,m=t.height,f=re.x,b=re.y,x=Math.sqrt(e[0]*e[0]+e[1]*e[1]),y=Math.sqrt(e[2]*e[2]+e[3]*e[3]),P=vt,S=n*yh,M=Math.cos(S)*r*(x/P),$=Math.sin(S)*r*(y/P),T=O.currentAttachmentObject,w=we(g,m,!1);O.bind(w),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t);const E=Jt();wt(E,t.width,t.height),xe(E),O.setTransform(1,0,0,1,M*2,$*2),Ks(),wt(E,t.width,t.height),xe(E),Ce();const F=w.texture;T&&O.bind(T);const A=tr(F,e,l,c,a,!1);be(w);const R=A.width,v=A.height,U=Math.ceil(R+Math.abs(M)*2),L=Math.ceil(v+Math.abs($)*2);let D="";switch(h){case 0:D="full";break;case 1:D="inner";break;case 2:D="outer";break}const G=D==="inner",B=G?g:U,z=G?m:L,k=Math.abs(M),_=Math.abs($),I=(R-g)/2,V=(v-m)/2,X=G?0:k+I,Y=G?0:_+V,W=G?-I-M:k-M,K=G?-V-$:_-$,q=an(t,A,B,z,g,m,X,Y,R,v,W,K,!1,D,d,u,i,s,o,0,0,0,0,0,0,0,0);return re.x=f+X,re.y=b+Y,ae(t),ae(A),q},vh=Math.PI/180,da=(t,e,r=4,n=45,s,o,i,l=4,c=4,u=1,a=1,h=0,d=!1)=>{const g=t.width,m=t.height,f=re.x,b=re.y,x=tr(t,e,l,c,a,!1),y=x.width,P=x.height,S=re.x,M=re.y,$=S-f,T=M-b,w=Math.sqrt(e[0]*e[0]+e[1]*e[1]),E=Math.sqrt(e[2]*e[2]+e[3]*e[3]),F=vt,A=n*vh,R=Math.cos(A)*r*(w/F),v=Math.sin(A)*r*(E/F),U=h===1,L=U?g:y+Math.max(0,Math.abs(R)-$),D=U?m:P+Math.max(0,Math.abs(v)-T),G=Math.ceil(L),B=Math.ceil(D),z=(G-L)/2,k=(B-D)/2,_=U?0:Math.max(0,$-R)+z,I=U?0:Math.max(0,T-v)+k,V=U?R-S:(R>0?Math.max(0,R-$):0)+z,X=U?v-M:(v>0?Math.max(0,v-T):0)+k;let Y="";switch(h){case 0:Y="full";break;case 1:Y="inner";break;case 2:Y="outer";break}const W=an(t,x,G,B,g,m,_,I,y,P,V,X,!0,Y,d,u,i,s,o,0,0,0,0,0,0,0,0);return re.x=f+_,re.y=b+I,ae(t),ae(x),W},Mh=(t,e,r,n,s)=>{const o=Math.floor(e*.5),i=Math.floor(r*.5),l=e*r;let c="";const u=s?1:2;for(let d=0;d{const s=("0"+t).slice(-2),o=("0"+e).slice(-2),c=\`c\${s}\${o}\${r?"y":"n"}\${n?"y":"n"}\`;if(De.has(c))return De.get(c);const u=(n?1:2)+Math.ceil(t*e/4),a=new _e(Zt(),Mh(u,t,e,r,n));return De.set(c,a),a},$h=(t,e,r,n,s,o,i,l,c,u,a)=>{const h=t.mediump;h[0]=1/e,h[1]=1/r,h[2]=1/s,h[3]=o/255;let d=4;i||(h[d++]=l,h[d++]=c,h[d++]=u,h[d++]=a);const g=n.length;for(let m=0;m{const a=O.currentAttachmentObject,h=t.width,d=t.height,g=we(h,d,!1);O.bind(g),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t,!0),Ce();const m=Sh(e,r,i,l);$h(m,h,d,n,s,o,l,Br(c,u,!1),Pr(c,u,!1),Ar(c,u,!1),u),xe(m);const f=g.texture;return ae(t),be(g,!1),a&&O.bind(a),f},Th=(t,e,r,n)=>{let s,o,i;switch(e){case 1:s="map_color.r";break;case 2:s="map_color.g";break;case 4:s="map_color.b";break;case 8:s="map_color.a";break;default:s="0.5";break}switch(r){case 1:o="map_color.r";break;case 2:o="map_color.g";break;case 4:o="map_color.b";break;case 8:o="map_color.a";break;default:o="0.5";break}switch(n){case 0:i=\` + vec4 source_color = texture(u_textures[0], uv); +\`;break;case 3:i=\` + vec4 source_color =texture(u_textures[0], mix(v_coord, uv, step(abs(uv - vec2(0.5)), vec2(0.5)))); +\`;break;case 1:i=\` + vec4 substitute_color = u_mediump[2]; + vec4 source_color = mix(substitute_color, texture(u_textures[0], uv), isInside(uv)); +\`;break;default:i=\` + vec4 source_color = texture(u_textures[0], fract(uv)); +\`;break}return\`#version 300 es +precision mediump float; + +uniform sampler2D u_textures[2]; +uniform vec4 u_mediump[\${t}]; + +in vec2 v_coord; +out vec4 o_color; + +\${Ws()} + +void main() { + vec2 uv_to_st_scale = u_mediump[0].xy; + vec2 uv_to_st_offset = u_mediump[0].zw; + vec2 scale = u_mediump[1].xy; + + vec2 st = v_coord * uv_to_st_scale - uv_to_st_offset; + vec4 map_color = texture(u_textures[1], st); + + vec2 offset = vec2(\${s}, \${o}) - 0.5; + vec2 uv = v_coord + offset * scale; + \${i} + + o_color = mix(texture(u_textures[0], v_coord), source_color, isInside(st)); +}\`},Bh=(t,e,r)=>{const n=\`d\${t}\${e}\${r}\`;if(De.has(n))return De.get(n);const s=r===1?3:2,o=new _e(Zt(),Th(s,t,e,r));return De.set(n,o),o},Ph=(t,e,r,n,s,o,i,l,c,u,a,h,d,g)=>{const m=t.textures;m[0]=0,m[1]=1;const f=t.mediump;f[0]=n/e,f[1]=s/r,f[2]=o/e,f[3]=(s-r-i)/r,f[4]=l/n,f[5]=-c/s,u===1&&(f[8]=a,f[9]=h,f[10]=d,f[11]=g)},ma=(t,e,r=0,n=0,s=0,o=0,i=0,l=0,c=0,u=0,a=2,h=0,d=0)=>{const g=O.currentAttachmentObject,m=t.width,f=t.height,b=we(m,f,!1);O.bind(b);const x=qs(r,n,e);_n(t,x);const y=Bh(i,l,a);Ph(y,r,n,r,n,s,o,c,u,a,Br(h,d,!0),Pr(h,d,!0),Ar(h,d,!0),d),Ce(),xe(y);const P=b.texture;return g&&O.bind(g),ae(t),ae(x),be(b,!1),P},Ah=(t,e,r,n)=>{const s=t.highp,o=O.$matrix;s[0]=o[0],s[1]=o[1],s[2]=o[3],s[3]=o[4],s[4]=o[6],s[5]=o[7],s[6]=r,s[7]=n,s[8]=pt,s[9]=mt;const i=t.mediump;i[0]=e[0],i[1]=e[1],i[2]=e[2],i[3]=e[3],i[4]=e[4],i[5]=e[5],i[6]=e[6],i[7]=e[7]},Xn=(t,e,r,n)=>{const s=O.currentAttachmentObject,o=t.width,i=t.height;switch(O.globalCompositeOperation){case"normal":case"layer":case"add":case"screen":case"alpha":case"erase":case"copy":{O.bind(O.$mainAttachmentObject),O.setTransform(1,0,0,1,r,n);const l=Dn(!0);Ah(l,e,o,i),$e(t),Qi(O.globalCompositeOperation),xe(l)}break;default:{const l=Vn(r,n,o,i),c=we(o,i,!1);O.bind(c),_n(l,t);const u=Yi(O.globalCompositeOperation);qi(u,e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]),xe(u),O.bind(O.$mainAttachmentObject),O.reset(),O.setTransform(1,0,0,1,r,n),Ki(c.texture),ae(l),be(c)}break}s&&O.bind(s),Ce()},ga=[],Yn=t=>{t.size&&t.clear(),ga.push(t)},Fh=()=>ga.pop()||new Map,wh=(t,e,r)=>{r.clear(),t.$timerId!==null&&clearTimeout(t.$timerId);for(const n of e.values()){for(const s of n.values())s&&t.destroy(s);Yn(n)}e.clear()},Oh=(t,e)=>{if(!(!e||typeof e!="object")&&"canvas"in e){const r=e.canvas,n=r.width,s=r.height;e.clearRect(0,0,n+1,s+1),r.width=r.height=1,t.push(r)}},Eh=(t,e,r)=>{if(!t.has(e))return;const n=t.get(e);n.has(r)&&(n.delete(r),n.size||(Yn(n),t.delete(e)))},Rh=(t,e,r)=>{if(!e.has(r))return;const n=e.get(r);for(const s of n.values())t.destroy(s);e.delete(r),Yn(n)},Ch=(t,e,r)=>{const n=t.get(e)||null;return n?(n.delete("trash"),n.get(r)||null):null},Uh=(t,e,r,n,s=null)=>{e.has(r)||e.set(r,Fh());const o=e.get(r);if(s===null){if(!o.has(n))return;t.destroy(o.get(n)),o.delete(n),o.size||(e.delete(r),Yn(o));return}o.set(n,s)},Gh=(t,e,r="")=>r?t.has(e)?t.get(e).has(r):!1:t.has(e),Lh=(t,e,r)=>{let n=2166136261,s=t*100|0;return n^=s&255,n=Math.imul(n,16777619),n^=s>>>8&255,n=Math.imul(n,16777619),n^=s>>>16&255,n=Math.imul(n,16777619),n^=s>>>24,n=Math.imul(n,16777619),s=e*100|0,n^=s&255,n=Math.imul(n,16777619),n^=s>>>8&255,n=Math.imul(n,16777619),n^=s>>>16&255,n=Math.imul(n,16777619),n^=s>>>24,n=Math.imul(n,16777619),r&&(s=r*100|0,n^=s&255,n=Math.imul(n,16777619),n^=s>>>8&255,n=Math.imul(n,16777619),n^=s>>>16&255,n=Math.imul(n,16777619),n^=s>>>24,n=Math.imul(n,16777619)),(n>>>0)%16777216},kh=(t,e,r,n)=>{let s=2166136261,o=t*100|0;return s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),o=e*100|0,s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),o=r*100|0,s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),o=n*100|0,s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),(s>>>0)%16777216},Ih=(t,e,r,n)=>{if(r.has(n))return;const s=e.get(n);s&&(s.set("trash",!0),r.set(n,s),t.$timerId!==null&&clearTimeout(t.$timerId),t.$removeCache=!1,t.$timerId=setTimeout(()=>{t.$removeCache=!0,t.$timerId=null},1e3))},_h=(t,e)=>{if(e.size){for(const[r,n]of e)n.has("trash")&&(t.removeById(r),t.$removeIds.push(+r));e.clear(),t.$removeCache=!1}};class Vh{_$pool;_$store;_$trash;$timerId;$removeCache;$removeIds;constructor(){this._$pool=[],this._$store=new Map,this._$trash=new Map,this.$timerId=null,this.$removeIds=[],this.$removeCache=!1}reset(){wh(this,this._$store,this._$trash)}destroy(e=null){Oh(this._$pool,e)}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(e,r){Eh(this._$store,e,r)}removeTimer(e){Ih(this,this._$store,this._$trash,e)}removeTimerScheduledCache(){_h(this,this._$trash)}removeById(e){Rh(this,this._$store,e)}getById(e){return this._$store.get(e)}get(e,r){return Ch(this._$store,e,r)}set(e,r,n=null){Uh(this,this._$store,e,r,n)}has(e,r=""){return Gh(this._$store,e,r)}generateKeys(e,r,n){return Lh(e,r,n)}generateFilterKeys(e,r,n,s){return kh(e,r,n,s)}}const ee=new Vh,ba=new Float32Array(20),Dh=(t,e,r,n,s,o,i,l,c,u,a)=>{const h=O.currentAttachmentObject;let d=null;const g=Math.sqrt(i[0]*i[0]+i[1]*i[1]),m=Math.sqrt(i[2]*i[2]+i[3]*i[3]),f=ee.generateFilterKeys(i[0],i[1],i[2],i[3]);let b=!1;if(ee.get(e,"fKey")===f){const S=ee.get(e,"fTexture");r?ae(S):(b=!0,d=S)}let y=0,P=0;if(b)y=ee.get(e,"offsetX"),P=ee.get(e,"offsetY");else{d=ji(t);const S=Math.atan2(i[1],i[0]),M=Math.atan2(-i[2],i[3]),$=o?g*Math.cos(S):Math.cos(S),T=o?g*Math.sin(S):Math.sin(S),w=o?-m*Math.sin(M):-Math.sin(M),E=o?m*Math.cos(M):Math.cos(M),F=dr($,T,w,E,n/2,s/2),A=dr(1,0,0,1,-t.w/2,-t.h/2),R=Zc(F,A);if(Kr(F),Kr(A),R[0]!==1||R[1]!==0||R[2]!==0||R[3]!==1){const v=we(n,s,!1);O.bind(v),O.reset(),O.setTransform(R[0],R[1],R[2],R[3],R[4],R[5]),y=R[4],P=R[5],$e(d);const U=Dn();Nn(U,d.width,d.height),xe(U),ae(d),d=v.texture,be(v,!1),h&&O.bind(h)}Kr(R),re.x=0,re.y=0;for(let v=0;a.length>v;)switch(a[v++]){case 0:d=fa(d,i,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++]);break;case 1:d=tr(d,i,a[v++],a[v++],a[v++]);break;case 2:for(let L=0;L<20;++L)ba[L]=a[v++];d=Ji(d,ba);break;case 3:{const L=a[v++],D=a[v++],G=L*D,B=a.subarray(v,v+G);v+=G,d=pa(d,L,D,B,a[v++],a[v++],!!a[v++],!!a[v++],a[v++],a[v++])}break;case 4:{const L=a[v++],D=new Uint8Array(L);D.set(a.subarray(v,v+L)),v+=L,d=ma(d,D,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++])}break;case 5:d=ua(d,i,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++],!!a[v++],!!a[v++]);break;case 6:d=la(d,i,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++],!!a[v++]);break;case 7:{const L=a[v++],D=a[v++];let G=a[v++];const B=a.subarray(v,v+G);v+=G,G=a[v++];const z=a.subarray(v,v+G);v+=G,G=a[v++];const k=a.subarray(v,v+G);v+=G,d=ha(d,i,L,D,B,z,k,a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++])}break;case 8:{const L=a[v++],D=a[v++];let G=a[v++];const B=a.subarray(v,v+G);v+=G,G=a[v++];const z=a.subarray(v,v+G);v+=G,G=a[v++];const k=a.subarray(v,v+G);v+=G,d=da(d,i,L,D,B,z,k,a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++])}break}}if(d){const S=vt,M=u[0]*(g/S),$=u[1]*(m/S);O.reset(),O.setTransform(1,0,0,1,0,0),O.globalCompositeOperation=c,Xn(d,l,-y+M+i[4],-P+$+i[5])}b||(ee.set(e,"fKey",f),ee.set(e,"fTexture",d),ee.set(e,"offsetX",y),ee.set(e,"offsetY",P)),h&&O.bind(h)},Js=[],Nh=(t,e)=>{O.drawArraysInstanced();const r=O.$mainAttachmentObject;Js.push(r);const n=we(t,e,!1);O.$mainAttachmentObject=n,O.bind(n)},xa=new Float32Array(20),zh=(t,e,r,n,s,o,i,l)=>{O.drawArraysInstanced();const c=O.$mainAttachmentObject;let u=null;if(n&&s&&o){u=Vn(0,0,c.width,c.height),O.$mainAttachmentObject=Js.pop(),be(c),O.bind(O.$mainAttachmentObject),re.x=0,re.y=0;for(let a=0;o.length>a;)switch(o[a++]){case 0:u=fa(u,e,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++]);break;case 1:u=tr(u,e,o[a++],o[a++],o[a++]);break;case 2:for(let d=0;d<20;++d)xa[d]=o[a++];u=Ji(u,xa);break;case 3:{const d=o[a++],g=o[a++],m=d*g,f=o.subarray(a,a+m);a+=m,u=pa(u,d,g,f,o[a++],o[a++],!!o[a++],!!o[a++],o[a++],o[a++])}break;case 4:{const d=o[a++],g=new Uint8Array(d);g.set(o.subarray(a,a+d)),a+=d,u=ma(u,g,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++])}break;case 5:u=ua(u,e,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++],!!o[a++],!!o[a++]);break;case 6:u=la(u,e,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++],!!o[a++]);break;case 7:{const d=o[a++],g=o[a++];let m=o[a++];const f=o.subarray(a,a+m);a+=m,m=o[a++];const b=o.subarray(a,a+m);a+=m,m=o[a++];const x=o.subarray(a,a+m);a+=m,u=ha(u,e,d,g,f,b,x,o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++])}break;case 8:{const d=o[a++],g=o[a++];let m=o[a++];const f=o.subarray(a,a+m);a+=m,m=o[a++];const b=o.subarray(a,a+m);a+=m,m=o[a++];const x=o.subarray(a,a+m);a+=m,u=da(u,e,d,g,f,b,x,o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++])}break}if(i&&(ee.set(i,"fKey",l),ee.set(i,"fTexture",u)),u){const a=Math.sqrt(e[0]*e[0]+e[1]*e[1]),h=Math.sqrt(e[2]*e[2]+e[3]*e[3]),d=vt,g=s[0]*(a/d),m=s[1]*(h/d);O.reset(),O.globalCompositeOperation=t,Xn(u,r,g+e[4],m+e[5])}}else u=Vn(0,0,c.width,c.height),O.$mainAttachmentObject=Js.pop(),be(c),O.bind(O.$mainAttachmentObject),u&&(O.reset(),O.globalCompositeOperation=t,Xn(u,r,e[4],e[5]),ae(u));O.bind(O.$mainAttachmentObject)},Xh=(t,e,r,n,s,o)=>{if(ee.get(s,"fKey")!==o)return;const l=ee.get(s,"fTexture");if(!l)return;const c=Math.sqrt(e[0]*e[0]+e[1]*e[1]),u=Math.sqrt(e[2]*e[2]+e[3]*e[3]),a=vt,h=n[0]*(c/a),d=n[1]*(u/a);O.drawArraysInstanced(),O.reset(),O.globalCompositeOperation=t,Xn(l,r,h+e[4],d+e[5])},ya=t=>{const e=Ai(t.index),r=e[0],n=e[1],s=e[2],o=e[3];e[0]=Math.min(t.x,r),e[1]=Math.min(t.y,n),e[2]=Math.max(t.x+t.w+1,s),e[3]=Math.max(t.y+t.h+1,o)},Yh=t=>{const e=\`s\${t?"y":"n"}\`;if(At.has(e))return At.get(e);const r=new _e(kn(t?9:0,!1,!1,t),Vu());return At.set(e,r),r},Wh=(t,e)=>{const r=t.highp;r[0]=e[0],r[1]=e[1],r[2]=0,r[4]=e[2],r[5]=e[3],r[6]=0,r[8]=e[4],r[9]=e[5],r[10]=1,r[12]=e[6],r[13]=e[7],r[14]=0,r[16]=e[8],r[17]=e[9],r[18]=0,r[20]=e[10],r[21]=e[11],r[22]=1,r[3]=pt,r[7]=mt,r[11]=e[12],r[15]=e[13],r[19]=e[14],r[23]=e[15],r[24]=e[16],r[25]=e[17],r[26]=e[18],r[27]=e[19],r[28]=e[20],r[29]=e[21],r[30]=e[22],r[31]=e[23],r[32]=e[24],r[33]=e[25]};let Wn=0;const va=1,Ma=2,Sa=t=>{Wn=t},jh=()=>{Wn=0};let eo=!0;const to=t=>{eo=t};let ro=!1;const no=t=>{ro=t},jn=()=>{Wn!==va&&(Sa(va),p.stencilFunc(p.ALWAYS,0,255),p.stencilOpSeparate(p.FRONT,p.KEEP,p.KEEP,p.INCR_WRAP),p.stencilOpSeparate(p.BACK,p.KEEP,p.KEEP,p.DECR_WRAP)),eo&&(to(!1),p.colorMask(!1,!1,!1,!1))},Hn=()=>{Wn!==Ma&&(Sa(Ma),p.stencilFunc(p.NOTEQUAL,0,255),p.stencilOp(p.KEEP,p.ZERO,p.ZERO)),eo||(to(!0),p.colorMask(!0,!0,!0,!0))},Kn=()=>{ro||(no(!0),p.enable(p.SAMPLE_ALPHA_TO_COVERAGE))},qn=()=>{ro&&(no(!1),p.disable(p.SAMPLE_ALPHA_TO_COVERAGE))},Hh=(t,e,r,n)=>{jn();const s=!!n,o=sn(s);n&&on(o,n),Kn(),rt(o,t,e,r),qn(),Hn();const i=Yh(s);n&&Wh(i,n),rt(i,t,e,r)},Kh=(t,e,r,n,s)=>{const o=t.mediump;let i=0;for(let l=r;l{const r=O.currentAttachmentObject,n=p.getParameter(p.SCISSOR_BOX);yt();const s=e===0,o=t.length/5,i=dh(o),l=sa(i);O.bind(l);const c=s?aa:ca;Tr();const u=ia();for(let a=0;a{const s=t?"y":"n",o=e?"y":"n",i=e&&r?"y":"n",l=\`\${n}\`;return\`\${s}\${o}\${i}\${l}\`},Qh=t=>\` + vec2 focal = vec2(u_highp[\${t}][1], 0.0); + + vec2 diff = coord - focal; + float lenDiff = length(diff); + vec2 dir = diff / lenDiff; + float b = 2.0 * dot(dir, focal); + float c = dot(focal, focal) - 1.0; + float x = (-b + sqrt(max(b * b - 4.0 * c, 0.0))) * 0.5; + + float t = lenDiff / abs(x);\`,Zh=()=>"float t = length(coord);",Jh=(t,e)=>{const r=e?Qh(t):Zh();return\` + float radius = u_highp[\${t}][0]; + vec2 coord = p / radius; + \${r} +\`},ed=t=>\` + vec2 a = u_highp[\${t}].xy; + vec2 b = u_highp[\${t}].zw; + + vec2 ab = b - a; + vec2 ap = p - a; + + float t = dot(ab, ap) / dot(ab, ab);\`,td=(t,e,r,n,s)=>{const o=r?Jh(e,n):ed(e);let i;switch(s){case 0:i="1.0 - abs(fract(t * 0.5) * 2.0 - 1.0)";break;case 1:i="fract(t)";break;default:i="clamp(t, 0.0, 1.0)";break}return\`#version 300 es +precision highp float; + +uniform sampler2D u_texture; +uniform vec4 u_highp[\${t}]; + +in vec2 v_uv; +out vec4 o_color; + +void main() { + vec2 p = v_uv; + \${o} + t = \${i}; + o_color = texture(u_texture, vec2(t, 0.5)); +}\`},Ta=(t,e,r,n)=>{const s=qh(n,t,e,r);if(so.has(s))return so.get(s);const o=(n?14:5)+1,i=o-1,l=new _e(kn(o,!0,!1,n),td(o,i,t,e,r));return so.set(s,l),l},Ba=(t,e,r,n,s=0,o=null,i=null)=>{const l=t.highp;l[0]=r[0],l[1]=r[1],l[2]=r[2],l[4]=r[3],l[5]=r[4],l[6]=r[5],l[8]=r[6],l[9]=r[7],l[10]=r[8],l[12]=n[0],l[13]=n[1],l[14]=n[2],l[16]=n[3],l[17]=n[4],l[18]=n[5],l[11]=n[6],l[15]=n[7],l[19]=n[8],l[3]=pt,l[7]=mt;let c=20;i&&(l[20]=i[0],l[21]=i[1],l[22]=0,l[24]=i[2],l[25]=i[3],l[26]=0,l[28]=i[4],l[29]=i[5],l[30]=1,l[32]=i[6],l[33]=i[7],l[34]=0,l[36]=i[8],l[37]=i[9],l[38]=0,l[40]=i[10],l[41]=i[11],l[42]=1,l[31]=i[12],l[35]=i[13],l[39]=i[14],l[43]=i[15],l[44]=i[16],l[45]=i[17],l[46]=i[18],l[47]=i[19],l[48]=i[20],l[49]=i[21],l[50]=i[22],l[51]=i[23],l[52]=i[24],l[53]=i[25],c=56),e===0?(l[c++]=o[0],l[c++]=o[1],l[c++]=o[2],l[c]=o[3]):(l[c++]=819.2,l[c]=jr(s,-.975,.975,0))},Qn=()=>{jh(),to(!0),no(!1)},rd=(t,e,r,n)=>{const s=qe.shift(),o=qe.shift(),i=qe.shift(),l=qe.shift();Qn(),Wr();const c=$a(s,l);$e(c),Yr(),p.stencilMask(255),jn();const u=!!n,a=sn(u);n&&on(a,n),Kn(),rt(a,t,e,r),qn(),Hn();const h=Ta(!1,!1,i,u),d=qc(o),g=ys(O.$matrix);Ba(h,0,O.$matrix,g,0,d,n),di(d),Kr(g),rt(h,t,e,r)},nd=(t,e,r,n)=>{const s=qe.shift(),o=qe.shift(),i=qe.shift(),l=qe.shift(),c=qe.shift();Qn(),Wr();const u=$a(s,l);$e(u),Yr(),p.stencilMask(255),jn();const a=!!n,h=sn(a);n&&on(h,n),Kn(),rt(h,t,e,r),qn(),Hn(),O.save(),O.transform(o[0],o[1],o[2],o[3],o[4],o[5]);const d=O.$stack[O.$stack.length-1],g=ys(O.$matrix),m=Ta(!0,!!c,i,a);Ba(m,1,d,g,c,n),O.restore(),Kr(g),rt(m,t,e,r)},oo=new Map,sd=(t,e)=>{const r=\`b\${t?"y":"n"}\${e?"y":"n"}\`;if(oo.has(r))return oo.get(r);const n=t?Nu():Du(),s=new _e(kn(e?14:5,!0,!1,e),n);return oo.set(r,s),s},od=(t,e,r,n)=>{const s=t.highp,o=O.$stack[O.$stack.length-1];s[0]=o[0],s[1]=o[1],s[2]=o[2],s[4]=o[3],s[5]=o[4],s[6]=o[5],s[8]=o[6],s[9]=o[7],s[10]=o[8];const i=ys(O.$matrix);s[12]=i[0],s[13]=i[1],s[14]=i[2],s[16]=i[3],s[17]=i[4],s[18]=i[5],s[11]=i[6],s[15]=i[7],s[19]=i[8],s[3]=pt,s[7]=mt,n&&(s[20]=n[0],s[21]=n[1],s[22]=0,s[24]=n[2],s[25]=n[3],s[26]=0,s[28]=n[4],s[29]=n[5],s[30]=1,s[32]=n[6],s[33]=n[7],s[34]=0,s[36]=n[8],s[37]=n[9],s[38]=0,s[40]=n[10],s[41]=n[11],s[42]=1,s[31]=n[12],s[35]=n[13],s[39]=n[14],s[43]=n[15],s[44]=n[16],s[45]=n[17],s[46]=n[18],s[47]=n[19],s[48]=n[20],s[49]=n[21],s[50]=n[22],s[51]=n[23],s[52]=n[24],s[53]=n[25]);const l=t.mediump;l[0]=e,l[1]=r},id=(t,e,r,n)=>{jn();const s=!!n,o=sn(s);n&&on(o,n),Kn(),rt(o,t,e,r),qn();const i=Vt.shift(),l=Vt.shift(),c=Vt.shift(),u=Vt.shift(),a=Vt.shift(),h=Vt.shift(),d=qs(c,u,i,h);O.save(),O.transform(l[0],l[1],l[2],l[3],l[4],l[5]),Hn();const g=sd(a,s);od(g,c,u,n),rt(g,t,e,r),O.restore(),ae(d)},ad=()=>{const t=Ii();Yr(),p.stencilMask(255),Qn();let e=0,r=null;for(let n=0;n{const r=Hi(0,0,t,e);$e(r),p.bindFramebuffer(p.FRAMEBUFFER,Si),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,r.resource,0);const n=new Uint8Array(t*e*4),s=O.$mainAttachmentObject;n.byteLength>io&&(io=Fn(n.byteLength),p.bufferData(p.PIXEL_PACK_BUFFER,io,p.STREAM_READ)),p.readPixels(0,s.height-e,t,e,p.RGBA,p.UNSIGNED_BYTE,0);const o=p.fenceSync(p.SYNC_GPU_COMMANDS_COMPLETE,0);await new Promise(i=>{const l=()=>{if(p.clientWaitSync(o,p.SYNC_FLUSH_COMMANDS_BIT,0)===p.TIMEOUT_EXPIRED){requestAnimationFrame(l);return}return p.deleteSync(o),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,n),i()};l()}),p.bindFramebuffer(p.FRAMEBUFFER,Tt);for(let i=0;i0?le.float32Array4Pool.pop():new Float32Array(4)}static poolFloat32Array4(e){e.length===4&&le.float32Array4Pool.push(e)}}let st=null;const ud=t=>{st=t},fd=()=>le.getFloat32Array4(),hd=t=>{le.poolFloat32Array4(t)},dd=(t,e,r,n)=>{const s=n.x-t.x,o=n.y-t.y,i=s*s+o*o;if(i<1e-10){const h=(e.x-t.x)*(e.x-t.x)+(e.y-t.y)*(e.y-t.y),d=(r.x-t.x)*(r.x-t.x)+(r.y-t.y)*(r.y-t.y);return Math.max(h,d)}const l=(e.x-t.x)*o-(e.y-t.y)*s,c=l*l/i,u=(r.x-t.x)*o-(r.y-t.y)*s,a=u*u/i;return Math.max(c,a)},pd=(t,e,r,n)=>{const s={x:(t.x+e.x)*.5,y:(t.y+e.y)*.5},o={x:(e.x+r.x)*.5,y:(e.y+r.y)*.5},i={x:(r.x+n.x)*.5,y:(r.y+n.y)*.5},l={x:(s.x+o.x)*.5,y:(s.y+o.y)*.5},c={x:(o.x+i.x)*.5,y:(o.y+i.y)*.5},u={x:(l.x+c.x)*.5,y:(l.y+c.y)*.5};return{first:[t,s,l,u],second:[u,c,i,n]}},Aa=.25,md=8,gd=(t,e,r,n,s=Aa)=>{const o=[],i=(l,c,u,a,h)=>{if(dd(l,c,u,a)<=s||h>=md){const m={x:(c.x+u.x)*.5,y:(c.y+u.y)*.5};o.push({ctrl:m,end:a});return}const g=pd(l,c,u,a);i(g.first[0],g.first[1],g.first[2],g.first[3],h+1),i(g.second[0],g.second[1],g.second[2],g.second[3],h+1)};return i(t,e,r,n,0),o},bd=t=>{const r=Aa/(t*t);return Math.max(.0625,Math.min(4,r))};class xd{$currentPath;$vertices;$currentX;$currentY;$startX;$startY;constructor(){this.$currentPath=[],this.$vertices=[],this.$currentX=0,this.$currentY=0,this.$startX=0,this.$startY=0}beginPath(){this.$currentPath=[],this.$vertices=[],this.$currentX=0,this.$currentY=0,this.$startX=0,this.$startY=0}moveTo(e,r){this.$currentPath.length>=6&&this.$vertices.push(this.$currentPath),this.$currentPath=[e,r,!1],this.$currentX=e,this.$currentY=r,this.$startX=e,this.$startY=r}lineTo(e,r){e===this.$currentX&&r===this.$currentY||(this.$currentPath.push(e,r,!1),this.$currentX=e,this.$currentY=r)}quadraticCurveTo(e,r,n,s){this.$currentPath.push(e,r,!0),this.$currentPath.push(n,s,!1),this.$currentX=n,this.$currentY=s}$flatnessThreshold=.25;setScale(e){this.$flatnessThreshold=bd(e)}bezierCurveTo(e,r,n,s,o,i){const l={x:this.$currentX,y:this.$currentY},h=gd(l,{x:e,y:r},{x:n,y:s},{x:o,y:i},this.$flatnessThreshold);for(const d of h)this.$currentPath.push(d.ctrl.x,d.ctrl.y,!0),this.$currentPath.push(d.end.x,d.end.y,!1);this.$currentX=o,this.$currentY=i}arc(e,r,n){const s=n,o=n*.5522847498307936;this.bezierCurveTo(e+s,r+o,e+o,r+s,e,r+s),this.bezierCurveTo(e-o,r+s,e-s,r+o,e-s,r),this.bezierCurveTo(e-s,r-o,e-o,r-s,e,r-s),this.bezierCurveTo(e+o,r-s,e+s,r-o,e+s,r);const i=this.$currentPath.length;i>=3&&(this.$currentPath[i-3]=this.$startX,this.$currentPath[i-2]=this.$startY),this.$currentX=this.$startX,this.$currentY=this.$startY}closePath(){this.$currentPath.length>=3&&(this.$currentX!==this.$startX||this.$currentY!==this.$startY)&&this.$currentPath.push(this.$startX,this.$startY,!1)}get $getVertices(){const e=[...this.$vertices];return this.$currentPath.length>=9&&e.push(this.$currentPath),e}generateVertices(){const e=this.$getVertices,r=[];for(const n of e){if(n.length<9)continue;const s=[];for(let o=0;o0&&e.push(n)}if(this.$currentPath.length>=3){const r=[];for(let n=0;n0&&e.push(r)}return e}getVerticesForStroke(){const e=[...this.$vertices];return this.$currentPath.length>=6&&e.push(this.$currentPath),e}reset(){this.$currentPath=[],this.$vertices=[],this.$currentX=0,this.$currentY=0,this.$startX=0,this.$startY=0}}const yd=(t,e,r,n)=>new Float32Array([t,e,0,0,t+r,e,1,0,t,e+n,0,1,t+r,e,1,0,t+r,e+n,1,1,t,e+n,0,1]),vd=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t+1),Md=(t,e,r,n)=>{const s=vd(r),o=e.get(s);let i;return o&&o.length>0?(i=o.pop(),n&&t.queue.writeBuffer(i,0,n.buffer,n.byteOffset,n.byteLength)):n?(i=t.createBuffer({size:s,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),new Float32Array(i.getMappedRange()).set(n),i.unmap()):i=t.createBuffer({size:s,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),i},Sd=(t,e,r)=>{const n=Math.ceil(r/16)*16,s=e.get(n);return s&&s.length>0?s.pop():t.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST})},$d=32,Fa=(t,e)=>{const r=e.size;let n=t.get(r);if(n||(n=[],t.set(r,n)),n.length>=$d){e.destroy();return}n.push(e)},Td=32,wa=(t,e)=>{const r=e.size;let n=t.get(r);if(n||(n=[],t.set(r,n)),n.length>=Td){e.destroy();return}n.push(e)},Bd=(t,e)=>t.createBuffer({size:e.size,usage:e.usage|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX,label:e.label||"storage_buffer"}),Pd=(t,e,r,n)=>{const s=Math.ceil(r/256)*256;let o=null,i=1/0;for(const u of e)if(!u.inUse&&u.size>=s){const a=u.size-s;a{for(const r of t)if(r.buffer===e){r.inUse=!1;return}},Fd=(t,e,r=60)=>{for(let n=t.length-1;n>=0;n--){const s=t[n];!s.inUse&&e-s.lastUsedFrame>r&&(s.buffer.destroy(),t.splice(n,1))}},Oa=(t,e,r,n=0,s=0)=>{const o=new Uint32Array([e,r,n,s]),i=t.createBuffer({size:o.byteLength,usage:GPUBufferUsage.INDIRECT|GPUBufferUsage.COPY_DST,mappedAtCreation:!0,label:"indirect_buffer"});return new Uint32Array(i.getMappedRange()).set(o),i.unmap(),i},Ea=(t,e,r,n,s=0,o=0)=>{const i=new Uint32Array([r,n,s,o]);t.queue.writeBuffer(e,0,i)};class wd{device;buffer=null;offset=0;capacity;alignment=256;pendingDestroyBuffers=[];stagingBuffer;stagingFloat32;dirtyEnd=0;constructor(e,r=65536){this.device=e,this.capacity=r,this.stagingBuffer=new ArrayBuffer(r),this.stagingFloat32=new Float32Array(this.stagingBuffer)}resetFrame(){this.offset=0,this.dirtyEnd=0;for(const e of this.pendingDestroyBuffers)e.destroy();this.pendingDestroyBuffers.length=0}getBuffer(){return this.buffer||(this.buffer=this.device.createBuffer({size:this.capacity,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST})),this.buffer}allocate(e){this.buffer||this.getBuffer();const r=this.offset,n=e.byteLength;if(r+n>this.capacity){this.flush(),this.capacity*=2;const o=this.buffer;this.buffer=this.device.createBuffer({size:this.capacity,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),o&&this.pendingDestroyBuffers.push(o),this.stagingBuffer=new ArrayBuffer(this.capacity),this.stagingFloat32=new Float32Array(this.stagingBuffer)}this.stagingFloat32.set(e,r/4);const s=r+n;return s>this.dirtyEnd&&(this.dirtyEnd=s),this.offset=r+Math.ceil(n/this.alignment)*this.alignment,r}flush(){this.dirtyEnd>0&&this.buffer&&(this.device.queue.writeBuffer(this.buffer,0,this.stagingBuffer,0,this.dirtyEnd),this.dirtyEnd=0)}dispose(){this.buffer&&(this.buffer.destroy(),this.buffer=null);for(const e of this.pendingDestroyBuffers)e.destroy();this.pendingDestroyBuffers.length=0}}class Od{device;vertexBuffers;uniformBuffers;vertexBufferBuckets;uniformBufferBuckets;storageBufferPool;indirectBuffer;indirectBufferPool;frameIndirectBuffers;frameNumber;unitRectBuffer;frameVertexPoolBuffers;frameUniformPoolBuffers;dynamicUniform;constructor(e){this.device=e,this.vertexBuffers=new Map,this.uniformBuffers=new Map,this.vertexBufferBuckets=new Map,this.uniformBufferBuckets=new Map,this.storageBufferPool=[],this.indirectBuffer=null,this.indirectBufferPool=[],this.frameIndirectBuffers=[],this.frameNumber=0,this.unitRectBuffer=null,this.frameVertexPoolBuffers=[],this.frameUniformPoolBuffers=[],this.dynamicUniform=new wd(e)}createVertexBuffer(e,r){const n=this.device.createBuffer({size:r.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});return new Float32Array(n.getMappedRange()).set(r),n.unmap(),this.vertexBuffers.set(e,n),n}createUniformBuffer(e,r){const n=this.device.createBuffer({size:r,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return this.uniformBuffers.set(e,n),n}updateUniformBuffer(e,r){const n=this.uniformBuffers.get(e);n&&this.device.queue.writeBuffer(n,0,r.buffer,r.byteOffset,r.byteLength)}getVertexBuffer(e){return this.vertexBuffers.get(e)}getUniformBuffer(e){return this.uniformBuffers.get(e)}createRectVertices(e,r,n,s){return yd(e,r,n,s)}acquireVertexBuffer(e,r){const n=Md(this.device,this.vertexBufferBuckets,e,r);return this.frameVertexPoolBuffers.push(n),n}releaseVertexBuffer(e){Fa(this.vertexBufferBuckets,e)}acquireUniformBuffer(e){const r=Sd(this.device,this.uniformBufferBuckets,e);return this.frameUniformPoolBuffers.push(r),r}acquireAndWriteUniformBuffer(e,r){const n=r??e.byteLength,s=this.acquireUniformBuffer(n);return this.device.queue.writeBuffer(s,0,e.buffer,e.byteOffset,n),s}releaseUniformBuffer(e){wa(this.uniformBufferBuckets,e)}destroyBuffer(e){const r=this.vertexBuffers.get(e);r&&(r.destroy(),this.vertexBuffers.delete(e));const n=this.uniformBuffers.get(e);n&&(n.destroy(),this.uniformBuffers.delete(e))}dispose(){for(const e of this.vertexBuffers.values())e.destroy();this.vertexBuffers.clear();for(const e of this.uniformBuffers.values())e.destroy();this.uniformBuffers.clear();for(const e of this.vertexBufferBuckets.values())for(const r of e)r.destroy();this.vertexBufferBuckets.clear();for(const e of this.uniformBufferBuckets.values())for(const r of e)r.destroy();this.uniformBufferBuckets.clear();for(const e of this.storageBufferPool)e.buffer.destroy();this.storageBufferPool=[],this.indirectBuffer&&(this.indirectBuffer.destroy(),this.indirectBuffer=null);for(const e of this.indirectBufferPool)e.destroy();this.indirectBufferPool=[];for(const e of this.frameIndirectBuffers)e.destroy();this.frameIndirectBuffers=[],this.unitRectBuffer&&(this.unitRectBuffer.destroy(),this.unitRectBuffer=null),this.frameVertexPoolBuffers.length=0,this.frameUniformPoolBuffers.length=0,this.dynamicUniform.dispose()}getPoolStats(){let e=0;for(const n of this.vertexBufferBuckets.values())e+=n.length;let r=0;for(const n of this.uniformBufferBuckets.values())r+=n.length;return{vertexPoolSize:e,uniformPoolSize:r}}clearFrameBuffers(){for(const e of this.vertexBuffers.values())e.destroy();this.vertexBuffers.clear();for(const e of this.uniformBuffers.values())e.destroy();this.uniformBuffers.clear();for(const e of this.frameVertexPoolBuffers)Fa(this.vertexBufferBuckets,e);this.frameVertexPoolBuffers.length=0;for(const e of this.frameUniformPoolBuffers)wa(this.uniformBufferBuckets,e);this.frameUniformPoolBuffers.length=0;for(const e of this.frameIndirectBuffers)this.indirectBufferPool.push(e);this.frameIndirectBuffers.length=0,this.releaseAllStorageBuffers(),this.dynamicUniform.resetFrame(),this.frameNumber++,this.frameNumber%60===0&&Fd(this.storageBufferPool,this.frameNumber)}releaseAllStorageBuffers(){for(const e of this.storageBufferPool)e.inUse=!1}acquireStorageBuffer(e){return Pd(this.device,this.storageBufferPool,e,this.frameNumber)}releaseStorageBuffer(e){Ad(this.storageBufferPool,e)}writeStorageBuffer(e,r){this.device.queue.writeBuffer(e,0,r.buffer,r.byteOffset,r.byteLength)}getOrCreateIndirectBuffer(e,r,n=0,s=0){return this.indirectBuffer?Ea(this.device,this.indirectBuffer,e,r,n,s):this.indirectBuffer=Oa(this.device,e,r,n,s),this.indirectBuffer}createIndirectBuffer(e,r,n=0,s=0){let o=this.indirectBufferPool.pop();return o?Ea(this.device,o,e,r,n,s):o=Oa(this.device,e,r,n,s),this.frameIndirectBuffers.push(o),o}getUnitRectBuffer(){if(!this.unitRectBuffer){const e=this.createRectVertices(0,0,1,1);this.unitRectBuffer=this.device.createBuffer({size:e.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),new Float32Array(this.unitRectBuffer.getMappedRange()).set(e),this.unitRectBuffer.unmap()}return this.unitRectBuffer}getFrameNumber(){return this.frameNumber}getStoragePoolStats(){const e=this.storageBufferPool.filter(r=>r.inUse).length;return{storagePoolSize:this.storageBufferPool.length,storagePoolInUse:e}}}const Ed=(t,e)=>{const r=t.createSampler({magFilter:"linear",minFilter:"linear",mipmapFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});e.set("linear",r);const n=t.createSampler({magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});e.set("nearest",n);const s=t.createSampler({magFilter:"nearest",minFilter:"linear",mipmapFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});e.set("atlas_instanced_sampler",s);const o=t.createSampler({magFilter:"linear",minFilter:"linear",mipmapFilter:"linear",addressModeU:"repeat",addressModeV:"repeat"});e.set("repeat",o)},Rd=(t,e,r,n,s,o)=>{const i=t.createTexture({size:{width:s,height:o},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return t.queue.writeTexture({texture:i},n.buffer,{bytesPerRow:s*4,offset:n.byteOffset},{width:s,height:o}),e.set(r,i),i},Cd=(t,e,r,n)=>{const s=t.createTexture({size:{width:n.width,height:n.height},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return t.queue.copyExternalImageToTexture({source:n,flipY:!0},{texture:s,premultipliedAlpha:!0},{width:n.width,height:n.height}),e.set(r,s),s};class Ud{device;textures;samplers;constructor(e){this.device=e,this.textures=new Map,this.samplers=new Map,Ed(e,this.samplers)}createTexture(e,r,n,s="rgba8unorm"){const o=this.device.createTexture({size:{width:r,height:n},format:s,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return this.textures.set(e,o),o}createTextureFromPixels(e,r,n,s){return Rd(this.device,this.textures,e,r,n,s)}createTextureFromImageBitmap(e,r){return Cd(this.device,this.textures,e,r)}updateTexture(e,r,n,s){const o=this.textures.get(e);o&&this.device.queue.writeTexture({texture:o},r.buffer,{bytesPerRow:n*4,offset:r.byteOffset},{width:n,height:s})}getTexture(e){return this.textures.get(e)}getSampler(e){return this.samplers.get(e)}createSampler(e,r=!0){const n=this.samplers.get(e);if(n)return n;const s=this.device.createSampler({magFilter:r?"linear":"nearest",minFilter:r?"linear":"nearest",mipmapFilter:r?"linear":"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});return this.samplers.set(e,s),s}destroyTexture(e){const r=this.textures.get(e);r&&(r.destroy(),this.textures.delete(e))}dispose(){for(const e of this.textures.values())e.destroy();this.textures.clear(),this.samplers.clear()}}const Gd=(t,e,r,n,s,o,i,l,c)=>{const u=n==="atlas"||n.startsWith("atlas_"),a=u||n.startsWith("temp_")?"rgba8unorm":e,h=i||u&&ao>1,d=h?ao:1,g=t.createTexture({size:{width:s,height:o},format:a,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST}),m=g.createView(),f={id:c.textureId++,resource:g,view:m,width:s,height:o,area:s*o,smooth:!0};let b=null;if(h){const S=t.createTexture({size:{width:s,height:o},format:a,sampleCount:d,usage:GPUTextureUsage.RENDER_ATTACHMENT}),M=S.createView();b={id:c.textureId++,resource:S,view:M,width:s,height:o,area:s*o,smooth:!0}}let x=null,y=null;if(u||n==="main"||l){const S=t.createTexture({size:{width:s,height:o},format:"stencil8",usage:GPUTextureUsage.RENDER_ATTACHMENT}),M=S.createView();if(x={id:c.stencilId++,resource:S,view:M,width:s,height:o,area:s*o,dirty:!1},h){const $=t.createTexture({size:{width:s,height:o},format:"stencil8",sampleCount:d,usage:GPUTextureUsage.RENDER_ATTACHMENT}),T=$.createView();y={id:c.stencilId++,resource:$,view:T,width:s,height:o,area:s*o,dirty:!1}}}const P={id:c.nextId++,width:s,height:o,clipLevel:0,msaa:h,mask:l,color:null,texture:f,stencil:x,msaaTexture:b,msaaStencil:y};return r.set(n,P),P},Ld=(t,e,r)=>{for(const[n,s]of t.entries())if(s.id===r.id){t.delete(n),e.push(s);break}},cn={r:0,g:0,b:0,a:0},Zn={view:null,clearValue:cn,loadOp:"clear",storeOp:"store"},kd={colorAttachments:[Zn]},Id=(t,e=0,r=0,n=0,s=0,o="clear",i=null)=>(Zn.view=t,cn.r=e,cn.g=r,cn.b=n,cn.a=s,Zn.loadOp=o,Zn.resolveTarget=i??void 0,kd),Jn={view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"load",storeOp:"store"},co={view:null,stencilClearValue:0,stencilLoadOp:"clear",stencilStoreOp:"store"},_d={colorAttachments:[Jn],depthStencilAttachment:co},Vd=(t,e,r="load",n="clear",s=null)=>(Jn.view=t,Jn.loadOp=r,Jn.resolveTarget=s??void 0,co.view=e,co.stencilLoadOp=n,_d),Dd=(t,e,r)=>\`\${t}_\${e}_\${r}\`,Nd=(t,e,r,n,s,o,i,l,c)=>{const u=Dd(r,n,s),a=e.get(u);if(a)for(let g=0;g=l){let g=1/0,m="",f=-1;for(const[b,x]of e)for(let y=0;y=0){const b=e.get(m);b[f].texture.destroy(),b.splice(f,1),b.length===0&&e.delete(m),c[0]--}}const h=t.createTexture({size:{width:r,height:n},format:s,usage:o}),d={texture:h,width:r,height:n,format:s,lastUsedFrame:i,inUse:!0};return a?a.push(d):e.set(u,[d]),c[0]++,h},zd=(t,e,r)=>{for(const n of t.values())for(let s=0;s{const s=e-r;for(const[o,i]of t){for(let l=i.length-1;l>=0;l--){const c=i[l];!c.inUse&&c.lastUsedFrame({id:t.attachmentId++,width:0,height:0,clipLevel:0,msaa:!1,mask:!1,color:null,texture:null,stencil:null,msaaTexture:null,msaaStencil:null}),qd=(t,e,r,n)=>{const s=t.createTexture({size:{width:e,height:r},format:"depth24plus-stencil8",usage:GPUTextureUsage.RENDER_ATTACHMENT});return{id:n.stencilId++,resource:s,view:s.createView(),width:e,height:r,area:e*r,dirty:!1}},Qd=(t,e,r,n,s)=>{for(let o=0;o=r&&i.height>=n)return e.splice(o,1),i.dirty=!1,i}return qd(t,r,n,s)},Zd=(t,e,r,n)=>{const s=t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST});return{resource:s,view:s.createView(),stencil:n,width:e,height:r,area:e*r,dirty:!1}},Jd=(t,e,r,n,s)=>{for(let o=0;o=r&&i.height>=n)return e.splice(o,1),i.stencil=s,i.dirty=!1,i}return Zd(t,r,n,s)},ep=(t,e,r,n,s)=>{const o=t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST}),i=o.createView();return{id:s.textureId++,resource:o,view:i,width:e,height:r,area:e*r,smooth:n}},tp=(t,e,r,n,s,o)=>{const i=\`\${r}x\${n}_smooth\`;if(e.has(i)){const l=e.get(i);if(l.length>0)return l.pop()}return ep(t,r,n,s,o)},rp=(t,e,r,n,s,o,i,l,c)=>{const u=e.length>0?e.pop():Kd(c);u.width=o,u.height=i,u.msaa=l,u.mask=!1,u.clipLevel=0;const a=Qd(t,s,o,i,c),h=Jd(t,n,o,i,a);u.color=h,u.stencil=a;const d=tp(t,r,o,i,!0,c);return u.texture=d,u},np=(t,e)=>{const r=\`\${e.width}x\${e.height}_\${e.smooth?"smooth":"nearest"}\`;t.has(r)||t.set(r,[]),t.get(r).push(e)},sp=(t,e,r,n,s)=>{s.texture&&(np(e,s.texture),s.texture=null),s.color&&(r.push(s.color),s.color=null),s.stencil&&(n.push(s.stencil),s.stencil=null),t.push(s)},ln={r:0,g:0,b:0,a:0},lo={view:null,loadOp:"clear",storeOp:"store",clearValue:ln},Ra={view:null,depthLoadOp:"clear",depthStoreOp:"store",depthClearValue:1,stencilLoadOp:"clear",stencilStoreOp:"store",stencilClearValue:0},uo={colorAttachments:[lo]},op=(t,e,r,n,s,o="clear")=>{const i=t.color?.view??t.texture?.view;if(!i)throw new Error("No color view available for render pass");return lo.view=i,lo.loadOp=o,ln.r=e,ln.g=r,ln.b=n,ln.a=s,t.stencil?.view?(Ra.view=t.stencil.view,uo.depthStencilAttachment=Ra):uo.depthStencilAttachment=void 0,uo};class ip{device;attachmentPool;texturePool;colorBufferPool;stencilBufferPool;idCounter;currentAttachment;constructor(e){this.device=e,this.attachmentPool=[],this.texturePool=new Map,this.colorBufferPool=[],this.stencilBufferPool=[],this.idCounter={attachmentId:0,textureId:0,stencilId:0},this.currentAttachment=null}getAttachmentObject(e,r,n=!1){return rp(this.device,this.attachmentPool,this.texturePool,this.colorBufferPool,this.stencilBufferPool,e,r,n,this.idCounter)}bindAttachment(e){this.currentAttachment=e}getCurrentAttachment(){return this.currentAttachment}get currentAttachmentObject(){return this.currentAttachment}unbindAttachment(){this.currentAttachment=null}releaseAttachment(e){sp(this.attachmentPool,this.texturePool,this.colorBufferPool,this.stencilBufferPool,e)}createRenderPassDescriptor(e,r,n,s,o,i="clear"){return op(e,r,n,s,o,i)}dispose(){for(const e of this.texturePool.values())for(const r of e)r.resource.destroy();this.texturePool.clear();for(const e of this.colorBufferPool)e.resource.destroy();this.colorBufferPool=[];for(const e of this.stencilBufferPool)e.resource.destroy();this.stencilBufferPool=[];for(const e of this.attachmentPool)e.texture&&e.texture.resource.destroy(),e.color&&e.color.resource.destroy(),e.stencil&&e.stencil.resource.destroy();this.attachmentPool=[]}}const Ca=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, +} + +struct FillUniforms { + color: vec4, + matrix0: vec4, + matrix1: vec4, + matrix2: vec4, +} + +@group(0) @binding(0) var uniforms: FillUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrix0.xyz, uniforms.matrix1.xyz, uniforms.matrix2.xyz); + let transformed = matrix * vec3(input.position, 1.0); + let ndc = transformed.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.bezier = input.bezier; + output.color = uniforms.color; + return output; +} +\`,Ua=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, +} + +struct FillUniforms { + color: vec4, + matrix0: vec4, + matrix1: vec4, + matrix2: vec4, +} + +@group(0) @binding(0) var uniforms: FillUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrix0.xyz, uniforms.matrix1.xyz, uniforms.matrix2.xyz); + let transformed = matrix * vec3(input.position, 1.0); + let ndc = transformed.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.bezier = input.bezier; + return output; +} +\`,Ga=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) color: vec4, +} + +struct FillUniforms { + color: vec4, + matrix0: vec4, + matrix1: vec4, + matrix2: vec4, +} + +@group(0) @binding(0) var uniforms: FillUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrix0.xyz, uniforms.matrix1.xyz, uniforms.matrix2.xyz); + let transformed = matrix * vec3(input.position, 1.0); + let ndc = transformed.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.color = uniforms.color; + return output; +} +\`,ap=\` +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, +} + +struct Uniforms { + viewportSize: vec2, + _padding0: vec2, + matrixCol0: vec3, + _padding1: f32, + matrixCol1: vec3, + _padding2: f32, + matrixCol2: vec3, + _padding3: f32, +} + +@group(0) @binding(0) var uniforms: Uniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrixCol0, uniforms.matrixCol1, uniforms.matrixCol2); + let transformed = matrix * vec3(input.position, 1.0); + let pos = transformed.xy; + let ndc = pos * 2.0 - 1.0; + output.position = vec4(ndc.x, -ndc.y, 0.0, 1.0); + output.bezier = input.bezier; + return output; +} +\`,La=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) texCoord: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +struct Uniforms { + matrix: mat3x3, + color: vec4, + alpha: f32, +} + +@group(0) @binding(0) var uniforms: Uniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let pos = uniforms.matrix * vec3(input.position, 1.0); + let ndc = pos.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.texCoord = input.texCoord; + let premultipliedColor = vec4( + uniforms.color.rgb * uniforms.color.a * uniforms.alpha, + uniforms.color.a * uniforms.alpha + ); + output.color = premultipliedColor; + return output; +} +\`,cp=\` +struct VertexInput { + @location(0) position: vec2, + @location(1) texCoord: vec2, +} + +struct InstanceInput { + @location(2) textureRect: vec4, + @location(3) textureDim: vec4, + @location(4) matrixTx: vec4, + @location(5) matrixScale: vec4, + @location(6) mulColor: vec4, + @location(7) addColor: vec4, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) mulColor: vec4, + @location(2) addColor: vec4, +} + +@vertex +fn main( + input: VertexInput, + instance: InstanceInput, + @builtin(instance_index) instanceIdx: u32 +) -> VertexOutput { + var output: VertexOutput; + let texX = instance.textureRect.x + input.texCoord.x * instance.textureRect.z; + let texY = instance.textureRect.y + input.texCoord.y * instance.textureRect.w; + output.texCoord = vec2(texX, texY); + var pos = vec2(input.position.x, 1.0 - input.position.y); + pos = pos * vec2(instance.textureDim.x, instance.textureDim.y); + let scale0 = instance.matrixScale.x; + let rotate0 = instance.matrixScale.y; + let scale1 = instance.matrixScale.z; + let rotate1 = instance.matrixScale.w; + let transformedX = pos.x * scale0 + pos.y * scale1 + instance.matrixTx.x; + let transformedY = pos.x * rotate0 + pos.y * rotate1 + instance.matrixTx.y; + var position = vec2(transformedX, transformedY) / vec2(instance.textureDim.z, instance.textureDim.w); + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); + output.mulColor = instance.mulColor; + output.addColor = instance.addColor; + return output; +} +\`,ka=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) v_uv: vec2, + @location(1) bezier: vec2, + @location(2) color: vec4, +} + +struct GradientUniforms { + inverseMatrix: mat3x3, + gradientType: f32, + focal: f32, + spread: f32, + radius: f32, + linearPoints: vec4, + color: vec4, + contextMatrix0: vec4, + contextMatrix1: vec4, + contextMatrix2: vec4, +} + +@group(0) @binding(0) var gradient: GradientUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let contextMatrix = mat3x3(gradient.contextMatrix0.xyz, gradient.contextMatrix1.xyz, gradient.contextMatrix2.xyz); + let pos = contextMatrix * vec3(input.position, 1.0); + let ndc = vec2(pos.x * 2.0 - 1.0, pos.y * 2.0 - 1.0); + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + let uvPos = gradient.inverseMatrix * vec3(input.position, 1.0); + output.v_uv = uvPos.xy; + output.bezier = input.bezier; + output.color = gradient.color; + return output; +} +\`,Ia=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, + @location(2) worldPos: vec2, +} + +struct BitmapUniforms { + bitmapMatrix: mat3x3, + width: f32, + height: f32, + repeat: f32, + _pad: f32, + color: vec4, + contextMatrix0: vec4, + contextMatrix1: vec4, + contextMatrix2: vec4, +} + +@group(0) @binding(0) var bitmap: BitmapUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(bitmap.contextMatrix0.xyz, bitmap.contextMatrix1.xyz, bitmap.contextMatrix2.xyz); + let transformedPos = matrix * vec3(input.position, 1.0); + let clipX = transformedPos.x * 2.0 - 1.0; + let clipY = (transformedPos.y * 2.0 - 1.0) * yFlipSign; + output.position = vec4(clipX, clipY, 0.0, 1.0); + output.bezier = input.bezier; + output.color = bitmap.color; + output.worldPos = input.position; + return output; +} +\`,Nt=\` +fn isInside(uv: vec2) -> f32 { + let s = step(vec2(0.0), uv) * step(uv, vec2(1.0)); + return s.x * s.y; +}\`,lp=\` + const positions = array, 6>( + vec2(-1.0, -1.0), + vec2( 1.0, -1.0), + vec2(-1.0, 1.0), + vec2(-1.0, 1.0), + vec2( 1.0, -1.0), + vec2( 1.0, 1.0) + );\`,es=\` + const vertices = array, 6>( + vec2(0.0, 0.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(1.0, 1.0) + );\`,Be=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +}\`,fo=t=>\` +\${Be} + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${lp} + var texCoords = array, 6>( + vec2(0.0, \${t?"1.0":"0.0"}), + vec2(1.0, \${t?"1.0":"0.0"}), + vec2(0.0, \${t?"0.0":"1.0"}), + vec2(0.0, \${t?"0.0":"1.0"}), + vec2(1.0, \${t?"1.0":"0.0"}), + vec2(1.0, \${t?"0.0":"1.0"}) + ); + output.position = vec4(positions[vertexIndex], 0.0, 1.0); + output.texCoord = texCoords[vertexIndex]; + return output; +} +\`,up=fo(!0),fp=fo(!1),hp=fo(!1),dp=\` +struct VertexInput { + @location(0) position: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, +} + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let ndc = input.position * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y, 0.0, 1.0); + return output; +} +\`,pp=\` +struct PositionUniforms { + offset: vec2, + size: vec2, + viewport: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: PositionUniforms; + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + output.texCoord = vec2(vertex.x, 1.0 - vertex.y); + var position = vertex * uniforms.size + uniforms.offset; + position = position / uniforms.viewport; + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); + return output; +} +\`,mp=\` +struct BitmapSyncUniforms { + nodeRect: vec4, + textureSize: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: BitmapSyncUniforms; + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + let pixelPos = vec2( + uniforms.nodeRect.x + vertex.x * uniforms.nodeRect.z, + uniforms.nodeRect.y + vertex.y * uniforms.nodeRect.w + ); + let ndc = pixelPos / uniforms.textureSize * 2.0 - 1.0; + output.position = vec4(ndc.x, -ndc.y, 0.0, 1.0); + output.texCoord = pixelPos / uniforms.textureSize; + return output; +} +\`,gp=\` +struct ScaleUniforms { + matrix: vec4, + translate: vec2, + srcSize: vec2, + dstSize: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: ScaleUniforms; +\`,bp=\` + var pos = vertex * uniforms.srcSize; + let a = uniforms.matrix.x; + let b = uniforms.matrix.y; + let c = uniforms.matrix.z; + let d = uniforms.matrix.w; + let tx = uniforms.translate.x; + let ty = uniforms.translate.y; + let transformedX = pos.x * a + pos.y * c + tx; + let transformedY = pos.x * b + pos.y * d + ty; + var position = vec2(transformedX, transformedY) / uniforms.dstSize; + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); +\`,ho=t=>\` +\${gp} + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + output.texCoord = \${t?"vec2(vertex.x, 1.0 - vertex.y)":"vertex"}; +\${bp} + return output; +} +\`,xp=ho(!1),yp=ho(!0),vp=ho(!1),_a=t=>\` +struct PositionUniforms { + offset: vec2, + size: vec2, + viewport: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: PositionUniforms; + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + output.texCoord = \${t?"vec2(vertex.x, 1.0 - vertex.y)":"vertex"}; + var position = vertex * uniforms.size + uniforms.offset; + position = position / uniforms.viewport; + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); + return output; +} +\`,Mp=_a(!1),Sp=_a(!0),$p=\` +struct FragmentInput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let f_val = input.bezier.x * input.bezier.x - input.bezier.y; + let dx = dpdx(f_val); + let dy = dpdy(f_val); + + if (input.bezier.x == 0.5 && input.bezier.y == 0.5) { + return vec4(input.color.rgb * input.color.a, input.color.a); + } + + let dist = f_val * inverseSqrt(dx * dx + dy * dy); + let coverage = smoothstep(0.5, -0.5, dist); + + if (coverage <= 0.001) { + discard; + } + + let finalAlpha = input.color.a * min(coverage, 1.0); + return vec4(input.color.rgb * finalAlpha, finalAlpha); +} +\`,Tp=\` +struct FragmentInput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let f_val = input.bezier.x * input.bezier.x - input.bezier.y; + let dx = dpdx(f_val); + let dy = dpdy(f_val); + let dist = f_val * inverseSqrt(dx * dx + dy * dy); + let alpha = smoothstep(0.5, -0.5, dist); + + if (alpha <= 0.001) { + discard; + } + + return vec4(0.0, 0.0, 0.0, min(alpha, 1.0)); +} +\`,Bp=\` +struct FragmentInput { + @builtin(position) position: vec4, + @location(0) color: vec4, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let a = input.color.a; + return vec4(input.color.r * a, input.color.g * a, input.color.b * a, a); +} +\`,Pp=\` +struct FragmentInput { + @location(0) bezier: vec2, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let px = dpdx(input.bezier); + let py = dpdy(input.bezier); + let f = (2.0 * input.bezier.x) * vec2(px.x, py.x) - vec2(px.y, py.y); + let alpha = 0.5 - (input.bezier.x * input.bezier.x - input.bezier.y) / length(f); + if (alpha <= 0.0) { + discard; + } + return vec4(min(alpha, 1.0)); +} +\`,Ap=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + return input.color; +} +\`,Fp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var textureData: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let textureColor = textureSampleLevel(textureData, textureSampler, input.texCoord, 0); + return textureColor * input.color; +} +\`,wp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) mulColor: vec4, + @location(2) addColor: vec4, +} + +@group(0) @binding(0) var textureSampler: sampler; +@group(0) @binding(1) var textureData: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var src = textureSample(textureData, textureSampler, input.texCoord); + src = vec4(src.rgb / max(0.0001, src.a), src.a); + src = clamp(src * input.mulColor + input.addColor, vec4(0.0), vec4(1.0)); + src = vec4(src.rgb * src.a, src.a); + return src; +} +\`,po=\` +struct GradientUniforms { + inverseMatrix: mat3x3, + gradientType: f32, + focal: f32, + spread: f32, + radius: f32, + linearPoints: vec4, +} + +@group(0) @binding(0) var gradient: GradientUniforms; +@group(0) @binding(1) var gradientSampler: sampler; +@group(0) @binding(2) var gradientTexture: texture_2d; + +override GRADIENT_TYPE: u32 = 0u; +override SPREAD_MODE: u32 = 2u; + +fn applySpread(t: f32) -> f32 { + if (SPREAD_MODE == 0u) { + return 1.0 - abs(fract(t * 0.5) * 2.0 - 1.0); + } else if (SPREAD_MODE == 1u) { + return fract(t); + } else { + return clamp(t, 0.0, 1.0); + } +} +\`,mo=\` + var t: f32; + if (GRADIENT_TYPE == 0u) { + let a = gradient.linearPoints.xy; + let b = gradient.linearPoints.zw; + let ab = b - a; + let ap = p - a; + let dotAB = dot(ab, ab); + if (dotAB < 0.0001) { + t = 0.0; + } else { + t = dot(ab, ap) / dotAB; + } + } else { + let r = gradient.radius; + let coord = p / r; + let focalRatio = gradient.focal; + + if (abs(focalRatio) < 0.001) { + t = length(coord); + } else { + let focal = vec2(focalRatio, 0.0); + let diff = coord - focal; + let lenDiff = length(diff); + + if (lenDiff < 0.0001) { + t = 0.0; + } else { + let dir = diff / lenDiff; + + // Solve quadratic equation for unit circle intersection (a=1 since dir is normalized) + let b_coef = 2.0 * dot(dir, focal); + let c_coef = dot(focal, focal) - 1.0; + let discriminant = b_coef * b_coef - 4.0 * c_coef; + let x = (-b_coef + sqrt(max(discriminant, 0.0))) * 0.5; + t = lenDiff / abs(x); + } + } + } + t = applySpread(t); + let gradientColor = textureSampleLevel(gradientTexture, gradientSampler, vec2(t, 0.5), 0); +\`,Op=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) v_uv: vec2, + @location(1) bezier: vec2, + @location(2) color: vec4, +} +\${po} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let p = input.v_uv; +\${mo} + let result = gradientColor * input.color; + return vec4(result.rgb * result.a, result.a); +} +\`,Ep=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) v_uv: vec2, + @location(1) bezier: vec2, + @location(2) color: vec4, +} +\${po} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let p = input.v_uv; +\${mo} + return vec4(gradientColor.rgb * gradientColor.a, gradientColor.a); +} +\`,Rp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} +\${po} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let p = input.texCoord; +\${mo} + let result = gradientColor * input.color; + return vec4(result.rgb * result.a, result.a); +} +\`,Cp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, + @location(2) worldPos: vec2, +} + +struct BitmapUniforms { + bitmapMatrix: mat3x3, + textureWidth: f32, + textureHeight: f32, + repeat: f32, + _pad: f32, +} + +@group(0) @binding(0) var uniforms: BitmapUniforms; +@group(0) @binding(1) var bitmapSampler: sampler; +@group(0) @binding(2) var bitmapTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let u = input.bezier.x; + let v = input.bezier.y; + if (abs(u - 0.5) > 0.001 || abs(v - 0.5) > 0.001) { + let d = u * u - v; + if (d > 0.0) { + discard; + } + } + let transformedPos = uniforms.bitmapMatrix * vec3(input.worldPos, 1.0); + var uv = vec2( + transformedPos.x / uniforms.textureWidth, + transformedPos.y / uniforms.textureHeight + ); + if (uniforms.repeat > 0.5) { + uv = fract(uv); + } + let bitmapColor = textureSampleLevel(bitmapTexture, bitmapSampler, uv, 0); + let alpha = bitmapColor.a * input.color.a; + return vec4(bitmapColor.rgb * input.color.a, alpha); +} +\`,Up=\` +\${Be} + +struct CopyUniforms { + scale: vec2, + offset: vec2, +} + +@group(0) @binding(0) var uniforms: CopyUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = input.texCoord * uniforms.scale + uniforms.offset; + return textureSampleLevel(inputTexture, textureSampler, uv, 0); +} +\`,Gp=\` +\${Be} + +struct CopyUniforms { + scale: vec2, + offset: vec2, +} + +@group(0) @binding(0) var uniforms: CopyUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = (input.texCoord - uniforms.offset) * uniforms.scale; + let clampedUv = clamp(uv, vec2(0.0), vec2(1.0)); + let color = textureSampleLevel(inputTexture, textureSampler, clampedUv, 0); + let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0; + return select(vec4(0.0, 0.0, 0.0, 0.0), color, inBounds); +} +\`,Lp=\` +\${Be} + +struct CopyUniforms { + scale: vec2, + offset: vec2, +} + +@group(0) @binding(0) var uniforms: CopyUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = input.texCoord * uniforms.scale + uniforms.offset; + let clampedUv = clamp(uv, vec2(0.0), vec2(1.0)); + let color = textureSampleLevel(inputTexture, textureSampler, clampedUv, 0); + let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0; + return select(vec4(0.0, 0.0, 0.0, 0.0), color, inBounds); +} +\`,kp=\` +\${Be} + +struct ColorTransformUniforms { + mul: vec4, + add: vec4, +} + +@group(0) @binding(0) var ct: ColorTransformUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var color = textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); + + color = vec4(color.rgb / max(vec3(0.0001), vec3(color.a)), color.a); + color = clamp(color * ct.mul + ct.add, vec4(0.0), vec4(1.0)); + color = vec4(color.rgb * color.a, color.a); + + return color; +} +\`,Ip=\` +\${Be} + +struct YFlipCTUniforms { + scale: vec2, + offset: vec2, + mul: vec4, + add: vec4, +} + +@group(0) @binding(0) var uniforms: YFlipCTUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = input.texCoord * uniforms.scale + uniforms.offset; + var color = textureSampleLevel(inputTexture, textureSampler, uv, 0); + + color = vec4(color.rgb / max(vec3(0.0001), vec3(color.a)), color.a); + color = clamp(color * uniforms.mul + uniforms.add, vec4(0.0), vec4(1.0)); + color = vec4(color.rgb * color.a, color.a); + + return color; +} +\`,_p=\` +\${Be} + +struct ColorMatrixUniforms { + matrix: mat4x4, + offset: vec4, +} + +@group(0) @binding(0) var uniforms: ColorMatrixUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var color = textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); + + color = vec4(color.rgb / max(vec3(0.0001), vec3(color.a)), color.a); + var result = uniforms.matrix * color + uniforms.offset; + result = clamp(result, vec4(0.0), vec4(1.0)); + result = vec4(result.rgb * result.a, result.a); + + return result; +} +\`,Vp=\` +@fragment +fn main() -> @location(0) vec4 { + return vec4(0.0, 0.0, 0.0, 0.0); +} +\`,Dp=\` +\${Be} + +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + return textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); +} +\`,Np=\` +\${Be} + +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + return textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); +} +\`,zp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +struct BlendUniforms { + blendMode: f32, +} + +@group(0) @binding(1) var blend: BlendUniforms; +@group(0) @binding(2) var srcSampler: sampler; +@group(0) @binding(3) var srcTexture: texture_2d; +@group(0) @binding(4) var dstSampler: sampler; +@group(0) @binding(5) var dstTexture: texture_2d; + +fn blendNormal(src: vec4, dst: vec4) -> vec4 { + return src; +} + +fn blendMultiply(src: vec4, dst: vec4) -> vec4 { + return src * dst; +} + +fn blendScreen(src: vec4, dst: vec4) -> vec4 { + return src + dst - src * dst; +} + +fn blendAdd(src: vec4, dst: vec4) -> vec4 { + return min(src + dst, vec4(1.0)); +} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let src = textureSampleLevel(srcTexture, srcSampler, input.texCoord, 0); + let dst = textureSampleLevel(dstTexture, dstSampler, input.texCoord, 0); + var result: vec4; + if (blend.blendMode < 0.5) { + result = blendNormal(src, dst); + } else if (blend.blendMode < 1.5) { + result = blendMultiply(src, dst); + } else if (blend.blendMode < 2.5) { + result = blendScreen(src, dst); + } else { + result = blendAdd(src, dst); + } + return result * input.color; +} +\`,Xp=\` +\${Be} + +override IS_INNER: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct GlowUniforms { + color: vec4, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, +} + +@group(0) @binding(0) var uniforms: GlowUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let baseColor = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blurColor = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + var rawAlpha = blurColor.a; + if (IS_INNER == 1u) { + rawAlpha = 1.0 - rawAlpha; + } + let glowAlpha = clamp(rawAlpha * uniforms.strength, 0.0, 1.0); + let glowColor = vec4(uniforms.color.rgb * glowAlpha, uniforms.color.a * glowAlpha); + if (IS_INNER == 1u) { + let innerGlow = glowColor * baseColor.a; + if (IS_KNOCKOUT == 1u) { + return innerGlow; + } else { + return innerGlow + baseColor * (1.0 - glowColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + return glowColor * (1.0 - baseColor.a); + } else { + return baseColor + glowColor * (1.0 - baseColor.a); + } + } +} +\`,Yp=\` +\${Be} + +override IS_INNER: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; +override IS_HIDE_OBJECT: u32 = 0u; + +struct DropShadowUniforms { + color: vec4, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, +} + +@group(0) @binding(0) var uniforms: DropShadowUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let baseColor = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blur = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + var rawAlpha = blur.a; + if (IS_INNER == 1u) { + rawAlpha = 1.0 - rawAlpha; + } + let shadowAlpha = clamp(rawAlpha * uniforms.strength, 0.0, 1.0); + let shadowColor = vec4(uniforms.color.rgb * shadowAlpha, uniforms.color.a * shadowAlpha); + + if (IS_INNER == 1u) { + let innerShadow = shadowColor * baseColor.a; + if (IS_KNOCKOUT == 1u) { + return innerShadow; + } else { + return innerShadow + baseColor * (1.0 - shadowColor.a); + } + } else { + if (IS_HIDE_OBJECT == 1u) { + return shadowColor; + } else if (IS_KNOCKOUT == 1u) { + return shadowColor * (1.0 - baseColor.a); + } else { + return shadowColor * (1.0 - baseColor.a) + baseColor; + } + } +} +\`,Wp=\` +\${Be} + +override GLOW_TYPE: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct GradientGlowUniforms { + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, +} + +@group(0) @binding(0) var uniforms: GradientGlowUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +@group(0) @binding(4) var gradientLUT: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let base = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + var blur = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + blur.a = clamp(blur.a * uniforms.strength, 0.0, 1.0); + let glowColor = textureSampleLevel(gradientLUT, textureSampler, vec2(blur.a, 0.5), 0); + var result: vec4; + if (GLOW_TYPE == 0u) { + if (IS_KNOCKOUT == 1u) { + result = glowColor; + } else { + result = base - base * glowColor.a + glowColor; + } + } else if (GLOW_TYPE == 1u) { + if (IS_KNOCKOUT == 1u) { + result = glowColor * base.a; + } else { + result = glowColor * base.a + base * (1.0 - glowColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + result = glowColor - glowColor * base.a; + } else { + result = base + glowColor - glowColor * base.a; + } + } + return result; +} +\`,jp=\` +\${Be} + +override BEVEL_TYPE: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct GradientBevelUniforms { + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, +} + +@group(0) @binding(0) var uniforms: GradientBevelUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +@group(0) @binding(4) var gradientLUT: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let base = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blur1 = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + let mirrorUV = (1.0 - input.texCoord) * uniforms.blurScale - uniforms.blurOffset; + let blur2 = textureSampleLevel(blurTexture, textureSampler, mirrorUV, 0) * isInside(mirrorUV); + + var highlightAlpha = blur1.a - blur2.a; + var shadowAlpha = blur2.a - blur1.a; + highlightAlpha = clamp(highlightAlpha * uniforms.strength, 0.0, 1.0); + shadowAlpha = clamp(shadowAlpha * uniforms.strength, 0.0, 1.0); + + let lutCoord = 0.5019607843137255 - 0.5019607843137255 * shadowAlpha + 0.4980392156862745 * highlightAlpha; + let bevelColor = textureSampleLevel(gradientLUT, textureSampler, vec2(lutCoord, 0.5), 0); + + var result: vec4; + if (BEVEL_TYPE == 0u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor; + } else { + result = base - base * bevelColor.a + bevelColor; + } + } else if (BEVEL_TYPE == 1u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor * base.a; + } else { + result = bevelColor * base.a + base * (1.0 - bevelColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + result = bevelColor - bevelColor * base.a; + } else { + result = base + bevelColor - bevelColor * base.a; + } + } + + return result; +} +\`,Hp=\` +\${Be} + +override BEVEL_TYPE: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct BevelUniforms { + highlightColor: vec4, + shadowColor: vec4, + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, +} + +@group(0) @binding(0) var uniforms: BevelUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let base = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blur1 = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + let mirrorUV = (1.0 - input.texCoord) * uniforms.blurScale - uniforms.blurOffset; + let blur2 = textureSampleLevel(blurTexture, textureSampler, mirrorUV, 0) * isInside(mirrorUV); + + var highlightAlpha = blur1.a - blur2.a; + var shadowAlpha = blur2.a - blur1.a; + highlightAlpha = clamp(highlightAlpha * uniforms.strength, 0.0, 1.0); + shadowAlpha = clamp(shadowAlpha * uniforms.strength, 0.0, 1.0); + + let bevelColor = uniforms.highlightColor * highlightAlpha + uniforms.shadowColor * shadowAlpha; + var result: vec4; + if (BEVEL_TYPE == 0u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor; + } else { + result = base - base * bevelColor.a + bevelColor; + } + } else if (BEVEL_TYPE == 1u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor * base.a; + } else { + result = bevelColor * base.a + base * (1.0 - bevelColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + result = bevelColor - bevelColor * base.a; + } else { + result = base + bevelColor - bevelColor * base.a; + } + } + + return result; +} +\`,Kp=\` +\${Be} + +struct BevelBaseUniforms { + offset: vec2, + _padding: vec2, +} + +@group(0) @binding(0) var uniforms: BevelBaseUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var sourceTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let original = textureSampleLevel(sourceTexture, textureSampler, input.texCoord, 0); + let shiftedUV = input.texCoord - uniforms.offset; + let shifted = textureSampleLevel(sourceTexture, textureSampler, shiftedUV, 0) * isInside(shiftedUV); + return original * (1.0 - shifted.a); +} +\`;class N{static getFillVertexShader(){return Ca}static getFillMainVertexShader(){return Ca}static getFillFragmentShader(){return $p}static getStencilWriteVertexShader(){return Ua}static getStencilWriteMainVertexShader(){return Ua}static getStencilWriteFragmentShader(){return Tp}static getStencilFillVertexShader(){return Ga}static getStencilFillMainVertexShader(){return Ga}static getStencilFillFragmentShader(){return Bp}static getMaskVertexShader(){return ap}static getMaskFragmentShader(){return Pp}static getBasicVertexShader(){return La}static getBasicMainVertexShader(){return La}static getBasicFragmentShader(){return Ap}static getTextureFragmentShader(){return Fp}static getInstancedVertexShader(){return cp}static getInstancedFragmentShader(){return wp}static getGradientFillVertexShader(){return ka}static getGradientFillMainVertexShader(){return ka}static getGradientFillFragmentShader(){return Op}static getGradientFillStencilFragmentShader(){return Ep}static getGradientFragmentShader(){return Rp}static getBitmapFillVertexShader(){return Ia}static getBitmapFillMainVertexShader(){return Ia}static getBitmapFillFragmentShader(){return Cp}static getBlendFragmentShader(){return zp}static getBlurFilterVertexShader(){return up}static getBitmapSyncVertexShader(){return mp}static getBitmapSyncFragmentShader(){return Np}static getBlurFilterFragmentShader(e){const r=e.toFixed(1);return\` +\${Be} + +struct BlurUniforms { + offset: vec2, + fraction: f32, + samples: f32, +} + +@group(0) @binding(0) var uniforms: BlurUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let offset = uniforms.offset; + let fraction = uniforms.fraction; + let samples = uniforms.samples; + var color = textureSample(inputTexture, textureSampler, input.texCoord); + for (var i: f32 = 1.0; i < \${r}; i += 1.0) { + color += textureSample(inputTexture, textureSampler, input.texCoord + offset * i); + color += textureSample(inputTexture, textureSampler, input.texCoord - offset * i); + } + color += textureSample(inputTexture, textureSampler, input.texCoord + offset * \${r}) * fraction; + color += textureSample(inputTexture, textureSampler, input.texCoord - offset * \${r}) * fraction; + color /= samples; + return color; +} +\`}static getTextureCopyFragmentShader(){return Up}static getBlurTextureCopyFragmentShader(){return Gp}static getFilterOutputFragmentShader(){return Lp}static getColorTransformFragmentShader(){return kp}static getYFlipColorTransformFragmentShader(){return Ip}static getColorMatrixFilterFragmentShader(){return _p}static getGlowFilterFragmentShader(){return Xp}static getDropShadowFilterFragmentShader(){return Yp}static getGradientGlowFilterFragmentShader(){return Wp}static getGradientBevelFilterFragmentShader(){return jp}static getBevelFilterFragmentShader(){return Hp}static getBevelBaseFragmentShader(){return Kp}static getConvolutionFilterFragmentShader(e,r,n=!0,s=!0){const o=Math.floor(e*.5),i=Math.floor(r*.5),l=e*r;let c="";for(let h=0;h, + rcpDivisor: f32, + bias: f32, + substituteColor: vec4, + matrix: array, \${Math.ceil(l/4)}>, +} + +@group(0) @binding(0) var uniforms: ConvolutionUniforms; +@group(0) @binding(1) var sourceSampler: sampler; +@group(0) @binding(2) var sourceTexture: texture_2d; + +\${Be} + +\${Nt} + +fn getMatrixWeight(index: i32) -> f32 { + let vecIndex = index / 4; + let component = index % 4; + let vec = uniforms.matrix[vecIndex]; + if (component == 0) { return vec.x; } + else if (component == 1) { return vec.y; } + else if (component == 2) { return vec.z; } + else { return vec.w; } +} + +fn getWeightedColor(i: i32, weight: f32) -> vec4 { + let rcpSize = uniforms.rcpSize; + let iDivX = i / \${e}; + let iModX = i - \${e} * iDivX; + let offset = vec2(f32(iModX - \${o}), f32(\${i} - iDivX)); + var uv = input.texCoord + offset * rcpSize; + var color = textureSample(sourceTexture, sourceSampler, uv); + color = vec4(color.rgb / max(0.0001, color.a), color.a); + \${a} + return color * weight; +} + +var input: VertexOutput; + +@vertex +fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var positions = array, 6>( + vec2(-1.0, -1.0), + vec2(1.0, -1.0), + vec2(-1.0, 1.0), + vec2(-1.0, 1.0), + vec2(1.0, -1.0), + vec2(1.0, 1.0) + ); + var texCoords = array, 6>( + vec2(0.0, 1.0), + vec2(1.0, 1.0), + vec2(0.0, 0.0), + vec2(0.0, 0.0), + vec2(1.0, 1.0), + vec2(1.0, 0.0) + ); + var output: VertexOutput; + output.position = vec4(positions[vertexIndex], 0.0, 1.0); + output.texCoord = texCoords[vertexIndex]; + return output; +} + +@fragment +fn fs_main(fragInput: VertexOutput) -> @location(0) vec4 { + input = fragInput; + let rcpDivisor = uniforms.rcpDivisor; + let bias = uniforms.bias; + var result = vec4(0.0); + \${c} + result = clamp(result * rcpDivisor + bias, vec4(0.0), vec4(1.0)); + \${u} + result = vec4(result.rgb * result.a, result.a); + return result; +} +\`}static getComplexBlendFragmentShader(){return N.getUnifiedComplexBlendFragmentShader()}static getBlendModeIndex(e){switch(e){case"subtract":return 0;case"multiply":return 1;case"lighten":return 2;case"darken":return 3;case"overlay":return 4;case"hardlight":return 5;case"difference":return 6;case"invert":return 7;default:return 1}}static getUnifiedComplexBlendFragmentShader(){return\` +\${Be} + +struct BlendUniforms { + mulColor: vec4, + addColor: vec4, + blendMode: f32, + _pad0: f32, + _pad1: f32, + _pad2: f32, +} + +@group(0) @binding(0) var uniforms: BlendUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var dstTexture: texture_2d; +@group(0) @binding(3) var srcTexture: texture_2d; + +fn blend(src: vec4, dst: vec4, mode: i32) -> vec4 { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + let a = src - src * dst.a; + let b = dst - dst * src.a; + + if (mode == 1) { + let c = src * dst; + return a + b + c; + } + + let srcRgb = src.rgb / src.a; + let dstRgb = dst.rgb / dst.a; + + var blended: vec3; + + switch (mode) { + case 0: { + blended = dstRgb - srcRgb; + } + case 2: { + blended = mix(srcRgb, dstRgb, step(srcRgb, dstRgb)); + } + case 3: { + blended = mix(srcRgb, dstRgb, step(dstRgb, srcRgb)); + } + case 4: { + let mul = srcRgb * dstRgb; + let c1 = 2.0 * mul; + let c2 = 2.0 * (srcRgb + dstRgb - mul) - 1.0; + blended = mix(c1, c2, step(vec3(0.5), dstRgb)); + } + case 5: { + let mul = srcRgb * dstRgb; + let c1 = 2.0 * mul; + let c2 = 2.0 * (srcRgb + dstRgb - mul) - 1.0; + blended = mix(c1, c2, step(vec3(0.5), srcRgb)); + } + case 6: { + blended = abs(srcRgb - dstRgb); + } + case 7: { + let ib = dst - dst * src.a; + let ic = vec4(src.a - dst.rgb * src.a, src.a); + return ib + ic; + } + default: { + blended = srcRgb; + } + } + + var c = vec4(blended, src.a * dst.a); + c = vec4(c.rgb * c.a, c.a); + return a + b + c; +} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var dst = textureSample(dstTexture, textureSampler, input.texCoord); + var src = textureSample(srcTexture, textureSampler, input.texCoord); + let mul = uniforms.mulColor; + let add = uniforms.addColor; + if (mul.x != 1.0 || mul.y != 1.0 || mul.z != 1.0 || mul.w != 1.0 + || add.x != 0.0 || add.y != 0.0 || add.z != 0.0) { + src = vec4(src.rgb / max(vec3(0.0001), vec3(src.a)), src.a); + src = clamp(src * mul + add, vec4(0.0), vec4(1.0)); + src = vec4(src.rgb * src.a, src.a); + } + return blend(src, dst, i32(uniforms.blendMode)); +} +\`}static getDisplacementMapFilterFragmentShader(e,r,n){let s,o;switch(e){case 1:s="mapColor.r";break;case 2:s="mapColor.g";break;case 4:s="mapColor.b";break;case 8:s="mapColor.a";break;default:s="0.5";break}switch(r){case 1:o="mapColor.r";break;case 2:o="mapColor.g";break;case 4:o="mapColor.b";break;case 8:o="mapColor.a";break;default:o="0.5";break}let i,l=!1;switch(n){case 0:i=\` +sourceColor = textureSample(srcTexture, textureSampler, uv); +\`;break;case 1:l=!0,i=\` +sourceColor = mix(uniforms.substituteColor, textureSample(srcTexture, textureSampler, uv), isInside(uv)); +\`;break;case 2:i=\` +sourceColor = textureSample(srcTexture, textureSampler, fract(uv)); +\`;break;case 3:i=\` +let insideUV = step(abs(uv - vec2(0.5)), vec2(0.5)); +sourceColor = textureSample(srcTexture, textureSampler, mix(input.texCoord, uv, insideUV)); +\`;break;default:i=\` +sourceColor = textureSample(srcTexture, textureSampler, fract(uv)); +\`;break}return\` +\${Be} + +\${l?\`struct DisplacementUniforms { + uvToStScale: vec2, + uvToStOffset: vec2, + scale: vec2, + padding: vec2, + substituteColor: vec4, +}\`:\`struct DisplacementUniforms { + uvToStScale: vec2, + uvToStOffset: vec2, + scale: vec2, + padding: vec2, +}\`} + +@group(0) @binding(0) var uniforms: DisplacementUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var srcTexture: texture_2d; +@group(0) @binding(3) var mapTexture: texture_2d; + +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let stCoord = vec2(input.texCoord.x, 1.0 - input.texCoord.y); + let st = stCoord * uniforms.uvToStScale - uniforms.uvToStOffset; + let mapColor = textureSample(mapTexture, textureSampler, vec2(st.x, 1.0 - st.y)); + let offset = vec2(\${s}, \${o}) - 0.5; + let uv = input.texCoord + offset * uniforms.scale; + var sourceColor: vec4; + \${i} + return mix(textureSample(srcTexture, textureSampler, input.texCoord), sourceColor, isInside(st)); +} +\`}static getNodeClearVertexShader(){return dp}static getNodeClearFragmentShader(){return Vp}static getPositionedTextureVertexShader(){return pp}static getTextureScaleVertexShader(){return xp}static getTextureScaleBlendVertexShader(){return yp}static getComplexBlendScaleVertexShader(){return vp}static getComplexBlendVertexShader(){return fp}static getComplexBlendCopyVertexShader(){return hp}static getComplexBlendOutputVertexShader(){return Mp}static getFilterComplexBlendOutputVertexShader(){return Sp}static getPositionedTextureFragmentShader(){return Dp}}const rr={arrayStride:16,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,offset:8,format:"float32x2"}]},un={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};class qp{device;format;pipelines;bindGroupLayouts;sampleCount;shaderModuleCache=new Map;filterBindGroupLayouts=new Map;constructor(e,r){this.device=e,this.format=r,this.pipelines=new Map,this.bindGroupLayouts=new Map,this.sampleCount=ao,this.initialize()}getOrCreateShaderModule(e,r){let n=this.shaderModuleCache.get(e);return n||(n=this.device.createShaderModule({code:r}),this.shaderModuleCache.set(e,n)),n}initialize(){this.createFillPipeline(),this.createStencilFillPipelines(),this.createClipPipeline(),this.createMaskUnionPipelines(),this.createMaskPipeline(),this.createBasicPipeline(),this.createTexturePipeline(),this.createInstancedPipeline(),this.createGradientPipeline(),this.createBitmapFillPipeline(),this.createBlendPipeline(),this.createNodeClearPipeline()}lazyInitGroups=new Set;lazyGroupMap=new Map([...Array.from({length:16},(e,r)=>[\`blur_filter_\${r+1}\`,"blur_filter"]),["blur_filter","blur_filter"],["texture_copy","texture_copy"],["texture_copy_rgba8","texture_copy"],["color_transform","texture_copy"],["y_flip_color_transform","texture_copy"],["texture_erase","texture_copy"],["blur_texture_copy","texture_copy"],["filter_blend","texture_copy"],["texture_copy_bgra","texture_copy"],["filter_output","texture_copy"],["filter_output_add","texture_copy"],["filter_output_screen","texture_copy"],["filter_output_alpha","texture_copy"],["filter_output_erase","texture_copy"],["texture_copy_bgra_msaa","texture_copy"],["filter_output_msaa","texture_copy"],["filter_output_add_msaa","texture_copy"],["filter_output_screen_msaa","texture_copy"],["filter_output_alpha_msaa","texture_copy"],["filter_output_erase_msaa","texture_copy"],["positioned_texture","texture_copy"],["positioned_texture_rgba","texture_copy"],["bitmap_render_msaa","texture_copy"],["bitmap_render","texture_copy"],["texture_scale","texture_copy"],["texture_scale_blend","texture_copy"],["bitmap_sync","bitmap_sync"],["color_matrix_filter","filter"],["bevel_base","filter"],["glow_filter","filter"],["drop_shadow_filter","filter"],["bevel_filter","filter"],["gradient_glow_filter","filter"],["gradient_bevel_filter","filter"],["complex_blend","complex_blend"],["complex_blend_copy","complex_blend"],["complex_blend_scale","complex_blend"],["complex_blend_output","complex_blend"],["complex_blend_output_msaa","complex_blend"],["filter_complex_blend_output","complex_blend"],["filter_complex_blend_output_msaa","complex_blend"]]);ensureLazyGroup(e){const r=this.lazyGroupMap.get(e);if(!(!r||this.lazyInitGroups.has(r)))switch(this.lazyInitGroups.add(r),r){case"blur_filter":this.createBlurFilterPipeline();break;case"texture_copy":this.createTextureCopyPipeline();break;case"bitmap_sync":this.createBitmapSyncPipeline();break;case"filter":this.createColorMatrixFilterPipeline();break;case"complex_blend":this.createComplexBlendPipelines();break}}preloadLazyGroups(){const e=["blur_filter","texture_copy","bitmap_sync","filter","complex_blend"];for(const r of e)this.ensureLazyGroup(r)}createFillPipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0}}]});this.bindGroupLayouts.set("fill_dynamic",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("fillVertex",N.getFillVertexShader()),s=this.getOrCreateShaderModule("fillFragment",N.getFillFragmentShader()),o=rr,i=un,l=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[o]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:i}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:0,stencilWriteMask:0},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}}),c=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[o],constants:{yFlipSign:-1}},fragment:{module:s,entryPoint:"main",targets:[{format:this.format,blend:i}]},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("fill",l),this.pipelines.set("fill_bgra",c);const u=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[o],constants:{yFlipSign:-1}},fragment:{module:s,entryPoint:"main",targets:[{format:this.format,blend:i}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:255,stencilWriteMask:0},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("fill_bgra_stencil",u)}createStencilFillPipelines(){const e=rr,r=this.bindGroupLayouts.get("fill_dynamic"),n=this.device.createPipelineLayout({bindGroupLayouts:[r]}),s=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none",frontFace:"ccw"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"increment-wrap"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"decrement-wrap"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("stencil_write",s);const o=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill",o);const i=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none",frontFace:"ccw"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"increment-wrap"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"decrement-wrap"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("stencil_write_atlas",i);const l=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e],constants:{yFlipSign:-1}},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:this.format,writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none",frontFace:"ccw"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"increment-wrap"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"decrement-wrap"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("stencil_write_main",l);const c=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill_atlas",c);const u=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e],constants:{yFlipSign:-1}},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:this.format,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill_main",u);const a=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"greater",failOp:"keep",depthFailOp:"replace",passOp:"replace"},stencilBack:{compare:"greater",failOp:"keep",depthFailOp:"replace",passOp:"replace"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill_masked",a)}createClipPipeline(){const e=rr,r=this.bindGroupLayouts.get("fill_dynamic"),n=this.device.createPipelineLayout({bindGroupLayouts:[r]}),s=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"zero",depthFailOp:"invert",passOp:"invert"},stencilBack:{compare:"always",failOp:"zero",depthFailOp:"invert",passOp:"invert"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("clip_write",s);const o=this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),i=this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader());for(let l=1;l<=8;l++){const c=1<1){const g={color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}};this.pipelines.set("texture_copy_bgra_msaa",this.createFullscreenQuadPipeline(r,n,s,this.format,g,this.sampleCount));const m={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};this.pipelines.set("filter_output_msaa",this.createFullscreenQuadPipeline(r,n,h,this.format,m,this.sampleCount));for(const[f,b]of d)this.pipelines.set(\`\${f}_msaa\`,this.createFullscreenQuadPipeline(r,n,h,this.format,b,this.sampleCount))}this.createPositionedTexturePipeline(),this.createTextureScalePipeline()}createPositionedTexturePipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}}]});this.bindGroupLayouts.set("positioned_texture",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("positionedTextureVertex",N.getPositionedTextureVertexShader()),s=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:this.format,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("positioned_texture",o);const i=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("positioned_texture_rgba",i);const l=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:4},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"}}});this.pipelines.set("bitmap_render_msaa",l);const c=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"}}});this.pipelines.set("bitmap_render",c)}createTextureScalePipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}}]});this.bindGroupLayouts.set("texture_scale",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("textureScaleVertex",N.getTextureScaleVertexShader()),s=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("texture_scale",o);const i=this.getOrCreateShaderModule("textureScaleBlendVertex",N.getTextureScaleBlendVertexShader()),l=this.device.createRenderPipeline({layout:r,vertex:{module:i,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("texture_scale_blend",l)}createBitmapSyncPipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]});this.bindGroupLayouts.set("bitmap_sync",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("bitmapSyncVertex",N.getBitmapSyncVertexShader()),s=this.getOrCreateShaderModule("bitmapSyncFragment",N.getBitmapSyncFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:4}});this.pipelines.set("bitmap_sync",o)}createColorMatrixFilterPipeline(){const e={color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}},r={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};this.createFilterPipelineWithLayout("color_matrix_filter",N.getColorMatrixFilterFragmentShader(),1,e),this.createFilterPipelineWithLayout("bevel_base",N.getBevelBaseFragmentShader(),1,e),this.createFilterPipelineWithLayout("glow_filter",N.getGlowFilterFragmentShader(),2,r),this.createFilterPipelineWithLayout("drop_shadow_filter",N.getDropShadowFilterFragmentShader(),2,r),this.createFilterPipelineWithLayout("bevel_filter",N.getBevelFilterFragmentShader(),2,r),this.createFilterPipelineWithLayout("gradient_glow_filter",N.getGradientGlowFilterFragmentShader(),3,r),this.createFilterPipelineWithLayout("gradient_bevel_filter",N.getGradientBevelFilterFragmentShader(),3,r)}createComplexBlendPipelines(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{}}]});this.bindGroupLayouts.set("complex_blend",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("complexBlendVertex",N.getComplexBlendVertexShader()),s=this.getOrCreateShaderModule("unifiedComplexBlendFragment",N.getUnifiedComplexBlendFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("complex_blend",o),this.createComplexBlendCopyPipeline(),this.createComplexBlendOutputPipeline()}createComplexBlendCopyPipeline(){const e={color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}},r=this.bindGroupLayouts.get("texture_copy");if(r){const s=this.device.createPipelineLayout({bindGroupLayouts:[r]}),o=this.getOrCreateShaderModule("complexBlendCopyVertex",N.getComplexBlendCopyVertexShader()),i=this.getOrCreateShaderModule("textureCopyFragment",N.getTextureCopyFragmentShader());this.pipelines.set("complex_blend_copy",this.createFullscreenQuadPipeline(s,o,i,"rgba8unorm",e))}const n=this.bindGroupLayouts.get("texture_scale");if(n){const s=this.device.createPipelineLayout({bindGroupLayouts:[n]}),o=this.getOrCreateShaderModule("complexBlendScaleVertex",N.getComplexBlendScaleVertexShader()),i=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader());this.pipelines.set("complex_blend_scale",this.createFullscreenQuadPipeline(s,o,i,"rgba8unorm",e))}}createComplexBlendOutputPipeline(){const e=this.bindGroupLayouts.get("positioned_texture");if(!e)return;const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader()),s={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}},o=this.getOrCreateShaderModule("complexBlendOutputVertex",N.getComplexBlendOutputVertexShader());this.pipelines.set("complex_blend_output",this.createFullscreenQuadPipeline(r,o,n,this.format,s)),this.sampleCount>1&&this.pipelines.set("complex_blend_output_msaa",this.createFullscreenQuadPipeline(r,o,n,this.format,s,this.sampleCount));const i=this.getOrCreateShaderModule("filterComplexBlendOutputVertex",N.getFilterComplexBlendOutputVertexShader());this.pipelines.set("filter_complex_blend_output",this.createFullscreenQuadPipeline(r,i,n,this.format,s)),this.sampleCount>1&&this.pipelines.set("filter_complex_blend_output_msaa",this.createFullscreenQuadPipeline(r,i,n,this.format,s,this.sampleCount))}createFilterPipelineWithLayout(e,r,n,s){let o=this.filterBindGroupLayouts.get(n);if(!o){const u=[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}];for(let a=0;a1&&(c.multisample={count:i}),l&&(c.depthStencil=l),this.device.createRenderPipeline(c)}getPipeline(e){let r=this.pipelines.get(e);return r||(this.ensureLazyGroup(e),r=this.pipelines.get(e)),r}getFilterPipeline(e,r){const s=Object.keys(r).sort().map(h=>\`\${h}\${r[h]}\`).join("_"),o=\`\${e}_\${s}\`;let i=this.pipelines.get(o);if(i)return i;this.ensureLazyGroup(e);const l=this.shaderModuleCache.get(\`filter_\${e}\`),c=this.shaderModuleCache.get("blurFilterVertex"),u=this.bindGroupLayouts.get(e);if(!l||!c||!u)return this.pipelines.get(e);const a=this.device.createPipelineLayout({bindGroupLayouts:[u]});return i=this.device.createRenderPipeline({layout:a,vertex:{module:c,entryPoint:"main",buffers:[]},fragment:{module:l,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}],constants:r},primitive:{topology:"triangle-list",cullMode:"none"}}),this.pipelines.set(o,i),i}getGradientPipeline(e,r,n){const s=\`\${e}_t\${r}s\${n}\`;let o=this.pipelines.get(s);return o||(this.gradientPipelineLayout?(o=this.createGradientVariant(e,r,n),o?(this.pipelines.set(s,o),o):this.getPipeline(e)):this.getPipeline(e))}gradientPipelineLayout=null;gradientVertexShaderModule=null;gradientFragmentShaderModule=null;gradientStencilFragmentShaderModule=null;createGradientVariant(e,r,n){if(!this.gradientPipelineLayout)return;const s={GRADIENT_TYPE:r,SPREAD_MODE:n},o=rr,i=un,c=e.includes("stencil_atlas")||e==="gradient_fill_stencil_main"?this.gradientStencilFragmentShaderModule:this.gradientFragmentShaderModule,a=e.includes("bgra")||e==="gradient_fill_stencil_main"?this.format:"rgba8unorm",h=e.includes("bgra")||e==="gradient_fill_stencil_main",d={};h&&(d.yFlipSign=-1);let g,m=this.sampleCount;e.includes("stroke")?g={format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:0,stencilWriteMask:0}:e==="gradient_fill_stencil"||e==="gradient_fill_stencil_atlas"?g={format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255}:e==="gradient_fill_stencil_main"?(g={format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},m=1):e==="gradient_fill_bgra_stencil"?g={format:"stencil8",stencilFront:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:255,stencilWriteMask:0}:e==="gradient_fill_bgra_no_msaa"&&(m=1);const f={layout:this.gradientPipelineLayout,vertex:{module:this.gradientVertexShaderModule,entryPoint:"main",buffers:[o],constants:Object.keys(d).length>0?d:void 0},fragment:{module:c,entryPoint:"main",targets:[{format:a,blend:i}],constants:s},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:m}};return g&&(f.depthStencil=g),this.device.createRenderPipeline(f)}getBindGroupLayout(e){let r=this.bindGroupLayouts.get(e);return r||(this.ensureLazyGroup(e),r=this.bindGroupLayouts.get(e)),r}createNodeClearPipeline(){const e={arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]},r=this.device.createRenderPipeline({layout:"auto",vertex:{module:this.getOrCreateShaderModule("nodeClearVertex",N.getNodeClearVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("nodeClearFragment",N.getNodeClearFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}},writeMask:GPUColorWrite.ALL}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"zero",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"always",failOp:"zero",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("node_clear_atlas",r)}dispose(){this.pipelines.clear(),this.bindGroupLayouts.clear(),this.shaderModuleCache.clear(),this.filterBindGroupLayouts.clear()}}class Qp{device;pipelines;bindGroupLayouts;constructor(e){this.device=e,this.pipelines=new Map,this.bindGroupLayouts=new Map,this.initializeBlurPipelines()}initializeBlurPipelines(){const e=this.device.createBindGroupLayout({label:"blur_compute_bind_group_layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.COMPUTE,storageTexture:{access:"write-only",format:"rgba8unorm"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}]});this.bindGroupLayouts.set("blur_compute",e),this.createBlurComputePipeline("blur_compute_horizontal"),this.createBlurComputePipeline("blur_compute_vertical"),this.createBlurComputePipeline("blur_compute_shared_horizontal",!0),this.createBlurComputePipeline("blur_compute_shared_vertical",!0)}createBlurComputePipeline(e,r=!1){const n=this.device.createShaderModule({label:\`\${e}_shader\`,code:r?this.getSharedBlurComputeShaderCode():this.getBlurComputeShaderCode()}),s=this.device.createPipelineLayout({label:\`\${e}_layout\`,bindGroupLayouts:[this.bindGroupLayouts.get("blur_compute")]}),o=this.device.createComputePipeline({label:e,layout:s,compute:{module:n,entryPoint:"main"}});this.pipelines.set(e,o)}getBlurComputeShaderCode(){return\` +struct BlurParams { + direction: vec2, // (1,0) or (0,1) + radius: f32, // ブラー半径 + fraction: f32, // 端ピクセルのブレンド割合 + texSize: vec2, // テクスチャサイズ + samples: f32, // サンプル数 + padding: f32, // パディング(16バイトアライメント) +} + +@group(0) @binding(0) var inputTexture: texture_2d; +@group(0) @binding(1) var outputTexture: texture_storage_2d; +@group(0) @binding(2) var params: BlurParams; + +const WORKGROUP_SIZE: u32 = 16u; + +@compute @workgroup_size(16, 16, 1) +fn main( + @builtin(global_invocation_id) globalId: vec3 +) { + let texSize = vec2(u32(params.texSize.x), u32(params.texSize.y)); + let radius = i32(params.radius); + + let outCoord = globalId.xy; + + if (outCoord.x >= texSize.x || outCoord.y >= texSize.y) { + return; + } + + let direction = vec2(i32(params.direction.x), i32(params.direction.y)); + let samples = params.samples; + let fraction = params.fraction; + + var color = vec4(0.0); + + for (var i = -radius; i <= radius; i = i + 1) { + var sampleCoord = vec2(outCoord) + direction * i; + + sampleCoord.x = clamp(sampleCoord.x, 0, i32(texSize.x) - 1); + sampleCoord.y = clamp(sampleCoord.y, 0, i32(texSize.y) - 1); + + let sample = textureLoad(inputTexture, vec2(sampleCoord), 0); + + // 端ピクセルにfraction重みを適用(Fragment Shaderと同じロジック) + if (i == -radius || i == radius) { + color = color + sample * fraction; + } else { + color = color + sample; + } + } + + color = color / samples; + + textureStore(outputTexture, outCoord, color); +} +\`}getSharedBlurComputeShaderCode(){return\` +struct BlurParams { + direction: vec2, + radius: f32, + fraction: f32, + texSize: vec2, + samples: f32, + padding: f32, +} + +@group(0) @binding(0) var inputTexture: texture_2d; +@group(0) @binding(1) var outputTexture: texture_storage_2d; +@group(0) @binding(2) var params: BlurParams; + +const TILE: u32 = 16u; +const MAX_APRON: u32 = 24u; +const SHARED_W: u32 = TILE + 2u * MAX_APRON; + +var tile: array, 1024>; + +@compute @workgroup_size(16, 16, 1) +fn main( + @builtin(global_invocation_id) globalId: vec3, + @builtin(local_invocation_id) localId: vec3, + @builtin(workgroup_id) workgroupId: vec3 +) { + let texSize = vec2(u32(params.texSize.x), u32(params.texSize.y)); + let radius = u32(params.radius); + let apron = min(radius, MAX_APRON); + let isHorizontal = params.direction.x > 0.5; + let fraction = params.fraction; + let samples = params.samples; + + let threadIdx = localId.x + localId.y * TILE; + let totalThreads = TILE * TILE; + + if (isHorizontal) { + let sharedWidth = TILE + 2u * apron; + let baseX = workgroupId.x * TILE; + let y = globalId.y; + let clampedY = clamp(y, 0u, max(texSize.y, 1u) - 1u); + + // 全スレッドが協調ロード(範囲外スレッドもclampされた座標でロード) + var idx = threadIdx; + loop { + if (idx >= sharedWidth) { break; } + let gx = i32(baseX) + i32(idx) - i32(apron); + let cx = u32(clamp(gx, 0, i32(max(texSize.x, 1u)) - 1)); + tile[localId.y * SHARED_W + idx] = textureLoad(inputTexture, vec2(cx, clampedY), 0); + idx += totalThreads; + } + + // 全スレッドがバリアに到達(早期returnなし) + workgroupBarrier(); + + // 範囲内のスレッドのみ出力 + let outX = globalId.x; + if (outX < texSize.x && y < texSize.y) { + let iRadius = i32(radius); + var color = vec4(0.0); + for (var i = -iRadius; i <= iRadius; i = i + 1) { + let tileIdx = i32(localId.x) + i32(apron) + i; + let s = tile[localId.y * SHARED_W + u32(clamp(tileIdx, 0, i32(sharedWidth) - 1))]; + if (i == -iRadius || i == iRadius) { + color += s * fraction; + } else { + color += s; + } + } + textureStore(outputTexture, vec2(outX, y), color / samples); + } + } else { + let sharedHeight = TILE + 2u * apron; + let baseY = workgroupId.y * TILE; + let x = globalId.x; + let clampedX = clamp(x, 0u, max(texSize.x, 1u) - 1u); + + // 全スレッドが協調ロード(範囲外スレッドもclampされた座標でロード) + var idx = threadIdx; + loop { + if (idx >= sharedHeight) { break; } + let gy = i32(baseY) + i32(idx) - i32(apron); + let cy = u32(clamp(gy, 0, i32(max(texSize.y, 1u)) - 1)); + tile[idx * TILE + localId.x] = textureLoad(inputTexture, vec2(clampedX, cy), 0); + idx += totalThreads; + } + + // 全スレッドがバリアに到達(早期returnなし) + workgroupBarrier(); + + // 範囲内のスレッドのみ出力 + let outY = globalId.y; + if (x < texSize.x && outY < texSize.y) { + let iRadius = i32(radius); + var color = vec4(0.0); + for (var i = -iRadius; i <= iRadius; i = i + 1) { + let tileIdx = i32(localId.y) + i32(apron) + i; + let s = tile[u32(clamp(tileIdx, 0, i32(sharedHeight) - 1)) * TILE + localId.x]; + if (i == -iRadius || i == iRadius) { + color += s * fraction; + } else { + color += s; + } + } + textureStore(outputTexture, vec2(x, outY), color / samples); + } + } +} +\`}getPipeline(e){return this.pipelines.get(e)}getBindGroupLayout(e){return this.bindGroupLayouts.get(e)}destroy(){this.pipelines.clear(),this.bindGroupLayouts.clear()}}const Va=Number.MAX_VALUE,Da=-Number.MAX_VALUE;let Fr=0;const wr=t=>{Fr=t},Zp=()=>Fr,zt=[],Jp=t=>{zt[Fr]=t};let go=null;const em=t=>{go=t},Ne=()=>{if(!(Fr in zt))if(go){const t=go(Fr);Jp(t)}else return null;return zt[Fr]},bo=t=>t in zt?zt[t]:null,fn=[],Na=[],za=[],tm=()=>{for(let t=0;t{Xa=t},yo=()=>Xa,rm=()=>{fn.length=0,wr(0);for(let t=0;t{ts=t},sm=new Set(["normal","layer","add","screen","alpha","erase","copy"]),hn=[],vo=[],Mo=[],om=()=>hn,So=()=>{for(let t=0;t{const t="blend_instanced";return $o.has(t)||$o.set(t,new nm),$o.get(t)},im=(t,e,r,n,s,o,i,l,c,u,a,h)=>{const d=o[0],g=o[1],m=o[2],f=h,b=o[4]/255,x=o[5]/255,y=o[6]/255,P=0;if(sm.has(l)){(ts!==l||yo()!==t.index)&&(st&&(wr(yo()),st.drawArraysInstanced()),Ya(l),xo(t.index),wr(t.index));const S=rs();Ve.pushInstanceBuffer((t.x+.5)/a,(t.y+.5)/a,(t.w-1)/a,(t.h-1)/a,t.w,t.h,c,u,i[6],i[7],0,0,i[0],i[1],i[3],i[4],d,g,m,f,b,x,y,P),S.count++}else{st&&(wr(yo()),st.drawArraysInstanced());const S=vo.length>0?vo.pop():new Float32Array(8);S.set(o);const M=Mo.length>0?Mo.pop():new Float32Array(9);M.set(i),hn.push({node:t,x_min:e,y_min:r,x_max:n,y_max:s,color_transform:S,matrix:M,blend_mode:l,viewport_width:c,viewport_height:u,render_max_size:a,global_alpha:h}),Ya(l),xo(t.index),wr(t.index)}};let To=!1;const Bo=t=>{To=t},nr=()=>To;let Po=!1,Ao=0;const Wa=t=>{Po=t},gt=()=>Po,ja=t=>{Ao=t},Or=()=>Ao,Er=new Map,Rr=new Map,am=()=>{To=!1,Po=!1,Ao=0,Er.clear(),Rr.clear()},cm=()=>{const t=st.currentAttachmentObject;t&&(t.mask=!0,t.clipLevel++,Rr.set(t.clipLevel,t.clipLevel),nr()||Bo(!0))},lm=(t,e,r,n)=>{const s=st.currentAttachmentObject;if(!s)return;const o=s.clipLevel;let i=Er.get(o);i?(i[0]=Math.min(i[0],t),i[1]=Math.min(i[1],e),i[2]=Math.max(i[2],r),i[3]=Math.max(i[3],n)):(i=fd(),i[0]=t,i[1]=e,i[2]=r,i[3]=n,Er.set(o,i))},Ha=()=>{const t=st.currentAttachmentObject;if(!t)return;const r=(1<{const t=st.currentAttachmentObject;if(!t)return;const e=t.clipLevel,r=Er.get(e);if(r&&(Er.delete(e),hd(r)),Rr.delete(e),--t.clipLevel,!t.clipLevel){t.mask=!1,Bo(!1),Wa(!1),ja(0),t.needsStencilClear=!0,Rr.clear(),Er.clear();return}t.pendingStencilClearLevel=t.clipLevel,Ha()},fm=(t,e,r)=>{const n=t.length-5;for(let s=3;s(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),dn=t=>{let e=0;for(const o of t){const i=o.length-5;for(let l=3;l{const n=Math.sqrt(t*t+e*e);return n===0?{x:0,y:0}:{x:-(e/n)*r,y:t/n*r}},wo=(t,e,r)=>({x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r}),xm=t=>{const e=Math.sqrt(t.x*t.x+t.y*t.y);return e===0?{x:0,y:0}:{x:t.x/e,y:t.y/e}},ym=(t,e,r,n)=>({x:(1-t)**2*e.x+2*(1-t)*t*r.x+t**2*n.x,y:(1-t)**2*e.y+2*(1-t)*t*r.y+t**2*n.y}),vm=(t,e,r,n)=>({x:2*(1-t)*(r.x-e.x)+2*t*(n.x-r.x),y:2*(1-t)*(r.y-e.y)+2*t*(n.y-r.y)}),Mm=(t,e,r,n=.5)=>{const s=wo(t,e,n),o=wo(e,r,n),i=wo(s,o,n);return[[t,s,i],[i,o,r]]},Sm=(t,e,r,n=4)=>{let s=[[t,e,r]];for(let o=0;o{const s=[0,.5,1],o=[];for(const i of s){const l=ym(i,t,e,r),c=vm(i,t,e,r),u=xm({x:-c.y,y:c.x});o.push({x:l.x+u.x*n,y:l.y+u.y*n})}return o},$m=(t,e,r,n)=>{const s=Sm(t,e,r,5),o=[],i=[];for(const h of s)o.push(Ka(h[0],h[1],h[2],+n)),i.push(Ka(h[0],h[1],h[2],-n));for(let h=0;h{const n={x:e.x-t.x,y:e.y-t.y},s=bm(n.x,n.y,r),o={x:t.x+s.x,y:t.y+s.y},i={x:e.x+s.x,y:e.y+s.y},l={x:e.x-s.x,y:e.y-s.y},c={x:t.x-s.x,y:t.y-s.y};return[o.x,o.y,!1,i.x,i.y,!1,l.x,l.y,!1,c.x,c.y,!1,o.x,o.y,!1]},Ur=(t,e,r,n)=>{const s=[];for(let i=0;i1e-4||s.push(l,c)}return s},Gr=(t,e)=>{Cr.beginPath(),Cr.moveTo(e[0],e[1]);for(let r=3;r{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=Ur(t,e,r,n[o]),c=Ur(t,e,r,n[i]);if(l[0]===c[0]&&l[1]===c[1]||l[0]===c[2]&&l[1]===c[3])return;const u=Gr(l,n[i]);if(!u)return;const a=Gr(c,n[o]);a&&n.splice(-1,0,[t,e,!1,u[0],u[1],!1,a[0],a[1],!1,t,e,!1])},Qa=(t,e,r,n,s=!1)=>{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=Ur(t,e,r,n[o]),c=Ur(t,e,r,n[i]),u=Gr(l,n[i]);if(!u)return;const a=Gr(c,n[o]);if(!a)return;const h=Math.atan2(u[1]-e,u[0]-t);let g=Math.atan2(a[1]-e,a[0]-t)-h;g>Math.PI?g-=2*Math.PI:g<-Math.PI&&(g+=2*Math.PI);const m=8,f=g/m,b=[t,e,!1];for(let x=0;x<=m;x++){const y=h+x*f,P=t+r*Math.cos(y),S=e+r*Math.sin(y);b.push(P,S,!1)}n.splice(-1,0,b)},Za=(t,e,r,n,s,o=!1)=>{const i=o?0:s.length-1,l=o?s.length-1:s.length-2,c=Ur(t.x,t.y,n,s[i]),u=Ur(t.x,t.y,n,s[l]);if(c[0]===u[0]&&c[1]===u[1]||c[0]===u[2]&&c[1]===u[3])return;const a=Gr(c,s[l]);if(!a)return;const h=Gr(u,s[i]);if(!h)return;const d=e.x-t.x,g=e.y-t.y,m=Math.hypot(d,g),f={x:d/m,y:g/m},b=r.x-t.x,x=r.y-t.y,y=Math.hypot(b,x),P={x:b/y,y:x/y},S=f.x,M=f.y,$=P.x,T=P.y,w=S*T-M*$;if(w===0){s.splice(-1,0,[t.x,t.y,!1,a[0],a[1],!1,h[0],h[1],!1]);return}const E=((h[0]-a[0])*T-(h[1]-a[1])*$)/w,F=a[0]+E*S,A=a[1]+E*M;s.splice(-1,0,[t.x,t.y,!1,a[0],a[1],!1,F,A,!1,t.x,t.y,!1,h[0],h[1],!1,F,A,!1])},Bm=(t,e,r)=>{const n=t[0],s=t[1],o=t[3],i=t[4],l=Math.atan2(s-i,n-o),c=[n,s,!1],u=8;for(let b=0;b<=u;b++){const x=l-Math.PI/2+b*Math.PI/u;c.push(n+e*Math.cos(x),s+e*Math.sin(x),!1)}r.unshift(c);const a=t[t.length-3],h=t[t.length-2],d=t[t.length-6],g=t[t.length-5],m=Math.atan2(h-g,a-d),f=[a,h,!1];for(let b=0;b<=u;b++){const x=m-Math.PI/2+b*Math.PI/u;f.push(a+e*Math.cos(x),h+e*Math.sin(x),!1)}r.push(f)},Pm=(t,e,r)=>{const n=t[0],s=t[1],o=t[3],i=t[4],l=n-o,c=s-i,u=Math.hypot(l,c);if(u>0){const x=l/u,y=c/u,P=n+x*e,S=s+y*e,M=[n-y*e,s+x*e,!1,P-y*e,S+x*e,!1,P+y*e,S-x*e,!1,n+y*e,s-x*e,!1,n-y*e,s+x*e,!1];r.unshift(M)}const a=t[t.length-3],h=t[t.length-2],d=t[t.length-6],g=t[t.length-5],m=a-d,f=h-g,b=Math.hypot(m,f);if(b>0){const x=m/b,y=f/b,P=a+x*e,S=h+y*e,M=[a-y*e,h+x*e,!1,P-y*e,S+x*e,!1,P+y*e,S-x*e,!1,a+y*e,h-x*e,!1,a-y*e,h+x*e,!1];r.push(M)}},Oo=(t,e)=>{const r=dm;r.x=t[0],r.y=t[1];const n=pm;n.x=0,n.y=0;const s=mm;s.x=0,s.y=0;const o=gm;o.x=0,o.y=0;const i=[];for(let g=3;g1)switch(st.joints){case 0:qa(r.x,r.y,e,i);break;case 1:o.x=t[g-6],o.y=t[g-5],Za(r,s,o,e,i);break;case 2:Qa(r.x,r.y,e,i);break}r.x=s.x,r.y=s.y}const l=t[0],c=t[1],u=t[t.length-3],a=t[t.length-2],h=1e-4;if(Math.abs(l-u)1)switch(st.joints){case 0:qa(l,c,e,i,!0);break;case 1:r.x=l,r.y=c,s.x=t[3],s.y=t[4],o.x=t[t.length-6],o.y=t[t.length-5],Za(r,s,o,e,i,!0);break;case 2:Qa(l,c,e,i,!0);break}else if(i.length>0)switch(st.caps){case 1:Bm(t,e,i);break;case 2:Pm(t,e,i);break}return i},Am=(t,e)=>{const r=e/2,n=[];for(const s of t){if(s.length<6)continue;const o=Oo(s,r);for(const i of o)n.push(i)}return n},Ja=new Map;let ec=0;const Fm=()=>{Ja.clear(),ec=0},tc=new WeakMap,Eo=t=>{let e=tc.get(t);return e||(e=t.createView(),tc.set(t,e)),e},wm=6,Om=22,pn=new Map,mn=new Map,ns=(t,e,r)=>{const n=\`\${e}_\${r}\`,s=pn.get(n);return s&&s.length>0?s.pop():t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:wm})},Ot=t=>{const e=\`\${t.width}_\${t.height}\`;let r=pn.get(e);r||(r=[],pn.set(e,r)),r.push(t)},Ro=(t,e,r)=>{const n=\`\${e}_\${r}\`,s=mn.get(n);return s&&s.length>0?s.pop():t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:Om})},Xt=t=>{const e=\`\${t.width}_\${t.height}\`;let r=mn.get(e);r||(r=[],mn.set(e,r)),r.push(t)},Em=()=>{for(const[,t]of pn)for(const e of t)e.destroy();pn.clear();for(const[,t]of mn)for(const e of t)e.destroy();mn.clear()},rc=new Map,Rm=()=>{for(const t of rc.values())t.texture?.resource&&t.texture.resource.destroy();rc.clear()},Lr=new Map;let gn=0;const Cm=60,nc=(t,e,r)=>\`\${e}_\${r}_\${t.join(",")}\`,sc=(t,e,r)=>{const n=nc(t,e,r),s=Lr.get(n);return s?(s.lastUsedFrame=gn,s):null},oc=(t,e,r,n,s)=>{const o=nc(t,e,r);Lr.set(o,{texture:n,view:s,lastUsedFrame:gn})},Um=()=>{gn++;for(const[t,e]of Lr)gn-e.lastUsedFrame>Cm&&(Ot(e.texture),Lr.delete(t))},Gm=()=>{for(const t of Lr.values())Ot(t.texture);Lr.clear(),gn=0};let Co=null;const Lm=()=>{Co?.texture?.resource&&Co.texture.resource.destroy(),Co=null},km=(t,e,r,n,s,o)=>{const i=e.getPipeline("stencil_write_atlas");i&&(t.setPipeline(i),t.setStencilReference(0),t.setVertexBuffer(0,r),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0));const l=e.getPipeline("stencil_fill_atlas");l&&(t.setPipeline(l),t.setStencilReference(0),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0))},Im=(t,e,r,n,s,o)=>{const i=e.getPipeline("stencil_write_main");i&&(t.setPipeline(i),t.setStencilReference(0),t.setVertexBuffer(0,r),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0));const l=e.getPipeline("stencil_fill_main");l&&(t.setPipeline(l),t.setStencilReference(0),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0))},_m=(t,e,r,n,s,o,i,l=!1,c=1)=>{let u;if(i)u="fill";else if(l){if(nr())return;u="fill_bgra_stencil"}else u="fill_bgra";const a=e.getPipeline(u);if(!a){console.error(\`[WebGPU] \${u} pipeline not found\`);return}t.setPipeline(a),t.setVertexBuffer(0,r),t.setBindGroup(0,s,[o]),l&&!i&&!nr()&&t.setStencilReference(Or()),t.draw(n,1,0,0)},Uo=t=>t<=4?256:t<=8?512:1024,ic=(t,e,r)=>{const n=t.length/5,s=Uo(n),o=new Uint8Array(s*4);for(let i=0;i{const n=t.length/5;let s=0,o=0;for(let x=0;x=e&&o===0){o=x;break}}if(o===0&&(o=n-1),s===o){const x=s*5;return{r:t[x+1],g:t[x+2],b:t[x+3],a:t[x+4]}}const i=t[s*5],l=t[o*5],c=(e-i)/(l-i),u=t[s*5+1],a=t[s*5+2],h=t[s*5+3],d=t[s*5+4],g=t[o*5+1],m=t[o*5+2],f=t[o*5+3],b=t[o*5+4];return r===0?{r:Go(ot(kr(u/255),kr(g/255),c))*255,g:Go(ot(kr(a/255),kr(m/255),c))*255,b:Go(ot(kr(h/255),kr(f/255),c))*255,a:ot(d,b,c)}:{r:ot(u,g,c),g:ot(a,m,c),b:ot(h,f,c),a:ot(d,b,c)}},ot=(t,e,r)=>t+(e-t)*r,kr=t=>Math.pow(t,2.23333333),Go=t=>Math.pow(t,.45454545),ac=(t,e,r)=>{const s=new Uint8Array(1024),o=t.length,i=[];for(let l=0;l>16&255)/255,g:(c>>8&255)/255,b:(c&255)/255,a:r[l]})}for(let l=0;l<256;l++){const c=l/255;let u=0,a=o-1;for(let P=0;P=c){u=P,a=P+1;break}const h=i[u],d=i[a];let g=0;d.offset!==h.offset&&(g=(c-h.offset)/(d.offset-h.offset));const m=ot(h.r,d.r,g),f=ot(h.g,d.g,g),b=ot(h.b,d.b,g),x=ot(h.a,d.a,g),y=l*4;s[y+0]=Math.round(m*x*255),s[y+1]=Math.round(f*x*255),s[y+2]=Math.round(b*x*255),s[y+3]=Math.round(x*255)}return s},cc=(t,e,r)=>{const n=t[0],s=t[1],o=t[2],i=t[3],l=t[4],c=t[5];if(r===0){const y=-819.2*n-819.2*o+l,P=819.2*n-819.2*o+l,S=-819.2*n+819.2*o+l,M=-819.2*s-819.2*i+c,$=819.2*s-819.2*i+c,T=-819.2*s+819.2*i+c;let w=S-y,E=T-M;const F=Math.sqrt(w*w+E*E);F?(w=w/F,E=E/F):(w=0,E=0);const A=(P-y)*w+($-M)*E,R=new Float32Array([y+A*w,M+A*E,P,$]);return{inverseMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),linearPoints:R}}const u=n*i-s*o;if(Math.abs(u)<1e-10)return{inverseMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),linearPoints:null};const a=1/u,h=i*a,d=-s*a,g=-o*a,m=n*a,f=(o*c-i*l)*a,b=(s*l-n*c)*a;return{inverseMatrix:new Float32Array([h,d,0,g,m,0,f,b,1]),linearPoints:null}};let Lo=null;const j=new Float32Array(36),Ue=new Float32Array(16);let ko=null,lc=null;const ss=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Dm=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f,b=!1,x=1)=>{const y=dn(s);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer);let S,M;const $=sc(c,a,h);if($)S=$.texture,M=$.view;else{const V=ic(c,a,h),X=c.length/5,Y=Uo(X);S=ns(t,Y,1),t.queue.writeTexture({texture:S},V,{bytesPerRow:Y*4,rowsPerImage:1},{width:Y,height:1}),M=S.createView(),oc(c,a,h,S,M)}const T=cc(u,o,l),w=i[3]>0?i[3]:1,E=o[0],F=o[1],A=o[3],R=o[4],v=o[6],U=o[7];j[0]=T.inverseMatrix[0],j[1]=T.inverseMatrix[3],j[2]=0,j[3]=0,j[4]=T.inverseMatrix[1],j[5]=T.inverseMatrix[4],j[6]=0,j[7]=0,j[8]=T.inverseMatrix[6],j[9]=T.inverseMatrix[7],j[10]=1,j[11]=0,j[12]=l,j[13]=Math.max(-.975,Math.min(.975,d)),j[14]=a,j[15]=819.2,T.linearPoints?(j[16]=T.linearPoints[0],j[17]=T.linearPoints[1],j[18]=T.linearPoints[2],j[19]=T.linearPoints[3]):(j[16]=0,j[17]=0,j[18]=0,j[19]=0),j[20]=1,j[21]=1,j[22]=1,j[23]=w,j[24]=E/g,j[25]=F/m,j[26]=0,j[27]=0,j[28]=A/g,j[29]=R/m,j[30]=0,j[31]=0,j[32]=v/g,j[33]=U/m,j[34]=1,j[35]=0;const L=r.acquireAndWriteUniformBuffer(j);Lo||(Lo=t.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}));const D=Lo,G=n.getBindGroupLayout("gradient_fill");if(!G)return console.error("[WebGPU] gradient_fill bind group layout not found"),null;ss[0].resource.buffer=L,ss[1].resource=D,ss[2].resource=M;const B=t.createBindGroup({layout:G,entries:ss}),z=()=>{const V=n.getBindGroupLayout("fill_dynamic");if(!V)return null;Ue[0]=1,Ue[1]=1,Ue[2]=1,Ue[3]=w,Ue[4]=E/g,Ue[5]=F/m,Ue[6]=0,Ue[7]=0,Ue[8]=A/g,Ue[9]=R/m,Ue[10]=0,Ue[11]=0,Ue[12]=v/g,Ue[13]=U/m,Ue[14]=1,Ue[15]=0;const X=r.dynamicUniform.allocate(Ue),Y=r.dynamicUniform.getBuffer();return(!ko||lc!==Y)&&(ko=t.createBindGroup({layout:V,entries:[{binding:0,resource:{buffer:Y,size:256}}]}),lc=Y),{bindGroup:ko,offset:X}};if(f){const V=n.getPipeline("stencil_write_atlas");if(V){const Y=z();e.setPipeline(V),e.setStencilReference(0),e.setVertexBuffer(0,P),Y&&e.setBindGroup(0,Y.bindGroup,[Y.offset]),e.draw(y.indexCount,1,0,0)}const X=n.getGradientPipeline("gradient_fill_stencil_atlas",l,a);return X&&(e.setPipeline(X),e.setStencilReference(0),e.setBindGroup(0,B),e.draw(y.indexCount,1,0,0)),null}if(b&&nr())return null;const k=n.getPipeline("stencil_write_main");if(k){const V=z();e.setPipeline(k),e.setStencilReference(0),e.setVertexBuffer(0,P),V&&e.setBindGroup(0,V.bindGroup,[V.offset]),e.draw(y.indexCount,1,0,0)}const _=b?"gradient_fill_bgra_stencil_masked":"gradient_fill_stencil_main",I=n.getGradientPipeline(_,l,a);return I&&(e.setPipeline(I),e.setStencilReference(b?Or():0),e.setBindGroup(0,B),e.draw(y.indexCount,1,0,0)),null},uc=(t,e)=>{const r=t[0],n=t[1],s=t[2],o=t[3],i=t[4],l=t[5],c=e[0],u=e[1],a=e[3],h=e[4],d=e[6],g=e[7],m=c*r+a*n,f=c*s+a*o,b=u*r+h*n,x=u*s+h*o,y=c*i+a*l+d,P=u*i+h*l+g,S=m*x-f*b;if(Math.abs(S)<1e-10)return new Float32Array([1,0,0,0,1,0,0,0,1]);const M=1/S,$=x*M,T=-f*M,w=-b*M,E=m*M,F=(f*P-x*y)*M,A=(b*y-m*P)*M,R=$*c+T*u,v=$*a+T*h,U=w*c+E*u,L=w*a+E*h,D=$*d+T*g+F,G=w*d+E*g+A;return new Float32Array([R,U,0,v,L,0,D,G,1])},fc=new Map,Z=new Float32Array(32),Ge=new Float32Array(16);let Io=null,hc=null;const os=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Nm=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f,b=!1,x=1)=>{const y=dn(s);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer),S=ns(t,u,a);t.queue.writeTexture({texture:S},l.buffer,{bytesPerRow:u*4,rowsPerImage:a,offset:l.byteOffset},{width:u,height:a});const M=uc(c,o),$=i[0],T=i[1],w=i[2],E=i[3],F=o[0],A=o[1],R=o[3],v=o[4],U=o[6],L=o[7];Z[0]=M[0],Z[1]=M[1],Z[2]=M[2],Z[3]=0,Z[4]=M[3],Z[5]=M[4],Z[6]=M[5],Z[7]=0,Z[8]=M[6],Z[9]=M[7],Z[10]=M[8],Z[11]=0,Z[12]=u,Z[13]=a,Z[14]=h?1:0,Z[15]=0,Z[16]=$,Z[17]=T,Z[18]=w,Z[19]=E,Z[20]=F/g,Z[21]=A/m,Z[22]=0,Z[23]=0,Z[24]=R/g,Z[25]=v/m,Z[26]=0,Z[27]=0,Z[28]=U/g,Z[29]=L/m,Z[30]=1,Z[31]=0;const D=r.acquireAndWriteUniformBuffer(Z),G=\`bitmap_\${d?"s":"n"}_\${h?"r":"c"}\`;let B=fc.get(G);B||(B=t.createSampler({magFilter:d?"linear":"nearest",minFilter:d?"linear":"nearest",addressModeU:h?"repeat":"clamp-to-edge",addressModeV:h?"repeat":"clamp-to-edge"}),fc.set(G,B));const z=n.getBindGroupLayout("bitmap_fill");if(!z)return console.error("[WebGPU] bitmap_fill bind group layout not found"),Ot(S),null;os[0].resource.buffer=D,os[1].resource=B,os[2].resource=S.createView();const k=t.createBindGroup({layout:z,entries:os}),_=()=>{const I=n.getBindGroupLayout("fill_dynamic");if(!I)return null;Ge[0]=$,Ge[1]=T,Ge[2]=w,Ge[3]=E,Ge[4]=F/g,Ge[5]=A/m,Ge[6]=0,Ge[7]=0,Ge[8]=R/g,Ge[9]=v/m,Ge[10]=0,Ge[11]=0,Ge[12]=U/g,Ge[13]=L/m,Ge[14]=1,Ge[15]=0;const V=r.dynamicUniform.allocate(Ge),X=r.dynamicUniform.getBuffer();return(!Io||hc!==X)&&(Io=t.createBindGroup({layout:I,entries:[{binding:0,resource:{buffer:X,size:256}}]}),hc=X),{bindGroup:Io,offset:V}};if(f&&b){const I=n.getPipeline("stencil_write");if(I){const X=_();X&&(e.setPipeline(I),e.setStencilReference(0),e.setVertexBuffer(0,P),e.setBindGroup(0,X.bindGroup,[X.offset]),e.draw(y.indexCount,1,0,0))}const V=n.getPipeline("bitmap_fill_stencil");V&&(e.setPipeline(V),e.setStencilReference(0),e.setBindGroup(0,k),e.draw(y.indexCount,1,0,0))}else{let I;if(f)I="bitmap_fill";else if(b){if(nr())return Ot(S),null;I="bitmap_fill_bgra_stencil"}else I="bitmap_fill_bgra";const V=n.getPipeline(I);if(!V)return console.error(\`[WebGPU] \${I} pipeline not found\`),Ot(S),null;e.setPipeline(V),e.setVertexBuffer(0,P),e.setBindGroup(0,k),b&&!f&&!nr()&&e.setStencilReference(Or()),e.draw(y.indexCount,1,0,0)}return S},dc=(t,e,r)=>{const n=t.length-5;for(let s=3;s(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),Xm=(t,e)=>{const r=e/2,n=[];for(const c of t){const u=Oo(c,r);for(const a of u)n.push(a)}let s=0;for(const c of n){const u=c.length-5;for(let a=3;a{const y=Xm(s,o);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer);let S,M;const $=sc(u,h,d);if($)S=$.texture,M=$.view;else{const _=ic(u,h,d),I=u.length/5,V=Uo(I);S=ns(t,V,1),t.queue.writeTexture({texture:S},_,{bytesPerRow:V*4,rowsPerImage:1},{width:V,height:1}),M=S.createView(),oc(u,h,d,S,M)}const T=cc(a,i,c),w=l[3]>0?l[3]:1,E=i[0],F=i[1],A=i[3],R=i[4],v=i[6],U=i[7];H[0]=T.inverseMatrix[0],H[1]=T.inverseMatrix[3],H[2]=0,H[3]=0,H[4]=T.inverseMatrix[1],H[5]=T.inverseMatrix[4],H[6]=0,H[7]=0,H[8]=T.inverseMatrix[6],H[9]=T.inverseMatrix[7],H[10]=1,H[11]=0,H[12]=c,H[13]=Math.max(-.975,Math.min(.975,g)),H[14]=h,H[15]=819.2,T.linearPoints?(H[16]=T.linearPoints[0],H[17]=T.linearPoints[1],H[18]=T.linearPoints[2],H[19]=T.linearPoints[3]):(H[16]=0,H[17]=0,H[18]=0,H[19]=0),H[20]=1,H[21]=1,H[22]=1,H[23]=w,H[24]=E/m,H[25]=F/f,H[26]=0,H[27]=0,H[28]=A/m,H[29]=R/f,H[30]=0,H[31]=0,H[32]=v/m,H[33]=U/f,H[34]=1,H[35]=0;const L=r.acquireAndWriteUniformBuffer(H);Vo||(Vo=t.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}));const D=Vo,G=n.getBindGroupLayout("gradient_fill");if(!G)return console.error("[WebGPU] gradient_fill bind group layout not found"),null;is[0].resource.buffer=L,is[1].resource=D,is[2].resource=M;const B=t.createBindGroup({layout:G,entries:is}),z=x?b?"gradient_stroke_atlas":"gradient_stroke_bgra":b?"gradient_fill":"gradient_fill_bgra",k=n.getGradientPipeline(z,c,h);return k?(e.setPipeline(k),e.setVertexBuffer(0,P),e.setBindGroup(0,B),e.draw(y.indexCount,1,0,0),null):(console.error(\`[WebGPU] \${z} pipeline not found\`),null)};let Do=new Float32Array(32);const Wm=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),jm=(t,e)=>{const r=e/2,n=[];for(const c of t){const u=Oo(c,r);for(const a of u)n.push(a)}let s=0;for(const c of n){const u=c.length-5;for(let a=3;a{const y=jm(s,o);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer),S=ns(t,a,h);t.queue.writeTexture({texture:S},c.buffer,{bytesPerRow:a*4,rowsPerImage:h,offset:c.byteOffset},{width:a,height:h});const M=uc(u,i),$=1,T=1,w=1,E=l[3]>0?l[3]:1,F=i[0],A=i[1],R=i[3],v=i[4],U=i[6],L=i[7];J[0]=M[0],J[1]=M[1],J[2]=M[2],J[3]=0,J[4]=M[3],J[5]=M[4],J[6]=M[5],J[7]=0,J[8]=M[6],J[9]=M[7],J[10]=M[8],J[11]=0,J[12]=a,J[13]=h,J[14]=d?1:0,J[15]=0,J[16]=$,J[17]=T,J[18]=w,J[19]=E,J[20]=F/m,J[21]=A/f,J[22]=0,J[23]=0,J[24]=R/m,J[25]=v/f,J[26]=0,J[27]=0,J[28]=U/m,J[29]=L/f,J[30]=1,J[31]=0;const D=r.acquireAndWriteUniformBuffer(J),G=\`bitmap_\${g?"s":"n"}_\${d?"r":"c"}\`;let B=pc.get(G);B||(B=t.createSampler({magFilter:g?"linear":"nearest",minFilter:g?"linear":"nearest",addressModeU:d?"repeat":"clamp-to-edge",addressModeV:d?"repeat":"clamp-to-edge"}),pc.set(G,B));const z=n.getBindGroupLayout("bitmap_fill");if(!z)return console.error("[WebGPU] bitmap_fill bind group layout not found"),Ot(S),null;as[0].resource.buffer=D,as[1].resource=B,as[2].resource=S.createView();const k=t.createBindGroup({layout:z,entries:as}),_=x?b?"bitmap_stroke_atlas":"bitmap_stroke_bgra":b?"bitmap_fill":"bitmap_fill_bgra",I=n.getPipeline(_);return I?(e.setPipeline(I),e.setVertexBuffer(0,P),e.setBindGroup(0,k),e.draw(y.indexCount,1,0,0),S):(console.error(\`[WebGPU] \${_} pipeline not found\`),Ot(S),null)},mc=new Float32Array([-1,-1,.5,.5,1,-1,.5,.5,-1,1,.5,.5,-1,1,.5,.5,1,-1,.5,.5,1,1,.5,.5]),Km=new Float32Array([1,1,1,1,.5,0,0,0,0,.5,0,0,.5,.5,1,0]),qm=(t,e,r,n,s)=>{if(!s)return;const o=s.clipLevel,i=1<{const a=s.clipLevel,h=s.width,d=s.height,g=l[0],m=l[1],f=l[2],b=l[3]*c;if(o.length===0)return;const x=dn(o);if(x.indexCount===0)return;const y=r.acquireVertexBuffer(x.buffer.byteLength,x.buffer),P=i[0],S=i[1],M=i[3],$=i[4],T=i[6],w=i[7];Le[0]=g,Le[1]=m,Le[2]=f,Le[3]=b,Le[4]=P/h,Le[5]=S/d,Le[6]=0,Le[7]=0,Le[8]=M/h,Le[9]=$/d,Le[10]=0,Le[11]=0,Le[12]=T/h,Le[13]=w/d,Le[14]=1,Le[15]=0;const E=r.dynamicUniform.allocate(Le);let F=Rr.get(a)??a,A;u?A=\`clip_write_main_\${Math.min(8,Math.max(1,F))}\`:A="clip_write";const R=n.getPipeline(A);if(!R){console.error(\`[WebGPU] \${A} pipeline not found\`);return}const v=n.getBindGroupLayout("fill_dynamic");if(!v)return;const U=t.createBindGroup({layout:v,entries:[{binding:0,resource:{buffer:r.dynamicUniform.getBuffer(),size:256}}]});e.setPipeline(R),e.setStencilReference(0),e.setVertexBuffer(0,y),e.setBindGroup(0,U,[E]),e.draw(x.indexCount,1,0,0),F++,F>8&&(qm(t,e,r,n,s),F=a+1),Rr.set(a,F)};let No=null,gc=null;const Zm=(t,e,r,n,s,o,i,l)=>{const c=rs();if(c.count===0)return r;r&&(r.end(),r=null);const u=gt(),a=Or(),g=(F=>{switch(F){case"add":return"instanced_add";case"screen":return"instanced_screen";case"alpha":return"instanced_alpha";case"erase":return"instanced_erase";case"copy":return"instanced_copy";default:return"instanced"}})(ts),m=l.getPipeline(g),f=l.getPipeline("instanced_masked"),b=u&&f&&(n.msaaStencil?.view||n.stencil?.view),x=b?f:m;if(!x)return console.error("[WebGPU] Instanced pipeline not found"),null;let y;if(b){const F=n.msaa&&n.msaaTexture?.view,A=F?n.msaaTexture.view:n.texture.view,R=F&&n.msaaStencil?.view?n.msaaStencil.view:n.stencil.view,v=F?n.texture.view:null,U=o.createStencilRenderPassDescriptor(A,R,"load","load",v);y=e.beginRenderPass(U)}else{const F=n.msaa&&n.msaaTexture?.view,A=F?n.msaaTexture.view:n.texture.view,R=F?n.texture.view:null,v=o.createRenderPassDescriptor(A,0,0,0,0,"load",R);y=e.beginRenderPass(v)}y.setPipeline(x),b&&y.setStencilReference(a);const P=new Float32Array(Ve.buffer.buffer,Ve.buffer.byteOffset,Ve.offset),S=s.acquireVertexBuffer(P.byteLength,P),M=s.getUnitRectBuffer(),$=Ne()||o.getAttachment("atlas");if(!$)return console.error("[WebGPU] Atlas attachment not found"),y.end(),null;const T=i.createSampler("atlas_instanced_sampler",!1),w=l.getBindGroupLayout("instanced");if(!w)return console.error("[WebGPU] Instanced bind group layout not found"),y.end(),null;const E=$.texture.view;return(!No||gc!==E)&&(No=t.createBindGroup({layout:w,entries:[{binding:0,resource:T},{binding:1,resource:E}]}),gc=E),y.setVertexBuffer(0,M),y.setVertexBuffer(1,S),y.setBindGroup(0,No),y.draw(6,c.count,0,0),y.end(),c.clear(),null};let zo=null,bc=null;const Jm=(t,e,r,n,s,o,i,l,c=!0,u=!0)=>{const a=rs();if(a.count===0)return r;r&&(r.end(),r=null);const h=gt(),d=Or(),f=(R=>{switch(R){case"add":return"instanced_add";case"screen":return"instanced_screen";case"alpha":return"instanced_alpha";case"erase":return"instanced_erase";case"copy":return"instanced_copy";default:return"instanced"}})(ts),b=l.getPipeline(f),x=l.getPipeline("instanced_masked"),y=h&&x&&(n.msaaStencil?.view||n.stencil?.view),P=y?x:b;if(!P)return console.error("[WebGPU] Instanced pipeline not found"),null;let S;if(y){const R=n.msaa&&n.msaaTexture?.view,v=R?n.msaaTexture.view:n.texture.view,U=R&&n.msaaStencil?.view?n.msaaStencil.view:n.stencil.view,L=R?n.texture.view:null,D=o.createStencilRenderPassDescriptor(v,U,"load","load",L);S=e.beginRenderPass(D)}else{const R=n.msaa&&n.msaaTexture?.view,v=R?n.msaaTexture.view:n.texture.view,U=R?n.texture.view:null,L=o.createRenderPassDescriptor(v,0,0,0,0,"load",U);S=e.beginRenderPass(L)}S.setPipeline(P),y&&S.setStencilReference(d);const M=new Float32Array(Ve.buffer.buffer,Ve.buffer.byteOffset,Ve.offset);let $;u?($=s.acquireStorageBuffer(M.byteLength),s.writeStorageBuffer($,M)):$=s.acquireVertexBuffer(M.byteLength,M);const T=s.getUnitRectBuffer(),w=Ne()||o.getAttachment("atlas");if(!w)return console.error("[WebGPU] Atlas attachment not found"),S.end(),null;const E=i.createSampler("atlas_instanced_sampler",!1),F=l.getBindGroupLayout("instanced");if(!F)return console.error("[WebGPU] Instanced bind group layout not found"),S.end(),null;const A=w.texture.view;if((!zo||bc!==A)&&(zo=t.createBindGroup({layout:F,entries:[{binding:0,resource:E},{binding:1,resource:A}]}),bc=A),S.setVertexBuffer(0,T),S.setVertexBuffer(1,$),S.setBindGroup(0,zo),c){const R=s.createIndirectBuffer(6,a.count,0,0);S.drawIndirect(R,0)}else S.draw(6,a.count,0,0);return S.end(),a.clear(),null},je=new Float32Array(12),bn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],Xo=(t,e,r,n,s)=>{const{device:o,commandEncoder:i,frameBufferManager:l,pipelineManager:c,textureManager:u}=s,a=Math.max(t.width,e.width),h=Math.max(t.height,e.height),d=l.createTemporaryAttachment(a,h),g=c.getPipeline("complex_blend"),m=c.getBindGroupLayout("complex_blend");if(!g||!m)return console.error(\`[WebGPU ComplexBlend] Pipeline not found for blend mode: \${r}\`),t;const f=u.createSampler("complex_blend_sampler",!0),b=N.getBlendModeIndex(r);je[0]=n[0],je[1]=n[1],je[2]=n[2],je[3]=n[3],je[4]=n[4],je[5]=n[5],je[6]=n[6],je[7]=n[7],je[8]=b,je[9]=0,je[10]=0,je[11]=0;const x=s.bufferManager?s.bufferManager.acquireAndWriteUniformBuffer(je):o.createBuffer({size:48,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});s.bufferManager||o.queue.writeBuffer(x,0,je),bn[0].resource.buffer=x,bn[1].resource=f,bn[2].resource=e.texture.view,bn[3].resource=t.texture.view;const y=o.createBindGroup({layout:m,entries:bn}),P=l.createRenderPassDescriptor(d.texture.view,0,0,0,0,"clear"),S=i.beginRenderPass(P);return S.setPipeline(g),S.setBindGroup(0,y),S.draw(6,1,0,0),S.end(),d},xn=new Float32Array(4),it=new Float32Array(6),Oe=new Float32Array(8),Qe=new Float32Array(12),at=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],e0=(t,e,r,n,s,o,i,l,c,u,a,h,d,g)=>{const m=d.getPipeline("complex_blend_copy"),f=d.getBindGroupLayout("texture_copy");if(!m||!f)return;xn[0]=c/i,xn[1]=u/l,xn[2]=s/i,xn[3]=o/l;const b=g.acquireAndWriteUniformBuffer(xn),x=h.createSampler("complex_blend_copy_sampler",!1);at[0].resource.buffer=b,at[1].resource=x,at[2].resource=r;const y=t.createBindGroup({layout:f,entries:at}),P=a.createRenderPassDescriptor(n.texture.view,0,0,0,0,"clear"),S=e.beginRenderPass(P);S.setPipeline(m),S.setBindGroup(0,y),S.draw(6,1,0,0),S.end()},t0=(t,e,r,n,s,o,i,l,c,u)=>{const a=n.msaa&&n.msaaTexture?.view,h=a?"complex_blend_output_msaa":"complex_blend_output",d=c.getPipeline(h),g=c.getBindGroupLayout("positioned_texture");if(!d||!g)return;Oe[0]=s,Oe[1]=o,Oe[2]=r.width,Oe[3]=r.height,Oe[4]=n.width,Oe[5]=n.height,Oe[6]=0,Oe[7]=0;const m=u.acquireAndWriteUniformBuffer(Oe),f=l.createSampler("complex_blend_output_sampler",!1);at[0].resource.buffer=m,at[1].resource=f,at[2].resource=r.texture.view;const b=t.createBindGroup({layout:g,entries:at}),x=a?n.msaaTexture.view:n.texture.view,y=a?n.texture.view:null,P=i.createRenderPassDescriptor(x,0,0,0,0,"load",y),S=e.beginRenderPass(P);S.setPipeline(d),S.setBindGroup(0,b),S.draw(6,1,0,0),S.end()},r0=(t,e,r,n,s,o,i)=>{const l=om();if(l.length===0)return;if(!r||!r.texture){So();return}const c=Ne()||n.getAttachment("atlas");if(!c||!c.texture){So();return}for(const u of l){const{node:a,x_min:h,y_min:d,x_max:g,y_max:m,color_transform:f,matrix:b,blend_mode:x,global_alpha:y}=u,P=Math.ceil(Math.abs(g-h)),S=Math.ceil(Math.abs(m-d));if(P<=0||S<=0)continue;const M=Math.max(0,Math.floor(b[6])),$=Math.max(0,Math.floor(b[7]));if(M>=r.width||$>=r.height)continue;const T=b[0]!==1||b[1]!==0||b[3]!==0||b[4]!==1,w=T?P:a.w,E=T?S:a.h,F=Math.min(w,r.width-M),A=Math.min(E,r.height-$);if(F<=0||A<=0)continue;let R;if(T){R=n.createTemporaryAttachment(w,E);const L=o.getPipeline("complex_blend_scale"),D=o.getBindGroupLayout("texture_scale");if(L&&D){const G=w/2,B=E/2,z=a.w/2,k=a.h/2;it[0]=b[0],it[1]=b[1],it[2]=b[3],it[3]=b[4],it[4]=-z*b[0]-k*b[3]+G,it[5]=-z*b[1]-k*b[4]+B;const _=n.createTemporaryAttachment(a.w,a.h);e.copyTextureToTexture({texture:c.texture.resource,origin:{x:a.x,y:a.y,z:0}},{texture:_.texture.resource,origin:{x:0,y:0,z:0}},{width:a.w,height:a.h}),Qe[0]=it[0],Qe[1]=it[1],Qe[2]=it[2],Qe[3]=it[3],Qe[4]=it[4],Qe[5]=it[5],Qe[6]=a.w,Qe[7]=a.h,Qe[8]=w,Qe[9]=E,Qe[10]=0,Qe[11]=0;const I=i.acquireAndWriteUniformBuffer(Qe,48),V=s.createSampler("scale_sampler",!0);at[0].resource.buffer=I,at[1].resource=V,at[2].resource=_.texture.view;const X=t.createBindGroup({layout:D,entries:at}),Y=n.createRenderPassDescriptor(R.texture.view,0,0,0,0,"clear"),W=e.beginRenderPass(Y);W.setPipeline(L),W.setBindGroup(0,X),W.draw(6,1,0,0),W.end(),n.releaseTemporaryAttachment(_)}else e.copyTextureToTexture({texture:c.texture.resource,origin:{x:a.x,y:a.y,z:0}},{texture:R.texture.resource,origin:{x:0,y:0,z:0}},{width:Math.min(a.w,w),height:Math.min(a.h,E)})}else R=n.createTemporaryAttachment(w,E),e.copyTextureToTexture({texture:c.texture.resource,origin:{x:a.x,y:a.y,z:0}},{texture:R.texture.resource,origin:{x:0,y:0,z:0}},{width:w,height:E});const v=n.createTemporaryAttachment(w,E);e0(t,e,r.texture.view,v,M,$,r.width,r.height,w,E,n,s,o,i),Oe[0]=f[0],Oe[1]=f[1],Oe[2]=f[2],Oe[3]=y,Oe[4]=f[4],Oe[5]=f[5],Oe[6]=f[6],Oe[7]=0;const U=Xo(R,v,x,Oe,{device:t,commandEncoder:e,bufferManager:i,frameBufferManager:n,pipelineManager:o,textureManager:s});t0(t,e,U,r,M,$,n,s,o,i),n.releaseTemporaryAttachment(R),n.releaseTemporaryAttachment(v),n.releaseTemporaryAttachment(U)}So()},ne={x:0,y:0},xc=[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5],n0=(t,e,r,n,s)=>{const o=Math.sqrt(t[0]*t[0]+t[1]*t[1]),i=Math.sqrt(t[2]*t[2]+t[3]*t[3]),l=e*(o/s),c=r*(i/s),u=xc[Math.min(n-1,xc.length-1)],a=Math.round(l*u),h=Math.round(c*u);let d=1,g=1;return l>128?d=.0625:l>64?d=.125:l>32?d=.25:l>16&&(d=.5),c>128?g=.0625:c>64?g=.125:c>32?g=.25:c>16&&(g=.5),{baseBlurX:l,baseBlurY:c,offsetX:a,offsetY:h,bufferScaleX:d,bufferScaleY:g}},s0=(t,e,r,n)=>{const s=Math.ceil(e*.5),o=1-(s-e*.5),i=1+e,l=t?1/r:0,c=t?0:1/n;return{offsetX:l,offsetY:c,fraction:o,samples:i,halfBlur:s}},ht=new Float32Array(8),cs=[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null}}],o0={label:"blur_compute_pass_h"},i0={label:"blur_compute_pass_v"},yc=(t,e,r,n,s,o,i,l)=>{const c=Math.ceil(i*.5),a=c>=8&&c<=24?o?"blur_compute_shared_horizontal":"blur_compute_shared_vertical":o?"blur_compute_horizontal":"blur_compute_vertical",h=r.getPipeline(a),d=r.getBindGroupLayout("blur_compute");if(!h||!d)return;const g=1-(c-i*.5),m=1+i;ht[0]=o?1:0,ht[1]=o?0:1,ht[2]=c,ht[3]=g,ht[4]=n.width,ht[5]=n.height,ht[6]=m,ht[7]=0;const f=l?l.acquireAndWriteUniformBuffer(ht):(()=>{const S=t.createBuffer({size:ht.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return t.queue.writeBuffer(S,0,ht),S})();cs[0].resource=n.texture.view,cs[1].resource=s.texture.view,cs[2].resource.buffer=f;const b=t.createBindGroup({layout:d,entries:cs}),x=e.beginComputePass(o?o0:i0);x.setPipeline(h),x.setBindGroup(0,b);const y=Math.ceil(s.width/16),P=Math.ceil(s.height/16);x.dispatchWorkgroups(y,P,1),x.end()},a0=(t,e,r,n)=>{const i=Math.max(t,e),l=Math.min(r,n);return i>=4&&l>=128},ye=new Float32Array(4),ct=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],sr=(t,e,r,n,s,o,i)=>{const{device:l,commandEncoder:c,frameBufferManager:u,pipelineManager:a,textureManager:h}=i,d=n0(e,r,n,s,o),{baseBlurX:g,baseBlurY:m,offsetX:f,offsetY:b,bufferScaleX:x,bufferScaleY:y}=d;ne.x+=f,ne.y+=b;const P=t.width+f*2,S=t.height+b*2,M=Math.ceil(P*x),$=Math.ceil(S*y),T=u.createTemporaryAttachment(M,$),w=u.createTemporaryAttachment(M,$),E=h.createSampler("blur_sampler",!0);c0(l,c,u,a,t,T,E,x,y,f*x,b*y,i.bufferManager);const F=g*x,A=m*y,R=i.computePipelineManager&&a0(g,m,M,$),v=[T,w];let U=0;for(let D=0;D0){const G=U;U=(U+1)%2,R?yc(l,c,i.computePipelineManager,v[G],v[U],!0,F,i.bufferManager):vc(l,c,u,a,v[G],v[U],E,!0,F,i.bufferManager)}if(n>0){const G=U;U=(U+1)%2,R?yc(l,c,i.computePipelineManager,v[G],v[U],!1,A,i.bufferManager):vc(l,c,u,a,v[G],v[U],E,!1,A,i.bufferManager)}}let L=v[U];if(x!==1||y!==1){const D=u.createTemporaryAttachment(P,S);l0(l,c,u,a,L,D,E,1/x,1/y,i.bufferManager),u.releaseTemporaryAttachment(T),u.releaseTemporaryAttachment(w),L=D}else{const D=(U+1)%2;u.releaseTemporaryAttachment(v[D])}return L},c0=(t,e,r,n,s,o,i,l,c,u,a,h)=>{const d=n.getPipeline("texture_copy_rgba8"),g=n.getBindGroupLayout("texture_copy");if(!d||!g){console.error("[WebGPU BlurFilter] texture_copy_rgba8 pipeline not found");return}const m=s.width*l,f=s.height*c,b=1,x=1,y=0,P=0;ye[0]=b,ye[1]=x,ye[2]=y,ye[3]=P;const S=h?h.acquireAndWriteUniformBuffer(ye):t.createBuffer({size:ye.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});h||t.queue.writeBuffer(S,0,ye),ct[0].resource.buffer=S,ct[1].resource=i,ct[2].resource=s.texture.view;const M=t.createBindGroup({layout:g,entries:ct}),$=r.createRenderPassDescriptor(o.texture.view,0,0,0,0,"clear"),T=e.beginRenderPass($);T.setPipeline(d),T.setBindGroup(0,M),T.setViewport(u,a,m,f,0,1),T.setScissorRect(Math.floor(u),Math.floor(a),Math.ceil(m),Math.ceil(f)),T.draw(6,1,0,0),T.end()},vc=(t,e,r,n,s,o,i,l,c,u)=>{const a=s0(l,c,s.width,s.height),{offsetX:h,offsetY:d,fraction:g,samples:m,halfBlur:f}=a,b=Math.max(1,Math.min(16,f)),x=n.getPipeline(\`blur_filter_\${b}\`),y=n.getBindGroupLayout("blur_filter");if(!x||!y){console.error(\`[WebGPU BlurFilter] blur_filter_\${b} pipeline not found\`);return}ye[0]=h,ye[1]=d,ye[2]=g,ye[3]=m;const P=u?u.acquireAndWriteUniformBuffer(ye):t.createBuffer({size:ye.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});u||t.queue.writeBuffer(P,0,ye),ct[0].resource.buffer=P,ct[1].resource=i,ct[2].resource=s.texture.view;const S=t.createBindGroup({layout:y,entries:ct}),M=r.createRenderPassDescriptor(o.texture.view,0,0,0,0,"clear"),$=e.beginRenderPass(M);$.setPipeline(x),$.setBindGroup(0,S),$.draw(6,1,0,0),$.end()},l0=(t,e,r,n,s,o,i,l,c,u)=>{const a=n.getPipeline("texture_copy_rgba8"),h=n.getBindGroupLayout("texture_copy");if(!a||!h){console.error("[WebGPU BlurFilter] texture_copy_rgba8 pipeline not found");return}ye[0]=1,ye[1]=1,ye[2]=0,ye[3]=0;const d=u?u.acquireAndWriteUniformBuffer(ye):t.createBuffer({size:ye.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});u||t.queue.writeBuffer(d,0,ye),ct[0].resource.buffer=d,ct[1].resource=i,ct[2].resource=s.texture.view;const g=t.createBindGroup({layout:h,entries:ct}),m=r.createRenderPassDescriptor(o.texture.view,0,0,0,0,"clear"),f=e.beginRenderPass(m);f.setPipeline(a),f.setBindGroup(0,g),f.draw(6,1,0,0),f.end()},de=new Float32Array(20),ls=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Mc=(t,e,r)=>{const{device:n,commandEncoder:s,frameBufferManager:o,pipelineManager:i,textureManager:l}=r,c=o.createTemporaryAttachment(t.width,t.height),u=i.getPipeline("color_matrix_filter"),a=i.getBindGroupLayout("color_matrix_filter");if(!u||!a)return console.error("[WebGPU ColorMatrixFilter] Pipeline not found"),t;const h=l.createSampler("color_matrix_sampler",!0);de[0]=e[0],de[1]=e[5],de[2]=e[10],de[3]=e[15],de[4]=e[1],de[5]=e[6],de[6]=e[11],de[7]=e[16],de[8]=e[2],de[9]=e[7],de[10]=e[12],de[11]=e[17],de[12]=e[3],de[13]=e[8],de[14]=e[13],de[15]=e[18],de[16]=e[4]/255,de[17]=e[9]/255,de[18]=e[14]/255,de[19]=e[19]/255;const d=r.bufferManager?r.bufferManager.acquireAndWriteUniformBuffer(de):n.createBuffer({size:de.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});r.bufferManager||n.queue.writeBuffer(d,0,de),ls[0].resource.buffer=d,ls[1].resource=h,ls[2].resource=t.texture.view;const g=n.createBindGroup({layout:a,entries:ls}),m=o.createRenderPassDescriptor(c.texture.view,0,0,0,0,"clear"),f=s.beginRenderPass(m);return f.setPipeline(u),f.setBindGroup(0,g),f.draw(6,1,0,0),f.end(),c},Pe=new Float32Array(16),yn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],u0=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},Sc=(t,e,r,n,s,o,i,l,c,u,a,h)=>{const{device:d,commandEncoder:g,frameBufferManager:m,pipelineManager:f,textureManager:b}=h,x=ne.x,y=ne.y,P=t.width,S=t.height,M=sr(t,e,s,o,l,a,h),$=M.width,T=M.height,w=ne.x,E=ne.y,F=c?P:$,A=c?S:T,R=w-x,v=E-y,U=c?0:R,L=c?0:v,D=c?-R:0,G=c?-v:0,B=F/P,z=A/S,k=U/P,_=L/S,I=F/$,V=A/T,X=D/$,Y=G/T,W=m.createTemporaryAttachment(F,A),K=f.getFilterPipeline("glow_filter",{IS_INNER:c?1:0,IS_KNOCKOUT:u?1:0}),q=f.getBindGroupLayout("glow_filter");if(!K||!q)return console.error("[WebGPU GlowFilter] Pipeline not found"),m.releaseTemporaryAttachment(M),t;const ce=b.createSampler("glow_sampler",!0),[te,se,ue,Fe]=u0(r,n);Pe[0]=te,Pe[1]=se,Pe[2]=ue,Pe[3]=Fe,Pe[4]=B,Pe[5]=z,Pe[6]=k,Pe[7]=_,Pe[8]=I,Pe[9]=V,Pe[10]=X,Pe[11]=Y,Pe[12]=i,Pe[13]=c?1:0,Pe[14]=u?1:0,Pe[15]=0;const ge=h.bufferManager?h.bufferManager.acquireAndWriteUniformBuffer(Pe):d.createBuffer({size:Pe.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});h.bufferManager||d.queue.writeBuffer(ge,0,Pe),yn[0].resource.buffer=ge,yn[1].resource=ce,yn[2].resource=M.texture.view,yn[3].resource=t.texture.view;const Q=d.createBindGroup({layout:q,entries:yn}),Ct=m.createRenderPassDescriptor(W.texture.view,0,0,0,0,"clear"),Je=g.beginRenderPass(Ct);return Je.setPipeline(K),Je.setBindGroup(0,Q),Je.draw(6,1,0,0),Je.end(),m.releaseTemporaryAttachment(M),W},f0=Math.PI/180,Ae=new Float32Array(16),vn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],h0=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},$c=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m)=>{const{device:f,commandEncoder:b,frameBufferManager:x,pipelineManager:y,textureManager:P}=m,S=ne.x,M=ne.y,$=t.width,T=t.height,w=sr(t,e,i,l,u,g,m),E=w.width,F=w.height,A=ne.x,R=ne.y,v=A-S,U=R-M,L=Math.sqrt(e[0]*e[0]+e[1]*e[1]),D=Math.sqrt(e[2]*e[2]+e[3]*e[3]),G=n*f0,B=Math.cos(G)*r*(L/g),z=Math.sin(G)*r*(D/g),k=a?$:E+Math.max(0,Math.abs(B)-v),_=a?T:F+Math.max(0,Math.abs(z)-U),I=Math.ceil(k),V=Math.ceil(_),X=(I-k)/2,Y=(V-_)/2,W=a?0:Math.max(0,v-B)+X,K=a?0:Math.max(0,U-z)+Y,q=a?B-A:(B>0?Math.max(0,B-v):0)+X,ce=a?z-R:(z>0?Math.max(0,z-U):0)+Y,te=x.createTemporaryAttachment(I,V),se=a;let ue=h,Fe=d;a?ue=h||d:!h&&d&&(ue=!0,Fe=!0);const ge=y.getFilterPipeline("drop_shadow_filter",{IS_INNER:se?1:0,IS_KNOCKOUT:ue?1:0,IS_HIDE_OBJECT:Fe?1:0}),Q=y.getBindGroupLayout("drop_shadow_filter");if(!ge||!Q)return console.error("[WebGPU DropShadowFilter] Pipeline not found"),x.releaseTemporaryAttachment(w),t;const Ct=P.createSampler("drop_shadow_sampler",!0),[Je,Ut,lr,ur]=h0(s,o),Yt=I/$,Gt=V/T,Lt=W/$,Wt=K/T,fr=I/E,jt=V/F,hr=q/E,Ht=ce/F;Ae[0]=Je,Ae[1]=Ut,Ae[2]=lr,Ae[3]=ur,Ae[4]=Yt,Ae[5]=Gt,Ae[6]=Lt,Ae[7]=Wt,Ae[8]=fr,Ae[9]=jt,Ae[10]=hr,Ae[11]=Ht,Ae[12]=c,Ae[13]=se?1:0,Ae[14]=ue?1:0,Ae[15]=Fe?1:0;const lt=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(Ae):f.createBuffer({size:Ae.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(lt,0,Ae),vn[0].resource.buffer=lt,vn[1].resource=Ct,vn[2].resource=w.texture.view,vn[3].resource=t.texture.view;const zr=f.createBindGroup({layout:Q,entries:vn}),Bn=x.createRenderPassDescriptor(te.texture.view,0,0,0,0,"clear"),kt=b.beginRenderPass(Bn);return kt.setPipeline(ge),kt.setBindGroup(0,zr),kt.draw(6,1,0,0),kt.end(),x.releaseTemporaryAttachment(w),te},d0=Math.PI/180,dt=new Float32Array(8),pe=new Float32Array(20),us=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Mn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],Tc=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},Bc=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f)=>{const{device:b,commandEncoder:x,frameBufferManager:y,pipelineManager:P,textureManager:S}=f,M=ne.x,$=ne.y,T=t.width,w=t.height,E=Math.sqrt(e[0]*e[0]+e[1]*e[1]),F=Math.sqrt(e[2]*e[2]+e[3]*e[3]),A=n*d0,R=Math.cos(A)*r*(E/m),v=Math.sin(A)*r*(F/m),U=y.createTemporaryAttachment(T,w);x.copyTextureToTexture({texture:t.texture.resource,origin:{x:0,y:0,z:0}},{texture:U.texture.resource,origin:{x:0,y:0,z:0}},{width:T,height:w});const L=P.getPipeline("texture_erase"),D=P.getBindGroupLayout("texture_copy");if(L&&D){const fg=S.createSampler("erase_sampler",!0),hg=R*2/T,dg=v*2/w;dt[0]=1,dt[1]=1,dt[2]=hg,dt[3]=dg,dt[4]=0,dt[5]=0,dt[6]=0,dt[7]=0;const zc=f.bufferManager?f.bufferManager.acquireAndWriteUniformBuffer(dt):b.createBuffer({size:dt.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});f.bufferManager||b.queue.writeBuffer(zc,0,dt),us[0].resource.buffer=zc,us[1].resource=fg,us[2].resource=t.texture.view;const pg=b.createBindGroup({layout:D,entries:us}),mg=y.createRenderPassDescriptor(U.texture.view,0,0,0,0,"load"),gs=x.beginRenderPass(mg);gs.setPipeline(L),gs.setBindGroup(0,pg),gs.draw(6,1,0,0),gs.end()}const G=sr(U,e,c,u,h,m,f);y.releaseTemporaryAttachment(U);const B=G.width,z=G.height,k=Math.abs(R),_=Math.abs(v),I=d===1,V=Math.ceil(B+k*2),X=Math.ceil(z+_*2),Y=I?T:V,W=I?w:X,K=(B-T)/2,q=(z-w)/2,ce=I?0:Math.floor(k+K),te=I?0:Math.floor(_+q),se=Math.floor(I?-K-R:k-R),ue=Math.floor(I?-q-v:_-v),Fe=Y/T,ge=W/w,Q=ce/T,Ct=te/w,Je=Y/B,Ut=W/z,lr=se/B,ur=ue/z,Yt=y.createTemporaryAttachment(Y,W),Gt=P.getFilterPipeline("bevel_filter",{BEVEL_TYPE:d,IS_KNOCKOUT:g?1:0}),Lt=P.getBindGroupLayout("bevel_filter");if(!Gt||!Lt)return console.error("[WebGPU BevelFilter] Pipeline not found"),y.releaseTemporaryAttachment(G),t;const Wt=S.createSampler("bevel_sampler",!0),[fr,jt,hr,Ht]=Tc(s,o),[lt,zr,Bn,kt]=Tc(i,l);pe[0]=fr,pe[1]=jt,pe[2]=hr,pe[3]=Ht,pe[4]=lt,pe[5]=zr,pe[6]=Bn,pe[7]=kt,pe[8]=a,pe[9]=I?1:0,pe[10]=g?1:0,pe[11]=d,pe[12]=Fe,pe[13]=ge,pe[14]=Q,pe[15]=Ct,pe[16]=Je,pe[17]=Ut,pe[18]=lr,pe[19]=ur;const ps=f.bufferManager?f.bufferManager.acquireAndWriteUniformBuffer(pe):b.createBuffer({size:pe.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});f.bufferManager||b.queue.writeBuffer(ps,0,pe),Mn[0].resource.buffer=ps,Mn[1].resource=Wt,Mn[2].resource=G.texture.view,Mn[3].resource=t.texture.view;const ci=b.createBindGroup({layout:Lt,entries:Mn}),Xr=y.createRenderPassDescriptor(Yt.texture.view,0,0,0,0,"clear"),ms=x.beginRenderPass(Xr);return ms.setPipeline(Gt),ms.setBindGroup(0,ci),ms.draw(6,1,0,0),ms.end(),y.releaseTemporaryAttachment(G),ne.x=M+ce,ne.y=$+te,Yt},fs=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],p0=(t,e)=>{const r=(t>>16&255)/255,n=(t>>8&255)/255,s=(t&255)/255;return[r,n,s,e]},Pc=new Map,Ac=(t,e,r,n,s,o,i,l,c,u,a)=>{const{device:h,commandEncoder:d,frameBufferManager:g,textureManager:m}=a,f=t.width,b=t.height,x=g.createTemporaryAttachment(f,b),y=\`\${e},\${r},\${i},\${l}\`;let P=Pc.get(y);if(!P){const B=N.getConvolutionFilterFragmentShader(e,r,i,l),z=h.createShaderModule({code:B}),k=h.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}}]}),_=h.createPipelineLayout({bindGroupLayouts:[k]});P={pipeline:h.createRenderPipeline({layout:_,vertex:{module:z,entryPoint:"vs_main",buffers:[]},fragment:{module:z,entryPoint:"fs_main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}}),bindGroupLayout:k},Pc.set(y,P)}const S=m.createSampler("convolution_sampler",!0),M=e*r,$=Math.ceil(M/4),[T,w,E,F]=p0(c,u),A=new Float32Array($*4);for(let B=0;B{const{device:f,commandEncoder:b,frameBufferManager:x,pipelineManager:y,textureManager:P}=m,S=ne.x,M=ne.y,$=t.width,T=t.height,w=Math.sqrt(e[0]*e[0]+e[1]*e[1]),E=Math.sqrt(e[2]*e[2]+e[3]*e[3]),F=n*m0,A=Math.cos(F)*r*(w/g),R=Math.sin(F)*r*(E/g),v=y.getPipeline("bevel_base"),U=y.getBindGroupLayout("bevel_base");if(!v||!U)return console.error("[WebGPU GradientBevelFilter] bevel_base pipeline not found"),t;const L=x.createTemporaryAttachment($,T),D=P.createSampler("bevel_base_sampler",!0);or[0]=2*A/$,or[1]=2*R/T,or[2]=0,or[3]=0;const G=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(or):f.createBuffer({size:or.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(G,0,or),hs[0].resource.buffer=G,hs[1].resource=D,hs[2].resource=t.texture.view;const B=f.createBindGroup({layout:U,entries:hs}),z=x.createRenderPassDescriptor(L.texture.view,0,0,0,0,"clear"),k=b.beginRenderPass(z);k.setPipeline(v),k.setBindGroup(0,B),k.draw(6,1,0,0),k.end();const _=sr(L,e,l,c,a,g,m);x.releaseTemporaryAttachment(L);const I=_.width,V=_.height,X=h===1,Y=Math.abs(A),W=Math.abs(R),K=(I-$)/2,q=(V-T)/2,ce=Math.ceil(I+Y*2),te=Math.ceil(V+W*2),se=X?$:ce,ue=X?T:te,Fe=X?0:Y+K,ge=X?0:W+q,Q=X?-K-A:Y-A,Ct=X?-q-R:W-R,Je=ac(i,s,o),Ut=f.createTexture({size:{width:256,height:1},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});f.queue.writeTexture({texture:Ut},Je.buffer,{bytesPerRow:256*4,offset:Je.byteOffset},{width:256,height:1});const lr=Ut.createView(),ur=se/$,Yt=ue/T,Gt=Fe/$,Lt=ge/T,Wt=se/I,fr=ue/V,jt=Q/I,hr=Ct/V,Ht=x.createTemporaryAttachment(se,ue),lt=y.getFilterPipeline("gradient_bevel_filter",{BEVEL_TYPE:h,IS_KNOCKOUT:d?1:0}),zr=y.getBindGroupLayout("gradient_bevel_filter");if(!lt||!zr)return console.error("[WebGPU GradientBevelFilter] Pipeline not found"),x.releaseTemporaryAttachment(_),t;const Bn=P.createSampler("gradient_bevel_sampler",!0);ze[0]=u,ze[1]=X?1:0,ze[2]=d?1:0,ze[3]=h,ze[4]=ur,ze[5]=Yt,ze[6]=Gt,ze[7]=Lt,ze[8]=Wt,ze[9]=fr,ze[10]=jt,ze[11]=hr;const kt=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(ze):f.createBuffer({size:ze.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(kt,0,ze),Ir[0].resource.buffer=kt,Ir[1].resource=Bn,Ir[2].resource=_.texture.view,Ir[3].resource=t.texture.view,Ir[4].resource=lr;const ps=f.createBindGroup({layout:zr,entries:Ir}),ci=x.createRenderPassDescriptor(Ht.texture.view,0,0,0,0,"clear"),Xr=b.beginRenderPass(ci);return Xr.setPipeline(lt),Xr.setBindGroup(0,ps),Xr.draw(6,1,0,0),Xr.end(),m.frameTextures.push(Ut),x.releaseTemporaryAttachment(_),ne.x=S+Fe,ne.y=M+ge,Ht},g0=Math.PI/180,Xe=new Float32Array(12),_r=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null},{binding:4,resource:null}],wc=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m)=>{const{device:f,commandEncoder:b,frameBufferManager:x,pipelineManager:y,textureManager:P}=m,S=ne.x,M=ne.y,$=t.width,T=t.height,w=sr(t,e,l,c,a,g,m),E=w.width,F=w.height,A=ne.x,R=ne.y,v=A-S,U=R-M,L=Math.sqrt(e[0]*e[0]+e[1]*e[1]),D=Math.sqrt(e[2]*e[2]+e[3]*e[3]),G=n*g0,B=Math.cos(G)*r*(L/g),z=Math.sin(G)*r*(D/g),k=h===1,_=k?$:E+Math.max(0,Math.abs(B)-v),I=k?T:F+Math.max(0,Math.abs(z)-U),V=Math.ceil(_),X=Math.ceil(I),Y=(V-_)/2,W=(X-I)/2,K=k?0:Math.max(0,v-B)+Y,q=k?0:Math.max(0,U-z)+W,ce=k?B-A:(B>0?Math.max(0,B-v):0)+Y,te=k?z-R:(z>0?Math.max(0,z-U):0)+W,se=ac(i,s,o),ue=f.createTexture({size:{width:256,height:1},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});f.queue.writeTexture({texture:ue},se.buffer,{bytesPerRow:256*4,offset:se.byteOffset},{width:256,height:1});const Fe=ue.createView(),ge=V/$,Q=X/T,Ct=K/$,Je=q/T,Ut=V/E,lr=X/F,ur=ce/E,Yt=te/F,Gt=x.createTemporaryAttachment(V,X),Lt=y.getFilterPipeline("gradient_glow_filter",{GLOW_TYPE:h,IS_KNOCKOUT:d?1:0}),Wt=y.getBindGroupLayout("gradient_glow_filter");if(!Lt||!Wt)return console.error("[WebGPU GradientGlowFilter] Pipeline not found"),x.releaseTemporaryAttachment(w),t;const fr=P.createSampler("gradient_glow_sampler",!0);Xe[0]=u,Xe[1]=k?1:0,Xe[2]=d?1:0,Xe[3]=h,Xe[4]=ge,Xe[5]=Q,Xe[6]=Ct,Xe[7]=Je,Xe[8]=Ut,Xe[9]=lr,Xe[10]=ur,Xe[11]=Yt;const jt=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(Xe):f.createBuffer({size:Xe.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(jt,0,Xe),_r[0].resource.buffer=jt,_r[1].resource=fr,_r[2].resource=w.texture.view,_r[3].resource=t.texture.view,_r[4].resource=Fe;const hr=f.createBindGroup({layout:Wt,entries:_r}),Ht=x.createRenderPassDescriptor(Gt.texture.view,0,0,0,0,"clear"),lt=b.beginRenderPass(Ht);return lt.setPipeline(Lt),lt.setBindGroup(0,hr),lt.draw(6,1,0,0),lt.end(),m.frameTextures.push(ue),x.releaseTemporaryAttachment(w),ne.x=S+K,ne.y=M+q,Gt},He=new Float32Array(12),Sn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],b0=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},Oc=new Map,Ec=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f)=>{const{device:b,commandEncoder:x,frameBufferManager:y,textureManager:P}=f,S=t.width,M=t.height,$=n,T=s,w=y.createTemporaryAttachment(S,M),E=b.createTexture({size:{width:n,height:s},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});b.queue.writeTexture({texture:E},r.buffer,{bytesPerRow:n*4,offset:r.byteOffset},{width:n,height:s});const F=\`\${l},\${c},\${h}\`;let A=Oc.get(F);if(!A){const z=N.getDisplacementMapFilterFragmentShader(l,c,h),k=b.createShaderModule({code:N.getBlurFilterVertexShader()}),_=b.createShaderModule({code:z}),I=b.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{}}]}),V=b.createPipelineLayout({bindGroupLayouts:[I]});A={pipeline:b.createRenderPipeline({layout:V,vertex:{module:k,entryPoint:"main",buffers:[]},fragment:{module:_,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}}),bindGroupLayout:I},Oc.set(F,A)}const R=P.createSampler("displacement_sampler",!0),v=h===1,U=v?48:32;if(He[0]=$/n,He[1]=T/s,He[2]=o/n,He[3]=(T-s-i)/s,He[4]=u/$,He[5]=a/T,He[6]=0,He[7]=0,v){const[z,k,_,I]=b0(d,g);He[8]=z,He[9]=k,He[10]=_,He[11]=I}const L=f.bufferManager?f.bufferManager.acquireAndWriteUniformBuffer(He,U):b.createBuffer({size:U,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});f.bufferManager||b.queue.writeBuffer(L,0,He,0,U/4),Sn[0].resource.buffer=L,Sn[1].resource=R,Sn[2].resource=t.texture.view,Sn[3].resource=E.createView();const D=b.createBindGroup({layout:A.bindGroupLayout,entries:Sn}),G=y.createRenderPassDescriptor(w.texture.view,0,0,0,0,"clear"),B=x.beginRenderPass(G);return B.setPipeline(A.pipeline),B.setBindGroup(0,D),B.draw(6,1,0,0),B.end(),f.frameTextures.push(E),w},bt=new Float32Array(4),Te=new Float32Array(6),Ee=new Float32Array(6),oe=new Float32Array(8),Ze=new Float32Array(12),ve=new Float32Array(20),fe=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],x0=new Set(["normal","layer","add","screen","alpha","erase","copy"]),y0=new Float32Array([1,-1,0,1]),v0=t=>t[0]===1&&t[1]===1&&t[2]===1&&t[3]===1&&t[4]===0&&t[5]===0&&t[6]===0&&t[7]===0,M0=(t,e,r)=>{const n=t.frameBufferManager.createTemporaryAttachment(e.width,e.height),s=t.pipelineManager.getPipeline("color_transform"),o=t.pipelineManager.getBindGroupLayout("texture_copy");if(!s||!o||!e.texture||!n.texture)return e;oe[0]=r[0],oe[1]=r[1],oe[2]=r[2],oe[3]=r[3],oe[4]=r[4],oe[5]=r[5],oe[6]=r[6],oe[7]=0;const i=t.bufferManager.acquireAndWriteUniformBuffer(oe),l=t.textureManager.createSampler("color_transform_sampler",!1);fe[0].resource.buffer=i,fe[1].resource=l,fe[2].resource=e.texture.view;const c=t.device.createBindGroup({layout:o,entries:fe}),u=t.frameBufferManager.createRenderPassDescriptor(n.texture.view,0,0,0,0,"clear"),a=t.commandEncoder.beginRenderPass(u);return a.setPipeline(s),a.setBindGroup(0,c),a.draw(6,1,0,0),a.end(),n},S0=(t,e,r)=>{const n=r.createTemporaryAttachment(t.w,t.h),s=Ne()||r.getAttachment("atlas");return s&&s.texture&&n.texture?e.copyTextureToTexture({texture:s.texture.resource,origin:{x:t.x,y:t.y,z:0}},{texture:n.texture.resource,origin:{x:0,y:0,z:0}},{width:t.w,height:t.h}):console.error("[WebGPU Filter] getTextureFromNode: FAILED - missing atlas or textures"),n},$0=t=>x0.has(t),T0=(t,e,r,n,s,o)=>{const i=t.frameBufferManager.createTemporaryAttachment(s,o),l=t.pipelineManager.getPipeline("complex_blend_copy"),c=t.pipelineManager.getBindGroupLayout("texture_copy");if(!l||!c||!e.texture||!i.texture)return i;const u=s/e.width,a=o/e.height,h=r/e.width,d=n/e.height;bt[0]=u,bt[1]=a,bt[2]=h,bt[3]=d;const g=t.bufferManager.acquireAndWriteUniformBuffer(bt),m=t.textureManager.createSampler("filter_copy_sampler",!1);fe[0].resource.buffer=g,fe[1].resource=m,fe[2].resource=e.texture.view;const f=t.device.createBindGroup({layout:c,entries:fe}),b=t.frameBufferManager.createRenderPassDescriptor(i.texture.view,0,0,0,0,"clear"),x=t.commandEncoder.beginRenderPass(b);return x.setPipeline(l),x.setBindGroup(0,f),x.draw(6,1,0,0),x.end(),i},B0=(t,e,r,n,s)=>{const o=r.msaa&&r.msaaTexture?.view,i=o?"filter_complex_blend_output_msaa":"filter_complex_blend_output",l=t.pipelineManager.getPipeline(i),c=t.pipelineManager.getBindGroupLayout("positioned_texture");if(!l||!c||!e.texture||!r.texture)return;oe[0]=n,oe[1]=s,oe[2]=e.width,oe[3]=e.height,oe[4]=r.width,oe[5]=r.height,oe[6]=0,oe[7]=0;const u=t.bufferManager.acquireAndWriteUniformBuffer(oe),a=t.textureManager.createSampler("filter_blend_output_sampler",!1);fe[0].resource.buffer=u,fe[1].resource=a,fe[2].resource=e.texture.view;const h=t.device.createBindGroup({layout:c,entries:fe}),d=o?r.msaaTexture.view:r.texture.view,g=o?r.texture.view:null,m=t.frameBufferManager.createRenderPassDescriptor(d,0,0,0,0,"load",g),f=t.commandEncoder.beginRenderPass(m);f.setPipeline(l),f.setBindGroup(0,h),f.draw(6,1,0,0),f.end()},P0=(t,e,r,n,s,o,i,l)=>{const c=t.mainAttachment||t.frameBufferManager.getAttachment("main");if(!c||!c.texture||!e.texture)return;let u=s,a=o,h=e.width,d=e.height,g=0,m=0;if(u<0&&(g=-u/e.width,h+=u,u=0),a<0&&(m=-a/e.height,d+=a,a=0),h<=0||d<=0)return;const f=c.width,b=c.height;if(u+h>f&&(h=f-u),a+d>b&&(d=b-a),$0(n)){const x=c.msaa&&c.msaaTexture?.view;let y;switch(n){case"add":y=x?"filter_output_add_msaa":"filter_output_add";break;case"screen":y=x?"filter_output_screen_msaa":"filter_output_screen";break;case"alpha":y=x?"filter_output_alpha_msaa":"filter_output_alpha";break;case"erase":y=x?"filter_output_erase_msaa":"filter_output_erase";break;case"copy":y=x?"texture_copy_bgra_msaa":"texture_copy_bgra";break;default:y=x?"filter_output_msaa":"filter_output";break}let P=t.pipelineManager.getPipeline(y),S=t.pipelineManager.getBindGroupLayout("texture_copy");if((!P||!S)&&(y=x?"filter_output_msaa":"filter_output",P=t.pipelineManager.getPipeline(y),S=t.pipelineManager.getBindGroupLayout("texture_copy"),!P||!S))return;const M=t.textureManager.createSampler("filter_output_sampler",!0),$=h/e.width,T=d/e.height;bt[0]=$,bt[1]=T,bt[2]=g,bt[3]=m;const w=t.bufferManager.acquireAndWriteUniformBuffer(bt);fe[0].resource.buffer=w,fe[1].resource=M,fe[2].resource=e.texture.view;const E=t.device.createBindGroup({layout:S,entries:fe}),F=x?c.msaaTexture.view:c.texture.view,A=x?c.texture.view:null,R=t.frameBufferManager.createRenderPassDescriptor(F,0,0,0,0,"load",A),v=Math.max(0,u),U=Math.max(0,a),L=Math.max(1,h),D=Math.max(1,d),G=Math.max(0,Math.floor(v)),B=Math.max(0,Math.floor(U)),z=Math.max(1,Math.min(Math.ceil(v+L)-G,f-G)),k=Math.max(1,Math.min(Math.ceil(U+D)-B,b-B));if(z<=0||k<=0||G>=f||B>=b)return;const _=t.commandEncoder.beginRenderPass(R);_.setPipeline(P),_.setBindGroup(0,E),_.setViewport(v,U,L,D,0,1),_.setScissorRect(G,B,z,k),_.draw(6,1,0,0),_.end()}else{const x=T0(t,c,u,a,h,d);oe[0]=r[0],oe[1]=r[1],oe[2]=r[2],oe[3]=r[3],oe[4]=r[4],oe[5]=r[5],oe[6]=r[6],oe[7]=0;const y=Xo(e,x,n,oe,{device:t.device,commandEncoder:t.commandEncoder,bufferManager:t.bufferManager,frameBufferManager:t.frameBufferManager,pipelineManager:t.pipelineManager,textureManager:t.textureManager,frameTextures:t.frameTextures});B0(t,y,c,u,a),t.frameBufferManager.releaseTemporaryAttachment(x),t.frameBufferManager.releaseTemporaryAttachment(y)}},A0=(t,e,r,n,s,o,i,l,c,u,a,h)=>{ne.x=0,ne.y=0;let d=S0(t,u.commandEncoder,u.frameBufferManager);if(d.texture){const B=u.frameBufferManager.createTemporaryAttachment(t.w,t.h),z=u.pipelineManager.getPipeline("texture_copy_rgba8"),k=u.pipelineManager.getBindGroupLayout("texture_copy");if(z&&k&&B.texture){const _=u.textureManager.createSampler("filter_flip_sampler",!1),I=u.bufferManager.acquireAndWriteUniformBuffer(y0);fe[0].resource.buffer=I,fe[1].resource=_,fe[2].resource=d.texture.view;const V=u.device.createBindGroup({layout:k,entries:fe}),X=u.frameBufferManager.createRenderPassDescriptor(B.texture.view,0,0,0,0,"clear"),Y=u.commandEncoder.beginRenderPass(X);Y.setPipeline(z),Y.setBindGroup(0,V),Y.draw(6,1,0,0),Y.end(),u.frameBufferManager.releaseTemporaryAttachment(d),d=B}}const g=le.getDevicePixelRatio(),m=Math.sqrt(s[0]*s[0]+s[1]*s[1]),f=Math.sqrt(s[2]*s[2]+s[3]*s[3]),b=Math.atan2(s[1],s[0]),x=Math.atan2(-s[2],s[3]),y=n?m*Math.cos(b):Math.cos(b),P=n?m*Math.sin(b):Math.sin(b),S=n?-f*Math.sin(x):-Math.sin(x),M=n?f*Math.cos(x):Math.cos(x);Te[0]=y,Te[1]=P,Te[2]=S,Te[3]=M,Te[4]=e/2,Te[5]=r/2,Ee[0]=1,Ee[1]=0,Ee[2]=0,Ee[3]=1,Ee[4]=-t.w/2,Ee[5]=-t.h/2;const $=Te[0]*Ee[0]+Te[2]*Ee[1],T=Te[1]*Ee[0]+Te[3]*Ee[1],w=Te[0]*Ee[2]+Te[2]*Ee[3],E=Te[1]*Ee[2]+Te[3]*Ee[3],F=Te[0]*Ee[4]+Te[2]*Ee[5]+Te[4],A=Te[1]*Ee[4]+Te[3]*Ee[5]+Te[5];let R=0,v=0;if($!==1||T!==0||w!==0||E!==1){const B=u.frameBufferManager.createTemporaryAttachment(e,r),k=u.pipelineManager.getPipeline("texture_scale"),_=u.pipelineManager.getBindGroupLayout("texture_scale");if(k&&_){Ze[0]=$,Ze[1]=T,Ze[2]=w,Ze[3]=E,Ze[4]=F,Ze[5]=A,Ze[6]=t.w,Ze[7]=t.h,Ze[8]=e,Ze[9]=r,Ze[10]=0,Ze[11]=0;const I=u.bufferManager.acquireAndWriteUniformBuffer(Ze,48),V=u.textureManager.createSampler("filter_scale_sampler",!0);fe[0].resource.buffer=I,fe[1].resource=V,fe[2].resource=d.texture.view;const X=u.device.createBindGroup({layout:_,entries:fe}),Y=u.frameBufferManager.createRenderPassDescriptor(B.texture.view,0,0,0,0,"clear"),W=u.commandEncoder.beginRenderPass(Y);W.setPipeline(k),W.setBindGroup(0,X),W.draw(6,1,0,0),W.end(),R=F,v=A,u.frameBufferManager.releaseTemporaryAttachment(d),d=B}}for(let B=0;c.length>B;)switch(c[B++]){case 0:{const k=c[B++],_=c[B++],I=c[B++],V=c[B++],X=c[B++],Y=c[B++],W=c[B++],K=c[B++],q=c[B++],ce=c[B++],te=c[B++],se=!!c[B++],ue=Bc(d,s,k,_,I,V,X,Y,W,K,q,ce,te,se,g,u);d!==ue&&u.frameBufferManager.releaseTemporaryAttachment(d),d=ue}break;case 1:{const k=c[B++],_=c[B++],I=c[B++],V=sr(d,s,k,_,I,g,u);d!==V&&u.frameBufferManager.releaseTemporaryAttachment(d),d=V}break;case 2:{ve[0]=c[B++],ve[1]=c[B++],ve[2]=c[B++],ve[3]=c[B++],ve[4]=c[B++],ve[5]=c[B++],ve[6]=c[B++],ve[7]=c[B++],ve[8]=c[B++],ve[9]=c[B++],ve[10]=c[B++],ve[11]=c[B++],ve[12]=c[B++],ve[13]=c[B++],ve[14]=c[B++],ve[15]=c[B++],ve[16]=c[B++],ve[17]=c[B++],ve[18]=c[B++],ve[19]=c[B++];const k=Mc(d,ve,u);d!==k&&u.frameBufferManager.releaseTemporaryAttachment(d),d=k}break;case 3:{const k=c[B++],_=c[B++],I=k*_,V=new Float32Array(I);for(let se=0;set?t[0]===1&&t[1]===1&&t[2]===1&&t[3]===1&&t[4]===0&&t[5]===0&&t[6]===0&&t[7]===0:!0,Cc=(t,e,r)=>{const n=t.frameBufferManager.createTemporaryAttachment(e.width,e.height),s=t.pipelineManager.getPipeline("color_transform"),o=t.pipelineManager.getBindGroupLayout("texture_copy");if(!s||!o||!e.texture||!n.texture)return e;ie[0]=r[0],ie[1]=r[1],ie[2]=r[2],ie[3]=r[3],ie[4]=r[4],ie[5]=r[5],ie[6]=r[6],ie[7]=0;const i=t.bufferManager.acquireAndWriteUniformBuffer(ie),l=t.textureManager.createSampler("container_ct_sampler",!1);Ie[0].resource.buffer=i,Ie[1].resource=l,Ie[2].resource=e.texture.view;const c=t.device.createBindGroup({layout:o,entries:Ie}),u=t.frameBufferManager.createRenderPassDescriptor(n.texture.view,0,0,0,0,"clear"),a=t.commandEncoder.beginRenderPass(u);return a.setPipeline(s),a.setBindGroup(0,c),a.draw(6,1,0,0),a.end(),n},Yo=(t,e,r,n,s,o)=>{const i=t.frameBufferManager.createTemporaryAttachment(s,o),l=t.pipelineManager.getPipeline("complex_blend_copy"),c=t.pipelineManager.getBindGroupLayout("texture_copy");if(!l||!c||!e.texture||!i.texture)return i;const u=s/e.width,a=r/e.width,h=-(o/e.height),d=(n+o)/e.height;xt[0]=u,xt[1]=h,xt[2]=a,xt[3]=d;const g=t.bufferManager.acquireAndWriteUniformBuffer(xt),m=t.textureManager.createSampler("container_copy_sampler",!1);Ie[0].resource.buffer=g,Ie[1].resource=m,Ie[2].resource=e.texture.view;const f=t.device.createBindGroup({layout:c,entries:Ie}),b=t.frameBufferManager.createRenderPassDescriptor(i.texture.view,0,0,0,0,"clear"),x=t.commandEncoder.beginRenderPass(b);return x.setPipeline(l),x.setBindGroup(0,f),x.draw(6,1,0,0),x.end(),i},Uc=(t,e,r,n,s,o,i)=>{if(!r.texture||!e.texture)return;let l=s,c=o,u=e.width,a=e.height,h=0,d=0;if(l<0&&(h=-l/e.width,u+=l,l=0),c<0&&(d=-c/e.height,a+=c,c=0),u<=0||a<=0)return;const g=r.width,m=r.height;if(l+u>g&&(u=g-l),c+a>m&&(a=m-c),F0.has(n)){const f=r.msaa&&r.msaaTexture?.view;let b;switch(n){case"add":b=f?"filter_output_add_msaa":"filter_output_add";break;case"screen":b=f?"filter_output_screen_msaa":"filter_output_screen";break;case"alpha":b=f?"filter_output_alpha_msaa":"filter_output_alpha";break;case"erase":b=f?"filter_output_erase_msaa":"filter_output_erase";break;case"copy":b=f?"texture_copy_bgra_msaa":"texture_copy_bgra";break;default:b=f?"filter_output_msaa":"filter_output";break}const x=t.pipelineManager.getPipeline(b),y=t.pipelineManager.getBindGroupLayout("texture_copy");if(!x||!y)return;const P=t.textureManager.createSampler("container_output_sampler",!0),S=u/e.width,M=a/e.height;xt[0]=S,xt[1]=M,xt[2]=h,xt[3]=d;const $=i.acquireAndWriteUniformBuffer(xt);Ie[0].resource.buffer=$,Ie[1].resource=P,Ie[2].resource=e.texture.view;const T=t.device.createBindGroup({layout:y,entries:Ie}),w=f?r.msaaTexture.view:r.texture.view,E=f?r.texture.view:null,F=t.frameBufferManager.createRenderPassDescriptor(w,0,0,0,0,"load",E),A=Math.max(0,l),R=Math.max(0,c),v=Math.max(1,u),U=Math.max(1,a),L=Math.max(0,Math.floor(A)),D=Math.max(0,Math.floor(R)),G=Math.max(1,Math.min(Math.ceil(A+v)-L,g-L)),B=Math.max(1,Math.min(Math.ceil(R+U)-D,m-D));if(G<=0||B<=0||L>=g||D>=m)return;const z=t.commandEncoder.beginRenderPass(F);z.setPipeline(x),z.setBindGroup(0,T),z.setViewport(A,R,v,U,0,1),z.setScissorRect(L,D,G,B),z.draw(6,1,0,0),z.end()}else{const f=Yo(t,r,l,c,u,a);ie[0]=ir[0],ie[1]=ir[1],ie[2]=ir[2],ie[3]=ir[3],ie[4]=ir[4]/255,ie[5]=ir[5]/255,ie[6]=ir[6]/255,ie[7]=0;const b=Xo(e,f,n,ie,{device:t.device,commandEncoder:t.commandEncoder,bufferManager:t.bufferManager,frameBufferManager:t.frameBufferManager,pipelineManager:t.pipelineManager,textureManager:t.textureManager,frameTextures:t.frameTextures}),x=r.msaa&&r.msaaTexture?.view,y=x?"filter_complex_blend_output_msaa":"filter_complex_blend_output",P=t.pipelineManager.getPipeline(y),S=t.pipelineManager.getBindGroupLayout("positioned_texture");if(P&&S&&b.texture&&r.texture){ie[0]=l,ie[1]=c,ie[2]=b.width,ie[3]=b.height,ie[4]=r.width,ie[5]=r.height,ie[6]=0,ie[7]=0;const M=i.acquireAndWriteUniformBuffer(ie),$=t.textureManager.createSampler("container_blend_output_sampler",!1);Ie[0].resource.buffer=M,Ie[1].resource=$,Ie[2].resource=b.texture.view;const T=t.device.createBindGroup({layout:S,entries:Ie}),w=x?r.msaaTexture.view:r.texture.view,E=x?r.texture.view:null,F=t.frameBufferManager.createRenderPassDescriptor(w,0,0,0,0,"load",E),A=t.commandEncoder.beginRenderPass(F);A.setPipeline(P),A.setBindGroup(0,T),A.draw(6,1,0,0),A.end()}t.frameBufferManager.releaseTemporaryAttachment(f),t.frameBufferManager.releaseTemporaryAttachment(b)}},w0=(t,e,r,n,s)=>{ne.x=0,ne.y=0;for(let o=0;r.length>o;)switch(r[o++]){case 0:{const l=Bc(t,e,r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],!!r[o++],n,s);t!==l&&s.frameBufferManager.releaseTemporaryAttachment(t),t=l}break;case 1:{const l=sr(t,e,r[o++],r[o++],r[o++],n,s);t!==l&&s.frameBufferManager.releaseTemporaryAttachment(t),t=l}break;case 2:{Me[0]=r[o++],Me[1]=r[o++],Me[2]=r[o++],Me[3]=r[o++],Me[4]=r[o++],Me[5]=r[o++],Me[6]=r[o++],Me[7]=r[o++],Me[8]=r[o++],Me[9]=r[o++],Me[10]=r[o++],Me[11]=r[o++],Me[12]=r[o++],Me[13]=r[o++],Me[14]=r[o++],Me[15]=r[o++],Me[16]=r[o++],Me[17]=r[o++],Me[18]=r[o++],Me[19]=r[o++];const l=Mc(t,Me,s);t!==l&&s.frameBufferManager.releaseTemporaryAttachment(t),t=l}break;case 3:{const l=r[o++],c=r[o++],u=l*c,a=new Float32Array(u);for(let d=0;d{if(i&&s&&l&&c){let f=Yo(g,t,0,0,t.width,t.height);g.frameBufferManager.releaseTemporaryAttachment(t);const b=le.getDevicePixelRatio();if(f=w0(f,s,c,b,g),u&&(ee.set(u,"fKey",a),ee.set(u,"fTexture",f)),f){let x=f,y=null;Rc(o)||(y=Cc(g,f,o),x=y);const P=Math.sqrt(s[0]*s[0]+s[1]*s[1]),S=Math.sqrt(s[2]*s[2]+s[3]*s[3]),M=l[0]*(P/b),$=l[1]*(S/b),T=M+s[4],w=$+s[5];Uc(g,x,e,n,T,w,m),y&&g.frameBufferManager.releaseTemporaryAttachment(y),u||g.frameBufferManager.releaseTemporaryAttachment(f)}}else{let f=Yo(g,t,0,0,t.width,t.height);if(g.frameBufferManager.releaseTemporaryAttachment(t),!Rc(o)){const b=Cc(g,f,o);g.frameBufferManager.releaseTemporaryAttachment(f),f=b}Uc(g,f,e,n,s[4],s[5],m),g.frameBufferManager.releaseTemporaryAttachment(f)}},$n=new Float32Array([1,1,0,0]),Wo=[],Gc=new Float32Array([0,0,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,1,0,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,1,0,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1]),Lc=new Float32Array([0,0,1,0,0,1,1,0,1,1,0,1]),Et=new Float32Array(8),ke=new Float32Array(16);let jo=null,kc=null,ds=null;const Ic={view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"},E0={colorAttachments:[Ic]},he=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Tn={r:0,g:0,b:0,a:0},Ho={view:null,clearValue:Tn,loadOp:"clear",storeOp:"store",resolveTarget:void 0},_c={view:null,stencilClearValue:0,stencilLoadOp:"clear",stencilStoreOp:"store"},Ko={colorAttachments:[Ho]},ar={view:null,resolveTarget:void 0,loadOp:"load",storeOp:"store"},Vr={view:null,stencilLoadOp:"load",stencilStoreOp:"store"},Rt={colorAttachments:[ar]};class R0{$stack;$matrix;$clearColorR;$clearColorG;$clearColorB;$clearColorA;$mainAttachmentObject;$stackAttachmentObject;globalAlpha;globalCompositeOperation;imageSmoothingEnabled;$fillStyle;$strokeStyle;maskBounds;thickness;caps;joints;miterLimit;device;canvasContext;preferredFormat;commandEncoder=null;renderPassEncoder=null;mainTexture=null;mainTextureView=null;frameStarted=!1;frameTextures=[];pooledTextures=[];pooledRenderTextures=[];currentRenderTarget=null;viewportWidth=0;viewportHeight=0;pathCommand;bufferManager;textureManager;frameBufferManager;pipelineManager;computePipelineManager;attachmentManager;newDrawState=!1;$containerLayerStack=[];containerLayerContentSizes=[];inMaskMode=!1;nodeAreaCleared=!1;currentNodeScissor=null;nodeRenderPassAtlasIndex=-1;fillDynamicBindGroup=null;fillDynamicBindGroupBuffer=null;nodeClearQuadBuffer=null;useOptimizedInstancing=!0;$uniformData8=new Float32Array(8);$scissorRect={x:0,y:0,w:0,h:0};$filterConfig;constructor(e,r,n,s=1){this.device=e,this.canvasContext=r,this.preferredFormat=n,le.setDevice(e),le.setDevicePixelRatio(s);const o=e.limits.maxTextureDimension2D,i=Math.max(2048,o/2);le.setRenderMaxSize(i),this.$stack=le.createArray(),this.$stackAttachmentObject=le.createArray(),this.$matrix=le.createFloat32Array(9),this.$matrix.set([1,0,0,0,1,0,0,0,1]),this.$clearColorR=0,this.$clearColorG=0,this.$clearColorB=0,this.$clearColorA=0,this.thickness=1,this.caps=0,this.joints=2,this.miterLimit=0,this.$mainAttachmentObject=null,this.globalAlpha=1,this.globalCompositeOperation="normal",this.imageSmoothingEnabled=!1,this.$fillStyle=new Float32Array([1,1,1,1]),this.$strokeStyle=new Float32Array([1,1,1,1]),this.maskBounds={xMin:0,yMin:0,xMax:0,yMax:0},r.configure({device:e,format:n,alphaMode:"premultiplied"}),this.viewportWidth=r.canvas.width,this.viewportHeight=r.canvas.height,this.pathCommand=new xd,this.bufferManager=new Od(e),this.textureManager=new Ud(e),this.frameBufferManager=new Hd(e,n),this.pipelineManager=new qp(e,n),this.pipelineManager.preloadLazyGroups(),this.computePipelineManager=new Qp(e),this.attachmentManager=new ip(e),em(l=>{const c=le.getRenderMaxSize();return this.frameBufferManager.createAttachment(\`atlas_\${l}\`,c,c,!1,!0)}),this.$filterConfig={device:this.device,commandEncoder:null,bufferManager:this.bufferManager,frameBufferManager:this.frameBufferManager,pipelineManager:this.pipelineManager,textureManager:this.textureManager,computePipelineManager:this.computePipelineManager,frameTextures:this.frameTextures},ud(this)}clearTransferBounds(){this.beginFrame()}updateBackgroundColor(e,r,n,s){this.$clearColorR=e,this.$clearColorG=r,this.$clearColorB=n,this.$clearColorA=s}fillBackgroundColor(){if(!this.$mainAttachmentObject||!this.$mainAttachmentObject.texture)return;this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder();const e=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view;Ho.view=e?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,Ho.resolveTarget=e?this.$mainAttachmentObject.texture.view:void 0,Tn.r=this.$clearColorR,Tn.g=this.$clearColorG,Tn.b=this.$clearColorB,Tn.a=this.$clearColorA;const r=e&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil?.view;r?(_c.view=r,Ko.depthStencilAttachment=_c):Ko.depthStencilAttachment=void 0,this.renderPassEncoder=this.commandEncoder.beginRenderPass(Ko),this.renderPassEncoder.end(),this.renderPassEncoder=null}resize(e,r,n=!0){this.clearArraysInstanced();for(const o of this.frameTextures)o.destroy();this.frameTextures.length=0;for(const o of this.pooledTextures)Ot(o);this.pooledTextures.length=0;for(const o of this.pooledRenderTextures)Xt(o);this.pooledRenderTextures.length=0,Em(),this.frameStarted=!1,this.commandEncoder=null,this.renderPassEncoder=null,this.currentRenderTarget=null,am();const s=this.canvasContext.canvas;if(s&&"width"in s&&"height"in s&&(s.width=e,s.height=r),this.$stackAttachmentObject.length){for(let o=0;o0?Wo.pop():new Float32Array(9);e.set(this.$matrix),this.$stack.push(e)}restore(){const e=this.$stack.pop();e&&(this.$matrix.set(e),Wo.push(e))}setTransform(e,r,n,s,o,i){this.$matrix[0]=e,this.$matrix[1]=r,this.$matrix[3]=n,this.$matrix[4]=s,this.$matrix[6]=o,this.$matrix[7]=i}transform(e,r,n,s,o,i){const l=this.$matrix,c=l[0],u=l[1],a=l[3],h=l[4],d=l[6],g=l[7];l[0]=e*c+r*a,l[1]=e*u+r*h,l[3]=n*c+s*a,l[4]=n*u+s*h,l[6]=o*c+i*a+d,l[7]=o*u+i*h+g}reset(){this.$matrix.set([1,0,0,0,1,0,0,0,1]),this.$stack.length=0,this.$stackAttachmentObject.length=0,this.globalAlpha=1,this.globalCompositeOperation="normal",this.imageSmoothingEnabled=!1}beginPath(){this.pathCommand.beginPath()}moveTo(e,r){this.pathCommand.moveTo(e,r)}lineTo(e,r){this.pathCommand.lineTo(e,r)}quadraticCurveTo(e,r,n,s){this.pathCommand.quadraticCurveTo(e,r,n,s)}fillStyle(e,r,n,s){this.$fillStyle[0]=e,this.$fillStyle[1]=r,this.$fillStyle[2]=n,this.$fillStyle[3]=s}strokeStyle(e,r,n,s){this.$strokeStyle[0]=e,this.$strokeStyle[1]=r,this.$strokeStyle[2]=n,this.$strokeStyle[3]=s}closePath(){this.pathCommand.closePath()}arc(e,r,n){this.pathCommand.arc(e,r,n)}bezierCurveTo(e,r,n,s,o,i){this.pathCommand.bezierCurveTo(e,r,n,s,o,i)}ensureFillRenderPass(){if(this.frameStarted||this.beginFrame(),this.ensureCommandEncoder(),this.renderPassEncoder){this.currentRenderTarget&&this.ensureNodeAreaCleared();return}{const e=this.getCurrentTextureView(),r=Ne(),n=r?.msaa&&r?.msaaTexture?.view,s=n?r.msaaTexture.view:e,o=n?e:null;if(this.currentRenderTarget&&r?.stencil?.view){const i=n&&r?.msaaStencil?.view?r.msaaStencil.view:r.stencil.view,l=this.frameBufferManager.createStencilRenderPassDescriptor(s,i,"load","clear",o);this.renderPassEncoder=this.commandEncoder.beginRenderPass(l)}else if(!this.currentRenderTarget&&(gt()||nr())&&this.$mainAttachmentObject?.stencil?.view){const i=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view,l=i?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,c=i&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil.view,u=i?this.$mainAttachmentObject.texture.view:null,a=this.frameBufferManager.createStencilRenderPassDescriptor(l,c,"load","load",u);this.renderPassEncoder=this.commandEncoder.beginRenderPass(a),gt()&&this.renderPassEncoder.setStencilReference(Or())}else if(!this.currentRenderTarget&&this.$mainAttachmentObject){const i=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view,l=i?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,c=i?this.$mainAttachmentObject.texture.view:null;if(this.$mainAttachmentObject.stencil?.view){const u=i&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil.view,a=this.frameBufferManager.createStencilRenderPassDescriptor(l,u,"load","clear",c);this.renderPassEncoder=this.commandEncoder.beginRenderPass(a)}else{const u=this.frameBufferManager.createRenderPassDescriptor(l,0,0,0,0,"load",c);this.renderPassEncoder=this.commandEncoder.beginRenderPass(u)}}else{const i=this.frameBufferManager.createRenderPassDescriptor(s,0,0,0,0,"load",o);this.renderPassEncoder=this.commandEncoder.beginRenderPass(i)}}this.currentRenderTarget&&this.ensureNodeAreaCleared()}fill(){const e=this.pathCommand.$getVertices;if(e.length===0)return;this.ensureFillRenderPass();const r=this.viewportWidth,n=this.viewportHeight,s=dn(e);if(s.indexCount===0)return;const o=this.bufferManager.acquireVertexBuffer(s.buffer.byteLength,s.buffer),i=this.writeFillUniform(this.$fillStyle[0],this.$fillStyle[1],this.$fillStyle[2],this.$fillStyle[3],this.$matrix[0],this.$matrix[1],this.$matrix[3],this.$matrix[4],this.$matrix[6],this.$matrix[7],r,n),l=this.getOrCreateFillDynamicBindGroup(),c=Ne();if(this.currentRenderTarget&&c?.stencil?.view)this.fillWithStencil(o,s.indexCount,l,i);else if(!this.currentRenderTarget&&!this.inMaskMode&&!gt()&&this.$mainAttachmentObject?.stencil?.view)this.fillWithStencilMain(o,s.indexCount,l,i);else{const u=(this.inMaskMode||gt())&&!!this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget;this.fillSimple(o,s.indexCount,u,l,i)}}getOrCreateFillDynamicBindGroup(){const e=this.bufferManager.dynamicUniform.getBuffer();if(!this.fillDynamicBindGroup||this.fillDynamicBindGroupBuffer!==e){const r=this.pipelineManager.getBindGroupLayout("fill_dynamic");if(!r)throw new Error("[WebGPU] fill_dynamic bind group layout not found");this.fillDynamicBindGroup=this.device.createBindGroup({layout:r,entries:[{binding:0,resource:{buffer:e,size:256}}]}),this.fillDynamicBindGroupBuffer=e}return this.fillDynamicBindGroup}writeFillUniform(e,r,n,s,o,i,l,c,u,a,h,d){return ke[0]=e,ke[1]=r,ke[2]=n,ke[3]=s,ke[4]=o/h,ke[5]=i/d,ke[6]=0,ke[7]=0,ke[8]=l/h,ke[9]=c/d,ke[10]=0,ke[11]=0,ke[12]=u/h,ke[13]=a/d,ke[14]=1,ke[15]=0,this.bufferManager.dynamicUniform.allocate(ke)}fillWithStencil(e,r,n,s){km(this.renderPassEncoder,this.pipelineManager,e,r,n,s)}fillWithStencilMain(e,r,n,s){Im(this.renderPassEncoder,this.pipelineManager,e,r,n,s)}fillSimple(e,r,n,s,o){const i=this.$mainAttachmentObject?.clipLevel??1;_m(this.renderPassEncoder,this.pipelineManager,e,r,s,o,!!this.currentRenderTarget,n,i)}bindAttachment(e){this.attachmentManager.bindAttachment(e);const r=e.color?.view??e.texture?.view;r&&(this.currentRenderTarget=r)}unbindAttachment(){this.attachmentManager.unbindAttachment(),this.currentRenderTarget=null}getAttachmentObject(e,r,n=!1){return this.attachmentManager.getAttachmentObject(e,r,n)}releaseAttachment(e){this.attachmentManager.releaseAttachment(e)}stroke(){const e=this.pathCommand.getVerticesForStroke();if(e.length===0)return;this.ensureFillRenderPass();const r=this.viewportWidth,n=this.viewportHeight,s=Am(e,this.thickness);if(s.length===0)return;const o=dn(s);if(o.indexCount===0)return;const i=this.bufferManager.acquireVertexBuffer(o.buffer.byteLength,o.buffer),l=this.writeFillUniform(this.$strokeStyle[0],this.$strokeStyle[1],this.$strokeStyle[2],this.$strokeStyle[3],this.$matrix[0],this.$matrix[1],this.$matrix[3],this.$matrix[4],this.$matrix[6],this.$matrix[7],r,n),c=this.getOrCreateFillDynamicBindGroup(),u=Ne();if(this.currentRenderTarget&&u?.stencil?.view)this.fillWithStencil(i,o.indexCount,c,l);else if(!this.currentRenderTarget&&!this.inMaskMode&&!gt()&&this.$mainAttachmentObject?.stencil?.view)this.fillWithStencilMain(i,o.indexCount,c,l);else{const a=(this.inMaskMode||gt())&&!!this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget;this.fillSimple(i,o.indexCount,a,c,l)}this.pathCommand.reset()}gradientFill(e,r,n,s,o,i){const l=this.pathCommand.$getVertices;if(l.length===0)return;this.ensureFillRenderPass();const c=this.viewportWidth,u=this.viewportHeight,h=!!((this.inMaskMode||gt())&&this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget),d=!!this.currentRenderTarget,g=Dm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.$matrix,this.$fillStyle,e,r,n,s,o,i,c,u,d,h,this.$mainAttachmentObject?.clipLevel??1);g&&this.addFrameTexture(g),this.beginPath()}bitmapFill(e,r,n,s,o,i){const l=this.pathCommand.$getVertices;if(l.length===0)return;this.ensureFillRenderPass();const c=Ne(),u=!!(this.currentRenderTarget&&c?.stencil?.view),a=!!((this.inMaskMode||gt())&&this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget),h=u||a,d=this.$mainAttachmentObject?.clipLevel??1,g=Nm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.$matrix,this.$fillStyle,e,r,n,s,o,i,this.viewportWidth,this.viewportHeight,!!this.currentRenderTarget,!!h,d);g&&this.addFrameTexture(g),this.beginPath()}gradientStroke(e,r,n,s,o,i){const l=this.pathCommand.getVerticesForStroke();if(l.length===0)return;this.ensureFillRenderPass();const c=Ne(),u=!!(this.currentRenderTarget&&c?.stencil?.view),a=!!(!this.currentRenderTarget&&this.$mainAttachmentObject?.stencil?.view),h=u||a,d=Ym(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.thickness,this.$matrix,this.$strokeStyle,e,r,n,s,o,i,this.viewportWidth,this.viewportHeight,!!this.currentRenderTarget,h);d&&this.addFrameTexture(d),this.pathCommand.reset()}bitmapStroke(e,r,n,s,o,i){const l=this.pathCommand.getVerticesForStroke();if(l.length===0)return;this.ensureFillRenderPass();const c=Ne(),u=!!(this.currentRenderTarget&&c?.stencil?.view),a=!!(!this.currentRenderTarget&&this.$mainAttachmentObject?.stencil?.view),h=u||a,d=Hm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.thickness,this.$matrix,this.$strokeStyle,e,r,n,s,o,i,this.viewportWidth,this.viewportHeight,!!this.currentRenderTarget,h);d&&this.addFrameTexture(d),this.pathCommand.reset()}clip(){let e=this.frameBufferManager.getCurrentAttachment();const r=!e||e===this.$mainAttachmentObject;if(!e&&this.$mainAttachmentObject&&(e=this.$mainAttachmentObject),!e||!e.stencil)return;const n=this.pathCommand.$getVertices;if(n.length!==0){if(!this.renderPassEncoder)if(this.ensureCommandEncoder(),r&&this.$mainAttachmentObject?.stencil?.view){const s=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view,o=s?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,i=s&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil.view,l=this.frameBufferManager.createStencilRenderPassDescriptor(o,i,"load","load");this.renderPassEncoder=this.commandEncoder.beginRenderPass(l)}else return;Qm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,e,n,this.$matrix,this.$fillStyle,this.globalAlpha,r)}}bind(e){this.frameBufferManager.setCurrentAttachment(e),this.viewportWidth=e.width,this.viewportHeight=e.height}get currentAttachmentObject(){return this.frameBufferManager.getCurrentAttachment()||this.$mainAttachmentObject}get atlasAttachmentObject(){return Ne()}useGrid(e){Ja.set(ec,e)}beginNodeRendering(e){this.nodeAreaCleared=!1,this.frameStarted||this.beginFrame();const r=bo(e.index)||Ne();if(r&&r.texture){if(this.renderPassEncoder&&this.nodeRenderPassAtlasIndex===e.index)this.currentRenderTarget=r.texture.view,this.viewportWidth=r.width,this.viewportHeight=r.height;else{this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.currentRenderTarget=r.texture.view,this.viewportWidth=r.width,this.viewportHeight=r.height,this.ensureCommandEncoder();const l=r.msaa&&r.msaaTexture?.view,c=l?r.msaaTexture.view:r.texture.view,u=l?r.texture.view:null;if(r.stencil?.view){const a=l&&r.msaaStencil?.view?r.msaaStencil.view:r.stencil.view,h=this.frameBufferManager.createStencilRenderPassDescriptor(c,a,"load","load",u);this.renderPassEncoder=this.commandEncoder.beginRenderPass(h)}else{const a=this.frameBufferManager.createRenderPassDescriptor(c,0,0,0,0,"load",u);this.renderPassEncoder=this.commandEncoder.beginRenderPass(a)}this.nodeRenderPassAtlasIndex=e.index}let n=Math.max(0,e.x),s=Math.max(0,e.y),o=Math.min(e.w,r.width-n),i=Math.min(e.h,r.height-s);if(n=Math.min(n,r.width),s=Math.min(s,r.height),o=Math.max(0,Math.min(o,r.width-n)),i=Math.max(0,Math.min(i,r.height-s)),this.$scissorRect.x=n,this.$scissorRect.y=s,this.$scissorRect.w=o,this.$scissorRect.h=i,this.currentNodeScissor=this.$scissorRect,o>0&&i>0){const l=Math.min(o+1,r.width-n),c=Math.min(i+1,r.height-s);this.renderPassEncoder.setScissorRect(n,s,l,c)}}}ensureNodeAreaCleared(){this.nodeAreaCleared||(this.nodeAreaCleared=!0,this.clearNodeArea())}clearNodeArea(){if(!this.renderPassEncoder)return;const e=this.pipelineManager.getPipeline("node_clear_atlas");if(!e)return;if(!this.nodeClearQuadBuffer){const n=this.device.createBuffer({size:Lc.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});new Float32Array(n.getMappedRange()).set(Lc),n.unmap(),this.nodeClearQuadBuffer=n}const r=this.nodeClearQuadBuffer;this.renderPassEncoder.setPipeline(e),this.renderPassEncoder.setVertexBuffer(0,r),this.renderPassEncoder.draw(6),this.currentNodeScissor&&this.renderPassEncoder.setScissorRect(this.currentNodeScissor.x,this.currentNodeScissor.y,this.currentNodeScissor.w,this.currentNodeScissor.h)}endNodeRendering(){this.currentRenderTarget=null,this.currentNodeScissor=null,this.viewportWidth=this.canvasContext.canvas.width,this.viewportHeight=this.canvasContext.canvas.height}drawFill(){Fm()}drawDisplayObject(e,r,n,s,o,i){const l=le.getRenderMaxSize();im(e,r,n,s,o,i,this.$matrix,this.globalCompositeOperation,this.viewportWidth,this.viewportHeight,l,this.globalAlpha)}drawArraysInstanced(){this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,this.ensureCommandEncoder(),this.$mainAttachmentObject&&(this.useOptimizedInstancing?this.renderPassEncoder=Jm(this.device,this.commandEncoder,this.renderPassEncoder,this.$mainAttachmentObject,this.bufferManager,this.frameBufferManager,this.textureManager,this.pipelineManager,!0,!0):this.renderPassEncoder=Zm(this.device,this.commandEncoder,this.renderPassEncoder,this.$mainAttachmentObject,this.bufferManager,this.frameBufferManager,this.textureManager,this.pipelineManager),this.processComplexBlendQueue())}setOptimizedInstancing(e){this.useOptimizedInstancing=e}isOptimizedInstancingEnabled(){return this.useOptimizedInstancing}processComplexBlendQueue(){this.ensureCommandEncoder(),r0(this.device,this.commandEncoder,this.$mainAttachmentObject,this.frameBufferManager,this.textureManager,this.pipelineManager,this.bufferManager)}clearArraysInstanced(){rs().clear()}drawPixels(e,r){const n=bo(e.index)||Ne();if(!n||!n.texture)return;const s=e.w,o=e.h;if(this.renderPassEncoder&&(this.ensureNodeAreaCleared(),this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,n.msaa&&n.msaaTexture?.view)this.drawPixelsToMsaa(n,e,r,s,o);else{const i=s*4;this.device.queue.writeTexture({texture:n.texture.resource,origin:{x:e.x,y:e.y,z:0}},r,{bytesPerRow:i,rowsPerImage:o,offset:0},{width:s,height:o,depthOrArrayLayers:1})}}drawPixelsToMsaa(e,r,n,s,o){const i=Ro(this.device,s,o),l=s*4;this.device.queue.writeTexture({texture:i},n,{bytesPerRow:l,rowsPerImage:o},{width:s,height:o});const c=this.pipelineManager.getPipeline("bitmap_render_msaa");if(!c){Xt(i);return}const u=this.pipelineManager.getBindGroupLayout("positioned_texture");if(!u){Xt(i);return}const a=this.$uniformData8;a[0]=r.x,a[1]=r.y,a[2]=s,a[3]=o,a[4]=e.width,a[5]=e.height,a[6]=0,a[7]=0;const h=this.bufferManager.acquireAndWriteUniformBuffer(a),d=this.textureManager.createSampler("linear_sampler",!0),g=Eo(i);he[0].resource.buffer=h,he[1].resource=d,he[2].resource=g;const m=this.device.createBindGroup({layout:u,entries:he});this.ensureCommandEncoder(),ar.view=e.msaaTexture.view,ar.resolveTarget=e.texture.view;const f=e.msaaStencil?.view;f?(Vr.view=f,Rt.depthStencilAttachment=Vr):Rt.depthStencilAttachment=void 0;const b=this.commandEncoder.beginRenderPass(Rt);b.setViewport(0,0,e.width,e.height,0,1),b.setScissorRect(r.x,r.y,s,o),b.setPipeline(c),b.setBindGroup(0,m),b.draw(6),b.end(),this.pooledRenderTextures.push(i)}drawElement(e,r,n=!1){const s=bo(e.index)||Ne();if(!s||!s.texture)return;const o=e.w,i=e.h;this.renderPassEncoder&&(this.ensureNodeAreaCleared(),this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,s.msaa&&s.msaaTexture?.view?this.drawElementToMsaa(s,e,r,o,i,n):this.drawElementToTexture(s,e,r,o,i,n)}drawElementToMsaa(e,r,n,s,o,i){const l=Ro(this.device,s,o);this.device.queue.copyExternalImageToTexture({source:n,flipY:i},{texture:l,premultipliedAlpha:!0},{width:s,height:o});const c=this.pipelineManager.getPipeline("bitmap_render_msaa");if(!c){Xt(l);return}const u=this.pipelineManager.getBindGroupLayout("positioned_texture");if(!u){Xt(l);return}const a=this.$uniformData8;a[0]=r.x,a[1]=r.y,a[2]=s,a[3]=o,a[4]=e.width,a[5]=e.height,a[6]=0,a[7]=0;const h=this.bufferManager.acquireAndWriteUniformBuffer(a),d=this.textureManager.createSampler("linear_sampler",!0),g=Eo(l);he[0].resource.buffer=h,he[1].resource=d,he[2].resource=g;const m=this.device.createBindGroup({layout:u,entries:he});this.ensureCommandEncoder(),ar.view=e.msaaTexture.view,ar.resolveTarget=e.texture.view;const f=e.msaaStencil?.view;f?(Vr.view=f,Rt.depthStencilAttachment=Vr):Rt.depthStencilAttachment=void 0;const b=this.commandEncoder.beginRenderPass(Rt);b.setViewport(0,0,e.width,e.height,0,1),b.setScissorRect(r.x,r.y,s,o),b.setPipeline(c),b.setBindGroup(0,m),b.draw(6),b.end(),this.pooledRenderTextures.push(l)}drawElementToTexture(e,r,n,s,o,i){const l=Ro(this.device,s,o);this.device.queue.copyExternalImageToTexture({source:n,flipY:i},{texture:l,premultipliedAlpha:!0},{width:s,height:o});const c=this.pipelineManager.getPipeline("bitmap_render");if(!c){Xt(l);return}const u=this.pipelineManager.getBindGroupLayout("positioned_texture");if(!u){Xt(l);return}const a=this.$uniformData8;a[0]=r.x,a[1]=r.y,a[2]=s,a[3]=o,a[4]=e.width,a[5]=e.height,a[6]=0,a[7]=0;const h=this.bufferManager.acquireAndWriteUniformBuffer(a),d=this.textureManager.createSampler("linear_sampler",!0),g=Eo(l);he[0].resource.buffer=h,he[1].resource=d,he[2].resource=g;const m=this.device.createBindGroup({layout:u,entries:he});this.ensureCommandEncoder(),ar.view=e.texture.view,ar.resolveTarget=void 0;const f=e.stencil?.view;f?(Vr.view=f,Rt.depthStencilAttachment=Vr):Rt.depthStencilAttachment=void 0;const b=this.commandEncoder.beginRenderPass(Rt);b.setViewport(0,0,e.width,e.height,0,1),b.setScissorRect(r.x,r.y,s,o),b.setPipeline(c),b.setBindGroup(0,m),b.draw(6),b.end(),this.pooledRenderTextures.push(l)}applyFilter(e,r,n,s,o,i,l,c,u,a,h){this.drawArraysInstanced(),this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,this.ensureCommandEncoder(),this.$filterConfig.commandEncoder=this.commandEncoder,this.$filterConfig.mainAttachment=this.$mainAttachmentObject,A0(e,s,o,i,l,c,u,a,h,this.$filterConfig,this.mainTextureView,this.bufferManager)}containerBeginLayer(e,r){this.drawArraysInstanced(),this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null);const n=this.$mainAttachmentObject;this.$containerLayerStack.push(n),this.containerLayerContentSizes.push({width:e,height:r});const s=this.frameBufferManager.createAttachment("container_layer",e,r,n.msaa,!0);this.$mainAttachmentObject=s,this.bind(s)}containerEndLayer(e,r,n,s,o,i,l,c){this.drawArraysInstanced(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder();const u=this.$mainAttachmentObject,a=this.containerLayerContentSizes.pop()||{width:u.width,height:u.height};this.$mainAttachmentObject=this.$containerLayerStack.pop(),this.$filterConfig.commandEncoder=this.commandEncoder,this.$filterConfig.mainAttachment=void 0,O0(u,this.$mainAttachmentObject,"container_layer",e,r,n,s,o,i,l,c,a.width,a.height,this.$filterConfig,this.bufferManager),this.bind(this.$mainAttachmentObject)}containerDrawCachedFilter(e,r,n,s,o,i){if(ee.get(o,"fKey")!==i)return;const c=ee.get(o,"fTexture");if(!c||!c.texture)return;this.drawArraysInstanced(),this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder();const u=this.$mainAttachmentObject;if(!u||!u.texture)return;let a=c,h=null;if(!(n[0]===1&&n[1]===1&&n[2]===1&&n[3]===1&&n[4]===0&&n[5]===0&&n[6]===0&&n[7]===0)){h=this.frameBufferManager.createTemporaryAttachment(c.width,c.height);const V=this.pipelineManager.getPipeline("color_transform"),X=this.pipelineManager.getBindGroupLayout("texture_copy");if(V&&X&&h.texture){Et[0]=n[0],Et[1]=n[1],Et[2]=n[2],Et[3]=n[3],Et[4]=n[4],Et[5]=n[5],Et[6]=n[6],Et[7]=0;const Y=Et,W=this.bufferManager.acquireAndWriteUniformBuffer(Y),K=this.textureManager.createSampler("cached_ct_sampler",!1);he[0].resource.buffer=W,he[1].resource=K,he[2].resource=c.texture.view;const q=this.device.createBindGroup({layout:X,entries:he}),ce=this.frameBufferManager.createRenderPassDescriptor(h.texture.view,0,0,0,0,"clear"),te=this.commandEncoder.beginRenderPass(ce);te.setPipeline(V),te.setBindGroup(0,q),te.draw(6,1,0,0),te.end(),a=h}}const g=le.getDevicePixelRatio(),m=Math.sqrt(r[0]*r[0]+r[1]*r[1]),f=Math.sqrt(r[2]*r[2]+r[3]*r[3]),b=s[0]*(m/g),x=s[1]*(f/g),y=Math.floor(b+r[4]),P=Math.floor(x+r[5]),S=u.msaa&&u.msaaTexture?.view;let M;switch(e){case"add":M=S?"filter_output_add_msaa":"filter_output_add";break;case"screen":M=S?"filter_output_screen_msaa":"filter_output_screen";break;case"alpha":M=S?"filter_output_alpha_msaa":"filter_output_alpha";break;case"erase":M=S?"filter_output_erase_msaa":"filter_output_erase";break;default:M=S?"filter_output_msaa":"filter_output";break}const $=this.pipelineManager.getPipeline(M),T=this.pipelineManager.getBindGroupLayout("texture_copy");if(!$||!T)return;const w=this.textureManager.createSampler("cached_filter_sampler",!0),E=this.bufferManager.acquireAndWriteUniformBuffer($n);he[0].resource.buffer=E,he[1].resource=w,he[2].resource=a.texture.view;const F=this.device.createBindGroup({layout:T,entries:he}),A=S?u.msaaTexture.view:u.texture.view,R=S?u.texture.view:null,v=this.frameBufferManager.createRenderPassDescriptor(A,0,0,0,0,"load",R),U=Math.max(0,y),L=Math.max(0,P),D=Math.max(1,a.width),G=Math.max(1,a.height),B=u.width,z=u.height,k=Math.max(1,Math.min(D,B-U)),_=Math.max(1,Math.min(G,z-L));if(k<=0||_<=0||U>=B||L>=z){h&&this.frameBufferManager.releaseTemporaryAttachment(h);return}const I=this.commandEncoder.beginRenderPass(v);I.setPipeline($),I.setBindGroup(0,F),I.setViewport(U,L,D,G,0,1),I.setScissorRect(U,L,k,_),I.draw(6,1,0,0),I.end(),h&&this.frameBufferManager.releaseTemporaryAttachment(h),this.bind(u)}ensureMainTexture(){this.mainTexture||(this.mainTexture=this.canvasContext.getCurrentTexture(),this.mainTextureView=this.mainTexture.createView())}getCurrentTextureView(){return this.currentRenderTarget?this.currentRenderTarget:(this.ensureMainTexture(),this.mainTextureView)}ensureCommandEncoder(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}beginFrame(){this.frameStarted||(this.ensureMainTexture(),this.ensureCommandEncoder(),this.frameStarted=!0,this.frameBufferManager.beginFrame())}addFrameTexture(e){this.pooledTextures.push(e)}endFrame(){if(this.frameStarted){if(this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.bufferManager.dynamicUniform.flush(),this.commandEncoder)try{const e=this.commandEncoder.finish();this.device.queue.submit([e])}catch(e){console.error("Failed to submit frame commands:",e)}this.frameBufferManager.flushPendingReleases(),this.bufferManager.clearFrameBuffers();for(const e of this.frameTextures)e.destroy();this.frameTextures.length=0;for(const e of this.pooledTextures)Ot(e);this.pooledTextures.length=0;for(const e of this.pooledRenderTextures)Xt(e);this.pooledRenderTextures.length=0,Um(),this.fillDynamicBindGroup=null,this.fillDynamicBindGroupBuffer=null,this.commandEncoder=null,this.renderPassEncoder=null,this.currentRenderTarget=null,this.nodeRenderPassAtlasIndex=-1,this.mainTexture=null,this.mainTextureView=null,this.frameStarted=!1}}submit(){this.endFrame()}createNode(e,r){const n=Zp();if(!fn[n]){const i=le.getRenderMaxSize();fn[n]=new Ni(n,i,i)}const o=fn[n].insert(e,r);return o||(wr(n+1),this.createNode(e,r))}removeNode(e){const r=e.index,n=fn[r];n&&n.dispose(e.x,e.y,e.w,e.h)}transferMainCanvas(){if(!this.$mainAttachmentObject||!this.$mainAttachmentObject.texture){this.endFrame();return}this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder(),this.ensureMainTexture();const e=this.pipelineManager.getPipeline("texture_copy_bgra"),r=this.pipelineManager.getBindGroupLayout("texture_copy");if(!e||!r){console.error("[WebGPU] texture_copy_bgra pipeline not found"),this.endFrame();return}const n=this.$mainAttachmentObject.texture.view;if(!jo||kc!==n){ds||(ds=this.device.createBuffer({size:$n.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.device.queue.writeBuffer(ds,0,$n.buffer,$n.byteOffset,$n.byteLength));const i=this.textureManager.createSampler("transfer_sampler",!1);he[0].resource={buffer:ds},he[1].resource=i,he[2].resource=n,jo=this.device.createBindGroup({layout:r,entries:he}),kc=n}const s=jo;Ic.view=this.mainTextureView;const o=this.commandEncoder.beginRenderPass(E0);o.setPipeline(e),o.setBindGroup(0,s),o.draw(6,1,0,0),o.end(),this.endFrame()}async createImageBitmap(e,r){const n=Ne();if(!n)throw new Error("[WebGPU] Atlas attachment not found");this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null);const o=Math.ceil(e*4/256)*256,i=o*r,l=this.device.createBuffer({size:i,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),c=this.device.createCommandEncoder();if(!n.texture)throw new Error("Attachment texture is null");c.copyTextureToBuffer({texture:n.texture.resource,mipLevel:0,origin:{x:0,y:0,z:0}},{buffer:l,bytesPerRow:o,rowsPerImage:r},{width:e,height:r,depthOrArrayLayers:1}),this.device.queue.submit([c.finish()]),await l.mapAsync(GPUMapMode.READ);const u=l.getMappedRange(),a=new Uint8Array(u),h=new Uint8Array(e*r*4);for(let m=0;m1&&i){const u=\`clip_clear_main_\${Math.min(8,Math.max(1,r))}\`,a=this.pipelineManager.getPipeline(u);if(a){const h=this.frameBufferManager.createStencilRenderPassDescriptor(o,i,"load","load"),d=this.commandEncoder.beginRenderPass(h),g=this.bufferManager.acquireVertexBuffer(Gc.byteLength,Gc);d.setPipeline(a),d.setStencilReference(0),d.setVertexBuffer(0,g),d.draw(6,1,0,0),d.end()}}}}const C0=4;let C;const Vc=t=>{C=t};let qo;const U0=t=>{qo=t};let Qo=0;const G0=()=>Qo;let Zo=0;const L0=()=>Zo;let Jo=!1;const k0=(t,e)=>{Jo=!0,Qo=t,Zo=e},I0=()=>Jo,_0=()=>{qo.width=Qo,qo.height=Zo,Jo=!1},V0=[],Dc=(...t)=>{const e=V0.pop()||[];return t.length&&e.push(...t),e},Dr=(t,e=1)=>({R:(t&16711680)>>16,G:(t&65280)>>8,B:t&255,A:e*255}),D0=async(t,e)=>{if(U0(t),"gpu"in navigator){const r=navigator.gpu,n=await r.requestAdapter();if(!n)throw new Error("WebGPU adapter not available");const s=await n.requestDevice();if(!s)throw new Error("WebGPU device not available");const o=t.getContext("webgpu");if(!o)throw new Error("WebGPU context not available");const i=r.getPreferredCanvasFormat();Vc(new R0(s,o,i,e))}else{const r=t.getContext("webgl2",{stencil:!0,premultipliedAlpha:!0,antialias:!1,depth:!1});if(!r)throw new Error("webgl2 is not supported.");Vc(new ld(r,C0,e))}},N0=(t,e,r=!0)=>{G0()===t&&L0()===e||(k0(t,e),C.resize(t,e,r),r&&ee.reset())},z0=0,X0=1,Y0=2,W0=3,j0=4,H0=5,K0=6,q0=7,Q0=8,Z0=9,J0=10,eg=11,tg=12,rg=13,ng=14,ei=(t,e=!1)=>{let r=0;for(;t.length>r;)switch(t[r++]){case Z0:C.beginPath();break;case z0:C.moveTo(t[r++],t[r++]);break;case Y0:C.lineTo(t[r++],t[r++]);break;case X0:C.quadraticCurveTo(t[r++],t[r++],t[r++],t[r++]);break;case H0:if(e){r+=4;break}C.fillStyle(t[r++]/255,t[r++]/255,t[r++]/255,t[r++]/255);break;case q0:C.fill();break;case K0:if(e){r+=8;break}C.thickness=t[r++],C.caps=t[r++],C.joints=t[r++],C.miterLimit=t[r++],C.strokeStyle(t[r++]/255,t[r++]/255,t[r++]/255,t[r++]/255);break;case Q0:if(e)break;C.stroke();break;case tg:C.closePath();break;case j0:C.arc(t[r++],t[r++],t[r++]);break;case W0:C.bezierCurveTo(t[r++],t[r++],t[r++],t[r++],t[r++],t[r++]);break;case J0:{if(e){r+=1;const a=t[r++];r+=a*5,r+=9,C.fill();break}const n=t[r++],s=Dc(),o=t[r++];for(let a=0;a{switch(t){case 0:return"copy";case 1:return"add";case 2:return"alpha";case 3:return"darken";case 4:return"difference";case 5:return"erase";case 6:return"hardlight";case 7:return"invert";case 8:return"layer";case 9:return"lighten";case 10:return"multiply";case 11:return"normal";case 12:return"overlay";case 13:return"screen";case 14:return"subtract";default:return"normal"}},ti=(t,e)=>{const r=t.subarray(e,e+6);e+=6;const n=t.subarray(e,e+8);e+=8;const s=t.subarray(e,e+4);e+=4;const o=t[e++],i=t[e++],l=t[e++],c=t[e++],u=!!t[e++],a=!!t[e++],h=!!t[e++],d=\`\${t[e++]}\`,g=t[e++],m=t[e++],f=t[e++],b=\`\${t[e++]}\`;let x;if(t[e++]){if(x=ee.get(d,\`\${g}\`),!x)return e}else{const M=u?new Float32Array(28):null;M&&(M.set(t.subarray(e,e+24)),e+=24),C.useGrid(M);const $=t[e++],T=t.subarray(e,e+$);if(h&&!u){const w=Math.ceil(Math.abs(l-o)),E=Math.ceil(Math.abs(c-i));x=C.createNode(w,E),ee.set(d,\`\${g}\`,x);const F=C.currentAttachmentObject,A=C.atlasAttachmentObject;A&&C.bind(A),C.reset(),C.beginNodeRendering(x);const R=A?A.height-x.y-E:0;C.setTransform(1,0,0,1,x.x,R),a?(ei(T),C.drawFill()):C.drawPixels(x,new Uint8Array(T)),C.endNodeRendering(),F&&C.bind(F)}else{const w=Math.ceil(Math.abs(l-o)*m),E=Math.ceil(Math.abs(c-i)*f);x=C.createNode(w,E),ee.set(d,\`\${g}\`,x);const F=C.currentAttachmentObject,A=C.atlasAttachmentObject;A&&C.bind(A),C.reset(),C.beginNodeRendering(x);const R=A?A.height-x.y-E:0;C.setTransform(m,0,0,f,-o*m+x.x,-i*f+R),M&&(M[24]=x.x,M[25]=R),ei(T),C.drawFill(),C.endNodeRendering(),F&&C.bind(F)}e+=$}const P=t[e++];if(!!t[e++]){const M=!!t[e++],$=t.subarray(e,e+4);e+=4;const T=t[e++],w=t.subarray(e,e+T),E=Math.ceil(Math.abs(s[2]-s[0])),F=Math.ceil(Math.abs(s[3]-s[1]));return C.applyFilter(x,b,M,E,F,h,r,n,cr(P),$,w),e+=T,e}if(C.globalAlpha=Math.min(Math.max(0,n[3]+n[7]/255),1),C.imageSmoothingEnabled=!0,C.globalCompositeOperation=cr(P),h&&!u)C.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),C.drawDisplayObject(x,s[0],s[1],s[2],s[3],n);else{const M=Math.atan2(r[1],r[0]),$=Math.atan2(-r[2],r[3]);if(M||$){const T=o*m,w=i*f,E=Math.cos(M),F=Math.sin(M),A=Math.cos($),R=Math.sin($);C.setTransform(E,F,-R,A,T*E-w*R+r[4],T*F+w*A+r[5])}else C.setTransform(1,0,0,1,s[0],s[1]);C.drawDisplayObject(x,s[0],s[1],s[2],s[3],n)}return e},ri=(t,e)=>{const r=t.subarray(e,e+6);e+=6,C.reset(),C.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]);const s=!!t[e++]?new Float32Array(28):null;C.useGrid(s),s&&(s.set(t.subarray(e,e+24)),e+=24);const o=t[e++],i=t.subarray(e,e+o);return ei(i,!0),e+=o,C.clip(),e},Nc=(t,e,r)=>{const n=t.widthTable[e.line]||0,s=e.textFormat,o=s.leftMargin||0;if(!r.wordWrap&&n>r.rawWidth)return Math.max(0,o);const i=s.rightMargin||0;return s.align==="center"||r.autoSize==="center"?Math.max(0,r.rawWidth/2-o-i-n/2-2):s.align==="right"||r.autoSize==="right"?Math.max(0,r.rawWidth-o-n-i-4):Math.max(0,o)},sg=t=>{let e="";return t.italic&&(e+="italic "),t.bold&&(e+="bold "),\`\${e}\${t.size}px '\${t.font}','sans-serif'\`},og=(t,e,r,n)=>{const s=new OffscreenCanvas(e.width,e.height),o=s.getContext("2d");if(!o)return s;const i=Math.min(1,Math.max(r,n));if(e.background||e.border){if(o.beginPath(),o.moveTo(0,0),o.lineTo(e.width,0),o.lineTo(e.width,e.height),o.lineTo(0,e.height),o.lineTo(0,0),e.background){const M=Dr(e.backgroundColor);o.fillStyle=\`rgba(\${M.R},\${M.G},\${M.B},\${M.A})\`,o.fill()}if(e.border){const M=Dr(e.borderColor);o.lineWidth=i,o.strokeStyle=\`rgba(\${M.R},\${M.G},\${M.B},\${M.A})\`,o.stroke()}}if(!t)return s;o.save(),o.beginPath(),o.moveTo(2,2),o.lineTo(e.width-2,2),o.lineTo(e.width-2,e.height-2),o.lineTo(2,e.height-2),o.lineTo(2,2),o.clip();let l=2;if(e.scrollX>0){const M=(e.textWidth+4-e.rawWidth)/e.rawWidth;l+=-e.scrollX*M}let c=2;if(e.scrollY>0){const M=(e.textHeight+2-e.rawHeight)/e.rawHeight;c+=-e.scrollY*M}if(o.setTransform(r,0,0,n,l*r,c*n),o.beginPath(),e.selectIndex>-1&&e.focusIndex>-1){const M=t.textTable.length-1;let $=0,T=0;e.focusIndex<=e.selectIndex?($=Math.min(e.focusIndex,M),T=Math.min(e.selectIndex,M)):($=Math.min(e.selectIndex,M),T=Math.min(e.focusIndex-1,M));const w=t.textTable[$],E=t.lineTable[w.line],F=Nc(t,E,e);let A=0;if($&&w.mode==="text"){let v=$;for(;v;){const U=t.textTable[--v];if(U.mode!=="text")break;A+=U.w}}o.fillStyle="#b4d7ff";let R=0;for(let v=$;v<=T;++v){const U=t.textTable[v];if(U.mode==="text"&&(R+=U.w,v!==T))continue;let L=0;const D=U.mode==="text"?U.line:U.line-1;for(let G=0;G0){const M=(e.textWidth-u)/u;a=e.scrollX*M}const h=u+a,d=e.rawHeight;let g=0;if(e.scrollY>0){const M=(e.textHeight-d)/d;g=e.scrollY*M}const m=d+g;let f=0,b=0,x=0,y=0,P=!1,S=-1;for(let M=0;M-1&&S>e.stopIndex))break;if(P&&$.mode==="text")continue;const T=$.textFormat;if(e.autoSize==="none"){if(b>m)break;if($.mode==="text"&&(a>f+$.w||f>h)){f+=$.w;continue}}const w=Dr(T.color||0);if(o.fillStyle=\`rgba(\${w.R},\${w.G},\${w.B},\${w.A})\`,e.focusVisible&&e.focusIndex===M){const F=f+x+.1;let A=$.line,R=$.y,v=t.ascentTable[A];$.mode!=="text"&&(R=$.mode==="break"?$.h:t.ascentTable[A-1],A>0?(A=$.line-1,v=t.ascentTable[A]):v=$.h),A>0&&t.ascentTable[A]===0&&A++;for(let U=0;Ub+t.heightTable[E]){P=!0;continue}y=t.ascentTable[E],x=Nc(t,$,e),P=!1;break;case"text":{o.beginPath(),o.font=sg(T);const F=f+x,A=b+y;if(T.underline){const R=Dr(T.color||0);o.lineWidth=i,o.strokeStyle=\`rgba(\${R.R},\${R.G},\${R.B},\${R.A})\`,o.beginPath(),o.moveTo(F,A+2),o.lineTo(F+$.w,A+2),o.stroke()}e.thickness&&o.strokeText($.text,F,A),o.fillText($.text,F,A),f+=$.w}break}}if(e.focusVisible&&e.focusIndex>=t.textTable.length){const M=t.textTable[e.focusIndex-1];if(M){const $=Dr(M.textFormat.color||0);o.strokeStyle=\`rgba(\${$.R},\${$.G},\${$.B},\${$.A})\`;const T=f+x+.1,w=b+y;o.beginPath(),M.mode==="text"?o.moveTo(T,w-M.y):o.moveTo(T,w+M.h),o.lineTo(T,w),o.stroke()}}return o.restore(),s},ig=new TextDecoder,ni=(t,e)=>{const r=t.subarray(e,e+6);e+=6;const n=t.subarray(e,e+8);e+=8;const s=t.subarray(e,e+4);e+=4;const o=t[e++],i=t[e++],l=t[e++],c=t[e++],u=\`\${t[e++]}\`,a=t[e++],h=!!t[e++],d=t[e++],g=t[e++],m=\`\${t[e++]}\`;let f;if(t[e++]){if(f=ee.get(u,\`\${a}\`),!f)return e}else{const M=Math.ceil(Math.abs(l-o)*d),$=Math.ceil(Math.abs(c-i)*g),T=!!t[e++];f=T?ee.get(u,\`\${a}\`):C.createNode(M,$),T||ee.set(u,\`\${a}\`,f);const w=t[e++],E=new Uint8Array(t.subarray(e,e+w));e+=w;let F="none";switch(t[e++]){case 0:F="center";break;case 1:F="left";break;case 2:F="none";break;case 3:F="right";break}const A={width:M,height:$,autoSize:F,stopIndex:t[e++],scrollX:t[e++],scrollY:t[e++],textWidth:t[e++],textHeight:t[e++],rawWidth:t[e++],rawHeight:t[e++],focusIndex:t[e++],selectIndex:t[e++],focusVisible:!!t[e++],thickness:t[e++],thicknessColor:t[e++],wordWrap:!!t[e++],border:!!t[e++],borderColor:t[e++],background:!!t[e++],backgroundColor:t[e++],defaultColor:t[e++],defaultSize:t[e++]},R=og(JSON.parse(ig.decode(E)),A,d,g),v=C.currentAttachmentObject,U=C.atlasAttachmentObject;U&&C.bind(U),C.reset(),C.beginNodeRendering(f);const L=U?U.height-f.y-$:0;C.setTransform(1,0,0,1,f.x,L),C.drawElement(f,R),C.endNodeRendering(),v&&C.bind(v)}const x=t[e++];if(!!t[e++]){const M=!!t[e++],$=t.subarray(e,e+4);e+=4;const T=t[e++],w=t.subarray(e,e+T),E=Math.ceil(Math.abs(s[2]-s[0])),F=Math.ceil(Math.abs(s[3]-s[1]));return C.applyFilter(f,m,!!Math.max(+h,+M),E,F,!1,r,n,cr(x),$,w),e+=T,e}C.globalAlpha=Math.min(Math.max(0,n[3]+n[7]/255),1),C.imageSmoothingEnabled=!0,C.globalCompositeOperation=cr(x);const P=Math.atan2(r[1],r[0]),S=Math.atan2(-r[2],r[3]);if(P||S){const M=o*d,$=i*g,T=Math.cos(P),w=Math.sin(P),E=Math.cos(S),F=Math.sin(S);C.setTransform(T,w,-F,E,M*T-$*F+r[4],M*w+$*E+r[5])}else C.setTransform(1,0,0,1,s[0],s[1]);return C.drawDisplayObject(f,s[0],s[1],s[2],s[3],n),e},si=(t,e,r)=>{const n=t.subarray(e,e+6);e+=6;const s=t.subarray(e,e+8);e+=8;const o=t.subarray(e,e+4);e+=4;const i=t[e++],l=t[e++],c=t[e++],u=t[e++],a=\`\${t[e++]}\`,h="0",d=!!t[e++],g=\`\${t[e++]}\`;let m;if(t[e++]){if(m=ee.get(a,\`\${h}\`),!m)return e}else{const y=Math.abs(c-i),P=Math.abs(u-l),S=!!t[e++];if(m=S?ee.get(a,\`\${h}\`):C.createNode(y,P),S||ee.set(a,\`\${h}\`,m),r&&r.length){const M=C.currentAttachmentObject,$=C.atlasAttachmentObject;$&&C.bind($),C.reset(),C.beginNodeRendering(m);const T=$?$.height-m.y-P:0;C.setTransform(1,0,0,1,m.x,T);const w=r.shift();C.drawElement(m,w,!0),C.endNodeRendering(),M&&C.bind(M)}}const b=t[e++];if(!!t[e++]){const y=!!t[e++],P=t.subarray(e,e+4);e+=4;const S=t[e++],M=t.subarray(e,e+S),$=Math.ceil(Math.abs(o[2]-o[0])),T=Math.ceil(Math.abs(o[3]-o[1]));return C.applyFilter(m,g,!!Math.max(+d,+y),$,T,!0,n,s,cr(b),P,M),e+=S,e}return C.globalAlpha=Math.min(Math.max(0,s[3]+s[7]/255),1),C.imageSmoothingEnabled=!0,C.globalCompositeOperation=cr(b),C.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),C.drawDisplayObject(m,o[0],o[1],o[2],o[3],s),e},oi=(t,e)=>{const r=t[e++];for(let n=0;n{let n=0,s=!0;const o=cr(t[e++]),i=!!t[e++];let l=0,c=0,u=!1,a="",h="",d=null,g=null,m=null,f=null;if(i)if(l=t[e++],c=t[e++],u=!!t[e++],u){const y=!!t[e++];if(a=\`\${t[e++]}\`,h=\`\${t[e++]}\`,y)return d=t.subarray(e,e+4),e+=4,m=t.subarray(e,e+6),e+=6,f=t.subarray(e,e+8),e+=8,C.containerDrawCachedFilter(o,m,f,d,a,h),e;d=t.subarray(e,e+4),e+=4,m=t.subarray(e,e+6),e+=6,f=t.subarray(e,e+8),e+=8;const P=t[e++];g=t.subarray(e,e+P),e+=P}else m=t.subarray(e,e+6),e+=6,f=t.subarray(e,e+8),e+=8;i&&C.containerBeginLayer(l,c);const b=!!t[e++];if(b){switch(C.drawArraysInstanced(),C.save(),C.beginMask(),C.setMaskBounds(t[e++],t[e++],t[e++],t[e++]),t[e++]){case 0:e=oi(t,e);break;case 1:e=ri(t,e);break}C.endMask()}const x=t[e++];for(let y=0;x>y;y++){const P=t[e++],S=t[e++];if(n&&P>n&&(s&&(C.restore(),C.leaveMask()),n=0,s=!0),!s)continue;if(S){if(n=S,s=!!t[e++],!s)continue;switch(C.drawArraysInstanced(),C.save(),C.beginMask(),C.setMaskBounds(t[e++],t[e++],t[e++],t[e++]),t[e++]){case 0:e=oi(t,e);break;case 1:e=ri(t,e);break}C.endMask();continue}if(!t[e++])continue;switch(t[e++]){case 0:e=ii(t,e,r);break;case 1:e=ti(t,e);break;case 2:e=ni(t,e);break;case 3:e=si(t,e,r);break}}return(n||b)&&(C.restore(),C.leaveMask()),i&&C.containerEndLayer(o,m,f,u,d,g,a,h),e};let Nr=-1;const ag=(t,e)=>{C.clearTransferBounds();let r=0;const n=t[r++];for(Nr!==n&&(Nr=n,Nr===-1?C.updateBackgroundColor(0,0,0,0):C.updateBackgroundColor((Nr>>16&255)/255,(Nr>>8&255)/255,(Nr&255)/255,1)),C.reset(),C.setTransform(1,0,0,1,0,0),C.fillBackgroundColor();t.length>r;){if(!t[r++])continue;const s=t[r++];switch(s){case 0:r=ii(t,r,e);break;case 1:r=ti(t,r);break;case 2:r=ni(t,r);break;case 3:r=si(t,r,e);break;default:console.error("unknown type",s);break}}C.drawArraysInstanced(),I0()&&_0(),C.transferMainCanvas()},cg=t=>{for(let e=0;e{C.clearTransferBounds();let i=1;C.reset(),C.setTransform(1,0,0,1,0,0);const l=C.$clearColorR,c=C.$clearColorG,u=C.$clearColorB,a=C.$clearColorA;for(C.updateBackgroundColor((n>>16&255)/255,(n>>8&255)/255,(n&255)/255,s),C.fillBackgroundColor();t.length>i;){if(!t[i++])continue;const d=t[i++];switch(d){case 0:i=ii(t,i,o);break;case 1:i=ti(t,i);break;case 2:i=ni(t,i);break;case 3:i=si(t,i,o);break;default:console.error("unknown type",d);break}}C.drawArraysInstanced();const h=await C.createImageBitmap(e,r);return C.updateBackgroundColor(l,c,u,a),h};class ug{state;queue;constructor(){this.state="deactivate",this.queue=[]}async execute(){for(this.state="active";this.queue.length;){const e=this.queue.shift();if(e)switch(e.command){case"render":ag(e.buffer.subarray(0,e.length),e.imageBitmaps),globalThis.postMessage({message:"render",buffer:e.buffer},[e.buffer.buffer]);break;case"resize":N0(e.buffer[0],e.buffer[1],!!e.buffer[2]);break;case"initialize":await D0(e.canvas,e.devicePixelRatio);break;case"removeCache":cg(e.buffer);break;case"cacheClear":ee.reset();break;case"capture":{const r=await lg(e.buffer.subarray(0,e.length),e.width,e.height,e.bgColor,e.bgAlpha,e.imageBitmaps);globalThis.postMessage({message:"capture",buffer:e.buffer,imageBitmap:r},[e.buffer.buffer,r])}break}}this.state="deactivate"}}const ai=new ug;self.addEventListener("message",async t=>{ai.queue.push(t.data),ai.state==="deactivate"&&await ai.execute()})})(); +`,Fn=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",di],{type:"text/javascript;charset=utf-8"});function Ns(e){let t;try{if(t=Fn&&(self.URL||self.webkitURL).createObjectURL(Fn),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(di),{name:e?.name})}}const Ce=new Ns,Ys=e=>{const t=e.transferControlToOffscreen();Ce.postMessage({command:"initialize",canvas:t,devicePixelRatio:window.devicePixelRatio},[t])};class ze{static get AT_TARGET(){return 2}static get BUBBLING_PHASE(){return 3}static get CAPTURING_PHASE(){return 1}}let x=class{type;bubbles;listener;target;currentTarget;eventPhase;_$stopImmediatePropagation;_$stopPropagation;constructor(t,r=!1){this.type=`${t}`,this.bubbles=r,this.target=null,this.currentTarget=null,this.eventPhase=ze.AT_TARGET,this.listener=null,this._$stopImmediatePropagation=!1,this._$stopPropagation=!1}static get ADDED(){return"added"}static get ADDED_TO_STAGE(){return"addedToStage"}static get CHANGE(){return"change"}static get COMPLETE(){return"complete"}static get ENDED(){return"ended"}static get ENTER_FRAME(){return"enterFrame"}static get FRAME_LABEL(){return"frameLabel"}static get INPUT(){return"input"}static get OPEN(){return"open"}static get REMOVED(){return"removed"}static get REMOVED_FROM_STAGE(){return"removedFromStage"}static get RESIZE(){return"resize"}static get SCROLL(){return"scroll"}stopImmediatePropagation(){this._$stopImmediatePropagation=!0}stopPropagation(){this._$stopPropagation=!0}};const q=new Map,Kt=[],Qt=()=>Kt.length?Kt.pop():[],Pe=e=>{10>Kt.length&&(e.length=0,Kt.push(e))};let Ai=null;const We=e=>{Ai=e},jt=()=>Ai;class V extends x{constructor(t,r=!0){return super(t,r),new Proxy(this,{get:(n,i)=>{if(i in n)return n[i];const s=jt();if(s)switch(s.type){case V.KEY_DOWN:case V.KEY_UP:return i in s?$event[i]:void 0;default:return}}})}static get KEY_DOWN(){return"keydown"}static get KEY_UP(){return"keyup"}}const Ws=(e,t,r,n=!1,i=0)=>{let s;switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:(!q.size||!q.has(t))&&q.set(t,Qt()),s=q.get(t);break;default:e._$events||(e._$events=new Map),(!e._$events.size||!e._$events.has(t))&&e._$events.set(t,Qt()),s=e._$events.get(t);break}const a=s.length;let o=0;for(;o1&&s.sort((c,u)=>{switch(!0){case c.priority>u.priority:return-1;case c.priority{switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:return!!(q.size&&q.has(t));default:return!!(e._$events&&e._$events.size&&e._$events.has(t))}},Ks=(e,t,r,n=!1)=>{let i;switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:if(!q.size||!q.has(t))return;i=q.get(t);break;default:if(!e._$events||!e._$events.size||!e._$events.has(t))return;i=e._$events.get(t);break}if(i){for(let s=0;s1&&i.sort((s,a)=>{switch(!0){case s.priority>a.priority:return-1;case s.priority{let n;switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:if(!q.size||!q.has(t))return;n=q.get(t);break;default:if(!e._$events||!e._$events.size||!e._$events.has(t))return;n=e._$events.get(t);break}if(!n)return;const i=Qt();for(let s=0;s1&&i.sort((s,a)=>{switch(!0){case s.priority>a.priority:return-1;case s.priority{if(e.hasEventListener(t))return!0;if("parent"in e){let r=e.parent;for(;r;){if(r.hasEventListener(t))return!0;if(!("parent"in r))break;r=r.parent}}return!1},zs=(e,t)=>{switch(t.type){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:{if(!q.size||!q.has(t.type))return!1;const r=q.get(t.type);if(!r.length)return!1;for(let n=0;n-1;--i){const s=n[i];for(let a=0;a{if(i in n)return n[i];const s=jt();if(s)switch(s.type){case Ne.FOCUS_IN:case Ne.FOCUS_OUT:return i in s?$event[i]:void 0;default:return}}})}static get FOCUS_IN(){return"focusin"}static get FOCUS_OUT(){return"focusout"}}class Gt extends x{status;responseHeaders;responseURL;constructor(t,r=!1,n=0,i="",s=[]){super(t,r),this.status=n|0,this.responseHeaders=s,this.responseURL=i}static get HTTP_STATUS(){return"httpStatus"}}class Re extends x{text;constructor(t,r=!1,n=""){super(t,r),this.text=`${n}`}static get IO_ERROR(){return"ioError"}}class S extends x{constructor(t,r=!0){return super(t,r),new Proxy(this,{get:(n,i)=>{if(i in n)return n[i];const s=jt();if(s)switch(s.type){case S.POINTER_DOWN:case S.POINTER_MOVE:case S.POINTER_UP:case S.POINTER_LEAVE:case S.POINTER_OVER:case S.POINTER_OUT:return i in s?$event[i]:void 0;default:return}}})}static get DOUBLE_CLICK(){return"dblclick"}static get POINTER_DOWN(){return"pointerdown"}static get POINTER_LEAVE(){return"pointerleave"}static get POINTER_MOVE(){return"pointermove"}static get POINTER_OUT(){return"pointerout"}static get POINTER_OVER(){return"pointerover"}static get POINTER_UP(){return"pointerup"}static get POINTER_CANCEL(){return"pointercancel"}}class Z extends x{bytesLoaded;bytesTotal;constructor(t,r=!1,n=0,i=0){super(t,r),this.bytesLoaded=n|0,this.bytesTotal=i|0}static get PROGRESS(){return"progress"}}class Ae extends x{static get PLAY(){return"play"}static get PLAYING(){return"playing"}static get PAUSE(){return"pause"}static get SEEK(){return"seek"}}class ye extends x{static get UPDATE(){return"jobupdate"}static get STOP(){return"jobstop"}}class qe extends x{constructor(t,r=!0){return super(t,r),new Proxy(this,{get:(n,i)=>{if(i in n)return n[i];const s=jt();if(s&&s.type===qe.WHEEL)return i in s?$event[i]:void 0}})}static get WHEEL(){return"wheel"}}const pi=[],er=e=>{e.size&&e.clear(),pi.push(e)},Hs=()=>pi.pop()||new Map,Js=(e,t,r)=>{r.clear(),e.$timerId!==null&&clearTimeout(e.$timerId);for(const n of t.values()){for(const i of n.values())i&&e.destroy(i);er(n)}t.clear()},Zs=(e,t)=>{if(!(!t||typeof t!="object")&&"canvas"in t){const r=t.canvas,n=r.width,i=r.height;t.clearRect(0,0,n+1,i+1),r.width=r.height=1,e.push(r)}},qs=(e,t,r)=>{if(!e.has(t))return;const n=e.get(t);n.has(r)&&(n.delete(r),n.size||(er(n),e.delete(t)))},js=(e,t,r)=>{if(!t.has(r))return;const n=t.get(r);for(const i of n.values())e.destroy(i);t.delete(r),er(n)},ea=(e,t,r)=>{const n=e.get(t)||null;return n?(n.delete("trash"),n.get(r)||null):null},ta=(e,t,r,n,i=null)=>{t.has(r)||t.set(r,Hs());const s=t.get(r);if(i===null){if(!s.has(n))return;e.destroy(s.get(n)),s.delete(n),s.size||(t.delete(r),er(s));return}s.set(n,i)},ra=(e,t,r="")=>r?e.has(t)?e.get(t).has(r):!1:e.has(t),na=(e,t,r)=>{let n=2166136261,i=e*100|0;return n^=i&255,n=Math.imul(n,16777619),n^=i>>>8&255,n=Math.imul(n,16777619),n^=i>>>16&255,n=Math.imul(n,16777619),n^=i>>>24,n=Math.imul(n,16777619),i=t*100|0,n^=i&255,n=Math.imul(n,16777619),n^=i>>>8&255,n=Math.imul(n,16777619),n^=i>>>16&255,n=Math.imul(n,16777619),n^=i>>>24,n=Math.imul(n,16777619),r&&(i=r*100|0,n^=i&255,n=Math.imul(n,16777619),n^=i>>>8&255,n=Math.imul(n,16777619),n^=i>>>16&255,n=Math.imul(n,16777619),n^=i>>>24,n=Math.imul(n,16777619)),(n>>>0)%16777216},ia=(e,t,r,n)=>{let i=2166136261,s=e*100|0;return i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),s=t*100|0,i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),s=r*100|0,i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),s=n*100|0,i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),(i>>>0)%16777216},sa=(e,t,r,n)=>{if(r.has(n))return;const i=t.get(n);i&&(i.set("trash",!0),r.set(n,i),e.$timerId!==null&&clearTimeout(e.$timerId),e.$removeCache=!1,e.$timerId=setTimeout(()=>{e.$removeCache=!0,e.$timerId=null},1e3))},aa=(e,t)=>{if(t.size){for(const[r,n]of t)n.has("trash")&&(e.removeById(r),e.$removeIds.push(+r));t.clear(),e.$removeCache=!1}};class oa{_$pool;_$store;_$trash;$timerId;$removeCache;$removeIds;constructor(){this._$pool=[],this._$store=new Map,this._$trash=new Map,this.$timerId=null,this.$removeIds=[],this.$removeCache=!1}reset(){Js(this,this._$store,this._$trash)}destroy(t=null){Zs(this._$pool,t)}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(t,r){qs(this._$store,t,r)}removeTimer(t){sa(this,this._$store,this._$trash,t)}removeTimerScheduledCache(){aa(this,this._$trash)}removeById(t){js(this,this._$store,t)}getById(t){return this._$store.get(t)}get(t,r){return ea(this._$store,t,r)}set(t,r,n=null){ta(this,this._$store,t,r,n)}has(t,r=""){return ra(this._$store,t,r)}generateKeys(t,r,n){return na(t,r,n)}generateFilterKeys(t,r,n,i){return ia(t,r,n,i)}}const O=new oa,ca=e=>{const t=O.getCanvas();t.width=e.width,t.height=e.height;const r=t.getContext("2d",{willReadFrequently:!0});r.drawImage(e,0,0);const n=r.getImageData(0,0,e.width,e.height),i=new Uint8Array(n.data.buffer);return O.destroy(r),i},la=e=>{const t=O.getCanvas();t.width=e.width,t.height=e.height;const r=t.getContext("2d");r.setTransform(1,0,0,1,0,0),r.drawImage(e,0,0);const n=r.getImageData(0,0,e.width,e.height),i=new Uint8Array(n.data.buffer);return O.destroy(r),i};class _e{width;height;buffer;constructor(t=0,r=0){this.width=t|0,this.height=r|0,this.buffer=null}set image(t){if(!t){this.width=0,this.height=0,this.buffer=null;return}this.buffer=ca(t),this.width=t.width,this.height=t.height}set canvas(t){if(!t){this.width=0,this.height=0,this.buffer=null;return}this.buffer=la(t),this.width=t.width,this.height=t.height}clone(){const t=new _e(this.width,this.height);return this.buffer!==null&&(t.buffer=this.buffer.slice()),t}}class ua{static get ADD(){return"add"}static get ALPHA(){return"alpha"}static get DARKEN(){return"darken"}static get DIFFERENCE(){return"difference"}static get ERASE(){return"erase"}static get HARDLIGHT(){return"hardlight"}static get INVERT(){return"invert"}static get LAYER(){return"layer"}static get LIGHTEN(){return"lighten"}static get MULTIPLY(){return"multiply"}static get NORMAL(){return"normal"}static get OVERLAY(){return"overlay"}static get SCREEN(){return"screen"}static get SUBTRACT(){return"subtract"}}const j=e=>{e.changed=!0;let t=e.parent;for(;t&&!t.changed;)t.changed=!0,t=t.parent},ha=(e,t)=>{const r=U.multiply(e._$colorTransform,t._$colorTransform);e._$colorTransform[0]=r[0],e._$colorTransform[1]=r[1],e._$colorTransform[2]=r[2],e._$colorTransform[3]=r[3],e._$colorTransform[4]=r[4],e._$colorTransform[5]=r[5],e._$colorTransform[6]=r[6],e._$colorTransform[7]=r[7],U.release(r)},mi=[],En=(e=1,t=0,r=0,n=1,i=0,s=0)=>{const a=mi.pop()||new Float32Array(6);return a[0]=e,a[1]=t,a[2]=r,a[3]=n,a[4]=i,a[5]=s,a},fa=e=>{mi.push(e)},gi=[],Pn=(e=1,t=1,r=1,n=1,i=0,s=0,a=0,o=0)=>{const c=gi.pop()||new Float32Array(8);return c[0]=e,c[1]=t,c[2]=r,c[3]=n,c[4]=i,c[5]=s,c[6]=a,c[7]=o,c},da=e=>{gi.push(e)},Ee=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)};class U{_$colorTransform;constructor(t=1,r=1,n=1,i=1,s=0,a=0,o=0,c=0){this._$colorTransform=Pn(t,r,n,i,s,a,o,c)}get rawData(){return this._$colorTransform}get alphaMultiplier(){return this._$colorTransform[3]}set alphaMultiplier(t){this._$colorTransform[3]=Ee(t,0,1,1)}get alphaOffset(){return this._$colorTransform[7]}set alphaOffset(t){this._$colorTransform[7]=Ee(t,-255,255,0)}get blueMultiplier(){return this._$colorTransform[2]}set blueMultiplier(t){this._$colorTransform[2]=Ee(t,0,1,1)}get blueOffset(){return this._$colorTransform[6]}set blueOffset(t){this._$colorTransform[6]=Ee(t,-255,255,0)}get greenMultiplier(){return this._$colorTransform[1]}set greenMultiplier(t){this._$colorTransform[1]=Ee(t,0,1,1)}get greenOffset(){return this._$colorTransform[5]}set greenOffset(t){this._$colorTransform[5]=Ee(t,-255,255,0)}get redMultiplier(){return this._$colorTransform[0]}set redMultiplier(t){this._$colorTransform[0]=Ee(t,0,1,1)}get redOffset(){return this._$colorTransform[4]}set redOffset(t){this._$colorTransform[4]=Ee(t,-255,255,0)}clone(){return new U(...this._$colorTransform)}concat(t){ha(this,t)}static multiply(t,r){return Pn(t[0]*r[0],t[1]*r[1],t[2]*r[2],t[3]*r[3],t[0]*r[4]+t[4],t[1]*r[5]+t[5],t[2]*r[6]+t[6],t[3]*r[7]+t[7])}static release(t){da(t)}}const Aa=e=>new T(e._$matrix[0],e._$matrix[1],e._$matrix[2],e._$matrix[3],e._$matrix[4],e._$matrix[5]),pa=(e,t)=>{const r=e._$matrix,n=t._$matrix;let i=r[0]*n[0],s=0,a=0,o=r[3]*n[3],c=r[4]*n[0]+n[4],u=r[5]*n[3]+n[5];(r[1]||r[2]||n[1]||n[2])&&(i+=r[1]*n[2],o+=r[2]*n[1],s+=r[0]*n[1]+r[1]*n[3],a+=r[2]*n[0]+r[3]*n[2],c+=r[5]*n[2],u+=r[4]*n[1]),r[0]=i,r[1]=s,r[2]=a,r[3]=o,r[4]=c,r[5]=u},ma=(e,t)=>{e._$matrix[0]=t._$matrix[0],e._$matrix[1]=t._$matrix[1],e._$matrix[2]=t._$matrix[2],e._$matrix[3]=t._$matrix[3],e._$matrix[4]=t._$matrix[4],e._$matrix[5]=t._$matrix[5]},ga=(e,t,r,n=0,i=0,s=0)=>{e.identity(),e.rotate(n),e.scale(t,r),e.translate(i,s)},ba=(e,t,r,n=0,i=0,s=0)=>{const a=e._$matrix;if(a[0]=t/1638.4,a[3]=r/1638.4,n){const o=Math.cos(n),c=Math.sin(n);a[1]=c*a[3],a[2]=-c*a[0],a[0]*=o,a[3]*=o}else a[1]=0,a[2]=0;a[4]=i+t/2,a[5]=s+r/2},xa=(e,t)=>new se(e.x+t.x,e.y+t.y),ya=e=>new se(e.x,e.y),$a=(e,t)=>{e.x=t.x,e.y=t.y},va=(e,t)=>Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)),wa=(e,t)=>e.x===t.x&&e.y===t.y,Ma=(e,t,r)=>new se(e.x+(t.x-e.x)*(1-r),e.y+(t.y-e.y)*(1-r)),Ba=(e,t)=>{const r=t/e.length;e.x*=r,e.y*=r},Ta=(e,t,r)=>{e.x+=t,e.y+=r},Sa=(e,t)=>new se(e*Math.cos(t),e*Math.sin(t)),Ia=(e,t,r)=>{e.x=t,e.y=r},Ca=(e,t)=>new se(e.x-t.x,e.y-t.y);class se{x;y;constructor(t=0,r=0){this.x=t,this.y=r}get length(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}add(t){return xa(this,t)}clone(){return ya(this)}copyFrom(t){$a(this,t)}static distance(t,r){return va(t,r)}equals(t){return wa(this,t)}static interpolate(t,r,n){return Ma(t,r,n)}normalize(t){Ba(this,t)}offset(t,r){Ta(this,t,r)}static polar(t,r){return Sa(t,r)}setTo(t,r){Ia(this,t,r)}subtract(t){return Ca(this,t)}}const Fa=(e,t)=>new se(t.x*e._$matrix[0]+t.y*e._$matrix[2],t.x*e._$matrix[1]+t.y*e._$matrix[3]),Ea=e=>{e._$matrix[0]=1,e._$matrix[1]=0,e._$matrix[2]=0,e._$matrix[3]=1,e._$matrix[4]=0,e._$matrix[5]=0},Pa=e=>{const t=e._$matrix[0],r=e._$matrix[1],n=e._$matrix[2],i=e._$matrix[3],s=e._$matrix[4],a=e._$matrix[5];if(r===0&&n===0)e._$matrix[0]=1/t,e._$matrix[1]=0,e._$matrix[2]=0,e._$matrix[3]=1/i,e._$matrix[4]=-e._$matrix[0]*s,e._$matrix[5]=-e._$matrix[3]*a;else{const o=t*i-r*n;if(o){const c=1/o;e._$matrix[0]=i*c,e._$matrix[1]=-r*c,e._$matrix[2]=-n*c,e._$matrix[3]=t*c,e._$matrix[4]=-(e._$matrix[0]*s+e._$matrix[2]*a),e._$matrix[5]=-(e._$matrix[1]*s+e._$matrix[3]*a)}}},Ra=(e,t)=>{const r=e._$matrix,n=r[0],i=r[1],s=r[2],a=r[3],o=r[4],c=r[5];r[0]=n*Math.cos(t)-i*Math.sin(t),r[1]=n*Math.sin(t)+i*Math.cos(t),r[2]=s*Math.cos(t)-a*Math.sin(t),r[3]=s*Math.sin(t)+a*Math.cos(t),r[4]=o*Math.cos(t)-c*Math.sin(t),r[5]=o*Math.sin(t)+c*Math.cos(t)},Oa=(e,t,r)=>{const n=e._$matrix;n[0]*=t,n[2]*=t,n[4]*=t,n[1]*=r,n[3]*=r,n[5]*=r},ka=(e,t,r,n,i,s,a)=>{const o=e._$matrix;o[0]=t,o[1]=r,o[2]=n,o[3]=i,o[4]=s,o[5]=a},Ua=(e,t)=>{const r=t.x,n=t.y,i=e._$matrix;return new se(r*i[0]+n*i[2]+i[4],r*i[1]+n*i[3]+i[5])},Ga=(e,t,r)=>{e.tx+=t,e.ty+=r};class T{_$matrix;constructor(t=1,r=0,n=0,i=1,s=0,a=0){this._$matrix=En(t,r,n,i,s,a)}get a(){return this._$matrix[0]}set a(t){this._$matrix[0]=t}get b(){return this._$matrix[1]}set b(t){this._$matrix[1]=t}get c(){return this._$matrix[2]}set c(t){this._$matrix[2]=t}get d(){return this._$matrix[3]}set d(t){this._$matrix[3]=t}get tx(){return this._$matrix[4]}set tx(t){this._$matrix[4]=t}get ty(){return this._$matrix[5]}set ty(t){this._$matrix[5]=t}get rawData(){return this._$matrix}clone(){return Aa(this)}concat(t){pa(this,t)}copyFrom(t){ma(this,t)}createBox(t,r,n=0,i=0,s=0){ga(this,t,r,n,i,s)}createGradientBox(t,r,n=0,i=0,s=0){ba(this,t,r,n,i,s)}deltaTransformPoint(t){return Fa(this,t)}identity(){Ea(this)}invert(){Pa(this)}rotate(t){Ra(this,t)}scale(t,r){Oa(this,t,r)}setTo(t,r,n,i,s,a){ka(this,t,r,n,i,s,a)}transformPoint(t){return Ua(this,t)}translate(t,r){Ga(this,t,r)}static multiply(t,r){const n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],u=r[0],h=r[1],l=r[2],f=r[3],A=r[4],d=r[5];return En(n*u+s*h,i*u+a*h,n*l+s*f,i*l+a*f,n*A+s*d+o,i*A+a*d+c)}static release(t){fa(t)}}const _a=e=>new be(e.x,e.y,e.width,e.height),Da=(e,t,r)=>e.x<=t&&e.y<=r&&e.right>t&&e.bottom>r,La=(e,t)=>e.x<=t.x&&e.y<=t.y&&e.right>t.x&&e.bottom>t.y,Na=(e,t)=>e.x<=t.x&&e.y<=t.y&&e.right>=t.right&&e.bottom>=t.bottom,Ya=(e,t)=>{e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height},Wa=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,Va=(e,t,r)=>{e.x-=t,e.width+=2*t,e.y-=r,e.height+=2*r},Ka=(e,t)=>{e.x-=t.x,e.width+=2*t.x,e.y-=t.y,e.height+=2*t.y},Qa=(e,t)=>{const r=Math.max(e.x,t.x),n=Math.max(e.y,t.y),i=Math.min(e.right,t.right),s=Math.min(e.bottom,t.bottom),a=i-r,o=s-n;return a>0&&o>0?new be(r,n,a,o):new be(0,0,0,0)},Xa=(e,t)=>{const r=Math.max(e.x,t.x),n=Math.max(e.y,t.y),i=Math.min(e.right,t.right),s=Math.min(e.bottom,t.bottom);return i-r>0&&s-n>0},za=e=>e.width<=0||e.height<=0,Ha=(e,t,r)=>{e.x+=t,e.y+=r},Ja=(e,t)=>{e.x+=t.x,e.y+=t.y},Za=e=>{e.x=e.y=e.width=e.height=0},qa=(e,t,r,n,i)=>{e.x=t,e.y=r,e.width=n,e.height=i},ja=(e,t)=>e.isEmpty()?t.clone():t.isEmpty()?e.clone():new be(Math.min(e.x,t.x),Math.min(e.y,t.y),Math.max(e.right-t.left,t.right-e.left),Math.max(e.bottom-t.top,t.bottom-e.top));class be{x;y;width;height;constructor(t=0,r=0,n=0,i=0){this.x=t,this.y=r,this.width=n,this.height=i}get bottom(){return this.y+this.height}set bottom(t){this.height=t-this.y}get bottomRight(){return new se(this.right,this.bottom)}set bottomRight(t){this.right=t.x,this.bottom=t.y}get left(){return this.x}set left(t){this.width=this.right-t,this.x=t}get right(){return this.x+this.width}set right(t){this.width=t-this.x}get size(){return new se(this.width,this.height)}set size(t){this.width=t.x,this.height=t.y}get top(){return this.y}set top(t){this.height=this.bottom-t,this.y=t}get topLeft(){return new se(this.x,this.y)}set topLeft(t){this.left=t.x,this.top=t.y}clone(){return _a(this)}contains(t,r){return Da(this,t,r)}containsPoint(t){return La(this,t)}containsRect(t){return Na(this,t)}copyFrom(t){Ya(this,t)}equals(t){return Wa(this,t)}inflate(t,r){Va(this,t,r)}inflatePoint(t){Ka(this,t)}intersection(t){return Qa(this,t)}intersects(t){return Xa(this,t)}isEmpty(){return za(this)}offset(t,r){Ha(this,t,r)}offsetPoint(t){Ja(this,t)}setEmpty(){Za(this)}setTo(t,r,n,i){qa(this,t,r,n,i)}union(t){return ja(this,t)}}const tr=e=>{if(e.placeObject)return e.placeObject;const t=e.placeId;if(t===-1)return null;const r=e.parent;if(!r)return null;const n=r.loaderInfo;if(!n||!n.data)return null;const i=n.data.characters[r.characterId],s=r.isTimelineEnabled?r.currentFrame:1,a=i.placeMap[s];if(!a||!(t in a))return null;const o=a[t],c=i.placeObjects[o];return c?(e.placeObject=c,c):null},bt=new se,bi=0,xi=1,eo=2,to=3,xt=new Float32Array([1,0,0,1,0,0]);let ro=0;const yi=()=>ro++,$i=[],Pr=[],vi=[],no=[],je=(e=0,t=0,r=0,n=0,i=0,s=0)=>{const a=vi.pop()||new Float32Array(6);return a[0]=e,a[1]=t,a[2]=r,a[3]=n,a[4]=i,a[5]=s,a},Ft=e=>{vi.push(e)},_t=(e=1,t=1,r=1,n=1,i=0,s=0,a=0,o=0)=>{const c=no.pop()||new Float32Array(8);return c[0]=e,c[1]=t,c[2]=r,c[3]=n,c[4]=i,c[5]=s,c[6]=a,c[7]=o,c},wi=[],io=()=>wi.pop()||new Map,so=e=>{e.clear(),wi.push(e)},z=(...e)=>{const t=$i.pop()||[];return e.length&&t.push(...e),t},oe=e=>{e.length&&(e.length=0),$i.push(e)},re=(e,t,r,n)=>{const i=Pr.length?Pr.pop():new Float32Array(4);return i[0]=e,i[1]=t,i[2]=r,i[3]=n,i},k=e=>{Pr.push(e)},ao=e=>{let t=null;switch(e.method.toUpperCase()){case"GET":if(e.data){const n=e.url.split("?");n[1]=n.length===1?e.data.toString():`${n[1]}&${e.data.toString()}`,e.url=n.join("?")}break;case"PUT":case"POST":e.data&&(t=e.data.toString());break}const r=new XMLHttpRequest;if(r.open(e.method,e.url,!0),r.responseType=e.format,r.withCredentials=e.withCredentials,e.event){const n=Object.keys(e.event);for(let i=0;i{const t=z();if(e){const r=e.trim().split(` +`);for(let n=0;nIe?(Ie.fillStyle=e,+`0x${Ie.fillStyle.slice(1)}`):0,me=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)},kr=[],Ur=[],Ue=new Map;let Mi=null;const Bi=e=>{Mi=e},lo=()=>Mi,_=e=>{if(e.$matrix)return e.$matrix.rawData;const t=tr(e);if(!t||!t.matrix)return null;if(!t.typedMatrix){const r=t.matrix;t.typedMatrix=je(r[0],r[1],r[2],r[3],r[4],r[5])}return t.typedMatrix},uo=e=>{const t=_(e);let r=t||xt,n=e.parent;for(;n;){const i=_(n);i&&(r=T.multiply(i,r)),n=n.parent}return new T(r[0],r[1],r[2],r[3],r[4],r[5])},Ve=e=>{if(e.$colorTransform)return e.$colorTransform.rawData;const t=tr(e);if(!t||!t.colorTransform)return null;if(!t.typedColorTransform){const r=t.colorTransform;t.typedColorTransform=_t(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7])}return t.typedColorTransform},ho=e=>{if(e.$alpha!==null)return e.$alpha;if(e.$colorTransform){const r=e.$colorTransform.rawData;return r[3]+r[7]/255}const t=Ve(e);return t?t[3]+t[7]/255:1},fo=(e,t)=>{if(t=me(t,0,1),e.$alpha===t)return;e.$alpha=t;let r=e.$colorTransform;if(!r){const n=Ve(e);r=n?new U(...n):new U}r.alphaMultiplier=t,r.alphaOffset=0,e.$colorTransform=r,j(e)};class Fe{$updated;constructor(){this.$updated=!0}canApplyFilter(){return!0}getBounds(t){return t}}const F=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)},Gr=document.createElement("canvas");Gr.width=Gr.height=1;const Sr=Gr.getContext("2d"),Oe=e=>Sr?(Sr.fillStyle=e,+`0x${Sr.fillStyle.slice(1)}`):0,cn=Math.PI/180,ln=e=>{switch(e){case"full":return 0;case"inner":return 1;case"outer":return 2;default:return 0}},Ti=e=>e.strength>0&&e.distance!==0&&e.blurX>0&&e.blurY>0&&e.quality>0,Si=e=>e.blurX>0&&e.blurY>0&&e.quality>0,Ao=[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5],it=(e,t)=>{if(!Si(e))return t;const r=Ao[e.quality-1],n=Math.round(e.blurX*r),i=Math.round(e.blurY*r);return t[0]-=n,t[2]+=n,t[1]-=i,t[3]+=i,t},po=(e,t)=>{if(!Ti(e)||e.type==="inner")return t;it(e,t);const r=e.angle*cn,n=e.distance,i=Math.abs(Math.cos(r)*n),s=Math.abs(Math.sin(r)*n);return t[0]-=i,t[2]+=i,t[1]-=s,t[3]+=s,t},mo=e=>[e.$filterType,e.distance,e.angle,e.highlightColor,e.highlightAlpha,e.shadowColor,e.shadowAlpha,e.blurX,e.blurY,e.strength,e.quality,e.type,e.knockout],go=e=>new Float32Array([e.$filterType,e.distance,e.angle,e.highlightColor,e.highlightAlpha,e.shadowColor,e.shadowAlpha,e.blurX,e.blurY,e.strength,e.quality,ln(e.type),+e.knockout]);class rr extends Fe{$filterType=0;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$highlightColor;_$highlightAlpha;_$shadowColor;_$shadowAlpha;_$strength;_$type;_$knockout;constructor(t=4,r=45,n=16777215,i=1,s=0,a=1,o=4,c=4,u=1,h=1,l="inner",f=!1){super(),this._$distance=4,this._$angle=45,this._$highlightColor=16777215,this._$highlightAlpha=1,this._$blurX=4,this._$blurY=4,this._$quality=1,this._$shadowColor=0,this._$shadowAlpha=1,this._$strength=1,this._$type="inner",this._$knockout=!1,this.blurX=o,this.blurY=c,this.quality=h,this.distance=t,this.angle=r,this.highlightColor=n,this.highlightAlpha=i,this.shadowColor=s,this.shadowAlpha=a,this.strength=u,this.type=l,this.knockout=f}get angle(){return this._$angle}set angle(t){t=F(t%360,-360,360,45),t!==this._$angle&&(this._$angle=t,this.$updated=!0)}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get distance(){return this._$distance}set distance(t){t=F(+t,-255,255,4),t!==this._$distance&&(this._$distance=t,this.$updated=!0)}get highlightAlpha(){return this._$highlightAlpha}set highlightAlpha(t){t=F(+t,0,1,0),t!==this._$highlightAlpha&&(this._$highlightAlpha=t,this.$updated=!0)}get highlightColor(){return this._$highlightColor}set highlightColor(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,16777215),t!==this._$highlightColor&&(this._$highlightColor=t,this.$updated=!0)}get knockout(){return this._$knockout}set knockout(t){t=!!t,t!==this._$knockout&&(this._$knockout=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}get shadowAlpha(){return this._$shadowAlpha}set shadowAlpha(t){t=F(t,0,1,0),t!==this._$shadowAlpha&&(this._$shadowAlpha=t,this.$updated=!0)}get shadowColor(){return this._$shadowColor}set shadowColor(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,0),t!==this._$shadowColor&&(this._$shadowColor=t,this.$updated=!0)}get strength(){return this._$strength}set strength(t){t=F(t|0,0,255,0),t!==this._$strength&&(this._$strength=t,this.$updated=!0)}get type(){return this._$type}set type(t){if(t=`${t}`.toLowerCase(),t!==this._$type){switch(t){case"inner":case"outer":case"full":break;default:return}this._$type=t,this.$updated=!0}}clone(){return new rr(this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurX,this._$blurY,this._$strength,this._$quality,this._$type,this._$knockout)}toArray(){return mo(this)}toNumberArray(){return go(this)}canApplyFilter(){return Ti(this)}getBounds(t){return po(this,t)}}const bo=e=>[e.$filterType,e.blurX,e.blurY,e.quality],xo=e=>new Float32Array([e.$filterType,e.blurX,e.blurY,e.quality]);class nr extends Fe{$filterType=1;_$blurX;_$blurY;_$quality;constructor(t=4,r=4,n=1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this.blurX=t,this.blurY=r,this.quality=n}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}clone(){return new nr(this._$blurX,this._$blurY,this._$quality)}toArray(){return bo(this)}toNumberArray(){return xo(this)}canApplyFilter(){return Si(this)}getBounds(t){return it(this,t)}}const yo=e=>[e.$filterType,e.matrix],$o=e=>new Float32Array([e.$filterType,...e.matrix]);class ir extends Fe{$filterType=2;_$matrix;constructor(t=null){super(),this._$matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],t&&t.length===20&&(this.matrix=t)}get matrix(){return this._$matrix}set matrix(t){if(this._$matrix!==t&&!(!Array.isArray(t)||t.length!==20)){for(let r=0;r<20;r++)if(t[r]!==this._$matrix[r]){this.$updated=!0;break}this.$updated&&(this._$matrix=t)}}clone(){return new ir(this._$matrix)}toArray(){return yo(this)}toNumberArray(){return $o(this)}}const vo=e=>e.matrix!==null&&e.matrixX*e.matrixY===e.matrix.length,wo=e=>[e.$filterType,e.matrixX,e.matrixY,e.matrix,e.divisor,e.bias,e.preserveAlpha,e.clamp,e.color,e.alpha],Mo=e=>{const t=e.matrix||[];return new Float32Array([e.$filterType,e.matrixX,e.matrixY,...t,e.divisor,e.bias,+e.preserveAlpha,+e.clamp,e.color,e.alpha])};class sr extends Fe{$filterType=3;_$matrixX;_$matrixY;_$matrix;_$divisor;_$bias;_$preserveAlpha;_$clamp;_$color;_$alpha;constructor(t=0,r=0,n=null,i=1,s=0,a=!0,o=!0,c=0,u=0){super(),this._$matrixX=0,this._$matrixY=0,this._$matrix=null,this._$divisor=1,this._$bias=0,this._$preserveAlpha=!0,this._$clamp=!0,this._$color=0,this._$alpha=0,this.matrixX=t,this.matrixY=r,this.matrix=n,this.divisor=i,this.bias=s,this.preserveAlpha=a,this.clamp=o,this.color=c,this.alpha=u}get alpha(){return this._$alpha}set alpha(t){t=F(+t,0,1,0),t!==this._$alpha&&(this._$alpha=t,this.$updated=!0)}get bias(){return this._$bias}set bias(t){t|=0,t!==this._$bias&&(this._$bias=t,this.$updated=!0)}get clamp(){return this._$clamp}set clamp(t){t=!!t,t!==this._$clamp&&(this._$clamp=t,this.$updated=!0)}get color(){return this._$color}set color(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,0),t!==this._$color&&(this._$color=t,this.$updated=!0)}get divisor(){return this._$divisor}set divisor(t){t|=0,t!==this._$divisor&&(this._$divisor=t,this.$updated=!0)}get matrix(){return this._$matrix}set matrix(t){this._$matrix!==t&&(this._$matrix=t,this.$updated=!0)}get matrixX(){return this._$matrixX}set matrixX(t){t=F(t|0,0,15,0)|0,t!==this._$matrixX&&(this._$matrixX=t,this.$updated=!0)}get matrixY(){return this._$matrixY}set matrixY(t){t=F(t|0,0,15,0)|0,t!==this._$matrixY&&(this._$matrixY=t,this.$updated=!0)}get preserveAlpha(){return this._$preserveAlpha}set preserveAlpha(t){t=!!t,t!==this._$preserveAlpha&&(this._$preserveAlpha=t,this.$updated=!0)}clone(){return new sr(this._$matrixX,this._$matrixY,this._$matrix?this._$matrix.slice():null,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}toArray(){return wo(this)}toNumberArray(){return Mo(this)}canApplyFilter(){return vo(this)}}const Bo=e=>e.bitmapBuffer!==null&&e.componentX>0&&e.componentY>0&&e.scaleX!==0&&e.scaleY!==0,To=e=>[e.$filterType,e.bitmapBuffer?Array.from(e.bitmapBuffer):null,e.bitmapWidth,e.bitmapHeight,e.mapPointX,e.mapPointY,e.componentX,e.componentY,e.scaleX,e.scaleY,e.mode,e.color,e.alpha],So=e=>{let t=2;switch(e.mode){case"clamp":t=0;break;case"color":t=1;break;case"wrap":t=2;break;case"ignore":t=3;break;default:t=2;break}const r=e.bitmapBuffer||new Uint8Array,n=[e.$filterType,r.length];for(let i=0;i[e.$filterType,e.distance,e.angle,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,e.inner,e.knockout,e.hideObject],Co=e=>new Float32Array([e.$filterType,e.distance,e.angle,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,+e.inner,+e.knockout,+e.hideObject]),Ii=e=>e.alpha>0&&e.strength!==0&&e.blurX>0&&e.blurY>0&&e.quality>0,Fo=(e,t)=>{if(!Ii(e)||e.inner)return t;it(e,t);const r=e.angle*cn,n=e.distance,i=Math.cos(r)*n,s=Math.sin(r)*n;return t[0]=Math.min(t[0],i),i>0&&(t[2]+=i),t[1]=Math.min(t[1],s),s>0&&(t[3]+=s),t};class or extends Fe{$filterType=5;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$color;_$alpha;_$strength;_$inner;_$knockout;_$hideObject;constructor(t=4,r=45,n=0,i=1,s=4,a=4,o=1,c=1,u=!1,h=!1,l=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$distance=4,this._$angle=45,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this._$hideObject=!1,this.blurX=s,this.blurY=a,this.quality=c,this.distance=t,this.angle=r,this.color=n,this.alpha=i,this.strength=o,this.inner=u,this.knockout=h,this.hideObject=l}get alpha(){return this._$alpha}set alpha(t){t=F(+t,0,1,0),t!==this._$alpha&&(this._$alpha=t,this.$updated=!0)}get angle(){return this._$angle}set angle(t){t=F(t%360,-360,360,45),t!==this._$angle&&(this._$angle=t,this.$updated=!0)}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get color(){return this._$color}set color(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,0),t!==this._$color&&(this._$color=t,this.$updated=!0)}get distance(){return this._$distance}set distance(t){t=F(+t,-255,255,4),t!==this._$distance&&(this._$distance=t,this.$updated=!0)}get hideObject(){return this._$hideObject}set hideObject(t){t=!!t,t!==this._$hideObject&&(this._$hideObject=t,this.$updated=!0)}get inner(){return this._$inner}set inner(t){t=!!t,t!==this._$inner&&(this._$inner=t,this.$updated=!0)}get knockout(){return this._$knockout}set knockout(t){t=!!t,t!==this._$knockout&&(this._$knockout=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}get strength(){return this._$strength}set strength(t){t=F(t|0,0,255,0),t!==this._$strength&&(this._$strength=t,this.$updated=!0)}clone(){return new or(this._$distance,this._$angle,this._$color,this._$alpha,this._$blurX,this._$blurY,this._$strength,this._$quality,this._$inner,this._$knockout,this._$hideObject)}toArray(){return Io(this)}toNumberArray(){return Co(this)}canApplyFilter(){return Ii(this)}getBounds(t){return Fo(this,t)}}const Eo=e=>[e.$filterType,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,e.inner,e.knockout],Po=e=>new Float32Array([e.$filterType,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,+e.inner,+e.knockout]),Ci=e=>e.alpha>0&&e.strength!==0&&e.blurX>0&&e.blurY>0&&e.quality>0,Ro=(e,t)=>!Ci(e)||e.inner?t:it(e,t);class cr extends Fe{$filterType=6;_$blurX;_$blurY;_$quality;_$color;_$alpha;_$strength;_$inner;_$knockout;constructor(t=0,r=1,n=4,i=4,s=1,a=1,o=!1,c=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this.blurX=n,this.blurY=i,this.quality=a,this.color=t,this.alpha=r,this.strength=s,this.inner=o,this.knockout=c}get alpha(){return this._$alpha}set alpha(t){t=F(+t,0,1,0),t!==this._$alpha&&(this._$alpha=t,this.$updated=!0)}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get color(){return this._$color}set color(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,4),t!==this._$color&&(this._$color=t,this.$updated=!0)}get inner(){return this._$inner}set inner(t){t=!!t,t!==this._$inner&&(this._$inner=t,this.$updated=!0)}get knockout(){return this._$knockout}set knockout(t){t=!!t,t!==this._$knockout&&(this._$knockout=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}get strength(){return this._$strength}set strength(t){t=F(t|0,0,255,0),t!==this._$strength&&(this._$strength=t,this.$updated=!0)}clone(){return new cr(this._$color,this._$alpha,this._$blurX,this._$blurY,this._$strength,this._$quality,this._$inner,this._$knockout)}toArray(){return Eo(this)}toNumberArray(){return Po(this)}canApplyFilter(){return Ci(this)}getBounds(t){return Ro(this,t)}}const Fi=e=>e.strength>0&&e.distance>0&&e.alphas!==null&&e.ratios!==null&&e.colors!==null&&e.blurX>0&&e.blurY>0&&e.quality>0,Oo=e=>[e.$filterType,e.distance,e.angle,e.colors,e.alphas,e.ratios,e.blurX,e.blurY,e.strength,e.quality,e.type,e.knockout],ko=e=>{const t=e.colors?e.colors:[],r=e.alphas?e.alphas:[],n=e.ratios?e.ratios:[];return new Float32Array([e.$filterType,e.distance,e.angle,t.length,...t,r.length,...r,n.length,...n,e.blurX,e.blurY,e.strength,e.quality,ln(e.type),+e.knockout])},Uo=(e,t)=>{if(!Fi(e)||e.type==="inner")return t;it(e,t);const r=e.angle*cn,n=e.distance,i=Math.abs(Math.cos(r)*n),s=Math.abs(Math.sin(r)*n);return t[0]-=i,t[2]+=i,t[1]-=s,t[3]+=s,t};class lr extends Fe{$filterType=7;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$colors;_$alphas;_$ratios;_$strength;_$type;_$knockout;constructor(t=4,r=45,n=null,i=null,s=null,a=4,o=4,c=1,u=1,h="inner",l=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.blurX=a,this.blurY=o,this.quality=u,this.distance=t,this.angle=r,this.colors=n,this.alphas=i,this.ratios=s,this.strength=c,this.type=h,this.knockout=l}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(Array.isArray(t))for(let r=0;r[e.$filterType,e.distance,e.angle,e.colors,e.alphas,e.ratios,e.blurX,e.blurY,e.strength,e.quality,e.type,e.knockout],Ei=e=>e.strength>0&&e.distance>0&&e.alphas!==null&&e.ratios!==null&&e.colors!==null&&e.blurX>0&&e.blurY>0&&e.quality>0,_o=e=>{const t=e.colors?e.colors:[],r=e.alphas?e.alphas:[],n=e.ratios?e.ratios:[];return new Float32Array([e.$filterType,e.distance,e.angle,t.length,...t,r.length,...r,n.length,...n,e.blurX,e.blurY,e.strength,e.quality,ln(e.type),+e.knockout])},Do=(e,t)=>!Ei(e)||e.type==="inner"?t:it(e,t);class ur extends Fe{$filterType=8;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$colors;_$alphas;_$ratios;_$strength;_$type;_$knockout;constructor(t=4,r=45,n=null,i=null,s=null,a=4,o=4,c=1,u=1,h="outer",l=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="outer",this._$knockout=!1,this.blurX=a,this.blurY=o,this.quality=u,this.distance=t,this.angle=r,this.colors=n,this.alphas=i,this.ratios=s,this.strength=c,this.type=h,this.knockout=l}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(Array.isArray(t))for(let r=0;r{const t=z();for(let r=0;r{if(e.$filters)return e.$filters;const t=tr(e);return t&&t.surfaceFilterList?(t.filters||(t.filters=Lo(t.surfaceFilterList)),t.filters):null},Yo=(e,t)=>{e.$filters=t,j(e)},Wo=e=>{if(e.$blendMode)return e.$blendMode;const t=tr(e);return t&&t.blendMode?t.blendMode:"normal"},Vo=(e,t)=>{e.$blendMode!==t&&(e.$blendMode=t,j(e))},Ko=180/Math.PI,Qo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);return t?Math.atan2(t[1],t[0])*Ko:0},Xo=Math.PI/180,zo=(e,t)=>{if(t=me(t%360,-360,360,0),e.$rotation===t)return;let r=e.$matrix;if(!r){const s=_(e);e.$matrix=r=s?new T(...s):new T}const n=Math.sqrt(r.a*r.a+r.b*r.b),i=Math.sqrt(r.c*r.c+r.d*r.d);if(t===0)r.a=n,r.b=0,r.c=0,r.d=i;else{let s=Math.atan2(r.b,r.a),a=Math.atan2(-r.c,r.d);const o=t*Xo;a=a+o-s,s=o,r.b=n*Math.sin(s),r.b===1||r.b===-1?r.a=0:r.a=n*Math.cos(s),r.c=-i*Math.sin(a),r.c===1||r.c===-1?r.d=0:r.d=i*Math.cos(a)}e.$scaleX=null,e.$scaleY=null,e.$rotation=t,j(e)},Ho=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);if(!t)return 1;const n=(Math.abs(t[0])>=1e-12?Math.sign(t[0]):Math.sign(t[1]))||1,i=Math.hypot(t[0],t[1]);return Math.round(i*n*1e4)/1e4},Pi=(e,t)=>{t=me(t,-Number.MAX_VALUE,Number.MAX_VALUE,1);const r=Math.round(t*1e4)/1e4;if(e.$scaleX===r)return;let n=e.$matrix;if(!n){const i=_(e);e.$matrix=n=i?new T(...i):new T}if(n.b===0||isNaN(n.b))n.a=r;else{const s=Math.atan2(n.b,n.a),a=Math.hypot(n.a,n.b),o=(Math.abs(n.a)>=1e-12?Math.sign(n.a):Math.sign(n.b))||1,h=(a*o>=0?s:s-Math.PI)+(r<0?Math.PI:0),l=Math.abs(r);n.a=l*Math.cos(h),n.b=l*Math.sin(h)}e.$scaleX=r,e.$rotation=null,j(e)},Jo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);if(!t)return 1;const r=1e-12,n=Math.hypot(t[0],t[1]),i=(Math.abs(t[0])>=r?Math.sign(t[0]):Math.sign(t[1]))||1;return Math.round((t[0]*t[3]-t[1]*t[2])/(n*i)*1e4)/1e4},Ri=(e,t)=>{t=me(t,-Number.MAX_VALUE,Number.MAX_VALUE,1);const r=Math.round(t*1e4)/1e4;if(e.$scaleY===r)return;let n=e.$matrix;if(!n){const i=_(e);e.$matrix=n=i?new T(...i):new T}if(n.c===0||isNaN(n.c))n.d=r;else{const i=Math.max(0,Math.abs(r)),s=1e-12;let a=Math.atan2(n.b,n.a);(n.a<0||Math.abs(n.a)Math.PI&&(a-=2*Math.PI);const o=a+(r<0?Math.PI:0);n.c=-i*Math.sin(o),n.d=i*Math.cos(o)}e.$scaleY=r,e.$rotation=null,j(e)},Zo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);return t?t[4]:0},qo=(e,t)=>{let r=e.$matrix;if(!r){const n=_(e);e.$matrix=r=n?new T(...n):new T}e.$x!==t&&(e.$x=r.tx=t,j(e))},jo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);return t?t[5]:0},ec=(e,t)=>{let r=e.$matrix;if(!r){const n=_(e);e.$matrix=r=n?new T(...n):new T}e.$y!==t&&(e.$y=r.ty=t,j(e))},he=(e,t,r,n,i)=>{const s=i[0],a=i[1],o=i[2],c=i[3],u=i[4],h=i[5],l=r*s+n*o+u,f=r*s+t*o+u,A=e*s+n*o+u,d=e*s+t*o+u,y=r*a+n*c+h,g=r*a+t*c+h,p=e*a+n*c+h,$=e*a+t*c+h;return re(Math.min(l,f,A,d),Math.min(y,g,p,$),Math.max(l,f,A,d),Math.max(y,g,p,$))},Oi=e=>{const t=e.graphics;return re(t.xMin,t.yMin,t.xMax,t.yMax)},wt=(e,t=null)=>{const r=Oi(e),n=_(e);if(!n){if(t){const s=he(r[0],r[1],r[2],r[3],t);return k(r),s}return r}const i=he(r[0],r[1],r[2],r[3],t?T.multiply(t,n):n);return k(r),i},ki=e=>re(0,0,e.videoWidth,e.videoHeight),Mt=(e,t=null)=>{const r=ki(e),n=_(e);if(!n){if(t){const s=he(r[0],r[1],r[2],r[3],t);return k(r),s}return r}const i=he(r[0],r[1],r[2],r[3],t?T.multiply(t,n):n);return k(r),i},Ui=e=>re(e.xMin,e.yMin,e.xMax,e.yMax),Bt=(e,t=null)=>{const r=Ui(e),n=_(e);if(!n){if(t){const s=he(r[0],r[1],r[2],r[3],t);return k(r),s}return r}const i=he(r[0],r[1],r[2],r[3],t?T.multiply(t,n):n);return k(r),i},yt=(e,t=null)=>{const r=e.children;if(!r.length)return re(0,0,0,0);const n=_(e),i=n?t?T.multiply(t,n):n:t,s=Number.MAX_VALUE;let a=s,o=-s,c=s,u=-s;for(let h=0;h{switch(!0){case e.isContainerEnabled:return yt(e);case e.isShape:return wt(e);case e.isText:return Bt(e);case e.isVideo:return Mt(e);default:return re(0,0,0,0)}},tc=e=>{const t=Gi(e),r=Math.abs(t[2]-t[0]);switch(k(t),!0){case r===0:case r===1/0:case r===-1/0:return 0;default:return Math.round(r*100)/100}},_i=(e,t=null)=>{const r=e.children;if(!r.length)return re(0,0,0,0);const n=_(e);let i=t;n&&(i=t?T.multiply(t,n):n);const s=Number.MAX_VALUE;let a=s,o=-s,c=s,u=-s;for(let h=0;h{switch(!0){case e.isContainerEnabled:return _i(e);case e.isShape:return Oi(e);case e.isText:return Ui(e);case e.isVideo:return ki(e);default:return re(0,0,0,0)}},rc=(e,t)=>{if(t=+t,isNaN(t)||0>t)return;const r=tt(e);let n=Math.abs(r[2]-r[0]);switch(!0){case n===0:case n===1/0:case n===-1/0:return;default:n=Math.round(n*100)/100;break}Pi(e,t/n)},nc=(e,t)=>{const r=e.concatenatedMatrix,n=new se(t.x*r.a+t.y*r.c+r.tx,t.x*r.b+t.y*r.d+r.ty);return T.release(r.rawData),n},ic=(e,t)=>{const r=e.concatenatedMatrix;r.invert();const n=new se(t.x*r.a+t.y*r.c+r.tx,t.x*r.b+t.y*r.d+r.ty);return T.release(r.rawData),n},sc=e=>{const t=Gi(e),r=Math.abs(t[3]-t[1]);switch(k(t),!0){case r===0:case r===1/0:case r===-1/0:return 0;default:return Math.round(r*100)/100}},ac=(e,t)=>{if(t=+t,isNaN(t)||0>t)return;const r=tt(e);let n=Math.abs(r[3]-r[1]);switch(!0){case n===0:case n===1/0:case n===-1/0:return;default:n=Math.round(n*100)/100;break}Ri(e,t/n)},oc=e=>{const t=e.parent;t&&t.removeChild(e)},cc=(e,t=null)=>{const r=e.concatenatedMatrix,n=tt(e),i=he(n[0],n[1],n[2],n[3],r.rawData);if(k(n),T.release(r.rawData),!t){const c=new be(i[0],i[1],Math.abs(i[2]-i[0]),Math.abs(i[3]-i[1]));return k(i),c}const s=t.concatenatedMatrix;s.invert();const a=he(i[0],i[1],i[2],i[3],s.rawData);k(i),T.release(s.rawData);const o=new be(a[0],a[1],Math.abs(a[2]-a[0]),Math.abs(a[3]-a[1]));return k(a),o},lc=(e,t)=>{const r=tt(e),n=e.concatenatedMatrix,i=he(r[0],r[1],r[2],r[3],n.rawData);k(r),T.release(n.rawData);const s=tt(t),a=t.concatenatedMatrix,o=he(s[0],s[1],s[2],s[3],a.rawData);k(s),T.release(a.rawData);const c=Math.max(i[0],o[0]),u=Math.max(i[1],o[1]),h=Math.min(i[2],o[2]),l=Math.min(i[3],o[3]);return k(i),k(o),h-c>=0&&l-u>=0};class Xt{_$bitmapData;_$matrix;_$repeat;_$smooth;constructor(t,r=null,n=!0,i=!1){this._$bitmapData=t,this._$matrix=r,this._$repeat=n,this._$smooth=i}clone(){return new Xt(this._$bitmapData.clone(),this._$matrix?this._$matrix.clone():null,this._$repeat,this._$smooth)}toArray(){return z(this._$bitmapData,this._$matrix,this._$repeat,this._$smooth)}}class zt{_$type;_$colors;_$alphas;_$ratios;_$matrix;_$spreadMethod;_$interpolationMethod;_$focalPointRatio;_$colorStops;constructor(t,r,n,i,s=null,a="pad",o="rgb",c=0){this._$type=t,this._$colors=r,this._$alphas=n,this._$ratios=i,this._$matrix=s,this._$spreadMethod=a,this._$interpolationMethod=o,this._$focalPointRatio=c,this._$colorStops=z()}get colorStops(){if(!this._$colorStops.length){const t=Math.min(Math.min(this._$alphas.length,this._$colors.length),this._$ratios.length);for(let r=0;r>>16&255,G:i>>>8&255,B:i&255,A:this._$alphas[r]*255&255}}}return this._$colorStops}toArray(){return z(this._$type,this.colorStops,this._$matrix?this._$matrix.rawData:xt,this._$spreadMethod,this._$interpolationMethod,this._$focalPointRatio)}clone(){return new zt(this._$type,this._$colors.slice(),this._$alphas.slice(),this._$ratios.slice(),this._$matrix?this._$matrix.clone():null,this._$spreadMethod,this._$interpolationMethod,this._$focalPointRatio)}}const uc=(e,t=0,r=0)=>{e.xMin=Math.min(e.xMin,t),e.xMax=Math.max(e.xMax,t),e.yMin=Math.min(e.yMin,r),e.yMax=Math.max(e.yMax,r)},Rn=(e,t=0,r=0,n=0,i=0,s=0,a="none")=>{e.xMin=Math.min(e.xMin,Math.min(t,n)),e.xMax=Math.max(e.xMax,Math.max(t,n)),e.yMin=Math.min(e.yMin,Math.min(r,i)),e.yMax=Math.max(e.yMax,Math.max(r,i));const o=n-t,c=i-r,u=Math.sqrt(o*o+c*c);if(!u)return;const h=o/u,l=c/u,f=-l,A=h,d=s/2,y=Math.min(t+f*d,t-f*d,n+f*d,n-f*d),g=Math.max(t+f*d,t-f*d,n+f*d,n-f*d),p=Math.min(r+A*d,r-A*d,i+A*d,i-A*d),$=Math.max(r+A*d,r-A*d,i+A*d,i-A*d);if(e.xMin=Math.min(e.xMin,y),e.xMax=Math.max(e.xMax,g),e.yMin=Math.min(e.yMin,p),e.yMax=Math.max(e.yMax,$),a==="round"||a==="square"){const w=t+d*-h,I=r+d*-l,P=Math.min(w+d*h+d*f,w-d*h+d*f,w+d*h-d*f,w-d*h-d*f),W=Math.max(w+d*h+d*f,w-d*h+d*f,w+d*h-d*f,w-d*h-d*f),C=Math.min(I+d*l+d*A,I+d*l-d*A,I-d*l-d*A,I-d*l+d*A),R=Math.max(I+d*l+d*A,I+d*l-d*A,I-d*l-d*A,I-d*l+d*A);e.xMin=Math.min(e.xMin,P),e.xMax=Math.max(e.xMax,W),e.yMin=Math.min(e.yMin,C),e.yMax=Math.max(e.yMax,R)}},ot=(e,t,r=0,n=0,i=0,s="none",...a)=>{for(let o=0;o{e.isConfirmed=!1,t&&n&&n.push(...s),r&&i&&i.push(...s)},hc=(e,t,r,n,i)=>{t=+t||0,r=+r||0,n=+n||0,i=+i||0,n=Math.round(n),i=Math.round(i);const s=n/2,a=i/2,o=t+s,c=r+a,u=t+n,h=r+i,l=4/3*(Math.SQRT2-1),f=l*s,A=l*a;return e.moveTo(o,r).cubicCurveTo(o+f,r,u,c-A,u,c).cubicCurveTo(u,c+A,o+f,h,o,h).cubicCurveTo(o-f,h,t,c+A,t,c).cubicCurveTo(t,c-A,o-f,r,o,r)},fc=(e,t,r,n,i)=>{t=+t||0,r=+r||0,n=+n||0,i=+i||0;const s=Math.round(t+n),a=Math.round(r+i);return e.moveTo(t,r).lineTo(t,a).lineTo(s,a).lineTo(s,r).lineTo(t,r)},dc=(e,t,r,n,i,s,a=NaN)=>{t=+t||0,r=+r||0,n=+n||0,i=+i||0,s=+s||0,a=+a||s,n=Math.round(n),i=Math.round(i),s=Math.round(s),a=Math.round(a);const o=s/2,c=a/2,u=4/3*(Math.SQRT2-1),h=u*o,l=u*c,f=t+o,A=t+n,d=A-o,y=r+c,g=r+i,p=g-c;return e.moveTo(f,r).lineTo(d,r).cubicCurveTo(d+h,r,A,y-l,A,y).lineTo(A,p).cubicCurveTo(A,p+l,d+h,g,d,g).lineTo(f,g).cubicCurveTo(f-h,g,t,p+l,t,p).lineTo(t,y).cubicCurveTo(t,y-l,f-h,r,f,r)},Lt=e=>{if(!e)return[];const t=z();for(let r=0;rl.ratio-f.ratio);for(let l=0;l0&&r>0}beginBitmapFill(t,r=null,n=!0,i=!1){return this._$hasFillEnabled&&this.endFill(),this._$fills||(this._$fills=z()),this._$maxAlpha=1,this._$hasFillEnabled=!0,this._$isBeginning=!0,this._$fills.push(M.BEGIN_PATH),this._$fillType=M.BITMAP_FILL,this._$fillBitmap=new Xt(t,r,n,i),this}beginFill(t=0,r=1){this._$hasFillEnabled&&this.endFill(),this._$fills||(this._$fills=z()),typeof t=="string"&&(t=Or(t)),t=me(t,0,16777215,0),r=me(r,0,1,1),this._$maxAlpha=Math.max(this._$maxAlpha,r),this._$hasFillEnabled=!0,this._$isBeginning=!0,this._$fills.push(M.BEGIN_PATH),this._$fillType=M.FILL_STYLE;const n=t>>>16&255,i=t>>>8&255,s=t&255;return this._$fillColor=n<<24|i<<16|s<<8|r*255,this}beginGradientFill(t,r,n,i,s=null,a="pad",o="rgb",c=0){this._$hasFillEnabled&&this.endFill(),this._$fills||(this._$fills=z());for(let u=0;uthis._$fills.length)return this;switch(this.$recodes||(this.$recodes=z()),(this._$fills[2]!==this._$fills[this._$fills.length-2]||this._$fills[3]!==this._$fills[this._$fills.length-1])&&this._$fills.push(M.LINE_TO,this._$fills[2],this._$fills[3]),this.$recodes.push(...this._$fills),oe(this._$fills),this._$fills=null,this._$fillType){case M.FILL_STYLE:this.$recodes.push(this._$fillType,this._$fillColor>>>24&255,this._$fillColor>>>16&255,this._$fillColor>>>8&255,this._$fillColor&255,M.END_FILL);break;case M.GRADIENT_FILL:this._$fillGradient&&this.$recodes.push(this._$fillType,...this._$fillGradient.toArray());break;case M.BITMAP_FILL:this._$fillBitmap&&this.$recodes.push(this._$fillType,...this._$fillBitmap.toArray());break}return this._$fillType=0,this._$fillColor=0,this._$fillGradient=null,this._$fillBitmap=null,this._$hasFillEnabled=!1,this}endLine(){if(!this._$hasLineEnabled||!this._$lines)return this;switch(this.$recodes||(this.$recodes=z()),this.$recodes.push(...this._$lines),oe(this._$lines),this._$lines=null,this._$lineType){case M.STROKE_STYLE:this.$recodes.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,this._$lineColor>>>24&255,this._$lineColor>>>16&255,this._$lineColor>>>8&255,this._$lineColor&255,M.END_STROKE);break;case M.GRADIENT_STROKE:this._$lineGradient&&this.$recodes.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$lineGradient.toArray());break;case M.BITMAP_STROKE:this._$fillBitmap&&this.$recodes.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$fillBitmap.toArray());break}return this._$lineType=0,this._$lineWidth=0,this._$lineGradient=null,this._$lineColor=0,this._$caps="none",this._$joints="round",this._$miterLimit=0,this._$hasLineEnabled=!1,this}lineBitmapStyle(t,r=null,n=!0,i=!1){return this._$hasLineEnabled?(this._$lines||(this._$lines=z()),this._$maxAlpha=1,this._$hasLineEnabled=!0,this._$isBeginning=!0,this._$lines.push(M.BEGIN_PATH),this._$lineType=M.BITMAP_STROKE,this._$fillBitmap=new Xt(t,r,n,i),this):this}lineGradientStyle(t,r,n,i,s=null,a="pad",o="rgb",c=0){if(!this._$hasLineEnabled)return this;this._$lines||(this._$lines=z());for(let u=0;u>>16&255,c=r>>>8&255,u=r&255;return this._$lineColor=o<<24|c<<16|u<<8|n*255,this._$lineWidth=t,this._$caps=`${i}`,this._$joints=`${s}`,this._$joints==="miter"&&(this._$miterLimit=a),this}lineTo(t,r){return t=+t||0,r=+r||0,this._$positionX===t&&this._$positionY===r?this:(ot(this,this._$hasLineEnabled,this._$positionX,this._$positionY,this._$lineWidth,this._$caps,t,r),ct(this,this._$hasFillEnabled,this._$hasLineEnabled,this._$fills,this._$lines,M.LINE_TO,t,r),this._$positionX=t,this._$positionY=r,this)}moveTo(t,r){t=+t||0,r=+r||0,this._$positionX=t,this._$positionY=r,ot(this,this._$hasLineEnabled,this._$positionX,this._$positionY,this._$lineWidth,this._$caps,t,r);let n=!1;return this._$hasFillEnabled&&this._$fills&&this._$fills[this._$fills.length-3]===M.MOVE_TO&&(n=!0,this._$fills[this._$fills.length-2]=t,this._$fills[this._$fills.length-1]=r),this._$hasLineEnabled&&this._$lines&&this._$lines[this._$lines.length-3]===M.MOVE_TO&&(n=!0,this._$lines[this._$lines.length-2]=t,this._$lines[this._$lines.length-1]=r),n||ct(this,this._$hasFillEnabled,this._$hasLineEnabled,this._$fills,this._$lines,M.MOVE_TO,t,r),this}get buffer(){if(this.isConfirmed&&this._$buffer)return this._$buffer;this._$hasLineEnabled&&this.endLine(),this._$hasFillEnabled&&this.endFill();const t=Lt(this.$recodes);return this._$buffer=new Float32Array(t),oe(t),this.isConfirmed=!0,this._$buffer}set buffer(t){this._$buffer=t,this.isConfirmed=!0,this._$isBeginning=!0,this._$maxAlpha=1}}const Ac=(e,t,r)=>{for(let n=0;n{const i=e.graphics,s=i.xMax-i.xMin,a=i.yMax-i.yMin;if(s<=0||a<=0)return!1;const o=_(e),c=o?T.multiply(r,o):r;t.beginPath(),t.setTransform(c[0],c[1],c[2],c[3],c[4],c[5]);let u=!1;return i.buffer.length?u=Ac(t,i.buffer,n):(t.moveTo(0,0),t.lineTo(s,0),t.lineTo(s,a),t.lineTo(0,a),t.lineTo(0,0),u=t.isPointInPath(n.x,n.y)),c!==r&&T.release(c),u},Yt=(e,t,r,n)=>{const i=Math.ceil(Math.abs(e.xMax-e.xMin)),s=Math.ceil(Math.abs(e.yMax-e.yMin));if(i<=0||s<=0)return!1;const a=_(e),o=a?T.multiply(r,a):r;return t.setTransform(o[0],o[1],o[2],o[3],o[4],o[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),o!==r&&T.release(o),t.isPointInPath(n.x,n.y)},Wt=(e,t,r,n)=>{const i=e.videoWidth,s=e.videoHeight;if(i<=0||s<=0)return!1;const a=_(e),o=a?T.multiply(r,a):r;return t.beginPath(),t.setTransform(o[0],o[1],o[2],o[3],o[4],o[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),o!==r&&T.release(o),t.isPointInPath(n.x,n.y)},He=(e,t,r,n,i=!0)=>{const s=e.children;if(!s.length)return!1;const a=_(e),o=a?T.multiply(r,a):r,c=z(),u=z(),h=io();let l=0,f=0;for(let g=0;gl&&(f=0,l=0),f&&h.set(p.instanceId,f),u.push(p))}}const A=e.mouseChildren&&i;if(e.isSprite&&e.hitArea){const g=He(e.hitArea,t,o,n,A);return g&&A&&e.mouseEnabled&&(e.buttonMode&&e.useHandCursor&&(n.pointer="pointer"),n.hit||(n.hit=e)),g}let d=!1;const y=e.mask;if(y){let g=!1;switch(!0){case y.isContainerEnabled:g=He(y,t,o,n,A);break;case y.isShape:g=Nt(y,t,o,n);break;case y.isText:g=Yt(y,t,o,n);break;case y.isVideo:g=Wt(y,t,o,n);break}if(!g)return!1}for(;u.length;){const g=u.pop();if(!g||g.isMask)continue;if(h.has(g.instanceId)){const $=h.get(g.instanceId);if(!$)continue;const w=c[$];if(!w)continue;let I=!1;switch(!0){case w.isContainerEnabled:I=He(w,t,o,n,A);break;case w.isShape:I=Nt(w,t,o,n);break;case w.isText:I=Yt(w,t,o,n);break;case w.isVideo:I=Wt(w,t,o,n);break}if(!I)continue}let p=!1;switch(!0){case g.isContainerEnabled:p=He(g,t,o,n,A);break;case g.isShape:p=Nt(g,t,o,n);break;case g.isText:p=Yt(g,t,o,n);break;case g.isVideo:p=Wt(g,t,o,n);break}if(p){if(d=!0,!A)break;if(g.isInteractive&&g.mouseEnabled){if(n.pointer==="auto")switch(!0){case g.isText:g.type==="input"&&(n.pointer="text");break;case g.isSprite:g.buttonMode&&g.useHandCursor&&(n.pointer="pointer");break;default:n.pointer="pointer";break}n.hit||(n.hit=g);break}}}return oe(c),oe(u),so(h),o!==r&&T.release(o),d},Ge={x:0,y:0,pointer:"",hit:null},pc=(e,t,r,n=!1)=>{if(n){const h=e.parent,l=h?h.concatenatedMatrix.rawData:xt;switch(Ie.setTransform(1,0,0,1,0,0),Ie.beginPath(),Ge.x=t,Ge.y=r,Ge.hit=null,!0){case e.isContainerEnabled:return He(e,Ie,l,Ge);case e.isShape:return Nt(e,Ie,l,Ge);case e.isText:return Yt(e,Ie,l,Ge);case e.isVideo:return Wt(e,Ie,l,Ge);default:return!1}}const i=tt(e),s=_(e),a=he(i[0],i[1],i[2],i[3],s||xt);k(i);const o=new be(a[0],a[1],Math.abs(a[2]-a[0]),Math.abs(a[3]-a[1]));k(a);const c=e.parent,u=c?c.globalToLocal(new se(t,r)):new se(t,r);return o.containsPoint(u)},mc=e=>{const t=_(e);return t?new T(t[0],t[1],t[2],t[3],t[4],t[5]):new T},gc=e=>{const t=Ve(e);return t?new U(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]):new U};class hr extends nt{instanceId;dictionaryId;isSprite;isInteractive;isContainerEnabled;isTimelineEnabled;isShape;isVideo;isText;placeId;placeObject;characterId;clipDepth;name;startFrame;endFrame;changed;$added;$addedToStage;uniqueKey;$matrix;$colorTransform;$filters;$blendMode;$scaleX;$scaleY;$rotation;$x;$y;$alpha;$cache;_$scale9Grid;_$visible;_$variables;isMask;parent;constructor(){super(),this.instanceId=yi(),this.dictionaryId=-1,this.uniqueKey="",this.isSprite=!1,this.isContainerEnabled=!1,this.isTimelineEnabled=!1,this.isShape=!1,this.isVideo=!1,this.isText=!1,this.isInteractive=!1,this.placeId=-1,this.placeObject=null,this.characterId=-1,this.clipDepth=0,this.name="",this.startFrame=1,this.endFrame=0,this.parent=null,this.isMask=!1,this.changed=!0,this.$added=!1,this.$addedToStage=!1,this.$matrix=null,this.$colorTransform=null,this.$filters=null,this.$blendMode=null,this._$visible=!0,this._$scale9Grid=null,this._$variables=null,this.$x=null,this.$y=null,this.$alpha=null,this.$scaleX=null,this.$scaleY=null,this.$rotation=null,this.$cache=null}get concatenatedMatrix(){return uo(this)}get alpha(){return ho(this)}set alpha(t){fo(this,t)}get blendMode(){return Wo(this)}set blendMode(t){Vo(this,t)}get filters(){return No(this)}set filters(t){Yo(this,t)}get dropTarget(){return lo()}get height(){return sc(this)}set height(t){ac(this,t)}get loaderInfo(){return Dt.has(this)?Dt.get(this):null}get colorTransform(){return gc(this)}set colorTransform(t){this.$colorTransform=t}get matrix(){return mc(this)}set matrix(t){this.$matrix=t}get mouseX(){return this.globalToLocal(bt).x}get mouseY(){return this.globalToLocal(bt).y}get root(){return we.has(this)?we.get(this):null}get rotation(){return this.$rotation===null?Qo(this):this.$rotation}set rotation(t){zo(this,t)}get scale9Grid(){return this._$scale9Grid}set scale9Grid(t){this._$scale9Grid!==t&&(this._$scale9Grid=t,j(this))}get scaleX(){return this.$scaleX===null?Ho(this):this.$scaleX}set scaleX(t){Pi(this,t)}get scaleY(){return this.$scaleY===null?Jo(this):this.$scaleY}set scaleY(t){Ri(this,t)}get visible(){return this._$visible}set visible(t){t=!!t,this._$visible!==t&&(this._$visible=t,j(this))}get width(){return tc(this)}set width(t){rc(this,t)}get x(){return this.$x===null?Zo(this):this.$x}set x(t){qo(this,t)}get y(){return this.$y===null?jo(this):this.$y}set y(t){ec(this,t)}getBounds(t=null){return cc(this,t)}globalToLocal(t){return ic(this,t)}hitTestObject(t){return lc(this,t)}hitTestPoint(t,r,n=!1){return pc(this,t,r,n)}localToGlobal(t){return nc(this,t)}getLocalVariable(t){if(!this._$variables)return null;if(this._$variables.has(t))return this._$variables.get(t)}setLocalVariable(t,r){this._$variables||(this._$variables=new Map),this._$variables.set(t,r)}hasLocalVariable(t){return this._$variables?this._$variables.has(t):!1}deleteLocalVariable(t){this._$variables&&this._$variables.has(t)&&(this._$variables.delete(t),this._$variables.size||(this._$variables=null))}getGlobalVariable(t){return Ue.has(t)?Ue.get(t):null}setGlobalVariable(t,r){Ue.set(t,r)}hasGlobalVariable(t){return Ue.has(t)}deleteGlobalVariable(t){Ue.has(t)&&Ue.delete(t)}clearGlobalVariable(){return Ue.clear()}remove(){oc(this)}$syncLoaderInfo(t){Dt.set(this,t)}}const Di=e=>{const t=e.children;for(let r=0;r{e.$addedToStage||!ge.has(e.instanceId)||(e.$addedToStage=!0,e.willTrigger(x.ADDED_TO_STAGE)&&e.dispatchEvent(new x(x.ADDED_TO_STAGE)))},Ni=e=>{const t=e.children;for(let r=0;r{e.$added||(e.$added=!0,e.willTrigger(x.ADDED)&&e.dispatchEvent(new x(x.ADDED,!0)))},On=(e,t,r=-1)=>{const n=t.parent;n&&n.removeChild(t);const i=e.children;return 0>r?i.push(t):i.splice(r,0,t),e.$container=null,t.parent=e,ge.has(e.instanceId)&&(we.set(t,e.root),ge.add(t.instanceId),t.isContainerEnabled&&Di(t)),bc(t),ge.has(e.instanceId)&&(Li(t),t.isContainerEnabled&&Ni(t)),j(t),t},Yi=e=>{const t=e.children;for(let r=0;r{e.$added&&(e.$added=!1,e.willTrigger(x.REMOVED)&&e.dispatchEvent(new x(x.REMOVED,!0)))},Wi=e=>{!e.$addedToStage||!ge.has(e.instanceId)||(e.$addedToStage=!1,e.willTrigger(x.REMOVED_FROM_STAGE)&&e.dispatchEvent(new x(x.REMOVED_FROM_STAGE)),e.uniqueKey&&O.has(e.uniqueKey)&&O.removeTimer(e.uniqueKey))},un=e=>{const t=e.children;for(let r=0;r{const r=t.parent;if(r&&r.instanceId!==e.instanceId)return;const n=e.children,i=n.indexOf(t);i>-1&&n.splice(i,1),e.$container=null,t.hasEventListener(x.ENTER_FRAME)&&t.removeAllEventListener(x.ENTER_FRAME),t.hasEventListener(V.KEY_DOWN)&&t.removeAllEventListener(V.KEY_DOWN),t.hasEventListener(V.KEY_UP)&&t.removeAllEventListener(V.KEY_UP),xc(t),ge.has(e.instanceId)&&(Wi(t),t.isContainerEnabled&&un(t)),ge.has(e.instanceId)&&(we.delete(t),ge.delete(t.instanceId),t.isVideo&&t.pause(),t.isContainerEnabled&&Yi(t)),t.parent=null,j(e)},Vi=(e,t)=>{const r=e.children;return t in r?r[t]:null},yc=(e,t)=>{const r=Vi(e,t);r&&hn(e,r)},$c=(e,t)=>{if(e.instanceId===t.instanceId)return!0;const r=e.children;for(let n=0;n{if(!t)return null;const r=e.children;for(let n=0;n{const r=e.children.slice();if(r.length)for(let n=0;n{const n=e.getChildIndex(t);if(n===-1||n===r)return;const i=e.children;i.splice(n,1),i.splice(r,0,t),j(e)},Bc=(e,t,r)=>{const n=e.getChildIndex(t),i=e.getChildIndex(r);if(n===-1||i===-1)return;const s=e.children;s[n]=r,s[i]=t,j(e)},Tc=(e,t,r)=>{const n=e.children,i=n[t],s=n[r];!i||!s||(n[t]=s,n[r]=i,j(e))};class fn extends hr{mouseEnabled;isInteractive;constructor(){super(),this.isInteractive=!0,this.mouseEnabled=!0}}class dn extends fn{_$children;_$mask;mouseChildren;$container;isContainerEnabled;constructor(){super(),this.isContainerEnabled=!0,this.mouseChildren=!0,this._$mask=null,this._$children=z(),this.$container=null}get children(){return this._$children}get numChildren(){return this.children.length}get mask(){return this._$mask}set mask(t){t!==this._$mask&&(this._$mask&&(this._$mask.isMask=!1,this._$mask=null),t&&(t.isMask=!0,this._$mask=t),j(this))}addChild(t){return On(this,t)}addChildAt(t,r){return On(this,t,r)}contains(t){return $c(this,t)}getChildAt(t){return Vi(this,t)}getChildByName(t){return vc(this,t)}getChildIndex(t){return this.children.indexOf(t)}removeChild(t){hn(this,t)}removeChildAt(t){yc(this,t)}removeChildren(...t){wc(this,t)}setChildIndex(t,r){Mc(this,t,r)}swapChildren(t,r){Bc(this,t,r)}swapChildrenAt(t,r){Tc(this,t,r)}}class Ki extends nt{name;frame;constructor(t,r){super(),this.name=`${t}`,this.frame=r|0}}class Sc extends nt{id;content;data;url;format;constructor(){super(),this.id=yi(),this.url="",this.content=null,this.data=null,this.format="json"}}const Ic=(e,t=!1,r=null)=>{const n=e.parent?e.parent.globalToLocal(bt):e.globalToLocal(bt);e.$lockCenter=t,e.$offsetX=e.x-n.x,e.$offsetY=e.y-n.y,e.$boundedRect=r,Bi(e)},Cc=e=>{e.$lockCenter=!1,e.$offsetX=0,e.$offsetY=0,e.$boundedRect=null,Bi(null)};class An extends dn{buttonMode;useHandCursor;isSprite;hitArea;_$soundTransform;$offsetX=0;$offsetY=0;$lockCenter=!1;$boundedRect=null;constructor(){super(),this.isSprite=!0,this.buttonMode=!1,this.useHandCursor=!0,this.hitArea=null,this.$offsetX=0,this.$offsetY=0,this.$lockCenter=!1,this.$boundedRect=null,this._$soundTransform=null}get soundTransform(){return this._$soundTransform}set soundTransform(t){this._$soundTransform=t}startDrag(t=!1,r=null){Ic(this,t,r)}stopDrag(){Cc(this)}}const Qi=e=>{e.isBitmap=!1,e.$bitmapBuffer=null,e.graphics.clear(),e.uniqueKey!==""&&O.has(e.uniqueKey)&&(O.removeById(e.uniqueKey),O.$removeIds.push(+e.uniqueKey)),j(e)},Xi=(e,t,r,n)=>{Qi(e),e.isBitmap=!0,e.$bitmapBuffer=n,e.graphics.xMin=0,e.graphics.yMin=0,e.graphics.xMax=t,e.graphics.yMax=r},Fc=(e,t)=>{const r=new Image;r.crossOrigin="anonymous",r.addEventListener("load",()=>{const n=r.width,i=r.height,s=O.getCanvas();s.width=n,s.height=i;const a=s.getContext("2d",{willReadFrequently:!0});a.drawImage(r,0,0,n,i),Xi(e,n,i,new Uint8Array(a.getImageData(0,0,n,i).data)),O.destroy(a),e.hasEventListener(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE))}),r.src=t},Ec=(e,t)=>{const r=e.graphics,n=Math.ceil(Math.abs(t.bounds.xMax-t.bounds.xMin)),i=Math.ceil(Math.abs(t.bounds.yMax-t.bounds.yMin));switch(!0){case t.bitmapId>0:{const a=e.loaderInfo.data?.characters[t.bitmapId];if(!a)break;e.isBitmap=!0,a.imageBuffer||(a.imageBuffer=new Uint8Array(a.buffer),a.buffer=null);const o=Math.ceil(Math.abs(a.bounds.xMax-a.bounds.xMin)),c=Math.ceil(Math.abs(a.bounds.yMax-a.bounds.yMin));if(t.grid){if(t.recodes){const u=t.recodes.slice(0);u.splice(-6,6);const h=new _e(o,c);h.buffer=a.imageBuffer,u.push(M.BITMAP_FILL,h,null,!0,!1,9);const l=Lt(u);r.buffer=new Float32Array(l),oe(u),oe(l)}}else if(n===o&&i===c)e.setBitmapBuffer(Math.ceil(Math.abs(a.bounds.xMax-a.bounds.xMin)),Math.ceil(Math.abs(a.bounds.yMax-a.bounds.yMin)),a.imageBuffer);else{const u=new _e(o,c);if(u.buffer=a.imageBuffer,t.recodes)if(t.recodes[t.recodes.length-10]===M.BITMAP_STROKE){const l=t.recodes.slice(0);l.splice(-5,5),l.push(u,null,!0,!1);const f=Lt(l);r.buffer=new Float32Array(f),oe(l),oe(f)}else r.beginBitmapFill(u).drawRect(0,0,n,i)}}break;case t.inBitmap:{e.isBitmap=!0;const s=t.recodes,a=s[s.length-4];if(n===a.width&&i===a.height)e.setBitmapBuffer(a.width,a.height,a.buffer);else{const o=new _e(a.width,a.height);o.buffer=a.buffer,r.beginBitmapFill(o).drawRect(0,0,n,i)}}break;case"buffer"in t:t.imageBuffer||(t.imageBuffer=new Uint8Array(t.buffer),t.buffer=null),e.setBitmapBuffer(Math.ceil(Math.abs(r.xMax-r.xMin)),Math.ceil(Math.abs(r.yMax-r.yMin)),t.imageBuffer);break;default:t.recodes&&(t.recodeBuffer=new Float32Array(Lt(t.recodes)),oe(t.recodes),t.recodes=null),t.recodeBuffer&&(r.buffer=t.recodeBuffer);break}r.xMin=t.bounds.xMin,r.xMax=t.bounds.xMax,r.yMin=t.bounds.yMin,r.yMax=t.bounds.yMax,t.grid&&(e.scale9Grid=new be(t.grid.x,t.grid.y,t.grid.w,t.grid.h))},Pc=(e,t)=>new Promise(r=>{const n=()=>{e.removeEventListener(x.COMPLETE,n),r()};e.addEventListener(x.COMPLETE,n),e.src=t});class $t extends hr{_$graphics;_$src;isShape;cacheKey;cacheParams;isBitmap;$bitmapBuffer;constructor(){super(),this.isShape=!0,this.cacheKey=0,this.cacheParams=z(0,0,0),this._$graphics=null,this._$src="",this.$bitmapBuffer=null,this.isBitmap=!1}static get namespace(){return"next2d.display.Shape"}get namespace(){return"next2d.display.Shape"}get graphics(){return this._$graphics||(this._$graphics=new M,co.set(this._$graphics,this)),this._$graphics}get src(){return this._$src}set src(t){this._$src!==t&&(this._$src=t,Fc(this,t))}load(t){return Pc(this,t)}get bitmapData(){const t=new _e(this.width,this.height);return this.$bitmapBuffer&&(t.buffer=this.$bitmapBuffer),t}clearBitmapBuffer(){Qi(this)}setBitmapBuffer(t,r,n){Xi(this,t,r,n)}$sync(t,r=null){r&&super.$syncLoaderInfo(r),Ec(this,t)}}let zi=null;const kn=e=>{zi=e},ke=()=>zi,de=document.createElement("textarea");de.tabIndex=-1;let Me="";Me+="position: fixed;";Me+="top: 0;";Me+="left: 0;";Me+="font-size: 16px;";Me+="border: 0;";Me+="resize: none;";Me+="opacity: 0;";Me+="z-index: -1;";Me+="pointer-events: none;";de.setAttribute("style",Me);const _r=document.createElement("canvas");_r.width=_r.height=1;const De=_r.getContext("2d");let Hi=0;const Et=()=>Hi,dt=e=>{Hi=e},Rc=e=>De?(De.fillStyle=e,+`0x${De.fillStyle.slice(1)}`):0,et=e=>isNaN(+e)?Rc(`${e}`):+e,Oc=(e,t=1)=>({R:(e&16711680)>>16,G:(e&65280)>>8,B:e&255,A:t*255}),pt=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)};let Ji;const Ht=()=>Ji,Zi=e=>{Ji=e},Je={x:0,y:0};class ue{align;bold;color;font;italic;leading;leftMargin;letterSpacing;rightMargin;size;underline;constructor(t=null,r=null,n=null,i=null,s=null,a=null,o=null,c=null,u=null,h=null,l=null){this.font=t,this.size=r,this.color=n,this.bold=i,this.italic=s,this.underline=a,this.align=o,this.leftMargin=c,this.rightMargin=u,this.leading=h,this.letterSpacing=l}clone(){return new ue(this.font,this.size,this.color,this.bold,this.italic,this.underline,this.align,this.leftMargin,this.rightMargin,this.leading,this.letterSpacing)}toObject(){return{font:this.font,size:this.size,color:et(this.color),bold:this.bold,italic:this.italic,underline:this.underline,align:this.align,leftMargin:this.leftMargin,rightMargin:this.rightMargin,leading:this.leading,letterSpacing:this.letterSpacing}}}const kc=e=>{e.align="left",e.bold=!1,e.color=0,e.font="Times New Roman",e.italic=!1,e.leading=0,e.leftMargin=0,e.letterSpacing=0,e.rightMargin=0,e.size=12,e.underline=!1},Uc=e=>{let t="";if(e.font&&(t+=`font-family: ${e.font};`),e.size&&(t+=`font-size: ${e.size}px;`),e.color){const r=Oc(et(e.color)),n=r.R.toString(16).padStart(2,"0"),i=r.G.toString(16).padStart(2,"0"),s=r.B.toString(16).padStart(2,"0");t+=`color: #${n}${i}${s};`}return e.bold&&(t+="font-weight: bold;"),e.italic&&(t+="font-style: italic;"),e.underline&&(t+="text-decoration: underline;"),e.align&&(t+=`text-align: ${e.align};`),e.leftMargin&&(t+=`margin-left: ${e.leftMargin}px;`),e.rightMargin&&(t+=`margin-right: ${e.rightMargin}px;`),e.leading&&(t+=`margin-bottom: ${e.leading}px;`),e.letterSpacing&&(t+=`letter-spacing: ${e.letterSpacing}px;`),t};class Gc{_$textWidth;_$textHeight;heightTable;ascentTable;widthTable;textTable;lineTable;constructor(){this._$textWidth=-1,this._$textHeight=-1,this.widthTable=[],this.heightTable=[],this.ascentTable=[],this.textTable=[],this.lineTable=[]}get textWidth(){if(this._$textWidth!==-1)return this._$textWidth;this._$textWidth=0;for(let t=0;t{let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t});function Dc(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=_c.get(e))!==null&&t!==void 0?t:e}function qi(e){const t=typeof atob=="function"?atob(e):typeof Buffer.from=="function"?Buffer.from(e,"base64").toString("binary"):new Buffer(e,"base64").toString("binary"),r=t.length&-2,n=new Uint16Array(r/2);for(let i=0,s=0;i=X.ZERO&&e<=X.NINE}function Yc(e){return e>=X.UPPER_A&&e<=X.UPPER_F||e>=X.LOWER_A&&e<=X.LOWER_F}function Wc(e){return e>=X.UPPER_A&&e<=X.UPPER_Z||e>=X.LOWER_A&&e<=X.LOWER_Z||Dr(e)}function Vc(e){return e===X.EQUALS||Wc(e)}var ne;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(ne||(ne={}));var $e;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})($e||($e={}));class Kc{constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n,this.state=ne.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=$e.Strict,this.runConsumed=0}startEntity(t){this.decodeMode=t,this.state=ne.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(t,r){switch(this.state){case ne.EntityStart:return t.charCodeAt(r)===X.NUM?(this.state=ne.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=ne.NamedEntity,this.stateNamedEntity(t,r));case ne.NumericStart:return this.stateNumericStart(t,r);case ne.NumericDecimal:return this.stateNumericDecimal(t,r);case ne.NumericHex:return this.stateNumericHex(t,r);case ne.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|Gn)===X.LOWER_X?(this.state=ne.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=ne.NumericDecimal,this.stateNumericDecimal(t,r))}stateNumericHex(t,r){for(;r>14;for(;r>7;if(this.runConsumed===0){const c=i&le.JUMP_TABLE;if(t.charCodeAt(r)!==c)return this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}for(;this.runConsumed=t.length)return-1;const c=this.runConsumed-1,u=n[this.treeIndex+1+(c>>1)],h=c%2===0?u&255:u>>8&255;if(t.charCodeAt(r)!==h)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(o>>1),i=n[this.treeIndex],s=(i&le.VALUE_LENGTH)>>14}if(r>=t.length)break;const a=t.charCodeAt(r);if(a===X.SEMI&&s!==0&&(i&le.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,s,this.consumed+this.excess);if(this.treeIndex=Qc(n,i,this.treeIndex+Math.max(1,s),a),this.treeIndex<0)return this.result===0||this.decodeMode===$e.Attribute&&(s===0||Vc(a))?0:this.emitNotTerminatedNamedEntity();if(i=n[this.treeIndex],s=(i&le.VALUE_LENGTH)>>14,s!==0){if(a===X.SEMI)return this.emitNamedEntityData(this.treeIndex,s,this.consumed+this.excess);this.decodeMode!==$e.Strict&&(i&le.FLAG13)===0&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}r++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var t;const{result:r,decodeTree:n}=this,i=(n[r]&le.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,i,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){const{decodeTree:i}=this;return this.emitCodePoint(r===1?i[t]&~(le.VALUE_LENGTH|le.FLAG13):i[t+1],n),r===3&&this.emitCodePoint(i[t+2],n),n}end(){var t;switch(this.state){case ne.NamedEntity:return this.result!==0&&(this.decodeMode!==$e.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case ne.NumericDecimal:return this.emitNumericEntity(0,2);case ne.NumericHex:return this.emitNumericEntity(0,3);case ne.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case ne.EntityStart:return 0}}}function Qc(e,t,r,n){const i=(t&le.BRANCH_LENGTH)>>7,s=t&le.JUMP_TABLE;if(i===0)return s!==0&&n===s?r:-1;if(s){const u=n-s;return u<0||u>=i?-1:e[r+u]-1}const a=i+1>>1;let o=0,c=i-1;for(;o<=c;){const u=o+c>>>1,h=u>>1,f=e[r+h]>>(u&1)*8&255;if(fn)c=u-1;else return e[r+a+u]}return-1}var E;(function(e){e[e.Tab=9]="Tab",e[e.NewLine=10]="NewLine",e[e.FormFeed=12]="FormFeed",e[e.CarriageReturn=13]="CarriageReturn",e[e.Space=32]="Space",e[e.ExclamationMark=33]="ExclamationMark",e[e.Number=35]="Number",e[e.Amp=38]="Amp",e[e.SingleQuote=39]="SingleQuote",e[e.DoubleQuote=34]="DoubleQuote",e[e.Dash=45]="Dash",e[e.Slash=47]="Slash",e[e.Zero=48]="Zero",e[e.Nine=57]="Nine",e[e.Semi=59]="Semi",e[e.Lt=60]="Lt",e[e.Eq=61]="Eq",e[e.Gt=62]="Gt",e[e.Questionmark=63]="Questionmark",e[e.UpperA=65]="UpperA",e[e.LowerA=97]="LowerA",e[e.UpperF=70]="UpperF",e[e.LowerF=102]="LowerF",e[e.UpperZ=90]="UpperZ",e[e.LowerZ=122]="LowerZ",e[e.LowerX=120]="LowerX",e[e.OpeningSquareBracket=91]="OpeningSquareBracket"})(E||(E={}));var m;(function(e){e[e.Text=1]="Text",e[e.BeforeTagName=2]="BeforeTagName",e[e.InTagName=3]="InTagName",e[e.InSelfClosingTag=4]="InSelfClosingTag",e[e.BeforeClosingTagName=5]="BeforeClosingTagName",e[e.InClosingTagName=6]="InClosingTagName",e[e.AfterClosingTagName=7]="AfterClosingTagName",e[e.BeforeAttributeName=8]="BeforeAttributeName",e[e.InAttributeName=9]="InAttributeName",e[e.AfterAttributeName=10]="AfterAttributeName",e[e.BeforeAttributeValue=11]="BeforeAttributeValue",e[e.InAttributeValueDq=12]="InAttributeValueDq",e[e.InAttributeValueSq=13]="InAttributeValueSq",e[e.InAttributeValueNq=14]="InAttributeValueNq",e[e.BeforeDeclaration=15]="BeforeDeclaration",e[e.InDeclaration=16]="InDeclaration",e[e.InProcessingInstruction=17]="InProcessingInstruction",e[e.BeforeComment=18]="BeforeComment",e[e.CDATASequence=19]="CDATASequence",e[e.InSpecialComment=20]="InSpecialComment",e[e.InCommentLike=21]="InCommentLike",e[e.BeforeSpecialS=22]="BeforeSpecialS",e[e.BeforeSpecialT=23]="BeforeSpecialT",e[e.SpecialStartSequence=24]="SpecialStartSequence",e[e.InSpecialTag=25]="InSpecialTag",e[e.InEntity=26]="InEntity"})(m||(m={}));function Se(e){return e===E.Space||e===E.NewLine||e===E.Tab||e===E.FormFeed||e===E.CarriageReturn}function Pt(e){return e===E.Slash||e===E.Gt||Se(e)}function Xc(e){return e>=E.LowerA&&e<=E.LowerZ||e>=E.UpperA&&e<=E.UpperZ}var ve;(function(e){e[e.NoValue=0]="NoValue",e[e.Unquoted=1]="Unquoted",e[e.Single=2]="Single",e[e.Double=3]="Double"})(ve||(ve={}));const te={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97]),XmpEnd:new Uint8Array([60,47,120,109,112])};class zc{constructor({xmlMode:t=!1,decodeEntities:r=!0},n){this.cbs=n,this.state=m.Text,this.buffer="",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=m.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=t,this.decodeEntities=r,this.entityDecoder=new Kc(t?Nc:Lc,(i,s)=>this.emitCodePoint(i,s))}reset(){this.state=m.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=m.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(t){this.offset+=this.buffer.length,this.buffer=t,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=m.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&t===E.Amp&&this.startEntity()}stateSpecialStartSequence(t){const r=this.sequenceIndex===this.currentSequence.length;if(!(r?Pt(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.isSpecial=!1;else if(!r){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=m.InTagName,this.stateInTagName(t)}stateInSpecialTag(t){if(this.sequenceIndex===this.currentSequence.length){if(t===E.Gt||Se(t)){const r=this.index-this.currentSequence.length;if(this.sectionStart=0)this.state=this.baseState,r===0&&(this.index-=1);else{if(t=t||(this.state===m.InCommentLike?this.currentSequence===te.CdataEnd?this.cbs.oncdata(this.sectionStart,t,0):this.cbs.oncomment(this.sectionStart,t,0):this.state===m.InTagName||this.state===m.BeforeAttributeName||this.state===m.BeforeAttributeValue||this.state===m.AfterAttributeName||this.state===m.InAttributeName||this.state===m.InAttributeValueSq||this.state===m.InAttributeValueDq||this.state===m.InAttributeValueNq||this.state===m.InClosingTagName||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,r){this.baseState!==m.Text&&this.baseState!==m.InSpecialTag?(this.sectionStart0&&a.has(this.stack[0]);){const o=this.stack.shift();(n=(r=this.cbs).onclosetag)===null||n===void 0||n.call(r,o,!0)}this.isVoidElement(t)||(this.stack.unshift(t),this.htmlMode&&(Nn.has(t)?this.foreignContext.unshift(!0):Yn.has(t)&&this.foreignContext.unshift(!1))),(s=(i=this.cbs).onopentagname)===null||s===void 0||s.call(i,t),this.cbs.onopentag&&(this.attribs={})}endOpenTag(t){var r,n;this.startIndex=this.openTagStart,this.attribs&&((n=(r=this.cbs).onopentag)===null||n===void 0||n.call(r,this.tagname,this.attribs,t),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(t){this.endIndex=t,this.endOpenTag(!1),this.startIndex=t+1}onclosetag(t,r){var n,i,s,a,o,c,u,h;this.endIndex=r;let l=this.getSlice(t,r);if(this.lowerCaseTagNames&&(l=l.toLowerCase()),this.htmlMode&&(Nn.has(l)||Yn.has(l))&&this.foreignContext.shift(),this.isVoidElement(l))this.htmlMode&&l==="br"&&((a=(s=this.cbs).onopentagname)===null||a===void 0||a.call(s,"br"),(c=(o=this.cbs).onopentag)===null||c===void 0||c.call(o,"br",{},!0),(h=(u=this.cbs).onclosetag)===null||h===void 0||h.call(u,"br",!1));else{const f=this.stack.indexOf(l);if(f!==-1)for(let A=0;A<=f;A++){const d=this.stack.shift();(i=(n=this.cbs).onclosetag)===null||i===void 0||i.call(n,d,A!==f)}else this.htmlMode&&l==="p"&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=r+1}onselfclosingtag(t){this.endIndex=t,this.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=t+1):this.onopentagend(t)}closeCurrentTag(t){var r,n;const i=this.tagname;this.endOpenTag(t),this.stack[0]===i&&((n=(r=this.cbs).onclosetag)===null||n===void 0||n.call(r,i,!t),this.stack.shift())}onattribname(t,r){this.startIndex=t;const n=this.getSlice(t,r);this.attribname=this.lowerCaseAttributeNames?n.toLowerCase():n}onattribdata(t,r){this.attribvalue+=this.getSlice(t,r)}onattribentity(t){this.attribvalue+=Un(t)}onattribend(t,r){var n,i;this.endIndex=r,(i=(n=this.cbs).onattribute)===null||i===void 0||i.call(n,this.attribname,this.attribvalue,t===ve.Double?'"':t===ve.Single?"'":t===ve.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(t){const r=t.search(Zc);let n=r<0?t:t.substr(0,r);return this.lowerCaseTagNames&&(n=n.toLowerCase()),n}ondeclaration(t,r){this.endIndex=r;const n=this.getSlice(t,r);if(this.cbs.onprocessinginstruction){const i=this.getInstructionName(n);this.cbs.onprocessinginstruction(`!${i}`,`!${n}`)}this.startIndex=r+1}onprocessinginstruction(t,r){this.endIndex=r;const n=this.getSlice(t,r);if(this.cbs.onprocessinginstruction){const i=this.getInstructionName(n);this.cbs.onprocessinginstruction(`?${i}`,`?${n}`)}this.startIndex=r+1}oncomment(t,r,n){var i,s,a,o;this.endIndex=r,(s=(i=this.cbs).oncomment)===null||s===void 0||s.call(i,this.getSlice(t,r-n)),(o=(a=this.cbs).oncommentend)===null||o===void 0||o.call(a),this.startIndex=r+1}oncdata(t,r,n){var i,s,a,o,c,u,h,l,f,A;this.endIndex=r;const d=this.getSlice(t,r-n);!this.htmlMode||this.options.recognizeCDATA?((s=(i=this.cbs).oncdatastart)===null||s===void 0||s.call(i),(o=(a=this.cbs).ontext)===null||o===void 0||o.call(a,d),(u=(c=this.cbs).oncdataend)===null||u===void 0||u.call(c)):((l=(h=this.cbs).oncomment)===null||l===void 0||l.call(h,`[CDATA[${d}]]`),(A=(f=this.cbs).oncommentend)===null||A===void 0||A.call(f)),this.startIndex=r+1}onend(){var t,r;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let n=0;n=this.buffers[0].length;)this.shiftBuffer();let n=this.buffers[0].slice(t-this.bufferOffset,r-this.bufferOffset);for(;r-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),n+=this.buffers[0].slice(0,r-this.bufferOffset);return n}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(t){var r,n;if(this.ended){(n=(r=this.cbs).onerror)===null||n===void 0||n.call(r,new Error(".write() after done!"));return}this.buffers.push(t),this.tokenizer.running&&(this.tokenizer.write(t),this.writeIndex++)}end(t){var r,n;if(this.ended){(n=(r=this.cbs).onerror)===null||n===void 0||n.call(r,new Error(".end() after done!"));return}t&&this.write(t),this.ended=!0,this.tokenizer.end()}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex0?this.children[this.children.length-1]:null}get childNodes(){return this.children}set childNodes(t){this.children=t}}class rs extends mn{constructor(){super(...arguments),this.type=G.CDATA}get nodeType(){return 4}}class Nr extends mn{constructor(){super(...arguments),this.type=G.Root}get nodeType(){return 9}}class ns extends mn{constructor(t,r,n=[],i=t==="script"?G.Script:t==="style"?G.Style:G.Tag){super(n),this.name=t,this.attribs=r,this.type=i}get nodeType(){return 1}get tagName(){return this.name}set tagName(t){this.name=t}get attributes(){return Object.keys(this.attribs).map(t=>{var r,n;return{name:t,value:this.attribs[t],namespace:(r=this["x-attribsNamespace"])===null||r===void 0?void 0:r[t],prefix:(n=this["x-attribsPrefix"])===null||n===void 0?void 0:n[t]}})}}function el(e){return jc(e)}function tl(e){return e.type===G.CDATA}function rl(e){return e.type===G.Text}function nl(e){return e.type===G.Comment}function il(e){return e.type===G.Directive}function sl(e){return e.type===G.Root}function is(e,t=!1){let r;if(rl(e))r=new Lr(e.data);else if(nl(e))r=new es(e.data);else if(el(e)){const n=t?Cr(e.children):[],i=new ns(e.name,{...e.attribs},n);n.forEach(s=>s.parent=i),e.namespace!=null&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]={...e["x-attribsNamespace"]}),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]={...e["x-attribsPrefix"]}),r=i}else if(tl(e)){const n=t?Cr(e.children):[],i=new rs(n);n.forEach(s=>s.parent=i),r=i}else if(sl(e)){const n=t?Cr(e.children):[],i=new Nr(n);n.forEach(s=>s.parent=i),e["x-mode"]&&(i["x-mode"]=e["x-mode"]),r=i}else if(il(e)){const n=new ts(e.name,e.data);e["x-name"]!=null&&(n["x-name"]=e["x-name"],n["x-publicId"]=e["x-publicId"],n["x-systemId"]=e["x-systemId"]),r=n}else throw new Error(`Not implemented yet: ${e.type}`);return r.startIndex=e.startIndex,r.endIndex=e.endIndex,e.sourceCodeLocation!=null&&(r.sourceCodeLocation=e.sourceCodeLocation),r}function Cr(e){const t=e.map(r=>is(r,!0));for(let r=1;r{let t="";return e.italic&&(t="italic "),e.bold&&(t+="bold "),`${t}${e.size}px '${e.font}',sans-serif`},Yr=(e,t)=>{dt(0);const r=e.lineTable.length;De.font=ss(t);const n=De.measureText(""),i={mode:"break",text:"",x:0,y:0,w:0,h:n.fontBoundingBoxAscent+n.fontBoundingBoxDescent,line:r,textFormat:t.toObject()};e.heightTable[r]=0,e.ascentTable[r]=0,e.widthTable[r]=0,e.lineTable.push(i),e.textTable.push(i)},cl=e=>{const t=e.heightTable.length-1;for(let r=1;r0)continue;const i=e.lineTable[r];i&&(e.heightTable[r]=i.h=e.heightTable[r-1])}},as=e=>{let t=0;return e.leftMargin&&(t+=e.leftMargin),e.rightMargin&&(t+=e.rightMargin),t},ll=(e,t,r,n)=>{let i=r.lineTable.length-1;const s=n.width-as(t)-4;for(let a=0;as){dt(l),i++,u.line=i;const A={mode:"wrap",text:"",x:0,y:0,w:0,h:0,line:i,textFormat:o.toObject()};let d=1,y=!0;const g=/[0-9a-zA-Z?!;:.,?!。、;:〜]/g;for(;;){const p=r.textTable.length-d;if(0>=p){y=!1,d=0;break}const $=r.textTable[p];if(!$){y=!1,d=0;break}if($.mode!=="text"){y=!1;break}if($.text===" "){d--;break}if(!$.text.match(g)){d--;break}d++}if(r.widthTable[i]=0,r.heightTable[i]=0,r.ascentTable[i]=0,d>0&&y){const p=r.textTable.length-d;r.textTable.splice(p,0,A),r.lineTable.push(A);const $=i-1;r.widthTable[$]=0,r.heightTable[$]=0,r.ascentTable[$]=0;for(let w=0;w{const t=e.trim().split(";"),r=[];for(let n=0;n{for(let n=0;nt.size&&(t.size=1));break;case"color":t.color=et(i.value);break;case"letterSpacing":t.letterSpacing=parseInt(i.value);break;case"leading":t.leading=parseInt(i.value);break;case"leftMargin":t.leftMargin=parseInt(i.value);break;case"rightMargin":t.rightMargin=parseInt(i.value);break;case"underline":t.underline=!0;break;case"bold":t.bold=!0;break;case"italic":t.italic=!0;break}}},Vr=(e,t,r,n)=>{for(let i=0;i{const n=new Gc;if(!e)return n;const i=e.trim().replace(/\r?\n/g,"").replace(/\t/g,""),s=t.clone();return r.subFontSize&&r.subFontSize>0&&s.size&&(s.size-=r.subFontSize,1>s.size&&(s.size=1)),Yr(n,s),Vr(ol(i),s,n,r),cl(n),n},H=(e,t=0)=>(e.$textData||(e.$textData=hl(e.htmlText,e.defaultTextFormat,{width:e.width,multiline:e.multiline,wordWrap:e.wordWrap,subFontSize:t,textFormats:e.$textFormats})),e.$textData),K=e=>{e.changed=!0;const t=e.parent;t&&!t.changed&&K(t)},Kr=e=>{e.$textData=null,K(e),e.uniqueKey!==""&&O.has(e.uniqueKey)&&(O.removeById(e.uniqueKey),O.$removeIds.push(+e.uniqueKey))},fl=e=>{if(K(e),e.autoSize==="none"){e.xMin=e.bounds.xMin,e.yMin=e.bounds.yMin,e.xMax=e.bounds.xMax,e.yMax=e.bounds.yMax;return}const t=e.defaultTextFormat,r=e.textWidth+4+as(t);if(e.wordWrap)e.xMin=e.bounds.xMin,e.xMax=e.bounds.xMax;else switch(e.autoSize){case"left":e.xMax=r+e.xMin;break;case"center":e.xMax=r+e.xMin;break;case"right":e.xMax=e.bounds.xMax-(e.bounds.xMax-e.bounds.xMin-(r-e.bounds.xMin));break}e.yMax=e.textHeight+e.bounds.yMin+4},dl=e=>{let t=0;const r=H(e);for(let i=0;in&&e.textWidth+4>e.width;)Kr(e),H(e,n++);if(e.height&&e.textHeight)for(;t>n&&e.textHeight+4>e.height;)Kr(e),H(e,n++);K(e)},Be=e=>{Kr(e),H(e),e.autoSize==="none"&&e.autoFontSize&&dl(e),fl(e)},Al=(e,t)=>{const r=H(e);if(2>r.textTable.length)return;let n=2,i=0;for(let f=1;f=t){i=f;break}A.mode==="break"&&(d=!0,n=2),d&&i++}const s=r.textTable[i];if(!s)return;e.$scrollX=e.$scrollY=0;const a=s.line;let o=0;for(let f=0;f<=a;++f)o+=r.heightTable[f];const c=Math.abs(e.yMax-e.yMin);let u=0;for(let f=a;f>-1;--f){const A=r.heightTable[f];if(cc){const f=(e.textHeight-c)/c;e.$scrollY=Math.max(0,Math.min((o-u)/f,c))}const h=Math.abs(e.xMax-e.xMin);let l=0;for(let f=i;f>0;--f){const A=r.textTable[f];if(A.mode==="text"){if(hh){const f=(e.textWidth-h)/h;e.$scrollX=Math.max(0,Math.min((n-l)/f,h+.5))}K(e)},fe=()=>{const e=Ht();e!==void 0&&clearTimeout(e),Zi(void 0)},pl=window.devicePixelRatio,ml=e=>{const t=e.localToGlobal(new se),r=e.$textData;if(r){const i=r.textTable[e.focusIndex];if(i){for(let a=e.focusIndex-1;a>-1;--a){const o=r.textTable[a];if(!o||o.line!==i.line)break;t.x+=o.w}const s=i.mode==="break"?i.line-1:i.line;for(let a=0;a{e.focusVisible=!e.focusVisible,K(e),Zi(setTimeout(()=>pe(e),500)),ml(e)},gl=(e,t)=>{e.willTrigger(t)&&e.dispatchEvent(new Ne(t)),de.value="",e.focus?(setTimeout(()=>{de.focus()},300),Ht()===void 0&&(e.focusIndex===-1&&(e.focusIndex=1,e.selectIndex=-1),pe(e))):(e.focusIndex=-1,e.selectIndex=-1,e.focusVisible=!1,fe(),de.blur()),K(e)},bl=(e,t,r,n)=>e/n*r+t,xl=(e,t,r,n)=>(e/=n)*e*r+t,yl=(e,t,r,n)=>-(e/=n)*(e-2)*r+t,$l=(e,t,r,n)=>(e/=n/2)<1?e*e*r/2+t:-((e-=1)*(e-2)-1)*r/2+t,vl=(e,t,r,n)=>(e/=n)*e*e*r+t,wl=(e,t,r,n)=>(e/=n,(--e*e*e+1)*r+t),Ml=(e,t,r,n)=>(e/=n/2)<1?e*e*e*r/2+t:((e-=2)*e*e+2)*r/2+t,Bl=(e,t,r,n)=>(e/=n)*e*e*e*r+t,Tl=(e,t,r,n)=>(e/=n,(--e*e*e*e-1)*-r+t),Sl=(e,t,r,n)=>(e/=n/2)<1?e*e*e*e*r/2+t:((e-=2)*e*e*e-2)*-r/2+t,Il=(e,t,r,n)=>(e/=n)*e*e*e*e*r+t,Cl=(e,t,r,n)=>(e/=n,(--e*e*e*e*e+1)*r+t),Fl=(e,t,r,n)=>(e/=n/2)<1?e*e*e*e*e*r/2+t:((e-=2)*e*e*e*e+2)*r/2+t,El=(e,t,r,n)=>-r*Math.cos(e/n*(Math.PI/2))+r+t,Pl=(e,t,r,n)=>r*Math.sin(e/n*(Math.PI/2))+t,Rl=(e,t,r,n)=>-r/2*(Math.cos(Math.PI*e/n)-1)+t,Ol=(e,t,r,n)=>r*Math.pow(2,10*(e/n-1))+t,kl=(e,t,r,n)=>r*(-Math.pow(2,-10*e/n)+1)+t,Ul=(e,t,r,n)=>(e/=n/2)<1?r/2*Math.pow(2,10*(e-1))+t:r/2*(-Math.pow(2,-10*(e-1))+2)+t,Gl=(e,t,r,n)=>(1-Math.sqrt(1-(e/=n)*e))*r+t,_l=(e,t,r,n)=>(e/=n,Math.sqrt(1- --e*e)*r+t),Dl=(e,t,r,n)=>(e/=n*2)<1?(Math.sqrt(1-e*e)-1)/-2*r+t:(Math.sqrt(1-(e-=2)*e)+1)/2*r+t,Ll=(e,t,r,n)=>(2.70158*(e/=n)*e*e-1.70158*e*e)*r+t,Nl=(e,t,r,n)=>(1+2.70158*Math.pow((e/=n)-1,3)+1.70158*Math.pow(e-1,2))*r+t,Yl=(e,t,r,n)=>{let i=1.70158;return(e/=n/2)<1?e*e*(((i*=1.525)+1)*e-i)*r/2+t:((e-=2)*e*(((i*=1.525)+1)*e+i)+2)*r/2+t},Wl=(e,t,r,n)=>(e/=n)===0?t:e===1?r+t:-Math.pow(2,(e*=10)-10)*Math.sin((e-10.75)*(2*Math.PI/3))*r+t,Vl=(e,t,r,n)=>(e/=n)===0?t:e===1?r+t:(Math.pow(2,-10*e)*Math.sin((e*10-.75)*(2*Math.PI/3))+1)*r+t,Kl=(e,t,r,n)=>(e/=n)===0?t:e===1?r+t:e<.5?-(Math.pow(2,20*e-10)*Math.sin((20*e-11.125)*(2*Math.PI/4.5)))/2*r+t:(Math.pow(2,-20*e+10)*Math.sin((20*e-11.125)*(2*Math.PI/4.5))/2+1)*r+t,Ql=(e,t,r,n)=>(e/=n)<1/2.75?7.5625*e*e*r+t:e<2/2.75?(7.5625*(e-=1.5/2.75)*e+.75)*r+t:e<2.5/2.75?(7.5625*(e-=2.25/2.75)*e+.9375)*r+t:(7.5625*(e-=2.625/2.75)*e+.984375)*r+t,Xl=(e,t,r,n)=>r-Ye.outBounce(n-e,0,r,n)+t,zl=(e,t,r,n)=>e{cancelAnimationFrame(e.$timerId),e.hasEventListener(ye.STOP)&&e.dispatchEvent(new ye(ye.STOP)),e.entries=null,e.stopFlag=!0},os=e=>{const t=[];for(const[r,n]of Object.entries(e))t.push({name:r,value:typeof n=="number"?n:os(n)});return t},cs=(e,t,r,n,i)=>{for(let s=0;se.currentTime?t[o]=e.ease(e.currentTime,c,n[o]-c,e.duration):t[o]=n[o]}},ls=(e,t)=>e.stopFlag||!e.entries?-1:(e.currentTime=(t-e.startTime)/1e3,cs(e,e.target,e.from,e.to,e.entries),e.hasEventListener(ye.UPDATE)&&e.dispatchEvent(new ye(ye.UPDATE)),e.currentTime>=e.duration?(e.hasEventListener(ye.COMPLETE)&&e.dispatchEvent(new ye(ye.COMPLETE)),e.nextJob&&e.nextJob.start(),-1):requestAnimationFrame(r=>{ls(e,r)})),Vn=e=>{e.stopFlag||(e.entries=os(e.from),e.entries&&(e.startTime=performance.now(),e.$timerId=ls(e,e.startTime)))},Jl=e=>{cancelAnimationFrame(e.$timerId),e.stopFlag=!1,e.delay?setTimeout(()=>{Vn(e)},e.delay*1e3):Vn(e)};class Zl extends nt{target;entries;startTime;stopFlag;$timerId;delay;duration;ease;from;to;currentTime;nextJob;constructor(t,r,n,i=0,s=1,a=null){super(),this.target=t,this.from=r,this.to=n,this.delay=i,this.duration=s,this.ease=a||Ye.linear,this.currentTime=0,this.nextJob=null,this.entries=null,this.startTime=0,this.stopFlag=!1,this.$timerId=-1}chain(t){return this.nextJob=t,t}start(){Jl(this)}stop(){Hl(this)}}class gn{static add(t,r,n,i=0,s=1,a=null){return new Zl(t,r,n,i,s,a)}}const ql=(e,t)=>{if(!e.scrollEnabled||e.autoSize!=="none"||e.yScrollShape.hasLocalVariable("job"))return;const r=e.width;if(t=pt(t,0,r,0),e.scrollX!==t){if(e.textWidth>r){K(e);const n=e.xScrollShape;n.width=r*r/e.textWidth;const i=e.parent;if(i){n.hasLocalVariable("job")&&n.getLocalVariable("job").stop(),n.alpha=.9,n.x=e.x+1+(r-1-n.width)/(r-1)*(t-1),n.y=e.y+e.height-n.height-.5,i.addChildAt(n,i.getChildIndex(e)+1);const s=gn.add(n,{alpha:.9},{alpha:0},.5,.2,Ye.outQuad);s.addEventListener(x.COMPLETE,a=>{const o=a.target.target;o.deleteLocalVariable("job"),o.parent&&o.parent.removeChild(o)}),s.start(),n.setLocalVariable("job",s)}e.$scrollX=t}e.willTrigger(x.SCROLL)&&e.dispatchEvent(new x(x.SCROLL,!0))}},jl=(e,t)=>{if(!e.scrollEnabled||e.autoSize!=="none"||!e.multiline&&!e.wordWrap||e.xScrollShape.hasLocalVariable("job"))return;const r=e.height;if(t=pt(t,0,r,0),e.scrollY!==t){if(e.textHeight>r){K(e);const n=e.yScrollShape;n.height=r*r/e.textHeight;const i=e.parent;if(i){n.hasLocalVariable("job")&&n.getLocalVariable("job").stop(),n.alpha=.9,n.x=e.x+e.width-n.width-.5,n.y=e.y+.5+(r-1-n.height)/(r-1)*(t-1),i.addChildAt(n,i.getChildIndex(e)+1);const s=gn.add(n,{alpha:.9},{alpha:0},.5,.2,Ye.outQuad);s.addEventListener(x.COMPLETE,a=>{const o=a.target.target;o.deleteLocalVariable("job"),o.parent&&o.parent.removeChild(o)}),s.start(),n.setLocalVariable("job",s),e.$scrollY=t}}e.willTrigger(x.SCROLL)&&e.dispatchEvent(new x(x.SCROLL,!0))}},eu=e=>{let t="";const r=H(e);for(let n=1;n{let r="";const n=H(e);for(let i=1;it)break;s.line===t&&s.mode==="text"&&(r+=s.text)}}return r},ru=(e,t,r,n)=>{if(0>r||r>n)return;const i=e.text,s=r?i.slice(0,r):"";e.text=s+t+i.slice(n,i.length)},nu=async e=>{if(e.focusIndex===-1||e.selectIndex===-1)return;let t="";const r=Math.min(e.focusIndex,e.selectIndex),n=Math.max(e.focusIndex,e.selectIndex)+1,i=H(e);for(let s=r;s{const t=await navigator.clipboard.readText();t===""||e.focusIndex===-1||e.insertText(t)},bn=e=>{if(e.compositionStartIndex>-1)return;let t=0,r=0;if(e.selectIndex>-1)t=Math.min(e.focusIndex,e.selectIndex),r=Math.max(e.focusIndex,e.selectIndex)+1,e.focusIndex=t;else{if(2>e.focusIndex)return;e.focusIndex--}const n=H(e),i=n.textTable[e.focusIndex];i&&i.mode==="wrap"&&e.focusIndex--;const s=[];let a="";for(let o=1;oo))switch(c.mode){case"break":s.push(new ue(...Object.values(c.textFormat))),a+=` +`;break;case"text":s.push(new ue(...Object.values(c.textFormat))),a+=c.text;break;default:continue}}if(n.textTable.length===e.focusIndex&&(s.pop(),a=a.slice(0,-1)),e.selectIndex=-1,!a)e.text="",e.focusIndex=1;else{const o=e.textWidth,c=e.textHeight;if(e.$textFormats=s,e.text=a,e.scrollX>0){const u=e.textWidth,h=e.width;switch(!0){case h>u:e.$scrollX=0;break;case o!==u:e.$scrollX-=(o-u)/(u/h);break}}if(e.scrollY>0){const u=e.textHeight,h=e.height;switch(!0){case h>u:e.$scrollY=0;break;case c!==u:e.$scrollY-=(c-u)/(u/h);break}}e.$textFormats=null}},us=(e,t)=>{if(e.focusIndex===-1||e.compositionStartIndex>-1)return;e.selectIndex>-1&&bn(e);const r=H(e);if(2>r.textTable.length){e.focusIndex=2,e.appendText(t);return}const n=[];let i="";for(let s=1;s{if(e.selectIndex===-1)return;const t=H(e);if(2>t.textTable.length)return;const r=t.textTable[e.selectIndex];if(!r)return;const n=r.mode==="text"?r.line:r.line-1,i=e.height,s=(e.textHeight-i)/i;let a=-e.scrollY*s-2,o=0;for(let d=0;di));++d)o++;a=-e.scrollY*s-2;let c=0;for(let d=0;d0));++d)c++;c>=r.line&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=t.heightTable[r.line]/s),r.line>=o&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=t.heightTable[r.line]/s);const u=e.width,h=(e.textWidth-u)/u;let l=2,f=e.scrollX*h-2+u;for(let d=1;e.selectIndex>=d;++d){const y=t.textTable[d];if(!y||y.line>n)break;if(y.line===n&&(e.selectIndex!==d&&(l+=y.w),f-=y.w,!(f>0))){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX+=y.w/h;break}}e.scrollX*h-2>l&&(e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((l-2)/e.textWidth))},su=(e,t,r,n=!1)=>{if(e.type!=="input")return;const i=H(e);if(2>i.textTable.length){e.focusIndex=1,e.selectIndex=-1,Ht()===void 0&&pe(e);return}const s=e.width,a=e.height;let o=0;e.scrollX>0&&(o+=e.scrollX*(e.textWidth-s)/s);let c=0;e.scrollY>0&&(c+=e.scrollY*(e.textHeight-a)/a);const u=e.globalToLocal(new se(t,r)),h=u.x+o,l=u.y+c;let f=2,A=2,d=A+i.heightTable[0];for(let y=1;yf&&l>A&&d>l&&s>h){const p=y;n?e.selectIndex!==p&&(e.selectIndex=p,e.focusVisible&&(e.focusVisible=!1,fe()),Kn(e),K(e)):(e.focusIndex!==p||e.selectIndex>-1)&&(e.focusIndex=p,e.selectIndex=-1,K(e));return}f=2,A+=i.heightTable[g.line-1],d=A+i.heightTable[g.line];break;case"text":if(h>f&&l>A&&d>l&&f+g.w>h){let p=y;if(n)e.focusIndex>p?e.focusIndex===p+1?f+g.w/2h&&(p=-1):f+g.w/2>h&&(p-=1),e.selectIndex!==p&&(e.selectIndex=p,e.selectIndex>-1&&(e.focusVisible=!1,fe()),Kn(e),K(e));else{if(f+g.w/2-1)&&(e.focusIndex=p,e.selectIndex=-1,K(e))}return}if(y===i.textTable.length-1&&h>f&&l>A&&d>l&&s>h){const p=i.textTable.length;n?e.selectIndex!==p&&(e.selectIndex=p,e.focusVisible&&(e.focusVisible=!1,fe()),K(e)):(e.focusIndex!==p||e.selectIndex>-1)&&(e.focusIndex=p,e.selectIndex=-1,K(e));return}f+=g.w;break}if(!n)e.focusIndex=i.textTable.length,e.selectIndex=-1,Ht()===void 0?pe(e):K(e);else{let p=0;for(let $=0;i.heightTable.length>$;++$)p+=i.heightTable[$];(l>p||2>l)&&(e.selectIndex=2>l?1:i.textTable.length,e.focusVisible&&(e.focusVisible=!1,fe()),K(e))}}}},au=(e,t)=>{if(e.focusIndex===-1)return;const r=H(e);if(2>r.textTable.length)return;const n=r.textTable[e.focusIndex];if(!n)return;const i=n.mode==="text"?n.line:n.line-1;if(i===r.lineTable.length-1){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,e.focusVisible=!1,e.focusIndex=r.textTable.length;const f=e.width,A=(e.textWidth-f)/f;let d=0;for(let y=1;e.focusIndex>=y;++y){const g=r.textTable[y];if(!g||g.line>i)break;g.line===i&&(d+=g.w)}e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=(d-f)/A,fe(),pe(e);return}const s=e.height,a=(e.textHeight-s)/s;let o=-e.scrollY*a-2,c=0;for(let f=0;fs));++f)c++;let u=2;for(let f=1;fi)break;A.line!==i||A.mode!=="text"||(u+=A.w)}}let h=2;const l=i+1;for(let f=1;fl){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,A.line>=c&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=r.heightTable[A.line]/a),e.focusVisible=!1,e.focusIndex=A.mode==="text"?f-1:f,e.scrollX&&hu)){if(t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===f-1&&(e.selectIndex=-1):e.selectIndex=-1,A.line>=c&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=r.heightTable[A.line]/a),e.scrollX){const d=e.width,y=(e.textWidth-d)/d;e.scrollX*y-2>h&&(e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((h-2)/e.textWidth))}e.focusVisible=!1,e.focusIndex=f,fe(),pe(e);return}}}t?e.selectIndex===-1&&(e.selectIndex=e.focusIndex):e.selectIndex=-1,e.focusVisible=!1,e.focusIndex=r.textTable.length,fe(),pe(e)},ou=(e,t)=>{if(e.focusIndex===-1)return;const r=H(e);if(2>r.textTable.length)return;const n=r.textTable.length===e.focusIndex?e.focusIndex-1:e.focusIndex,i=r.textTable[n];if(!i||!i.line){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.focusVisible=!1,e.focusIndex=1,e.scrollX=0,fe(),pe(e);return}const s=i.mode==="text"?i.line:i.line-1,a=e.height,o=(e.textHeight-a)/a;let c=0,u=-e.scrollY*o-2;for(let A=0;A0));++A)c++;let h=2;for(let A=1;As)break;d.line!==s||d.mode!=="text"||(h+=d.w)}}let l=2;const f=s-1;for(let A=1;Af){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,c>=d.line&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=r.heightTable[d.line]/o),e.scrollX&&(e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((l-2)/e.textWidth)),e.focusVisible=!1,e.focusIndex=d.mode==="text"?A-1:A,fe(),pe(e);return}if(!(d.line!==f||d.mode!=="text")&&(l+=d.w,l>h)){t?e.selectIndex===-1?e.selectIndex=e.focusIndex-1:e.selectIndex===A+1&&(e.selectIndex=-1):e.selectIndex=-1,c>d.line&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=r.heightTable[d.line]/o),e.focusVisible=!1,e.focusIndex=A,fe(),pe(e);return}}}},cu=(e,t)=>{if(!e.focusIndex)return;const r=H(e);if(r.textTable.length&&e.focusIndex<2){e.focusIndex=1;return}e.focusIndex--,t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1;const n=r.textTable[e.focusIndex];if(n){const i=n.mode==="text"?n.line:n.line-1,s=e.height,a=(e.textHeight-s)/s;let o=-e.scrollY*a-2,c=0;for(let h=0;h0));++h)c++;c>i&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=r.heightTable[n.line]/a);const u=r.textTable[e.focusIndex+1];if(u){const h=u.mode==="text"?u.line:u.line-1;let l=2;for(let y=1;e.focusIndex>y;++y){const g=r.textTable[y];if(!g||g.line>i)break;g.line===i&&(l+=g.w)}const f=e.width,A=(e.textWidth-f)/f,d=e.scrollX*A-2;if(l>f&&u&&il){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((l-2)/e.textWidth);return}}}e.focusVisible=!1,fe(),pe(e)},lu=(e,t)=>{const r=H(e);if(r.textTable.length===e.focusIndex)return;t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,e.focusVisible=!1,e.focusIndex++,fe(),pe(e);const n=r.textTable[e.focusIndex];if(n){const i=n.mode==="text"?n.line:n.line-1,s=e.height,a=(e.textHeight-s)/s;let o=-e.scrollY*a-2,c=0;for(let d=0;ds));++d)c++;i>=c&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=r.heightTable[i]/a);const u=r.textTable[e.focusIndex-1],h=u.mode==="text"?u.line:u.line-1;if(u&&i>h){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=0;return}const l=e.width,f=(e.textWidth-l)/l;let A=e.scrollX*f-2+l;for(let d=1;e.focusIndex>=d;++d){const y=r.textTable[d];if(!y||y.line>i)break;if(y.line===i&&(A-=y.w,!(A>0))){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX+=y.w/f;break}}}},uu=(e,t)=>{if(e.focusIndex!==-1)switch(t.key){case"Backspace":case"Delete":e.deleteText();break;case"Enter":e.insertText(` +`);break;case"ArrowLeft":cu(e,t.shiftKey);break;case"ArrowRight":lu(e,t.shiftKey);break;case"ArrowUp":ou(e,t.shiftKey);break;case"ArrowDown":au(e,t.shiftKey);break;case"a":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.selectAll());break;case"c":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.copy());break;case"v":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.paste());break}},hu=e=>{const t=H(e);2>t.textTable.length||(e.selectIndex=1,e.focusIndex=t.textTable.length,K(e))},fu=(e,t)=>{const r=e.defaultTextFormat;switch(r.font=t.font,r.size=t.size,r.align=t.align,r.color=t.color,r.leading=t.leading,r.letterSpacing=t.letterSpacing,r.leftMargin=t.leftMargin,r.rightMargin=t.rightMargin,t.fontType){case 1:r.bold=!0;break;case 2:r.italic=!0;break;case 3:r.bold=!0,r.italic=!0;break}switch(e.defaultTextFormat=r,e.type=t.inputType,e.multiline=t.multiline,e.wordWrap=t.wordWrap,e.border=t.border,e.scrollEnabled=t.scroll,e.thickness=t.thickness,e.thicknessColor=t.thicknessColor,t.autoSize){case 1:e.autoSize=t.align;break;case 2:e.autoFontSize=!0;break}e.xMin=e.bounds.xMin=t.bounds.xMin,e.xMax=e.bounds.xMax=t.bounds.xMax,e.yMin=e.bounds.yMin=t.bounds.yMin,e.yMax=e.bounds.yMax=t.bounds.yMax+4,e.text=t.text};class Qr extends fn{isText;$textData;_$isHTML;xMin;yMin;xMax;yMax;bounds;scrollEnabled;xScrollShape;yScrollShape;focusVisible;focusIndex;selectIndex;maxChars;restrict;type;compositionStartIndex;compositionEndIndex;$textFormats;$scrollX;$scrollY;cacheKey;cacheParams;_$background;_$backgroundColor;_$border;_$borderColor;_$htmlText;_$multiline;_$text;_$wordWrap;_$defaultTextFormat;_$rawHtmlText;_$autoSize;_$autoFontSize;_$focus;_$thickness;_$thicknessColor;_$stopIndex;constructor(){super(),this.isText=!0,this.$textData=null,this._$background=!1,this._$backgroundColor=16777215,this._$border=!1,this._$borderColor=0,this._$htmlText="",this._$multiline=!1,this._$text="",this._$wordWrap=!1,this.$scrollX=0,this.$scrollY=0,this.$textFormats=null,this.maxChars=0,this._$stopIndex=-1,this.compositionStartIndex=-1,this.compositionEndIndex=-1;const t=new ue;kc(t),this._$defaultTextFormat=t,this._$rawHtmlText="",this.xMin=0,this.yMin=0,this.xMax=100,this.yMax=100,this.bounds={xMin:0,xMax:this.xMax,yMin:0,yMax:this.yMax},this.restrict="",this._$isHTML=!1,this._$autoSize="none",this._$autoFontSize=!1,this.focusVisible=!1,this.focusIndex=-1,this.selectIndex=-1,this.scrollEnabled=!0,this.xScrollShape=new $t,this.xScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this.xScrollShape.scale9Grid=new be(1.5,1.5,.1,.1),this.yScrollShape=new $t,this.yScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this.yScrollShape.scale9Grid=new be(1.5,1.5,.1,.1),this.type="static",this._$focus=!1,this._$thickness=0,this._$thicknessColor=0,this.cacheKey=0,this.cacheParams=[0,0,0]}static get namespace(){return"next2d.display.TextField"}get namespace(){return"next2d.display.TextField"}get autoFontSize(){return this._$autoFontSize}set autoFontSize(t){t!==this._$autoFontSize&&(this._$autoFontSize=!!t,Be(this))}get autoSize(){return this._$autoSize}set autoSize(t){t!==this._$autoSize&&(this._$autoSize=t,Be(this))}get background(){return this._$background}set background(t){t!==this._$background&&(this._$background=!!t,K(this))}get backgroundColor(){return this._$backgroundColor}set backgroundColor(t){t=pt(et(t),0,16777215,16777215),t!==this._$backgroundColor&&(this._$backgroundColor=t,K(this))}get border(){return this._$border}set border(t){t!==this._$border&&(this._$border=!!t,K(this))}get borderColor(){return this._$borderColor}set borderColor(t){t=pt(et(t),0,16777215,0),t!==this._$borderColor&&(this._$borderColor=t,K(this))}get stopIndex(){return this._$stopIndex}set stopIndex(t){t|=0,this._$stopIndex!==t&&(this._$stopIndex=t,Al(this,t))}get defaultTextFormat(){return this._$defaultTextFormat.clone()}set defaultTextFormat(t){this._$rawHtmlText="",this._$isHTML?this._$text="":this._$htmlText="",this._$defaultTextFormat=t,Be(this)}get focus(){return this._$focus}set focus(t){this._$focus!==t&&this.type==="input"&&(this._$focus=!!t,gl(this,this._$focus?Ne.FOCUS_IN:Ne.FOCUS_OUT))}get htmlText(){if(this._$htmlText)return this._$htmlText;const t=Uc(this.defaultTextFormat);return this._$htmlText=`${this._$text.replace(/\n/g,"
")}
`,this._$htmlText}set htmlText(t){this._$htmlText!==t&&(this._$htmlText=`${t}`,this._$rawHtmlText="",this._$text="",this._$isHTML=!0,Be(this),this.hasEventListener(x.CHANGE)&&this.dispatchEvent(new x(x.CHANGE)))}get length(){return this.text.length}get multiline(){return this._$multiline}set multiline(t){t!==this._$multiline&&(this._$multiline=!!t,Be(this))}get numLines(){return H(this).lineTable.length}get scrollX(){return this.$scrollX}set scrollX(t){ql(this,t)}get scrollY(){return this.$scrollY}set scrollY(t){jl(this,t)}get text(){return this._$isHTML?(this._$rawHtmlText||(this._$rawHtmlText=eu(this)),this._$rawHtmlText):this._$text}set text(t){t=`${t}`,t===""&&(this.scrollX&&(this.scrollX=0),this.scrollY&&(this.scrollY=0)),t!==this._$text&&(this._$htmlText="",this._$rawHtmlText="",this._$isHTML=!1,this._$text=t,Be(this),this.hasEventListener(x.CHANGE)&&this.dispatchEvent(new x(x.CHANGE)))}get textHeight(){return H(this).textHeight}get textWidth(){return H(this).textWidth}get thickness(){return this._$thickness}set thickness(t){t|=0,t!==this._$thickness&&(this._$thickness=t,K(this))}get thicknessColor(){return this._$thicknessColor}set thicknessColor(t){t=pt(et(t),0,16777215,0),t!==this._$thicknessColor&&(this._$thicknessColor=t,K(this))}get wordWrap(){return this._$wordWrap}set wordWrap(t){this._$wordWrap!==t&&(this._$wordWrap=!!t,Be(this))}get width(){return super.width}set width(t){if(t=+t,!isNaN(t)&&0>t)return;const r=t+this.bounds.xMin;r!==this.bounds.xMax&&(this.bounds.xMax=r,Be(this))}get height(){return super.height}set height(t){if(t=+t,!isNaN(t)&&0>t)return;const r=t+this.bounds.yMin;r!==this.bounds.yMax&&(this.bounds.yMax=r,Be(this))}appendText(t){const r=this.text;this.text=r+`${t}`}insertText(t){us(this,t)}deleteText(){bn(this)}getLineText(t){return this._$text||this._$htmlText?tu(this,t|0):""}replaceText(t,r,n){ru(this,t,r|0,n|0)}selectAll(){hu(this)}copy(){nu(this)}paste(){iu(this)}setFocusIndex(t,r,n=!1){su(this,t,r,n)}keyDown(t){uu(this,t)}$sync(t,r=null){r&&super.$syncLoaderInfo(r),fu(this,t)}}const du=e=>{e.compositionStartIndex=e.focusIndex},Au=()=>{const e=ke();e&&du(e)},pu=(e,t)=>{if(e.compositionEndIndex>-1){const o=e.compositionStartIndex;e.focusIndex=e.compositionStartIndex,e.selectIndex=e.compositionEndIndex-1,e.compositionStartIndex=-1,bn(e),e.compositionStartIndex=o,e.selectIndex=-1}let r=H(e);const n=[],i=t.length;let s="";if(2>r.textTable.length)s=t,e.focusIndex=1,e.compositionStartIndex=1;else{for(let o=1;oe.compositionStartIndex&&a++}}e.compositionEndIndex=e.focusIndex=a},mu=e=>{const t=ke();t&&pu(t,e.data)},gu=e=>{if(e.compositionEndIndex>-1){const t=H(e);for(let r=e.compositionStartIndex;r{const e=ke();e&&gu(e)},xu=e=>{if(!e.data)return;const t=ke();t&&(us(t,e.data),t.hasEventListener(x.INPUT)&&t.dispatchEvent(new x(x.INPUT)))},yu=e=>{e.addEventListener("compositionstart",Au),e.addEventListener("compositionupdate",mu),e.addEventListener("compositionend",bu),e.addEventListener("input",xu)};yu(de);const hs=[],$u=()=>hs,vu=e=>{hs.push(e)};let Le=null;const wu=()=>!!Le,Mu=()=>{Le||(Le=new AudioContext),Le.resume()},fs=()=>(Le||(Le=new AudioContext),Le),Bu=e=>{let t=null;switch(e.method.toUpperCase()){case"GET":if(e.data){const n=e.url.split("?");n[1]=n.length===1?e.data.toString():`${n[1]}&${e.data.toString()}`,e.url=n.join("?")}break;case"PUT":case"POST":e.data&&(t=e.data.toString());break}const r=new XMLHttpRequest;if(r.open(e.method,e.url,!0),r.responseType=e.format,r.withCredentials=e.withCredentials,e.event){const n=Object.keys(e.event);for(let i=0;i{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)};let ds=1;const Tu=()=>ds,Su=e=>{ds=xn(e,0,1,1)},Iu=[],Jt=()=>Iu,Cu=[],fr=()=>Cu,Fu=e=>{Su(e);const t=Jt();for(let n=0;n{const e=Jt();for(let r=0;r{e.canLoop?e.play():(e.stop(),e.willTrigger(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE)))},Ru=(e,t)=>{e.willTrigger(x.OPEN)&&e.dispatchEvent(new x(x.OPEN)),e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},Ou=(e,t)=>{e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},yn=async e=>{if(e.byteLength)try{return await fs().decodeAudioData(e)}catch{const t=new Uint8Array(e);let r=0;for(;r>t.byteLength&&(r=t.indexOf(255,r),!(r===-1||(t[r+1]&224)===224));)++r;return await yn(t.subarray(r).buffer)}},ku=async(e,t)=>{const r=t.target;if(r)if(e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total)),199r.status){const n=await yn(r.response);n&&(e.audioBuffer=n,e.willTrigger(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE)))}else e.willTrigger(Re.IO_ERROR)&&e.dispatchEvent(new Re(Re.IO_ERROR,!1,r.statusText))},Uu=async(e,t)=>{await new Promise(r=>{Bu({format:"arraybuffer",url:t.url,method:t.method,data:t.data,headers:t.headers,withCredentials:t.withCredentials,event:{loadstart:n=>{Ru(e,n)},progress:n=>{Ou(e,n)},loadend:async n=>{await ku(e,n),r()}}})})},Gu=async(e,t)=>{if(!t.audioBuffer){const r=new Uint8Array(t.buffer),n=await yn(r.buffer);if(!n)return;t.audioBuffer=n}e.audioBuffer=t.audioBuffer};class dr extends nt{_$source;_$gainNode;_$stopFlag;_$currentCount;_$volume;audioBuffer;loopCount;constructor(){super(),this.loopCount=0,this.audioBuffer=null,this._$volume=1,this._$currentCount=0,this._$stopFlag=!0,this._$source=null,this._$gainNode=null}get volume(){return this._$volume}set volume(t){this._$volume=xn(Math.min(rt.volume,t),0,1,1),this._$gainNode&&(this._$gainNode.gain.value=this._$volume)}get canLoop(){return!this._$stopFlag&&this.loopCount>=this._$currentCount}clone(){const t=new dr;return t.volume=this._$volume,t.loopCount=this.loopCount,t.audioBuffer=this.audioBuffer,t}async load(t){await Uu(this,t)}play(t=0){if(!this._$stopFlag||!this.audioBuffer)return;this.stop();const r=fs();this._$gainNode=r.createGain(),this._$gainNode.connect(r.destination),this._$gainNode.gain.value=Math.min(rt.volume,this._$volume),this._$source=r.createBufferSource(),this._$source.addEventListener("ended",()=>{Pu(this)}),this._$source.buffer=this.audioBuffer,this._$source.connect(this._$gainNode),this._$source.start(t),this._$stopFlag=!1,this._$currentCount++,Jt().push(this)}stop(){if(this._$stopFlag)return;this._$stopFlag=!0,this._$currentCount=0,this._$source&&(this._$source.disconnect(),this._$source=null),this._$gainNode&&(this._$gainNode.gain.value=0,this._$gainNode.disconnect(),this._$gainNode=null);const t=Jt(),r=t.indexOf(this);r>-1&&t.splice(r,1)}async $build(t){await Gu(this,t)}}class _u{volume;loopCount;constructor(t=1,r=0){this.volume=t,this.loopCount=r}}const Du=()=>{const e=document.createElement("video");return e.autoplay=!1,e.crossOrigin="anonymous",e.setAttribute("playsinline",""),e},$n=e=>{e.changed=!0;const t=e.parent;t&&!t.changed&&$n(t)},Lu=async e=>{e.autoPlay&&(wu()||(e.muted=!0,vu(e)),await e.play()),e.loaded=!0,$n(e),e.willTrigger(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE))},Nu=(e,t)=>{t.currentTime=0,t.duration=e.duration,t.videoWidth=e.videoWidth,t.videoHeight=e.videoHeight;const r=new OffscreenCanvas(t.videoWidth,t.videoHeight);t.$context=r.getContext("2d"),t.$offscreenCanvas=r},Yu=(e,t)=>{e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},Wu=e=>{if(e.willTrigger(Ae.ENDED)&&e.dispatchEvent(new Ae(Ae.ENDED)),e.loop){e.currentTime=0;return}e.ended=!0,e.changed=!1,e.pause()},Vu=(e,t)=>{e.addEventListener("loadedmetadata",()=>{Nu(e,t)},{once:!0}),e.addEventListener("progress",r=>{Yu(t,r)}),e.addEventListener("canplaythrough",async()=>{await Lu(t),e.volume=t.volume},{once:!0}),e.addEventListener("ended",()=>{Wu(t)})},As=e=>{if(e.paused||!e.loaded)return 0;e.willTrigger(Ae.PLAY)&&e.dispatchEvent(new Ae(Ae.PLAY)),$n(e);const t=fr();return t.indexOf(e)===-1&&t.push(e),requestAnimationFrame(()=>{As(e)})},Ku=(e,t)=>{t.videoData||(t.videoData=new Uint8Array(t.buffer),t.buffer=null),e.loop=t.loop,e.autoPlay=t.autoPlay,e.videoWidth=t.bounds.xMax,e.videoHeight=t.bounds.yMax,e.volume=t.volume,e.src=URL.createObjectURL(new Blob([t.videoData.buffer],{type:"video/mp4"}))};class Xr extends hr{duration;smoothing;loop;autoPlay;currentTime;videoWidth;videoHeight;loaded;ended;isVideo;$videoElement;$offscreenCanvas;$context;paused;_$timerId;_$volume;_$src;constructor(t=0,r=0){super(),this.videoWidth=t,this.videoHeight=r,this.isVideo=!0,this.duration=0,this.smoothing=!0,this.loop=!1,this.loaded=!1,this.ended=!1,this.paused=!0,this.autoPlay=!0,this.currentTime=0,this._$src="",this._$timerId=-1,this._$volume=1,this.$videoElement=null,this.$offscreenCanvas=null,this.$context=null}static get namespace(){return"next2d.media.Video"}get namespace(){return"next2d.media.Video"}get src(){return this._$src}set src(t){this._$src!==t&&(this.loaded=!1,this.currentTime=0,this.$videoElement=null,this.$offscreenCanvas=null,this.$context=null,this.$videoElement=Du(),Vu(this.$videoElement,this),this._$src=this.$videoElement.src=t,this.$videoElement.load())}get muted(){return this.$videoElement?this.$videoElement.muted:!1}set muted(t){this.$videoElement&&(this.$videoElement.muted=t)}get volume(){return this._$volume}set volume(t){this._$volume=xn(Math.min(rt.volume,t),0,1,1),this.$videoElement&&(this.$videoElement.volume=this._$volume)}pause(){if(!this.$videoElement||this.paused)return;this.paused=!0,this.$videoElement.pause(),cancelAnimationFrame(this._$timerId),this.willTrigger(Ae.PAUSE)&&this.dispatchEvent(new Ae(Ae.PAUSE));const t=fr(),r=t.indexOf(this);r>-1&&t.splice(r,1)}async play(){!this.$videoElement||!this.paused||(this.paused=!1,this.ended=!1,this.$videoElement.volume=this._$volume,await this.$videoElement.play(),this._$timerId=As(this))}seek(t){this.$videoElement&&(this.currentTime=this.$videoElement.currentTime=Math.min(this.duration,t),this.willTrigger(Ae.SEEK)&&this.dispatchEvent(new Ae(Ae.SEEK)))}$sync(t,r=null){r&&super.$syncLoaderInfo(r),Ku(this,t)}}const At=(e,t,r,n,i=-1)=>{const s=n.loaderInfo;if(!s)throw new Error("the loaderInfo or data is null.");e.parent=n,we.set(e,n.root),Dt.set(e,s),e.dictionaryId=t,e.characterId=r.characterId,e.clipDepth=r.clipDepth,e.startFrame=r.startFrame,e.endFrame=r.endFrame,e.name=r.name||"",e.placeId=i},Qn=(e,t,r,n,i=-1)=>{switch(r.extends){case qt.namespace:{const s=new qt;return At(s,e,t,n,i),s.$sync(r),s}case $t.namespace:{const s=new $t;return At(s,e,t,n,i),s.$sync(r),s}case Qr.namespace:{const s=new Qr;return At(s,e,t,n,i),s.$sync(r),s}case Xr.namespace:{const s=new Xr;return At(s,e,t,n,i),s.$sync(r),s}default:throw new Error(`Character extends not found: ${r.extends}`)}},Rt=new Map,Qu=(e,t)=>{const r=e.loaderInfo;if(!r||!r.data)return t;const n=r.data.characters[e.characterId];if(!n)return t;const i=e.currentFrame,s=n.controller[i];if(!s)return t;const a=[],o=n.dictionary;if(!t.length){for(let c=0;ci){Rt.set(u.dictionaryId,u);continue}u.uniqueKey&&O.has(u.uniqueKey)&&O.removeTimer(u.uniqueKey),u.willTrigger(x.REMOVED)&&u.dispatchEvent(new x(x.REMOVED,!0)),u.willTrigger(x.REMOVED_FROM_STAGE)&&u.dispatchEvent(new x(x.REMOVED_FROM_STAGE,!0)),u.isVideo&&u.pause(),u.isContainerEnabled&&un(u)}t.length=0;for(let c=0;c{e.$labels||(e.$labels=new Map),e.$labels.set(t.frame,t)},zu=e=>{if(!e.$labels)return null;const t=e.currentFrame;return e.$labels.has(t)&&e.$labels.get(t)||null},Hu=e=>!e.$labels||!e.$labels.size?null:Array.from(e.$labels.values()),Ju=(e,t)=>{if(!e.$labels||!e.$labels.size)return 0;for(const[r,n]of e.$labels)if(n.name===t)return r;return 0},Zu=(e,t=null)=>{if(!t||!t.size)return;const r=e.currentFrame;if(!t.has(r))return;const n=t.get(r);n.willTrigger(x.FRAME_LABEL)&&n.dispatchEvent(new x(x.FRAME_LABEL))},qu=(e,t=null)=>{if(!t||!t.size)return;const r=e.currentFrame;t.has(r)&&kr.push(e)},Zt=e=>{e.$canAction&&(e.$canAction=!1,Zu(e,e.$labels),qu(e,e.$actions))},Ar=(e,t)=>{if(e.totalFrames===1)return;let r=+t;if(isNaN(r)&&(r=Ju(e,`${t}`)),1>r&&(r=1),e.currentFrame!==r){if(r>e.totalFrames){if(e.currentFrame===e.totalFrames)return;e.$wait=!0,e.$canSound=!0,e.$canAction=!0,e.$hasTimelineHeadMoved=!0,e.currentFrame=e.totalFrames,Zt(e),j(e);return}e.currentFrame=r,e.$wait=!0,e.$canSound=!0,e.$canAction=!0,e.$hasTimelineHeadMoved=!0,j(e),Zt(e)}},ju=(e,t)=>{e.play(),Ar(e,t)},eh=(e,t)=>{e.stop(),Ar(e,t),e.$wait=!1},th=e=>{e.totalFrames<=e.currentFrame||(e.stop(),Ar(e,e.currentFrame+1))},rh=e=>{2>e.currentFrame||(e.stop(),Ar(e,e.currentFrame-1))},nh=(e,t)=>{for(let r=0;r{for(let r=0;r{const n=e.loaderInfo;if(!n)return;const i=n.data;if(!i)return;const s=i.characters;for(let a=0;a{t.actions&&(e.$actions||(e.$actions=new Map),nh(e.$actions,t.actions)),t.sounds&&(e.$sounds||(e.$sounds=new Map),sh(e,e.$sounds,t.sounds)),t.labels&&(e.$labels||(e.$labels=new Map),ih(e.$labels,t.labels)),e.totalFrames=t.totalFrame||1};class qt extends An{$labels;$actions;$sounds;$canAction;$wait;totalFrames;currentFrame;_$stopFlag;$canSound;$hasTimelineHeadMoved;isTimelineEnabled;constructor(){super(),this.currentFrame=1,this.totalFrames=1,this.isTimelineEnabled=!0,this.$actions=null,this.$labels=null,this.$sounds=null,this.$canAction=!0,this.$wait=!1,this.$canSound=!0,this.$hasTimelineHeadMoved=!0,this._$stopFlag=!1}static get namespace(){return"next2d.display.MovieClip"}get namespace(){return"next2d.display.MovieClip"}get children(){return!this.$hasTimelineHeadMoved||this.characterId===-1?this._$children:(this.$hasTimelineHeadMoved=!1,Qu(this,this._$children))}get currentFrameLabel(){return zu(this)}get currentLabels(){return Hu(this)}get isPlaying(){return!this._$stopFlag}gotoAndPlay(t){ju(this,t)}gotoAndStop(t){eh(this,t)}nextFrame(){th(this)}play(){this._$stopFlag=!1,j(this)}prevFrame(){rh(this)}stop(){this._$stopFlag=!0}addFrameLabel(t){Xu(this,t)}$sync(t,r=null){r&&super.$syncLoaderInfo(r),ah(this,t)}}const Xn=async(e,t)=>{const r=new Map;if(t.symbols.length)for(let a=0;a>1|(v&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,O[v]=((b&65280)>>8|(b&255)<<8)>>1}for(var m=(function(r,e,n){for(var i=r.length,f=0,g=new k(e);f>p]=C}else for(h=new k(i),f=0;f>15-r[f]);return h}),A=new l(288),v=0;v<144;++v)A[v]=8;for(var v=144;v<256;++v)A[v]=9;for(var v=256;v<280;++v)A[v]=7;for(var v=280;v<288;++v)A[v]=8;for(var j=new l(32),v=0;v<32;++v)j[v]=5;var hr=m(A,9,1),br=m(j,5,1),B=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},c=function(r,e,n){var i=e/8|0;return(r[i]|r[i+1]<<8)>>(e&7)&n},J=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},sr=function(r){return(r+7)/8|0},yr=function(r,e,n){return(n==null||n>r.length)&&(n=r.length),new l(r.subarray(e,n))},zr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],t=function(r,e,n){var i=new Error(e||zr[r]);if(i.code=r,Error.captureStackTrace&&Error.captureStackTrace(i,t),!n)throw i;return i},N=function(r,e,n,i){var f=r.length,g=0;if(!f||e.f&&!e.l)return n||new l(0);var s=!n,h=s||e.i!=2,p=e.i;s&&(n=new l(f*3));var C=function(vr){var or=n.length;if(vr>or){var lr=new l(Math.max(or*2,vr));lr.set(n),n=lr}},y=e.f||0,a=e.p||0,o=e.b||0,F=e.l,D=e.d,E=e.m,T=e.n,R=f*8;do{if(!F){y=c(r,a,1);var _=c(r,a+1,3);if(a+=3,_)if(_==1)F=hr,D=br,E=9,T=5;else if(_==2){var H=c(r,a,31)+257,L=c(r,a+10,15)+4,d=H+c(r,a+5,31)+1;a+=14;for(var M=new l(d),K=new l(19),u=0;u>4;if(w<16)M[u++]=w;else{var x=0,I=0;for(w==16?(I=3+c(r,a,3),a+=2,x=M[u-1]):w==17?(I=3+c(r,a,7),a+=3):w==18&&(I=11+c(r,a,127),a+=7);I--;)M[u++]=x}}var nr=M.subarray(0,H),z=M.subarray(H);E=B(nr),T=B(z),F=m(nr,E,1),D=m(z,T,1)}else t(1);else{var w=sr(a)+4,q=r[w-4]|r[w-3]<<8,G=w+q;if(G>f){p&&t(0);break}h&&C(o+q),n.set(r.subarray(w,G),o),e.b=o+=q,e.p=a=G*8,e.f=y;continue}if(a>R){p&&t(0);break}}h&&C(o+131072);for(var Dr=(1<>4;if(a+=x&15,a>R){p&&t(0);break}if(x||t(2),S<256)n[o++]=S;else if(S==256){P=a,F=null;break}else{var ar=S-254;if(S>264){var u=S-257,U=W[u];ar=c(r,a,(1<>4;Q||t(3),a+=Q&15;var z=gr[V];if(V>3){var U=X[V];z+=J(r,a)&(1<R){p&&t(0);break}h&&C(o+131072);var ir=o+ar;if(o>3&1)+(e>>4&1);i>0;i-=!r[n++]);return n+(e&2)},pr=function(r){var e=r.length;return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0},xr=function(r,e){return((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&t(6,"invalid zlib data"),(r[1]>>5&1)==1&&t(6,"invalid zlib data: "+(r[1]&32?"need":"unexpected")+" dictionary"),(r[1]>>3&4)+2};function Sr(r,e){return N(r,{i:2},e,e)}function mr(r,e){var n=kr(r);return n+8>r.length&&t(6,"invalid gzip data"),N(r.subarray(n,-8),{i:2},new l(pr(r)),e)}function Ar(r,e){return N(r.subarray(xr(r),-4),{i:2},e,e)}function Cr(r,e){return r[0]==31&&r[1]==139&&r[2]==8?mr(r,e):(r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31?Sr(r,e):Ar(r,e)}var Er=typeof TextDecoder<"u"&&new TextDecoder,Tr=0;try{Er.decode(Fr,{stream:!0}),Tr=1}catch{}self.addEventListener("message",r=>{const e=Cr(r.data);let n="";for(let i=0;i{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(ps),{name:e?.name})}}const Hn=new oh,ms=async(e,t)=>{t.type==="zlib"?await new Promise(r=>{Hn.onmessage=i=>{Xn(e,i.data),r()};const n=new Uint8Array(t.buffer);Hn.postMessage(n,[n.buffer])}):Xn(e,t)},ch=(e,t)=>{e.willTrigger(x.OPEN)&&e.dispatchEvent(new x(x.OPEN)),e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},lh=(e,t)=>{e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},uh=async(e,t)=>{const r=t.target;if(!r)return;const n=e.contentLoaderInfo;if(n.willTrigger(Z.PROGRESS)&&n.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total)),n.willTrigger(Gt.HTTP_STATUS)){const i=oo(r.getAllResponseHeaders());n.dispatchEvent(new Gt(Gt.HTTP_STATUS,!1,r.status,r.responseURL,i))}199r.status?(await ms(e,r.response),n.willTrigger(x.COMPLETE)&&n.dispatchEvent(new x(x.COMPLETE))):n.willTrigger(Re.IO_ERROR)&&n.dispatchEvent(new Re(Re.IO_ERROR,!1,r.statusText))},hh=async(e,t)=>{await new Promise(r=>{ao({format:t.responseDataFormat,url:t.url,method:t.method,data:t.data,headers:t.headers,withCredentials:t.withCredentials,event:{loadstart:n=>{ch(e.contentLoaderInfo,n)},progress:n=>{lh(e.contentLoaderInfo,n)},loadend:async n=>{await uh(e,n),r()}}})})};class gs{contentLoaderInfo;root;constructor(){this.root=null,this.contentLoaderInfo=new Sc}get content(){return this.contentLoaderInfo.content}get loaderInfo(){return this.contentLoaderInfo}async load(t){if(t.responseDataFormat!=="json")throw new Error("The only format that can be loaded by this function is `json` format.");this.contentLoaderInfo.url=t.url,this.contentLoaderInfo.format=t.responseDataFormat,await hh(this,t)}async loadJSON(t){await ms(this,t)}}const bs=()=>{for(;kr.length;){const e=kr.pop(),t=e.$actions;if(!t)continue;const r=e.currentFrame;if(!t.has(r))continue;const n=t.get(r);if(n)for(let i=0;i{for(;Ur.length;){const e=Ur.pop(),t=e.$sounds;if(!t)continue;const r=e.currentFrame;if(!t.has(r))continue;const n=t.get(r),i=e.soundTransform;for(let s=0;s{if(!t||!t.size)return;const r=e.currentFrame;t.has(r)&&Ur.push(e)},ys=e=>{e.$canSound&&(e.$canSound=!1,fh(e,e.$sounds))},$s=e=>{const t=e.children;for(let r=t.length-1;r>-1;--r){const n=t[r];n&&n.isContainerEnabled&&($s(n),n.isTimelineEnabled&&(ys(n),Zt(n)))}},dh=e=>{$s(e),xs(),bs()},Ah=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e++,e);class ph{buffer;offset;constructor(){this.buffer=new Float32Array(256),this.offset=0}push(...t){this.buffer.length{const t=new Uint32Array(e.buffer,e.byteOffset,e.length),r=t.length;let n=2166136261,i=0;const s=r&-8;for(;i>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619)}for(;i>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619)}return n>>>8^n&255&16777215},pr=e=>{switch(e){case"copy":return 0;case"add":return 1;case"alpha":return 2;case"darken":return 3;case"difference":return 4;case"erase":return 5;case"hardlight":return 6;case"invert":return 7;case"layer":return 8;case"lighten":return 9;case"multiply":return 10;case"normal":return 11;case"overlay":return 12;case"screen":return 13;case"subtract":return 14;default:return 11}},vs=(e,t,r,n,i)=>{if(!e.visible){b.push(0);return}const s=e.graphics,a=s.isDrawable;if(!a&&!e.isBitmap){b.push(0);return}const o=Ve(e),c=o&&(o[0]!==1||o[1]!==1||o[2]!==1||o[3]!==1||o[4]!==0||o[5]!==0||o[6]!==0||o[7]!==0)?U.multiply(r,o):r;if(!me(c[3]+c[7]/255,0,1,0)){c!==r&&U.release(c),b.push(0);return}const h=_(e),l=h&&(h[0]!==1||h[1]!==0||h[2]!==0||h[3]!==1||h[4]!==0||h[5]!==0)?T.multiply(t,h):t,f=he(s.xMin,s.yMin,s.xMax,s.yMax,l),A=f[0],d=f[1],y=f[2],g=f[3];k(f);const p=Math.ceil(Math.abs(y-A)),$=Math.ceil(Math.abs(g-d));switch(!0){case p===0:case $===0:case p===-1/0:case $===-1/0:case p===1/0:case $===1/0:c!==r&&U.release(c),l!==t&&T.release(l),b.push(0);return}if(0>A+p||0>d+$||A>n||d>i){c!==r&&U.release(c),l!==t&&T.release(l),b.push(0);return}const w=h&&e.scale9Grid?Math.abs(h[1])<.001&&Math.abs(h[2])<1e-4:!1;if(!e.uniqueKey)if(e.characterId&&e.loaderInfo){const J=z(e.loaderInfo.id,e.characterId);e.uniqueKey=`${mt(new Float32Array(J))}`,oe(J)}else e.uniqueKey=e.isBitmap?`${mt(new Float32Array(e.$bitmapBuffer.buffer))}`:`${mt(s.buffer)}`;const I=Math.sqrt(l[0]*l[0]+l[1]*l[1]),P=Math.sqrt(l[2]*l[2]+l[3]*l[3]),W=Math.round(I*100)/100,C=Math.round(P*100)/100;(!e.isBitmap&&!e.cacheKey||e.cacheParams[0]!==W||e.cacheParams[1]!==C||e.cacheParams[2]!==c[7])&&(e.cacheKey=O.generateKeys(W,C,c[7]),e.cacheParams[0]=W,e.cacheParams[1]=C,e.cacheParams[2]=c[7]);const R=e.isBitmap?0:e.cacheKey;if(b.pushShapeBuffer(1,xi,l[0],l[1],l[2],l[3],l[4],l[5],c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],A,d,y,g,s.xMin,s.yMin,s.xMax,s.yMax,+w,+a,+e.isBitmap,+e.uniqueKey,R,I,P,e.instanceId),e.$cache&&!e.$cache.has(e.uniqueKey)&&(e.$cache=null),e.$cache?e.$cache.get(`${R}`):O.get(e.uniqueKey,`${R}`))e.$cache||(e.$cache=O.getById(e.uniqueKey),e.$cache.set(e.uniqueKey,!0)),b.push(1);else{if(b.push(0),w){const Y=v.rendererScale,ee=je(Y,0,0,Y,0,0),Q=T.multiply(ee,h||xt);Ft(ee);const ce=e.parent.concatenatedMatrix.rawData,ae=je(ce[0],ce[1],ce[2],ce[3],ce[4]*Y-A,ce[5]*Y-d);T.release(ce);const Ke=T.multiply(ae,Q),Qe=Ke[4]-(l[4]-A),ks=Ke[5]-(l[5]-d);Ft(Ke);const st=he(s.xMin,s.yMin,s.xMax,s.yMax,Q),Bn=st[0],Tn=st[1],Us=st[2],Gs=st[3];k(st);const Tt=Math.ceil(Math.abs(Us-Bn)),St=Math.ceil(Math.abs(Gs-Tn)),xe=e.scale9Grid,br=Math.abs(s.xMax-s.xMin),xr=Math.abs(s.yMax-s.yMin),It=xe.width>0?(xe.x-s.xMin)/br:1e-5,Ct=xe.height>0?(xe.y-s.yMin)/xr:1e-5,yr=xe.width>0?(xe.x+xe.width-s.xMin)/br:.99999,$r=xe.height>0?(xe.y+xe.height-s.yMin)/xr:.99999,Sn=Math.ceil(br*Y),In=Math.ceil(xr*Y);let vr=Sn*It/Tt,wr=In*Ct/St,Mr=(Tt-Sn*(1-yr))/Tt,Br=(St-In*(1-$r))/St;if(vr>=Mr){const at=It/(It+(1-yr));vr=Math.max(at-1e-5,0),Mr=Math.min(at+1e-5,1)}if(wr>=Br){const at=Ct/(Ct+(1-$r));wr=Math.max(at-1e-5,0),Br=Math.min(at+1e-5,1)}b.push(Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],ae[0],ae[1],ae[2],ae[3],ae[4]-Qe,ae[5]-ks,Bn,Tn,Tt,St,It,Ct,vr,wr,yr,$r,Mr,Br),Ft(ae),Ft(Q)}const J=a||w?s.buffer:e.$bitmapBuffer;b.push(J.length),b.set(J),O.set(e.uniqueKey,`${R}`,!0),e.$cache&&(e.$cache=null)}b.push(pr(e.blendMode));const N=e.filters;if(N){let J=!1;const Y=[],ee=re(0,0,0,0);for(let ce=0;ce0;Q?(b.push(+Q,+J,ee[0],ee[1],ee[2],ee[3],Y.length),b.set(new Float32Array(Y))):b.push(0),k(ee)}else b.push(0);c!==r&&U.release(c),l!==t&&T.release(l)},zr=(e,t)=>{const r=_(e),n=r?T.multiply(t,r):t;n!==t&&T.release(n);const i=r&&e.scale9Grid?Math.abs(r[1])<.001&&Math.abs(r[2])<1e-4:!1,s=e.graphics.buffer;b.push(xi,n[0],n[1],n[2],n[3],n[4],n[5],+i,s.length),b.set(s)},mh=new TextEncoder,ws=(e,t,r,n,i)=>{if(!e.visible){b.push(0);return}const s=Ve(e),a=s&&(s[0]!==1||s[1]!==1||s[2]!==1||s[3]!==1||s[4]!==0||s[5]!==0||s[6]!==0||s[7]!==0)?U.multiply(r,s):r;if(!me(a[3]+a[7]/255,0,1,0)){a!==r&&U.release(a),b.push(0);return}const c=_(e),u=c&&(c[0]!==1||c[1]!==0||c[2]!==0||c[3]!==1||c[4]!==0||c[5]!==0)?T.multiply(t,c):t,h=he(e.xMin,e.yMin,e.xMax,e.yMax,u),l=h[0],f=h[1],A=h[2],d=h[3];k(h);const y=Math.ceil(Math.abs(A-l)),g=Math.ceil(Math.abs(d-f));switch(!0){case y===0:case g===0:case y===-1/0:case g===-1/0:case y===1/0:case g===1/0:a!==r&&U.release(a),u!==t&&T.release(u),b.push(0);return}if(0>l+y||0>f+g||l>n||f>i){a!==r&&U.release(a),u!==t&&T.release(u),b.push(0);return}if(!e.uniqueKey)if(e.characterId&&e.loaderInfo){const C=z(e.loaderInfo.id,e.characterId);e.uniqueKey=`${mt(new Float32Array(C))}`,oe(C)}else e.uniqueKey=`${e.instanceId}`;const p=Math.sqrt(u[0]*u[0]+u[1]*u[1]),$=Math.sqrt(u[2]*u[2]+u[3]*u[3]),w=Math.round(p*100)/100,I=Math.round($*100)/100;(e.changed&&!e.cacheKey||e.cacheParams[0]!==w||e.cacheParams[1]!==I||e.cacheParams[2]!==a[7])&&(e.cacheKey=O.generateKeys(w,I,a[7]),e.cacheParams[0]=w,e.cacheParams[1]=I,e.cacheParams[2]=a[7]);const P=e.cacheKey;b.pushTextFieldBuffer(1,eo,u[0],u[1],u[2],u[3],u[4],u[5],a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],l,f,A,d,e.xMin,e.yMin,e.xMax,e.yMax,+e.uniqueKey,P,+e.changed,p,$,e.instanceId),e.$cache&&!e.$cache.has(e.uniqueKey)&&(e.$cache=null);const W=e.$cache?e.$cache.get(`${P}`):O.get(e.uniqueKey,`${P}`);if(!W||e.changed){b.push(0,+W);const C=mh.encode(JSON.stringify(e.$textData));switch(b.push(C.length),b.set(C),e.autoSize){case"center":b.push(0);break;case"left":b.push(1);break;case"none":b.push(2);break;case"right":b.push(3);break}b.push(e.stopIndex,e.scrollX,e.scrollY,e.textWidth,e.textHeight,Math.abs(e.xMax-e.xMin),Math.abs(e.yMax-e.yMin),e.focusIndex,e.selectIndex,+e.focusVisible,e.thickness,e.thicknessColor,+e.wordWrap,+e.border,e.borderColor,+e.background,e.backgroundColor,e.defaultTextFormat.color||0,e.defaultTextFormat.size||0),W||O.set(e.uniqueKey,`${P}`,!0),e.$cache&&(e.$cache=null)}else e.$cache||(e.$cache=O.getById(e.uniqueKey),e.$cache.set(e.uniqueKey,!0)),b.push(1);if(b.push(pr(e.blendMode)),e.filters?.length){let C=!1;const R=[],L=re(0,0,0,0);for(let J=0;J0;N?(b.push(+N,+C,L[0],L[1],L[2],L[3],R.length),b.set(new Float32Array(R))):b.push(0),k(L)}else b.push(0);a!==r&&U.release(a),u!==t&&T.release(u)},Ms=(e,t,r,n,i,s)=>{if(!e.visible||!e.$videoElement||!e.$offscreenCanvas||!e.loaded){b.push(0);return}const a=Ve(e),o=a&&(a[0]!==1||a[1]!==1||a[2]!==1||a[3]!==1||a[4]!==0||a[5]!==0||a[6]!==0||a[7]!==0)?U.multiply(n,a):n;if(!me(o[3]+o[7]/255,0,1,0)){o!==n&&U.release(o),b.push(0);return}const u=_(e),h=u&&(u[0]!==1||u[1]!==0||u[2]!==0||u[3]!==1||u[4]!==0||u[5]!==0)?T.multiply(r,u):r,l=he(0,0,e.videoWidth,e.videoHeight,h),f=l[0],A=l[1],d=l[2],y=l[3];k(l);const g=Math.ceil(Math.abs(d-f)),p=Math.ceil(Math.abs(y-A));switch(!0){case g===0:case p===0:case g===-1/0:case p===-1/0:case g===1/0:case p===1/0:o!==n&&U.release(o),h!==r&&T.release(h),b.push(0);return}if(0>f+g||0>A+p||f>i||A>s){o!==n&&U.release(o),h!==r&&T.release(h),b.push(0);return}if(!e.uniqueKey)if(e.characterId&&e.loaderInfo){const w=z(e.loaderInfo.id,e.characterId);e.uniqueKey=`${mt(new Float32Array(w))}`,oe(w)}else e.uniqueKey=`${e.instanceId}`;b.pushVideoBuffer(1,to,h[0],h[1],h[2],h[3],h[4],h[5],o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7],f,A,d,y,0,0,e.videoWidth,e.videoHeight,+e.uniqueKey,+e.changed,e.instanceId),e.$cache&&!e.$cache.has(e.uniqueKey)&&(e.$cache=null);const $=e.$cache?e.$cache.get("0"):O.get(e.uniqueKey,"0");if(!$||e.changed){b.push(0,+$);const w=e.$context;if(w){const I=e.videoWidth/2,P=e.videoHeight/2;w.save(),w.translate(I,P),w.rotate(Math.PI),w.scale(-1,1),w.drawImage(e.$videoElement,-I,-P,e.videoWidth,e.videoHeight),w.restore(),t.push(e.$offscreenCanvas.transferToImageBitmap())}$||O.set(e.uniqueKey,"0",!0),e.$cache&&(e.$cache=null)}else e.$cache||(e.$cache=O.getById(e.uniqueKey),e.$cache.set(e.uniqueKey,!0)),b.push(1);if(b.push(pr(e.blendMode)),e.filters?.length){let w=!1;const I=[],P=re(0,0,0,0);for(let C=0;C0;W?(b.push(+W,+w,P[0],P[1],P[2],P[3],I.length),b.set(new Float32Array(I))):b.push(0),k(P)}else b.push(0);o!==n&&U.release(o),h!==r&&T.release(h)},Jn=(e,t,r,n)=>{let i=null;switch(!0){case e.isContainerEnabled:i=yt(e,t);break;case e.isShape:i=wt(e,t);break;case e.isText:i=Bt(e,t);break;case e.isVideo:i=Mt(e,t);break}if(!i)return null;const s=i[0],a=i[2],o=Math.abs(a-s);if(!o)return null;const c=i[1],u=i[3],h=Math.abs(u-c);return!h||0>s+o||0>c+h||s>r||c>n?null:i},Hr=(e,t)=>{const r=_(e),n=r?T.multiply(t,r):t,i=e.children;b.push(bi,i.length);for(let s=0;s{const r=wt(e,t),n=e.filters;if(n){const i=re(0,0,0,0);for(let s=0;s{const r=Mt(e,t),n=e.filters;if(n){const i=re(0,0,0,0);for(let s=0;s{const r=Bt(e,t),n=e.filters;if(n){const i=re(0,0,0,0);for(let s=0;s{const r=e.children;if(!r.length)return re(0,0,0,0);const n=_(e),i=n?t?T.multiply(t,n):n:t,s=Number.MAX_VALUE;let a=s,o=-s,c=s,u=-s;for(let h=0;h{if(!e.visible){b.push(0);return}const a=Ve(e);let o=a&&(a[0]!==1||a[1]!==1||a[2]!==1||a[3]!==1||a[4]!==0||a[5]!==0||a[6]!==0||a[7]!==0)?U.multiply(n,a):n;if(!me(o[3]+o[7]/255,0,1,0)){o!==n&&U.release(o),b.push(0);return}const u=e.children;if(!u.length){o!==n&&U.release(o),b.push(0);return}const h=_(e);let l=h&&(h[0]!==1||h[1]!==0||h[2]!==0||h[3]!==1||h[4]!==0||h[5]!==0)?T.multiply(r,h):r;if(!l[0]&&!l[1]||!l[2]&&!l[3]){o!==n&&U.release(o),l!==r&&T.release(l),b.push(0);return}b.push(1,bi);const f=e.blendMode;b.push(pr(f));const A=e.filters;if(A){const p=O.generateFilterKeys(l[0],l[1],l[2],l[3]),$=O.get(`${e.instanceId}`,`${p}`);let w=!1;const I=[],P=re(0,0,0,0);for(let C=0;C0){w||(w=e.changed);const C=Bs(e,r);if($){if(!w){b.push(1,Math.ceil(Math.abs(C[2]-C[0])),Math.ceil(Math.abs(C[3]-C[1])),1,1,e.instanceId,p,P[0],P[1],P[2],P[3],l[0],l[1],l[2],l[3],C[0],C[1],o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]),k(C),k(P),o!==n&&U.release(o),l!==r&&T.release(l);return}O.removeById(`${e.instanceId}`)}b.push(1,Math.ceil(Math.abs(C[2]-C[0])),Math.ceil(Math.abs(C[3]-C[1])),1,0,e.instanceId,p,P[0],P[1],P[2],P[3],l[0],l[1],l[2],l[3],C[0],C[1],o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7],I.length),b.set(new Float32Array(I));const R=l[0],L=l[1],N=l[2],J=l[3],Y=l[4]-C[0],ee=l[5]-C[1];l!==r&&T.release(l),l=je(R,L,N,J,Y,ee),o!==n&&U.release(o),o=_t(1,1,1,1,0,0,0,0),k(C),O.set(`${e.instanceId}`,`${p}`,!0)}else if(f==="normal")b.push(0);else{const C=yt(e,r),R=C[0],L=C[1];b.push(1,Math.ceil(Math.abs(C[2]-R)),Math.ceil(Math.abs(C[3]-L)),0,l[0],l[1],l[2],l[3],R,L,o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]);const N=l[0],J=l[1],Y=l[2],ee=l[3],Q=l[4]-R,ce=l[5]-L;l!==r&&T.release(l),l=je(N,J,Y,ee,Q,ce),k(C),o!==n&&U.release(o),o=_t(1,1,1,1,0,0,0,0)}k(P)}else if(f==="normal")b.push(0);else{const p=yt(e,r),$=p[0],w=p[1];b.push(1,Math.ceil(Math.abs(p[2]-$)),Math.ceil(Math.abs(p[3]-w)),0,l[0],l[1],l[2],l[3],$,w,o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]);const I=l[0],P=l[1],W=l[2],C=l[3],R=l[4]-$,L=l[5]-w;l!==r&&T.release(l),l=je(I,P,W,C,R,L),k(p),o!==n&&U.release(o),o=_t(1,1,1,1,0,0,0,0)}const d=e.mask;if(d){const p=Jn(d,l,i,s);if(!p)b.push(0);else switch(b.push(1,p[0],p[1],p[2],p[3]),!0){case d.isContainerEnabled:Hr(d,l);break;case d.isShape:zr(d,l);break}d.changed=!1}else b.push(0);b.push(u.length);let y=0,g=!0;for(let p=0;py&&(y=0,g=!0),!g){b.push(0),$.changed=!1;continue}if($.clipDepth){y=$.clipDepth;const w=Jn($,l,i,s);if(g=!!w,b.push(+g),!w){$.changed=!1;continue}switch(b.push(w[0],w[1],w[2],w[3]),!0){case $.isContainerEnabled:Hr($,l);break;case $.isShape:zr($,l);break}$.changed=!1;continue}switch(!0){case $.isContainerEnabled:Ts($,t,l,o,i,s);break;case $.isShape:vs($,l,o,i,s);break;case $.isText:ws($,l,o,i,s);break;case $.isVideo:Ms($,t,l,o,i,s);break}$.changed=!1}o!==n&&U.release(o),l!==r&&T.release(l)},yh=(e,t,r,n,i,s)=>{switch(b.push(v.backgroundColor),!0){case e.isContainerEnabled:Ts(e,t,r,n,i,s);break;case e.isShape:vs(e,r,n,i,s);break;case e.isText:ws(e,r,n,i,s);break;case e.isVideo:Ms(e,t,r,n,i,s);break}e.changed=!1},Zn=e=>{e.totalFrames===1||!e.isPlaying||(e.$wait||(++e.currentFrame,e.currentFrame>e.totalFrames&&(e.currentFrame=1)),e.$wait=!1,e.$canSound=!0,e.$canAction=!0,e.$hasTimelineHeadMoved=!0,e.$container=null,ys(e),Zt(e),j(e))},Jr=e=>{const t=e.$container;if(t)for(let r=0;t.length>r;++r){const n=t[r];n.isTimelineEnabled&&Zn(n),Jr(n)}else{const r=[],n=e.children;for(let i=0;n.length>i;++i){const s=n[i];s.isContainerEnabled&&(s.isTimelineEnabled&&Zn(s),Jr(s),r.push(s))}e.$container=r}},$h=()=>{Jr(v),xs(),bs()};class vh extends dn{_$ready;stageWidth;stageHeight;frameRate;rendererScale;rendererWidth;rendererHeight;_$backgroundColor;constructor(){super(),this.stageWidth=0,this.stageHeight=0,this.frameRate=1,this.rendererScale=1,this.rendererWidth=0,this.rendererHeight=0,this._$ready=!1,this._$backgroundColor=-1}get backgroundColor(){return this._$backgroundColor}set backgroundColor(t){this._$backgroundColor=t==="transparent"?-1:parseInt(t.replace("#",""),16)}get pointer(){return bt}set ready(t){!t||this._$ready||(this._$ready=t,dh(this))}addChild(t){return ge.add(t.instanceId),we.set(this,t),super.addChild(t),we.delete(this),we.set(t,t),t}$ticker(){$h()}$generateRenderQueue(t,r,n,i){yh(t,r,n,i,this.rendererWidth,this.rendererHeight)}$mouseHit(t,r,n){He(this,t,r,n,!0)}}const v=new vh;ge.add(v.instanceId);const Fr={command:"resize",buffer:null},qn=[],Zr=(e=!0)=>{Fr.buffer=new Float32Array([B.rendererWidth,B.rendererHeight,e?1:0]),qn[0]=Fr.buffer.buffer,Ce.postMessage(Fr,qn)},jn=window.devicePixelRatio||1,vn=()=>{Je.x=0,Je.y=0;const e=vt();if(!e)return;const t=e.children[0];!t||t.localName!=="canvas"||(Je.x=(e.clientWidth-v.rendererWidth/jn)/2,Je.y=(e.clientHeight-v.rendererHeight/jn)/2)},mr=()=>{const e=vt();if(!e)return;const t=e.parentElement;if(!t)return;const r=B.fullScreen||t.tagName==="BODY"?window.innerWidth:t.clientWidth,n=B.fullScreen||t.tagName==="BODY"?window.innerHeight:t.clientHeight,i=e.style;if(i.width=`${r}px`,i.height=`${n}px`,!v.stageWidth||!v.stageHeight)return;const s=Math.min(r/v.stageWidth,n/v.stageHeight)*Ze,a=B.fullScreen?window.innerWidth*Ze:v.stageWidth*s|0,o=B.fullScreen?window.innerHeight*Ze:v.stageHeight*s|0;a===B.screenWidth&&o===B.screenHeight||(B.screenWidth=r,B.screenHeight=n,v.changed=!0,e.children.length>1&&e.children[1].dispatchEvent(new Event(`${on}_blur`)),vn(),!(a===B.rendererWidth&&o===B.rendererHeight)&&(v.rendererScale=B.rendererScale=s,v.rendererWidth=B.rendererWidth=a,v.rendererHeight=B.rendererHeight=o,ft[0]=ft[3]=s,ft[4]=(B.rendererWidth-v.stageWidth*s)/2,ft[5]=(B.rendererHeight-v.stageHeight*s)/2,O.reset(),Zr(),v.hasEventListener(x.RESIZE)&&v.dispatchEvent(new x(x.RESIZE))))},wh=new Float32Array([1,1,1,1,0,0,0,0]),lt=[],ut={command:"render",buffer:null,length:0,imageBitmaps:null},Ot=[];Ce.addEventListener("message",e=>{if(e.data.message!=="render")return;const t=e.data.buffer;b.buffer.length>t.length||(b.buffer=t)});const Ss=()=>{b.offset=0,Ot.length=0,lt.length=0,v.$generateRenderQueue(v,lt,ft,wh),b.offset&&(ut.buffer=b.buffer,ut.length=b.offset,Ot.push(b.buffer.buffer),ut.imageBitmaps=null,lt.length&&(ut.imageBitmaps=lt,Ot.push(...lt)),Ce.postMessage(ut,Ot))},ei={command:"removeCache",buffer:null},ti=[],ri=()=>{const e=new Float32Array(O.$removeIds);O.$removeIds.length=0,ei.buffer=e,ti[0]=e.buffer,Ce.postMessage(ei,ti)},Mh=new x(x.ENTER_FRAME),Is=e=>{if(B.stopFlag)return;O.$removeIds.length&&ri();const t=e-B.startTime;t>B.fps&&(B.startTime=e-t%B.fps,v.$ticker(),v.hasEventListener(x.ENTER_FRAME)&&v.dispatchEvent(Mh),v.changed&&Ss(),O.$removeCache&&(O.removeTimerScheduledCache(),O.$removeIds.length&&ri())),B.timerId=requestAnimationFrame(r=>{Is(r)})},Bh=()=>{B.stopFlag&&(B.stopFlag=!1,v.changed=!0,B.timerId>-1&&cancelAnimationFrame(B.timerId),B.fps=1e3/v.frameRate|0,B.startTime=performance.now(),B.timerId=requestAnimationFrame(e=>{Is(e)}))},Th=()=>{B.timerId>-1&&cancelAnimationFrame(B.timerId),B.stopFlag=!0,B.timerId=-1,rt.stopAll()},Sh=e=>{const t=ke();if(t){t.keyDown(e);return}v.hasEventListener(V.KEY_DOWN)&&(We(e),v.dispatchEvent(new V(V.KEY_DOWN)))},Ih=e=>{ke()||v.hasEventListener(V.KEY_UP)&&(We(e),v.dispatchEvent(new V(V.KEY_UP)))},Ch=()=>{window.addEventListener(V.KEY_DOWN,Sh),window.addEventListener(V.KEY_UP,Ih)};class Fh{rendererWidth;rendererHeight;screenWidth;screenHeight;rendererScale;fixedWidth;fixedHeight;stopFlag;startTime;fps;tagId;_$fullScreen;timerId;mouseState;constructor(){this.rendererWidth=0,this.rendererHeight=0,this.rendererScale=1,this.screenWidth=0,this.screenHeight=0,this.stopFlag=!0,this.startTime=0,this.fps=16,this.timerId=-1,this.mouseState="up",this.fixedWidth=0,this.fixedHeight=0,this.tagId="",this._$fullScreen=!1,Ch()}get fullScreen(){return this._$fullScreen}set fullScreen(t){this._$fullScreen!==t&&(this._$fullScreen=t,mr())}play(){Bh()}stop(){Th()}cacheClear(){O.reset(),Ce.postMessage({command:"cacheClear"})}setOptions(t=null){t&&(this.fixedWidth=t.width||this.fixedWidth,this.fixedHeight=t.height||this.fixedHeight,this.tagId=t.tagId||this.tagId,this._$fullScreen=!!t.fullScreen,t.bgColor&&(v.backgroundColor=t.bgColor))}}const B=new Fh;let ni="auto";const wn=()=>{B.stopFlag||(ie.x=v.pointer.x,ie.y=v.pointer.y,ie.pointer="auto",ie.hit=null,Tr.beginPath(),Tr.setTransform(1,0,0,1,0,0),v.$mouseHit(Tr,gt,ie),B.mouseState==="up"&&ni!==ie.pointer&&(ui().style.cursor=ni=ie.pointer))},Mn=e=>{let t=window.scrollX,r=window.scrollY;const n=vt();if(n){const c=n.getBoundingClientRect();t+=c.left,r+=c.top}const i=e.target;if(i){const c=i.getBoundingClientRect();t+=c.left,r+=c.top}const s=(B.rendererWidth-v.stageWidth*B.rendererScale)/2,a=(B.rendererHeight-v.stageHeight*B.rendererScale)/2,o=B.rendererScale/Ze;v.pointer.x=(e.pageX-t)/o-s/B.rendererScale,v.pointer.y=(e.pageY-r)/o-a/B.rendererScale},Eh=()=>{const e=ie.hit,t=ke();t&&(!e||t.instanceId!==e.instanceId)&&(t.focus=!1,kn(null)),e?(e.isText&&(e.focus?setTimeout(()=>{de.focus()},300):(e.focus=!0,kn(e)),e.setFocusIndex(ie.x-gt[4],ie.y-gt[5])),e.willTrigger(S.POINTER_DOWN)&&e.dispatchEvent(new S(S.POINTER_DOWN))):v.willTrigger(S.POINTER_DOWN)&&v.dispatchEvent(new S(S.POINTER_DOWN))},Ph=()=>{const e=ie.hit;e?e.willTrigger(S.DOUBLE_CLICK)&&e.dispatchEvent(new S(S.DOUBLE_CLICK)):v.willTrigger(S.DOUBLE_CLICK)&&v.dispatchEvent(new S(S.DOUBLE_CLICK))};let ii,kt=!1;const Rh=e=>{const t=e.target;t&&(B.mouseState="down",t.setPointerCapture(e.pointerId),We(e),Mn(e),wn(),ie.hit&&e.preventDefault(),clearTimeout(ii),kt?(kt=!1,Ph()):(kt=!0,ii=setTimeout(()=>{kt=!1},300),Eh()))},Oh=()=>{const e=v.dropTarget,t=ie.hit;t?(t.willTrigger(S.POINTER_UP)&&t.dispatchEvent(new S(S.POINTER_UP)),e&&e.instanceId!==t.instanceId&&e.willTrigger(S.POINTER_UP)&&e.dispatchEvent(new S(S.POINTER_UP))):e&&e.willTrigger(S.POINTER_UP)?e.dispatchEvent(new S(S.POINTER_UP)):v.willTrigger(S.POINTER_UP)&&v.dispatchEvent(new S(S.POINTER_UP))},si=e=>{const t=e.target;t&&(B.mouseState="up",t.releasePointerCapture(e.pointerId),We(e),Mn(e),wn(),Oh())},kh=()=>{const e=v.dropTarget;if(e){const i=e.parent?e.parent.globalToLocal(v.pointer):e.globalToLocal(v.pointer);let s=0,a=0;e.$lockCenter?(s=i.x-e.width/2,a=i.y-e.height/2):(s=i.x+e.$offsetX,a=i.y+e.$offsetY);const o=e.$boundedRect;o&&(s=Vt(s,o.left,o.right),a=Vt(a,o.top,o.bottom)),e.x=s,e.y=a}const t=ke();if(t&&B.mouseState==="down"){t.setFocusIndex(ie.x-gt[4],ie.y-gt[5],!0);return}const r=fi(),n=ie.hit;n?(n.willTrigger(S.POINTER_MOVE)&&n.dispatchEvent(new S(S.POINTER_MOVE)),r?r.instanceId!==n.instanceId&&(r.willTrigger(S.POINTER_OUT)&&r.dispatchEvent(new S(S.POINTER_OUT)),n.willTrigger(S.POINTER_OVER)&&n.dispatchEvent(new S(S.POINTER_OVER))):n.willTrigger(S.POINTER_OVER)&&n.dispatchEvent(new S(S.POINTER_OVER)),Cn(n)):(r&&(r.willTrigger(S.POINTER_OUT)&&r.dispatchEvent(new S(S.POINTER_OUT)),Cn(null)),v.hasEventListener(S.POINTER_MOVE)&&v.dispatchEvent(new S(S.POINTER_MOVE)))},Uh=e=>{e.target&&(We(e),Mn(e),wn(),ie.hit&&e.preventDefault(),kh())},Gh=e=>{We(e);const t=fi();t&&t.willTrigger(S.POINTER_LEAVE)&&(e.preventDefault(),t.dispatchEvent(new S(S.POINTER_LEAVE)))},_h=e=>{We(e);const t=ie.hit;if(t&&t.isText&&t.scrollEnabled){e.preventDefault(),e.deltaX&&(t.scrollX+=e.deltaX/(t.textWidth/t.width)),e.deltaY&&(t.scrollY+=e.deltaY/(t.textHeight/t.height));return}v.willTrigger(qe.WHEEL)&&(e.preventDefault(),v.dispatchEvent(new qe(qe.WHEEL)))},Dh=e=>{const t=()=>{Mu();const r=$u();for(let n=0;n{Object.defineProperty(qr,e,{get(){return t}})});const jr={Sprite:An,MovieClip:qt,BitmapData:_e,BlendMode:ua,DisplayObject:hr,DisplayObjectContainer:dn,FrameLabel:Ki,Graphics:M,InteractiveObject:fn,Loader:gs,Shape:$t,stage:v};Object.entries(jr).forEach(([e,t])=>{Object.defineProperty(jr,e,{get(){return t}})});const en={BevelFilter:rr,BlurFilter:nr,ColorMatrixFilter:ir,ConvolutionFilter:sr,DisplacementMapFilter:ar,DropShadowFilter:or,GlowFilter:cr,GradientBevelFilter:lr,GradientGlowFilter:ur};Object.entries(en).forEach(([e,t])=>{Object.defineProperty(en,e,{get(){return t}})});const tn={ColorTransform:U,Matrix:T,Point:se,Rectangle:be};Object.entries(tn).forEach(([e,t])=>{Object.defineProperty(tn,e,{get(){return t}})});const rn={Sound:dr,SoundMixer:rt,SoundTransform:_u,Video:Xr};Object.entries(rn).forEach(([e,t])=>{Object.defineProperty(rn,e,{get(){return t}})});class Cs{requestHeaders;url;contentType;data;method;responseDataFormat;withCredentials;constructor(t=""){this.url=`${t}`,this.contentType="application/json",this.data=null,this.method="GET",this.requestHeaders=[],this.responseDataFormat="json",this.withCredentials=!1}get headers(){const t=[];return t.push({name:"Content-Type",value:this.contentType}),this.requestHeaders.length&&t.push(...this.requestHeaders),t}}const nn={URLRequest:Cs};Object.entries(nn).forEach(([e,t])=>{Object.defineProperty(nn,e,{get(){return t}})});const sn={TextFormat:ue,TextField:Qr};Object.entries(sn).forEach(([e,t])=>{Object.defineProperty(sn,e,{get(){return t}})});const an={Easing:Ye,Tween:gn};Object.entries(an).forEach(([e,t])=>{Object.defineProperty(an,e,{get(){return t}})});const Fs=()=>{const e=vt();if(e)for(;e.firstChild;)e.removeChild(e.firstChild)},Es=()=>{const e=vt();if(!e)return;const t=ui();t&&(e.appendChild(t),e.appendChild(de))},Ps=()=>{v.ready=!0,Ss(),B.play(),v.changed=!1},Lh=()=>{const e=document.createElement("div");if(_s(e),e.id=on,e.tabIndex=-1,!B.tagId)document.body.appendChild(e);else{const t=document.getElementById(B.tagId);if(!t)return alert(`Element not found with tag ID: ${B.tagId}`),e;t.appendChild(e)}return e},Nh=(e,t=0,r=0)=>{let n="";if(n+="display:flex;",n+="align-items:center;",n+="justify-content:center;",n+="background-color:transparent;",n+="overflow:hidden;",n+="padding:0;",n+="margin:0;",n+="user-select:none;",n+="outline:none;",t&&r)n+=`width:${t}px;`,n+=`height:${r}px;`;else{const i=e.parentElement;if(!i)throw new Error("parent element is null.");i.tagName==="BODY"?(n+=`width:${window.innerWidth}px;`,n+=`height:${window.innerHeight}px;`):(n+=`width:${i.clientWidth}px;`,n+=`height:${i.clientHeight}px;`)}e.setAttribute("style",n)},Yh=e=>{const t=`${on}_loading`;e.innerHTML=` +
`};let ai=-1;const Wh=()=>{window.addEventListener("resize",()=>{cancelAnimationFrame(ai),ai=requestAnimationFrame(mr)})},Rs=(e=null)=>{B.setOptions(e);const t=Lh();Nh(t,B.fixedWidth,B.fixedHeight),Yh(t),!B.fixedWidth&&!B.fixedHeight&&Wh(),mr()},Vh=async(e,t=null)=>{if(e==="develop"){const s=location.search.slice(1).split("&")[0];if(!s)return;e=`${location.origin}/${s}`}if(!e)return;e.charAt(1)==="/"&&(e=e.slice(1)),Rs(t);const r=new gs,n=r.contentLoaderInfo;if(n.addEventListener(Re.IO_ERROR,s=>{alert("Error: "+s.text)}),await r.load(new Cs(e)),!n.data)return;const i=n.data.stage;v.stageWidth=i.width,v.stageHeight=i.height,v.frameRate=Vt(i.fps,1,60,60),v.backgroundColor=t&&t.bgColor?t.bgColor:i.bgColor,v.addChild(n.content),mr(),Ps(),Fs(),Es(),vn()};let oi=!1;const Kh=(e=240,t=240,r=60,n=null)=>{if(oi)return v.getChildAt(0);oi=!0,v.stageWidth=e|0,v.stageHeight=t|0,v.frameRate=Vt(r,1,60,60),Rs(n);const i=v.addChild(new An);return Ps(),Fs(),Es(),vn(),i},Te={command:"capture",buffer:null,bgColor:16777215,bgAlpha:0,width:0,height:0,length:0,imageBitmaps:null},Ut=[],ht=[],Qh=async(e,t,r,n,i=0,s=0)=>await new Promise(a=>{if(b.offset=0,Ut.length=0,ht.length=0,v.$generateRenderQueue(e,ht,t,r),!b.offset)return a(n);Te.buffer=b.buffer,Te.width=n.width,Te.height=n.height,Te.bgColor=i,Te.bgAlpha=s,Te.length=b.offset,Ut.push(b.buffer.buffer),Te.imageBitmaps=null,ht.length&&(Te.imageBitmaps=ht,Ut.push(...ht));const o=c=>{if(c.data.message!=="capture")return;const u=c.data.buffer;return b.buffer.length{switch(!0){case e.isVideo:{const t=e.muted;e.muted=!0,await e.play(),e.pause(),e.muted=t,await new Promise(r=>{const n=async()=>{e.loaded?(e.seek(0),r()):requestAnimationFrame(n)};requestAnimationFrame(n)})}break;case e.isContainerEnabled:{const t=e.children;for(let r=0;r{t&&t.videoSync&&await Os(e);const r=t&&t.colorTransform?t.colorTransform.rawData:zh,n=new Float32Array([1,0,0,1,-e.width/2,-e.height/2]),i=t&&t.matrix?T.multiply(t.matrix.rawData,n):T.multiply(Xh,n),s=t&&t.canvas?t.canvas:O.getCanvas(),a=Math.sqrt(i[0]*i[0]+i[1]*i[1]),o=Math.sqrt(i[2]*i[2]+i[3]*i[3]),c=Math.ceil(e.width*a),u=Math.ceil(e.height*o);if(c<=0||u<=0)return s;i[4]+=c/2,i[5]+=u/2,s.width=c,s.height=u;const h=B.stopFlag;h||B.stop();let l=!1;const f=B.rendererWidth,A=B.rendererHeight,d=B.rendererScale;if(c>f||u>A){l=!0;const y=Math.min(c/v.stageWidth,u/v.stageHeight)*Ze;v.rendererScale=B.rendererScale=y,v.rendererWidth=B.rendererWidth=c,v.rendererHeight=B.rendererHeight=u,Zr(!1)}return await Qh(e,i,r,s,t&&t.bgColor?parseInt(t.bgColor.replace("#",""),16):0,t&&t.bgAlpha?t.bgAlpha:0),l&&(v.rendererScale=B.rendererScale=d,v.rendererWidth=B.rendererWidth=f,v.rendererHeight=B.rendererHeight=A,Zr(!1)),h||B.play(),T.release(i),t&&t.colorTransform&&U.release(r),s};class Jh{display;events;filters;geom;media;net;text;ui;_$promise;constructor(){this.display=jr,this.events=qr,this.filters=en,this.geom=tn,this.media=rn,this.net=nn,this.text=sn,this.ui=an,this._$promise=new Promise(t=>{document.readyState==="loading"?window.addEventListener("DOMContentLoaded",()=>t(),{once:!0}):t()})}async load(t,r=null){await Promise.all([this._$promise]),await Vh(t,r)}async createRootMovieClip(t=240,r=240,n=60,i=null){return await Promise.all([this._$promise]),Kh(t,r,n,i)}async captureToCanvas(t,r=null){return await Hh(t,r)}}"next2d"in window||(console.log("%c Next2D Player %c 3.0.0 %c https://next2d.app","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),window.next2d=new Jh); diff --git a/docs/assets/js/sample.json b/docs/assets/js/sample.json index 090c0e57..f1511b4a 100644 --- a/docs/assets/js/sample.json +++ b/docs/assets/js/sample.json @@ -1 +1 @@ -{"buffer":[120,156,237,253,89,207,92,215,145,46,12,254,26,3,114,1,18,114,30,46,171,252,125,167,208,64,27,125,225,70,161,111,105,91,178,212,160,69,67,98,117,157,243,239,123,237,136,39,86,60,49,236,100,82,162,200,55,245,102,34,199,149,123,88,67,172,152,135,63,156,255,227,15,187,221,207,239,223,252,227,219,241,249,135,253,191,107,195,255,252,240,247,247,223,107,195,126,179,249,195,238,79,227,251,247,223,254,240,143,239,223,163,241,122,209,198,239,254,245,179,182,108,119,218,240,215,127,252,233,221,219,119,63,225,98,227,125,183,255,78,30,203,247,243,255,165,7,253,237,251,55,63,189,249,219,251,111,127,194,201,127,56,254,135,222,119,52,254,240,238,199,220,250,221,79,111,254,137,238,109,245,2,122,220,188,201,251,239,127,248,249,155,159,223,191,251,215,87,127,252,195,126,57,3,119,202,103,163,143,221,217,63,126,251,191,223,239,254,254,205,207,127,123,243,246,219,255,207,31,118,155,63,236,199,21,54,95,253,249,205,251,239,191,249,238,237,187,119,63,233,215,159,222,252,248,247,119,255,28,183,217,109,254,109,188,118,127,92,190,253,97,255,191,198,251,215,39,249,58,174,184,57,221,236,197,254,69,244,226,240,34,122,113,124,17,189,24,199,189,128,94,156,63,127,47,142,216,144,63,255,159,127,254,245,221,91,218,180,216,41,227,182,223,254,248,119,219,143,187,29,250,241,247,31,126,254,215,219,55,255,231,155,63,191,251,255,253,240,237,159,222,254,240,175,121,194,251,119,239,223,188,253,95,101,76,127,123,247,227,251,159,222,189,125,251,173,33,134,227,127,252,248,223,111,199,13,255,52,190,157,208,141,227,127,28,231,183,195,252,182,159,223,118,243,219,118,126,219,44,223,108,20,127,255,65,166,238,205,79,255,39,33,144,31,103,127,230,24,102,143,39,46,250,127,72,219,64,18,91,32,153,49,114,26,9,16,222,64,149,63,189,111,6,56,38,225,255,250,246,95,134,52,55,188,196,31,117,247,237,165,189,59,110,147,239,14,192,253,116,119,63,182,119,199,109,242,221,177,121,63,221,221,183,215,238,238,184,77,190,59,16,216,39,187,251,5,115,28,111,142,187,228,155,3,135,127,178,155,31,219,145,227,46,249,230,118,145,79,117,243,125,187,232,56,58,223,28,199,118,55,183,125,248,246,205,95,191,125,75,68,220,218,7,206,248,219,183,127,126,35,216,226,183,194,1,114,143,255,215,95,255,191,223,254,237,125,102,35,254,249,230,253,79,63,252,239,217,184,0,245,194,218,44,175,229,251,246,112,253,230,124,165,199,2,119,219,235,245,155,11,55,94,230,157,254,182,240,57,255,239,129,114,127,254,238,221,79,255,156,151,93,230,135,95,118,11,125,217,201,127,125,59,38,251,207,239,254,78,139,52,46,242,70,80,176,78,251,127,255,244,221,24,201,255,250,225,237,88,168,255,231,15,63,131,241,194,116,210,74,127,104,84,199,229,219,110,48,113,15,215,239,111,108,1,78,27,122,24,4,60,23,224,217,239,39,192,127,206,129,76,102,241,221,127,59,79,88,134,249,11,89,201,191,124,255,230,95,210,53,237,236,15,239,255,249,230,95,70,159,32,128,254,244,237,223,70,247,253,198,11,201,92,254,58,126,35,168,250,235,253,55,71,153,192,241,186,124,115,144,166,221,55,244,107,57,150,126,234,127,56,153,206,29,95,165,125,99,231,224,235,242,223,114,15,111,249,186,158,252,117,184,184,253,178,59,219,111,244,203,206,231,158,227,14,227,175,121,127,251,238,157,179,150,116,190,157,96,47,97,230,206,14,1,188,110,178,86,255,251,207,63,64,208,176,158,73,227,27,64,169,183,253,31,63,16,183,150,70,59,80,218,6,12,16,24,20,73,254,55,23,53,140,49,185,37,106,252,2,113,225,6,187,250,197,185,166,95,200,249,48,146,240,239,79,44,115,19,203,124,189,221,124,179,93,32,255,170,155,14,251,121,183,124,31,31,203,175,179,124,28,191,57,207,255,79,178,207,247,223,236,177,107,79,242,185,145,227,128,1,22,1,227,235,45,54,242,81,241,194,73,15,148,239,135,111,46,242,215,184,253,34,130,142,189,46,247,218,238,190,89,122,38,135,108,113,253,173,94,109,7,36,131,159,203,33,163,31,220,132,254,142,107,200,181,101,73,181,83,203,109,228,98,131,237,149,51,78,130,112,150,191,174,114,234,198,113,209,85,143,220,75,159,109,118,208,93,25,224,70,135,113,148,142,75,203,232,169,244,102,33,120,122,205,229,175,139,92,65,127,203,37,207,58,14,249,75,46,55,122,97,87,29,45,210,64,71,232,1,243,183,76,229,217,207,192,69,129,205,4,39,234,49,87,57,233,36,125,90,198,111,39,232,170,93,117,64,218,32,131,198,202,75,139,158,98,243,187,215,111,91,25,216,152,193,229,199,114,216,242,194,133,249,183,92,75,46,41,115,62,166,78,47,103,243,52,90,228,122,74,38,164,229,168,48,179,245,21,51,200,24,231,201,80,199,111,140,74,102,29,103,45,66,237,56,139,65,82,193,119,171,148,4,83,49,126,122,127,48,119,60,37,163,109,233,145,174,151,53,96,78,234,105,179,215,10,104,163,101,78,92,222,70,242,90,230,203,223,118,114,153,165,227,107,123,111,237,218,77,15,176,138,99,124,161,11,203,48,182,99,43,121,155,130,230,104,155,112,243,245,248,161,43,73,115,179,92,200,33,185,27,145,116,184,159,194,48,213,221,106,196,245,146,179,6,120,42,248,132,113,74,255,65,138,231,190,21,33,150,218,116,199,142,81,24,206,30,115,102,179,161,152,40,117,83,186,30,193,168,133,180,8,140,43,16,187,213,22,61,86,90,246,58,117,3,7,209,232,232,32,187,23,77,72,236,140,208,26,223,93,101,231,209,174,172,219,150,184,189,229,234,132,86,198,12,205,93,101,216,251,32,87,193,213,9,169,217,102,245,97,205,253,237,75,77,125,20,246,190,226,19,70,57,5,35,85,132,133,33,140,191,209,125,61,17,184,26,216,99,222,115,92,12,235,238,55,212,81,233,172,42,69,176,75,96,38,168,139,75,159,51,102,14,168,91,110,168,75,173,120,1,59,5,163,192,241,25,27,217,62,185,16,73,241,155,8,41,145,33,108,5,0,206,114,103,160,130,187,88,88,116,34,176,176,222,70,44,44,168,96,96,97,21,42,95,29,15,139,201,121,242,176,175,131,135,29,172,161,126,16,145,83,68,176,180,217,62,85,100,177,176,169,214,180,3,254,157,187,31,220,39,136,141,82,45,39,24,122,27,240,161,227,114,126,140,92,68,145,4,168,37,144,148,98,47,226,102,183,96,89,181,95,163,85,41,151,210,17,21,191,7,6,194,39,143,74,14,187,72,175,183,210,13,125,255,24,76,50,58,91,132,225,193,43,23,68,226,199,57,34,145,182,136,71,190,200,66,99,118,231,58,131,177,25,20,213,121,65,107,27,28,58,38,114,185,192,100,57,180,73,101,139,147,137,33,0,14,226,200,65,18,23,11,35,224,7,188,167,11,23,56,25,146,128,41,63,28,186,208,48,249,34,227,79,148,10,219,233,186,4,137,193,80,248,80,234,167,180,87,85,46,206,66,141,175,4,104,115,86,70,183,13,230,32,251,232,129,104,199,47,252,161,29,208,38,64,169,78,29,238,51,127,51,95,232,77,180,219,32,170,17,135,231,151,112,234,9,121,80,153,77,180,16,200,219,181,180,137,184,88,59,202,153,64,108,14,238,132,55,121,139,12,138,38,205,46,165,91,158,90,32,0,162,69,230,133,166,118,25,88,106,193,126,95,166,149,219,192,52,50,3,73,171,130,38,93,45,223,249,248,174,44,30,120,78,234,33,250,207,195,8,27,65,249,71,168,204,38,75,135,171,133,22,93,165,61,3,145,54,65,100,166,243,128,4,0,88,56,104,54,25,122,85,177,61,182,216,64,177,97,148,217,36,0,69,143,110,35,52,146,146,234,166,111,38,132,39,173,157,83,154,243,245,133,41,203,135,75,49,93,49,168,46,240,146,218,112,45,146,207,10,232,53,240,217,1,113,129,244,102,63,212,93,83,183,86,221,126,221,38,109,55,115,191,233,25,55,180,232,35,98,24,220,145,208,80,193,82,1,135,173,96,185,140,8,51,170,28,84,221,129,118,105,80,73,145,113,12,36,105,146,5,141,156,47,167,206,221,64,103,4,32,20,166,94,102,244,44,107,185,149,115,43,228,182,248,160,162,141,138,92,90,12,84,209,84,143,202,18,208,117,176,217,192,112,6,244,216,247,30,197,148,29,222,34,129,132,40,26,108,210,161,156,6,47,53,216,171,162,184,140,98,118,123,21,197,229,187,208,233,178,78,12,64,89,206,47,52,58,210,240,72,227,21,250,164,79,36,91,131,213,59,76,33,21,251,22,54,145,177,101,105,161,244,4,157,51,236,166,22,166,185,207,42,167,139,150,80,250,52,92,161,214,135,73,253,128,162,104,180,200,167,46,218,232,149,225,80,83,240,130,49,213,57,48,214,9,29,165,174,119,67,163,59,234,98,8,127,45,110,150,88,146,210,205,178,91,7,120,169,10,118,202,56,10,223,131,229,243,61,162,63,176,85,151,203,143,195,105,243,242,126,174,251,61,160,131,130,49,100,110,84,245,32,119,191,246,218,188,208,77,189,136,50,238,83,9,52,102,86,149,18,50,71,152,85,104,44,116,175,64,105,49,251,129,237,62,244,28,206,184,202,93,84,97,97,59,6,87,236,71,31,38,168,76,95,232,181,156,34,106,18,57,246,36,80,243,49,18,6,134,28,36,12,111,35,17,3,99,12,34,198,50,202,87,167,169,128,15,218,83,83,241,5,52,21,159,31,188,100,171,127,24,190,150,201,113,55,176,231,175,79,244,235,83,237,89,44,98,218,179,43,222,164,55,54,109,235,213,184,126,219,214,145,243,23,220,246,87,225,138,207,177,88,238,13,41,116,53,252,114,239,73,113,5,9,191,220,219,114,249,101,36,75,127,153,131,163,254,186,198,187,27,234,193,207,212,183,216,157,109,236,207,39,255,249,59,195,196,43,110,98,185,207,96,18,6,51,244,194,59,62,196,162,211,241,186,59,111,119,135,205,16,45,246,174,83,62,158,78,219,205,118,115,62,236,182,23,168,39,218,198,230,124,8,11,139,253,230,165,143,254,114,58,109,182,187,227,121,191,155,67,90,100,196,235,121,123,218,94,78,199,57,164,190,173,57,91,149,167,67,4,121,241,67,63,111,206,99,37,143,135,253,245,112,220,143,81,64,107,177,57,111,174,187,221,229,184,61,158,212,218,188,210,148,207,133,111,199,194,140,191,252,69,63,94,175,231,253,246,192,3,95,214,119,191,221,31,206,167,57,202,166,169,158,10,83,244,97,17,35,31,97,175,15,195,45,193,240,71,111,245,120,186,10,93,139,141,224,137,159,159,248,249,137,159,159,248,249,137,159,159,248,249,247,136,159,95,176,179,136,232,67,161,226,37,163,25,155,2,189,201,45,34,222,70,6,60,53,6,12,7,60,111,18,107,187,123,242,206,243,206,193,228,99,109,83,179,11,51,253,121,122,83,139,54,126,56,95,39,101,48,249,46,79,203,62,217,63,38,202,119,173,178,222,150,91,16,204,65,230,92,53,102,76,31,10,86,255,227,190,170,210,103,95,22,88,98,96,198,12,19,74,83,124,175,222,191,237,149,251,225,64,65,158,127,167,83,212,34,49,12,14,228,132,161,251,122,134,162,168,79,165,249,126,234,72,200,119,83,173,153,228,237,142,41,61,234,145,106,173,196,15,243,162,136,87,24,211,3,61,127,158,144,97,10,32,104,66,19,155,41,96,135,153,174,165,58,156,181,153,37,27,50,57,195,166,197,41,171,71,75,27,150,189,66,134,26,141,150,67,200,184,133,78,187,25,42,205,31,204,67,112,147,113,67,180,121,102,170,81,13,220,20,95,95,61,162,117,124,240,159,37,224,198,245,96,204,48,135,87,37,97,62,217,106,144,36,39,158,249,175,109,89,92,128,108,44,241,158,210,42,161,242,59,93,43,81,176,181,198,180,50,240,229,127,186,183,90,191,134,43,116,180,141,193,195,92,237,171,216,237,212,179,128,17,224,243,47,187,28,80,5,132,0,99,16,56,21,51,82,226,39,161,49,5,102,118,146,105,192,174,0,103,128,96,64,21,38,82,176,18,252,146,221,35,3,64,199,238,83,182,22,19,15,134,121,238,215,162,44,87,89,80,243,215,117,20,128,223,14,92,203,229,213,115,79,23,36,187,31,121,183,3,100,246,192,27,215,89,118,146,160,143,229,38,39,246,229,101,208,40,56,72,81,208,28,166,3,125,222,14,165,71,77,159,105,84,121,192,52,23,253,100,209,108,150,205,83,247,86,218,124,117,5,187,69,110,0,193,129,165,135,165,132,45,11,70,13,72,183,226,228,128,178,137,228,225,10,5,233,71,154,80,200,134,248,119,75,244,141,24,194,47,140,0,238,245,179,172,110,150,104,34,27,168,238,235,96,2,93,154,94,157,9,180,205,17,241,52,129,254,110,3,14,149,87,102,31,52,241,101,56,179,203,130,114,186,20,167,1,159,104,68,38,146,123,237,160,160,193,61,123,185,206,244,188,38,94,121,54,184,175,146,249,166,249,37,221,129,91,191,130,117,202,216,24,1,84,19,249,194,221,8,87,26,191,28,211,129,93,3,5,87,63,225,226,157,69,147,193,179,227,124,242,78,60,79,214,29,123,132,156,56,122,84,183,22,35,232,38,210,22,146,70,68,14,108,157,177,42,240,16,91,196,201,249,227,236,78,38,179,197,227,116,172,69,233,176,146,36,66,200,26,186,24,126,17,118,7,155,99,255,169,88,3,182,192,24,88,162,49,147,106,145,79,50,121,197,176,115,162,7,246,152,215,219,96,150,200,225,145,254,87,26,0,39,113,255,127,242,226,179,133,157,136,116,158,141,211,214,208,191,194,210,117,194,132,198,25,68,226,57,105,231,228,174,161,139,96,8,6,219,204,204,10,249,99,17,32,220,237,21,150,129,220,36,138,254,178,107,119,78,125,11,61,47,3,227,145,151,105,137,179,198,94,147,152,218,102,238,227,226,196,245,154,49,120,54,14,133,43,235,50,51,194,104,73,151,32,48,75,168,171,219,191,180,199,43,14,40,40,34,32,144,128,94,42,6,10,114,71,229,80,9,111,41,195,229,40,77,127,167,213,10,140,34,111,241,130,1,2,126,168,40,4,104,61,111,193,186,77,195,86,46,59,61,224,1,242,20,245,6,184,113,3,195,151,187,18,190,44,239,17,228,203,124,164,216,106,72,82,136,56,156,252,227,197,116,0,26,109,206,58,0,196,159,51,102,39,124,232,142,121,218,247,69,113,148,37,181,170,32,72,208,24,0,182,1,232,14,224,91,148,182,138,18,9,101,174,160,213,188,0,101,137,202,34,38,100,159,40,1,19,138,142,142,48,157,233,105,81,129,229,176,186,194,231,11,45,93,0,224,252,11,66,166,204,79,241,54,47,63,128,33,243,242,2,31,175,47,123,200,51,125,200,43,227,230,133,233,30,56,40,58,206,15,54,220,211,1,204,38,168,171,37,178,192,130,246,57,24,231,98,148,0,169,16,38,185,183,64,18,107,2,74,163,107,40,194,53,133,186,253,32,150,85,90,136,74,34,88,194,137,26,176,221,112,87,247,216,110,197,214,164,41,152,93,117,94,39,206,129,146,28,13,107,18,80,10,72,135,137,144,101,79,33,186,45,243,67,45,22,18,74,188,208,200,54,192,1,143,170,183,176,244,75,147,41,128,75,191,133,173,144,27,189,53,169,156,48,163,27,200,68,192,113,180,136,8,152,215,69,140,128,83,37,79,2,115,179,207,214,100,80,130,78,44,23,138,120,123,201,166,144,252,225,67,156,211,76,23,51,51,118,152,121,133,23,9,17,159,20,20,128,252,50,52,107,22,130,59,184,216,168,110,95,90,88,57,90,154,210,89,22,78,67,196,27,25,39,60,8,6,113,42,198,247,104,95,40,212,35,204,195,76,171,83,90,156,255,10,192,35,142,145,70,50,231,92,169,229,30,137,61,72,48,209,213,212,132,20,180,180,0,25,13,214,160,85,11,92,254,114,45,154,67,228,98,208,107,105,131,94,202,127,35,188,192,198,2,86,214,231,6,182,134,197,193,128,225,64,217,101,3,65,116,133,204,76,6,177,248,152,12,132,5,113,232,13,205,62,196,146,110,48,159,88,188,156,51,40,200,230,225,80,8,116,224,17,121,113,166,145,202,76,254,36,27,144,45,168,99,9,85,239,18,64,250,234,112,36,51,3,187,69,209,112,11,250,75,217,71,92,129,25,226,135,231,157,166,1,144,90,208,57,14,38,142,199,40,103,206,81,91,186,42,147,208,225,46,42,176,65,168,241,63,131,216,98,127,147,196,143,37,142,97,91,132,120,53,34,199,225,72,19,214,145,130,8,10,225,144,153,132,55,160,73,44,222,127,136,172,57,189,148,230,166,153,97,51,174,155,89,198,167,80,9,26,0,217,204,208,63,173,184,192,128,25,220,60,0,104,217,240,20,0,133,38,85,100,81,147,109,102,108,64,15,199,195,242,147,89,151,242,208,64,107,22,195,164,45,113,0,25,16,161,121,34,48,67,26,45,194,104,8,76,50,208,33,156,191,8,5,148,231,38,135,165,141,62,43,102,143,109,134,94,233,84,158,27,210,104,29,244,93,250,91,227,39,219,249,107,240,120,70,246,29,73,40,132,163,161,46,149,4,53,116,170,18,179,150,226,85,178,152,41,103,34,173,13,245,181,88,67,138,13,108,32,33,193,74,11,79,13,216,197,201,21,140,118,214,28,163,183,213,69,122,161,192,182,104,83,67,174,42,77,171,20,204,79,11,164,48,144,201,64,64,27,2,219,209,224,66,167,59,82,94,9,254,100,20,217,158,15,190,44,152,248,115,147,173,12,227,28,57,15,236,153,27,228,148,242,59,83,26,98,69,109,122,13,76,211,132,43,34,148,59,145,134,78,101,126,108,70,205,131,36,43,135,13,64,166,237,169,151,115,221,3,48,27,117,83,129,212,167,55,222,80,183,230,52,76,27,124,185,53,155,82,0,194,78,57,212,238,240,45,75,41,178,156,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,146,243,121,215,102,79,239,212,136,54,50,77,101,250,171,100,96,46,61,8,12,94,19,40,138,208,97,13,233,16,223,22,171,27,142,50,16,22,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,36,221,255,112,177,148,9,238,227,101,187,25,108,230,171,78,42,159,166,23,42,115,186,46,235,181,11,113,175,161,165,21,180,64,134,173,127,186,107,8,63,79,114,56,201,204,108,33,154,98,42,58,10,65,158,77,57,218,218,57,101,246,37,155,156,202,84,178,167,92,0,22,64,175,242,183,229,65,224,60,13,169,141,148,218,72,162,193,150,43,107,162,157,7,38,164,182,20,162,19,243,182,100,30,165,97,100,42,187,83,41,97,67,46,19,81,109,132,222,36,22,175,8,207,105,229,41,36,156,210,152,52,240,66,192,161,40,21,57,57,164,163,64,100,224,177,244,255,144,118,7,27,129,178,129,120,203,156,7,235,154,47,5,224,203,19,111,206,134,2,93,158,82,210,91,200,163,137,116,190,45,4,86,32,109,46,179,214,157,176,35,202,166,161,153,211,169,180,188,90,173,20,214,10,106,69,148,171,210,30,32,44,55,152,31,156,51,42,126,213,153,255,139,38,129,248,21,24,111,210,246,119,193,79,127,187,15,169,17,85,86,212,184,33,183,187,124,127,184,95,209,238,48,119,93,190,165,66,33,217,189,195,228,34,115,73,65,12,21,125,100,4,99,103,187,171,166,89,124,200,132,79,253,130,28,217,157,238,233,123,72,224,9,93,82,204,47,136,222,15,154,16,75,218,20,114,40,32,226,64,99,173,168,76,91,56,215,202,204,31,148,27,146,218,51,166,10,202,87,153,233,38,114,19,231,83,181,236,101,190,237,214,207,99,108,27,134,1,241,201,60,28,38,123,164,2,88,200,62,131,84,17,169,45,104,14,214,36,189,78,34,108,5,71,238,7,119,141,114,58,233,128,18,237,168,2,169,111,59,111,113,218,85,148,42,73,233,98,28,178,223,86,39,196,147,171,250,33,76,180,86,110,237,233,183,102,186,152,100,170,164,60,78,214,224,236,78,68,52,238,191,170,199,161,27,222,160,98,17,41,21,5,47,56,99,84,47,71,25,77,10,162,51,53,145,59,198,38,13,80,163,37,50,152,44,45,12,0,54,19,185,133,174,92,116,86,166,174,35,159,121,44,255,7,47,171,51,164,172,189,76,205,193,121,183,74,145,179,83,191,145,224,128,45,11,165,41,232,50,227,211,130,112,237,170,83,162,162,251,170,8,23,1,21,174,17,115,70,170,136,151,101,178,42,181,97,55,186,140,162,211,236,124,113,85,232,22,157,111,208,10,87,165,49,119,27,138,207,44,164,89,50,68,7,145,160,42,235,116,105,174,105,11,25,108,216,133,130,84,117,65,147,71,153,138,201,103,28,220,17,28,76,27,145,48,75,141,141,100,25,70,54,43,93,36,106,55,121,237,202,138,175,113,235,142,214,27,86,169,178,101,51,239,24,39,152,34,173,42,177,40,183,168,94,37,140,133,118,122,126,84,111,41,52,156,41,60,205,135,230,63,90,227,5,73,170,169,162,207,170,120,228,252,226,141,137,66,106,250,158,113,203,24,47,98,196,140,47,51,58,53,254,50,57,9,227,20,66,250,145,230,195,128,121,131,192,55,212,188,178,10,225,210,32,153,133,47,240,24,15,130,228,66,243,91,138,220,40,124,59,201,172,8,112,171,82,30,119,62,118,21,186,58,165,179,172,205,201,44,64,165,179,13,49,110,8,54,93,25,17,94,129,149,152,43,201,190,97,137,90,87,234,82,41,80,33,82,133,140,117,214,153,198,166,83,155,138,41,168,227,108,210,220,20,14,201,135,13,22,62,50,32,32,240,196,81,52,191,88,61,148,9,59,95,144,181,33,141,224,153,247,59,203,126,124,18,225,141,15,72,68,85,4,90,151,136,122,250,236,108,96,22,209,226,229,139,124,103,59,216,201,40,204,90,89,154,214,59,78,255,17,142,66,66,110,203,34,79,36,199,42,18,48,214,80,194,7,244,50,141,246,230,134,146,135,112,125,194,236,89,46,35,68,212,240,133,157,137,177,88,33,243,14,91,131,176,120,97,190,151,231,112,84,5,221,190,207,187,217,80,191,74,32,43,17,213,85,78,126,100,62,143,13,92,20,205,64,34,65,149,134,84,42,83,184,250,196,247,27,133,141,206,212,4,75,121,181,170,152,221,136,226,149,212,183,146,52,206,49,192,8,183,201,25,74,49,74,87,0,8,158,224,255,45,33,175,187,236,160,5,168,77,207,39,229,29,25,114,215,253,248,88,221,198,250,52,229,125,77,104,157,55,157,165,137,200,98,60,217,184,117,241,32,227,150,172,186,101,244,149,209,67,133,164,2,106,21,26,51,219,87,89,195,14,219,86,140,220,232,11,89,169,216,106,29,121,26,61,192,128,189,38,216,175,162,113,187,200,94,25,193,105,131,28,58,58,127,15,117,232,76,81,26,174,255,239,44,251,217,246,159,156,3,178,239,64,114,45,200,190,7,64,102,148,66,83,119,135,155,142,121,62,136,214,58,12,20,132,95,8,66,217,212,69,222,79,88,32,17,239,170,95,104,120,154,194,247,36,206,168,178,96,149,77,195,52,4,29,146,238,108,167,76,166,48,39,214,148,180,74,183,21,77,69,31,213,114,176,13,159,187,162,37,99,78,187,114,227,149,99,231,165,147,70,113,70,216,158,151,29,180,239,243,5,55,206,61,0,71,170,48,0,11,236,52,29,154,23,54,89,34,150,54,242,105,80,137,214,120,115,42,38,96,179,100,27,147,83,219,54,94,39,141,255,197,13,55,141,168,227,107,87,168,46,100,179,220,21,38,42,220,52,176,181,162,124,11,94,56,164,192,11,51,127,103,26,238,108,239,134,74,3,81,211,138,12,228,36,243,38,133,175,63,185,201,47,167,98,113,180,212,166,111,161,104,7,15,186,134,170,139,8,170,138,226,150,212,162,183,130,0,27,39,188,172,214,169,138,159,164,25,234,76,254,212,203,22,43,23,55,61,70,211,124,184,179,96,209,174,82,76,47,145,168,48,146,85,228,71,137,11,170,59,90,210,86,102,117,102,232,128,218,10,50,86,111,156,206,146,91,90,60,71,11,104,105,85,42,65,12,58,223,149,253,204,156,18,243,53,29,223,195,124,209,10,235,148,88,171,204,123,37,78,233,42,160,43,174,248,219,85,30,57,173,103,113,204,236,92,55,147,111,103,114,254,44,144,217,192,110,4,26,234,131,219,115,216,69,171,174,89,241,28,100,231,194,27,206,135,189,227,162,59,53,102,167,199,2,130,220,185,155,137,229,239,10,44,81,20,16,226,74,70,83,77,148,13,135,247,20,89,146,163,196,63,191,227,191,39,122,247,29,167,124,101,100,237,56,49,5,50,60,164,229,240,120,56,24,249,177,186,20,229,231,137,102,60,29,10,2,156,66,213,6,231,184,201,15,142,88,95,213,14,69,151,24,70,64,92,61,136,29,10,24,13,242,176,111,7,156,125,210,0,35,237,66,0,3,153,149,23,80,146,201,220,246,88,119,6,246,134,120,81,171,183,196,166,35,109,11,129,223,202,225,92,56,16,81,249,168,5,232,231,82,143,26,130,83,178,144,85,84,138,108,172,163,17,95,56,37,201,182,82,157,63,185,148,76,17,203,41,45,4,124,215,152,169,9,130,220,112,147,14,195,138,248,16,56,3,153,91,146,189,136,217,189,250,7,201,226,168,135,66,65,230,8,147,97,61,66,38,8,28,112,78,174,171,206,75,217,222,115,230,119,30,66,26,109,133,230,32,138,154,94,63,214,179,64,92,107,104,72,161,245,128,4,82,12,123,82,18,114,144,50,85,127,42,123,67,113,148,180,59,233,46,230,10,22,154,146,22,123,54,80,96,58,21,160,129,15,48,77,155,155,164,25,36,163,124,160,163,72,177,158,193,19,27,234,68,138,203,4,151,10,158,145,210,88,113,165,55,119,115,2,8,80,29,29,43,5,103,37,118,112,30,121,175,195,7,144,203,238,80,76,210,244,108,173,249,203,208,166,37,93,128,3,93,70,181,46,243,191,101,203,106,71,208,84,91,224,69,205,91,61,121,201,217,105,58,244,112,109,111,10,189,187,63,184,183,129,233,10,248,171,155,35,41,30,202,190,12,187,176,223,168,124,111,87,181,17,212,154,128,75,59,40,116,186,44,205,202,4,181,179,88,103,186,89,142,186,102,121,97,195,226,175,131,70,92,154,237,85,226,121,123,111,184,130,112,81,84,135,10,147,144,246,72,213,52,138,222,1,241,86,182,132,203,0,17,251,110,148,155,235,31,215,189,23,247,102,216,187,107,219,187,32,128,140,36,34,22,137,88,166,32,161,136,163,86,208,88,65,117,21,31,86,156,217,97,214,128,126,19,106,142,120,123,13,183,23,244,95,8,68,115,211,2,225,237,62,104,54,75,77,94,88,48,118,33,161,129,204,118,84,152,136,244,10,25,79,132,190,176,2,1,118,69,82,150,86,13,149,184,45,98,177,218,212,26,98,196,39,106,67,83,166,13,43,75,138,4,114,41,144,22,21,148,167,50,34,197,139,41,115,100,218,33,169,125,16,12,141,156,155,107,182,244,41,3,166,54,34,231,209,34,253,174,103,121,68,157,99,141,122,237,157,190,121,203,199,41,105,110,80,111,159,186,199,189,103,109,152,121,130,86,180,145,177,74,64,57,220,57,185,175,10,120,50,125,219,149,88,1,236,143,144,166,161,99,136,11,53,142,52,187,163,233,149,228,71,166,160,178,13,137,175,232,24,15,133,124,236,123,219,109,169,155,228,175,49,3,107,72,215,63,187,174,125,155,37,230,84,83,192,72,214,194,113,226,44,221,27,134,145,234,225,18,188,18,195,34,10,194,233,136,56,163,195,120,234,233,214,109,231,154,254,151,17,134,73,88,155,43,20,72,227,90,138,105,12,247,6,26,244,164,12,238,205,115,32,174,3,7,49,174,243,213,116,169,237,56,65,66,5,148,0,71,13,165,21,149,147,68,29,73,215,78,188,245,239,44,27,38,243,154,202,134,33,47,92,80,134,52,186,144,215,152,100,163,175,64,244,76,178,241,251,172,26,118,31,124,125,226,34,87,82,141,247,19,192,216,71,22,185,18,58,251,165,65,59,77,229,235,42,197,4,46,242,186,160,248,103,246,155,219,202,79,240,27,87,74,67,35,180,213,243,211,170,114,210,248,123,88,24,135,202,83,200,227,213,98,194,93,93,229,213,113,149,235,55,15,28,23,2,174,112,176,150,107,170,219,203,180,87,204,212,121,66,176,175,211,218,104,231,158,229,44,205,174,11,147,231,228,104,212,34,1,217,130,236,138,151,154,203,14,23,134,253,214,19,55,142,113,169,47,55,178,239,152,20,56,39,102,100,72,35,46,78,141,156,75,45,208,152,208,108,204,167,122,73,201,81,215,144,16,91,91,2,183,135,217,87,223,52,75,29,170,39,203,89,2,201,196,239,33,22,217,22,1,125,64,242,253,57,20,59,11,49,181,249,202,247,114,114,117,158,85,211,116,165,20,215,194,136,233,48,73,248,28,13,81,10,166,6,85,49,40,36,24,191,6,112,49,199,130,152,191,110,12,7,134,105,21,231,17,254,196,113,239,55,102,206,230,32,204,18,230,45,204,37,220,20,100,221,212,128,222,108,145,180,140,117,153,3,20,52,80,18,161,168,1,179,0,134,5,72,35,16,71,40,111,55,66,92,195,219,9,158,238,226,119,109,159,6,134,119,52,2,7,17,199,59,150,184,176,188,210,246,165,237,62,84,62,63,2,37,107,111,102,13,113,215,188,144,183,34,103,254,50,180,103,193,125,172,245,156,203,75,39,205,26,25,164,198,229,232,6,120,101,145,138,200,188,88,88,107,196,23,33,37,230,78,100,159,29,103,119,191,107,89,129,164,195,170,122,27,173,170,246,55,44,170,244,230,245,9,50,207,220,223,175,137,95,50,55,52,242,12,157,129,222,136,136,183,80,21,87,16,154,186,215,163,1,146,39,27,87,17,224,116,60,110,88,176,236,55,230,165,132,58,246,148,64,47,244,11,1,43,26,60,78,110,117,218,192,46,110,234,68,50,137,44,40,206,180,184,0,251,165,156,95,177,5,102,39,82,209,25,166,194,196,0,33,114,232,47,84,153,236,72,231,157,21,100,38,46,177,243,173,115,149,230,137,238,22,162,89,169,54,119,129,255,75,42,119,232,227,204,107,117,58,213,216,223,9,91,99,204,142,245,113,175,224,137,205,29,134,234,181,204,67,156,173,110,62,235,132,79,229,151,49,222,80,179,249,37,166,87,51,37,144,114,38,105,22,149,0,183,161,43,65,46,141,240,140,230,0,48,183,3,209,13,64,45,227,176,238,244,113,204,123,162,217,54,117,111,213,89,46,11,193,43,5,23,110,143,231,225,155,246,123,38,142,165,29,107,14,199,46,179,213,204,104,4,246,213,68,28,119,17,109,189,90,160,217,128,229,72,179,49,148,64,180,151,217,120,117,52,91,248,162,39,205,126,53,58,142,43,248,100,136,34,200,204,139,15,183,52,168,127,150,121,110,169,204,71,245,236,112,140,98,37,242,248,178,164,192,156,77,10,217,191,67,155,245,130,26,32,154,82,78,34,179,13,179,227,153,121,162,185,14,67,205,28,75,202,110,140,43,140,143,245,58,20,157,135,78,78,83,42,46,66,45,158,170,138,147,201,17,154,243,164,116,92,30,192,18,225,77,203,86,185,136,187,253,251,2,128,90,83,221,65,216,188,150,30,209,81,156,133,16,212,202,226,21,236,174,172,27,9,102,37,8,222,158,241,210,87,131,230,7,146,150,10,100,49,225,34,196,119,163,148,33,204,1,105,55,85,82,103,213,24,164,108,228,210,159,107,186,156,10,133,128,174,60,26,120,9,181,9,186,3,35,23,88,86,168,35,132,146,34,189,52,20,7,104,66,134,234,57,237,166,100,162,234,100,6,41,39,135,113,181,72,113,218,65,77,110,207,32,174,90,24,91,62,205,206,135,137,86,119,99,115,50,245,120,84,107,49,157,5,188,28,45,59,3,42,217,112,12,26,210,175,81,4,0,217,52,221,123,123,38,132,51,182,40,230,217,229,148,87,6,244,238,83,111,138,155,208,130,142,113,94,82,6,133,5,60,176,180,190,87,116,117,104,235,78,237,212,92,17,44,27,149,191,212,20,251,84,117,1,32,210,181,208,73,80,129,218,40,67,95,176,215,109,3,134,148,100,198,254,82,150,209,220,148,206,148,171,205,197,118,52,104,229,249,40,93,37,220,96,67,36,15,146,149,211,138,44,224,152,146,93,199,203,35,24,201,182,50,225,2,139,43,42,169,122,216,132,13,101,32,249,163,216,38,159,38,223,112,152,239,237,120,79,68,5,139,171,9,7,39,43,74,33,125,16,178,97,44,234,113,10,240,21,167,145,16,0,166,172,119,200,183,131,163,166,18,207,14,50,116,173,235,238,46,110,10,238,220,194,29,20,208,18,45,159,92,80,108,93,149,169,46,248,198,244,250,164,172,28,125,130,50,83,90,144,83,124,104,59,237,127,219,137,138,41,198,1,160,138,238,100,14,1,196,139,106,140,22,216,13,220,213,208,188,172,8,141,33,250,219,167,124,26,15,160,218,92,193,135,13,206,164,113,10,115,4,127,1,0,32,238,166,105,41,249,254,166,21,158,126,107,208,229,82,139,169,239,60,252,106,52,41,134,224,250,51,208,224,81,217,16,228,162,164,89,137,157,82,196,82,49,192,26,146,152,168,49,158,132,203,56,14,2,238,87,220,238,13,170,25,36,98,100,37,74,200,219,34,92,7,188,83,97,82,10,35,211,113,59,45,83,4,28,63,229,32,243,130,226,18,70,58,243,169,9,71,57,70,178,91,114,191,176,85,56,67,176,129,10,35,179,105,38,224,154,71,166,93,245,68,10,75,155,38,32,101,216,178,27,42,194,128,157,131,106,217,142,38,247,130,227,46,48,38,211,189,69,78,201,232,121,219,146,89,79,202,55,171,214,19,230,88,128,151,66,30,110,184,254,16,82,142,253,182,244,239,54,188,91,76,91,228,237,58,238,143,41,77,101,32,173,102,15,59,45,217,5,66,98,144,224,106,137,251,152,35,57,162,32,64,218,139,86,137,163,104,58,50,216,81,75,40,186,40,109,246,36,16,156,167,59,206,18,165,143,98,210,101,4,136,34,107,141,34,241,213,111,80,41,38,102,228,51,8,238,151,243,222,184,123,23,143,165,75,143,94,213,118,51,47,64,136,84,181,134,112,51,195,119,232,14,107,16,103,50,2,10,112,53,207,179,185,158,97,146,100,218,58,246,193,50,45,115,248,176,241,15,224,118,189,232,5,204,104,54,84,5,37,133,52,223,30,230,186,55,185,22,216,240,2,128,154,72,71,10,49,187,46,92,234,113,99,10,11,235,88,157,52,36,64,7,34,16,39,130,152,45,52,57,41,131,153,237,60,218,233,154,25,62,28,130,180,216,174,227,131,132,136,38,8,184,17,63,2,19,49,47,166,45,190,97,148,61,139,45,200,50,75,43,76,163,2,235,100,12,79,178,116,15,230,193,150,72,45,102,209,219,93,23,218,163,43,13,248,7,77,162,218,52,122,109,142,6,143,247,187,51,151,109,203,166,200,2,131,14,9,183,51,189,45,101,36,51,201,242,164,243,158,97,218,91,114,10,118,226,25,136,27,48,209,139,216,129,134,253,168,60,74,195,200,16,88,6,182,137,76,190,85,106,44,140,84,199,109,53,60,153,121,155,42,103,178,206,222,209,228,202,116,123,204,163,115,138,16,3,29,161,17,128,0,94,114,50,181,209,100,155,118,206,92,227,40,58,58,0,244,48,135,71,121,146,189,201,144,147,95,223,195,62,231,248,76,129,192,133,229,211,112,4,238,225,154,234,136,22,178,127,72,56,54,102,151,36,7,82,212,204,152,66,98,73,156,147,104,216,148,142,157,105,184,158,142,57,106,120,40,71,88,19,33,120,19,9,122,69,246,107,36,68,117,16,226,64,171,14,213,118,24,217,80,118,139,208,43,202,103,130,144,8,198,170,92,10,167,15,230,138,188,41,77,80,20,123,235,116,79,197,199,92,20,67,184,129,5,104,216,9,120,56,179,240,10,123,78,174,24,16,47,213,80,211,74,114,153,46,179,77,199,28,11,60,175,14,171,192,42,11,208,49,10,29,59,81,203,90,117,226,121,35,197,55,178,254,45,254,136,152,40,171,8,82,14,225,28,38,182,96,85,208,103,62,174,97,247,122,29,74,81,152,76,36,67,229,26,152,17,93,97,85,75,246,50,160,57,118,9,1,126,129,30,15,44,118,200,44,130,152,26,206,84,10,83,224,236,141,85,210,228,163,148,8,25,5,102,33,43,114,52,22,75,48,141,193,90,152,122,134,18,48,178,227,36,50,28,202,96,188,130,213,106,129,45,140,106,18,193,18,73,153,2,193,131,228,220,129,49,71,140,230,101,96,155,26,210,158,120,67,170,198,129,155,115,193,8,99,163,104,78,17,109,195,186,106,107,74,25,91,96,255,37,154,234,176,104,54,3,234,160,218,88,253,247,228,181,252,86,206,126,221,96,200,42,215,214,202,134,85,128,84,69,171,15,222,90,230,184,120,20,247,86,188,104,120,29,35,98,68,90,76,230,164,237,58,213,63,52,54,227,118,136,240,26,226,167,12,22,115,23,137,100,110,250,43,206,72,103,226,9,36,73,168,59,82,214,52,163,71,128,135,170,228,174,138,240,70,91,222,232,212,27,205,123,175,159,207,250,161,94,139,212,40,155,26,94,146,87,97,89,152,170,161,7,72,130,36,195,134,181,112,71,211,147,150,226,130,64,157,76,225,201,241,107,164,175,119,170,16,245,251,177,197,244,134,193,68,16,251,55,237,253,161,146,35,144,13,82,94,100,79,188,89,237,133,113,166,5,148,185,139,29,148,13,92,119,187,87,248,123,11,247,68,149,105,73,3,87,53,249,69,189,86,20,112,96,141,67,75,213,227,209,141,204,249,183,216,255,162,226,169,83,77,37,237,213,45,45,23,179,153,45,43,26,152,213,85,150,150,73,1,24,55,94,27,160,22,207,153,106,66,118,96,139,99,94,44,69,79,52,106,13,107,118,146,9,230,183,178,195,204,94,84,253,91,167,164,155,185,232,60,92,142,242,59,126,109,226,5,69,147,77,33,72,127,185,238,138,226,12,227,218,177,131,79,228,32,90,45,85,85,102,85,70,163,225,70,248,242,225,142,204,108,180,26,54,197,253,148,72,79,227,169,201,89,140,43,225,79,115,46,87,34,64,76,157,143,3,231,248,180,89,131,130,221,44,111,50,193,2,49,141,190,57,43,71,211,176,61,129,55,106,120,167,200,92,117,26,69,168,182,59,101,80,150,99,26,97,167,51,106,53,150,47,86,26,117,106,165,168,120,234,132,38,152,134,42,99,221,51,224,29,163,206,234,193,78,129,24,52,140,107,106,200,212,133,208,173,160,64,140,82,70,39,136,180,162,74,212,50,178,26,178,19,84,96,165,20,243,39,51,171,112,130,211,149,80,58,203,89,67,77,194,99,61,18,2,75,40,139,134,121,31,112,188,105,74,154,109,69,18,171,184,210,216,33,73,245,87,21,105,176,161,69,133,39,87,58,6,79,65,184,11,178,61,109,84,229,210,41,247,182,69,50,184,41,195,14,177,169,241,169,131,211,91,97,157,51,115,157,84,137,24,123,173,58,232,218,166,106,78,173,6,77,12,156,8,107,232,139,153,163,27,29,101,229,155,87,143,225,172,207,217,80,27,245,136,171,234,198,70,43,217,152,120,227,245,59,207,35,90,225,133,200,152,216,11,193,11,95,108,63,106,163,46,130,41,234,76,125,170,203,163,59,73,213,55,67,23,2,58,101,152,51,251,159,52,46,42,197,133,37,230,241,12,254,47,157,107,132,165,31,205,92,114,227,91,84,253,143,178,135,210,84,182,231,242,214,174,249,156,233,65,98,70,9,69,237,54,3,89,201,107,117,83,161,124,130,114,90,14,178,229,153,225,60,142,97,103,2,19,34,69,164,174,171,165,9,40,19,186,37,28,93,142,203,121,98,149,115,12,167,194,52,107,234,165,108,219,158,72,10,196,33,168,166,136,155,180,92,172,196,149,118,94,110,141,179,88,113,102,41,238,46,64,93,36,75,3,15,145,144,14,152,34,1,87,121,56,175,106,27,238,115,87,62,236,41,252,80,158,111,32,46,118,134,66,164,127,182,117,207,169,182,49,147,10,36,10,136,107,98,228,138,184,105,125,114,173,121,236,39,213,139,8,229,106,179,18,163,213,116,216,188,38,186,14,34,8,118,7,34,87,200,100,80,24,164,200,172,49,55,87,184,61,230,7,41,130,109,66,178,37,121,101,23,240,66,2,50,149,224,25,152,203,141,108,36,27,142,77,170,54,26,214,18,192,102,224,181,231,7,202,51,118,75,72,28,244,3,211,96,209,27,30,170,70,191,81,252,199,219,195,140,209,88,36,102,160,33,93,140,212,103,43,6,137,206,108,209,90,55,248,142,32,36,141,23,65,35,15,37,153,41,9,85,134,45,130,211,107,81,101,21,53,81,213,36,101,109,83,241,104,136,253,37,165,153,34,227,86,102,204,156,106,82,63,70,5,229,154,26,179,81,118,118,58,209,78,115,90,68,17,196,182,38,190,47,136,47,149,87,172,28,101,195,119,70,238,180,231,95,157,73,35,22,135,197,58,136,19,156,132,144,231,24,118,246,206,195,6,153,185,131,85,99,186,244,88,238,111,114,210,237,13,33,77,83,53,170,116,150,151,117,95,66,50,68,53,230,170,198,49,40,140,14,74,105,181,207,102,51,193,138,19,199,29,190,30,108,75,104,76,14,171,118,137,91,70,157,198,242,211,216,135,26,43,18,132,209,169,113,151,11,185,231,52,57,217,242,157,216,135,103,54,229,238,244,122,253,21,165,120,175,57,207,218,245,85,13,252,13,95,135,234,15,209,249,76,172,248,85,68,9,204,189,134,87,20,249,189,169,33,217,35,138,201,162,213,124,100,138,27,201,114,71,182,153,172,175,210,126,238,31,228,161,42,0,146,144,216,10,145,44,101,174,138,162,235,18,212,13,19,70,181,114,80,239,164,235,2,169,23,141,252,146,25,236,140,10,141,181,128,50,252,179,171,6,109,144,142,87,104,73,122,103,242,239,140,17,220,11,144,172,168,147,204,26,203,162,211,108,244,158,5,71,87,68,222,232,50,162,188,78,242,252,154,200,159,129,34,47,76,103,161,170,164,191,97,15,108,40,119,86,150,104,249,32,46,129,216,176,203,55,184,234,192,125,55,230,160,104,47,90,49,42,117,171,221,67,69,227,47,82,157,74,104,124,178,29,212,109,72,86,36,36,14,11,201,208,170,168,87,5,194,86,110,236,4,204,78,16,69,182,61,179,5,112,27,203,181,54,23,156,58,196,244,195,100,193,106,165,113,64,68,57,79,185,63,22,217,193,137,178,49,220,216,85,82,110,187,91,122,158,32,49,148,80,106,146,149,76,185,43,19,81,37,247,40,224,247,42,0,86,18,144,2,11,154,132,78,213,144,180,17,171,58,139,58,147,221,124,215,117,105,150,175,95,229,48,9,2,147,34,42,73,6,203,237,101,165,4,76,163,46,232,181,10,157,246,161,106,41,58,16,175,235,220,67,67,3,51,218,146,43,12,178,254,8,251,71,153,151,27,1,100,57,204,204,180,201,238,62,103,151,114,7,183,25,119,198,179,163,156,13,57,212,129,155,177,196,238,196,91,167,73,165,38,199,24,170,242,88,161,137,157,230,166,93,176,114,187,218,167,174,223,186,166,212,52,175,196,98,30,60,73,147,43,130,241,1,76,51,64,146,12,67,152,109,125,221,245,191,137,15,232,98,43,155,0,204,18,164,25,167,10,176,125,35,96,137,155,214,165,19,158,119,190,152,172,148,103,205,217,94,87,182,87,55,235,1,166,56,152,81,19,222,210,17,53,158,41,243,239,89,114,136,114,145,174,220,7,165,190,42,28,214,149,106,150,179,93,244,14,54,18,0,53,64,214,128,98,152,57,225,33,149,212,203,164,201,212,183,211,221,109,216,188,173,219,189,95,227,80,107,224,67,43,52,166,133,73,171,119,115,125,221,144,213,123,191,117,78,114,53,132,173,141,33,224,171,73,187,40,103,61,45,80,155,2,56,147,168,172,156,79,33,180,125,148,109,13,196,77,177,186,49,154,247,6,206,206,152,189,98,255,134,68,116,116,164,97,80,42,23,67,131,87,155,142,40,225,132,219,59,173,128,91,187,155,234,166,107,246,102,221,190,43,226,120,4,63,18,236,59,185,159,212,2,107,186,131,198,79,181,115,102,13,154,158,86,23,228,170,162,6,177,72,8,130,230,155,22,2,36,18,67,91,128,174,168,206,58,253,90,81,193,37,37,93,112,41,104,93,14,220,35,97,93,118,47,242,61,187,45,118,142,141,85,67,210,40,27,26,133,68,49,28,23,211,50,207,202,157,85,9,122,127,21,246,103,9,254,46,171,94,49,166,26,167,90,131,102,116,160,19,145,121,156,249,228,112,123,237,180,108,35,89,147,3,167,123,185,47,183,28,238,26,115,203,33,153,43,229,51,49,99,104,72,104,162,141,175,47,165,201,130,243,158,41,77,94,75,74,19,72,176,84,97,57,148,194,182,90,65,94,138,8,27,148,11,168,88,5,191,148,146,112,230,64,180,114,17,190,207,115,121,111,243,189,100,187,191,121,234,184,120,103,22,13,170,242,11,217,219,245,100,51,205,162,151,78,180,2,157,212,191,84,169,229,151,38,57,68,199,35,122,145,113,229,28,135,203,189,83,142,195,215,152,46,233,153,171,253,117,165,56,44,57,213,168,4,13,103,80,147,253,236,182,240,41,25,88,44,141,234,104,225,131,8,133,45,213,63,130,46,58,222,15,194,28,56,17,118,91,180,2,55,236,74,74,233,249,166,112,129,4,194,240,26,160,156,186,238,22,234,254,2,236,169,232,165,165,237,43,235,80,184,71,55,18,20,222,153,177,173,86,139,152,89,220,66,198,54,144,117,78,216,54,122,240,250,80,16,74,71,62,81,208,171,40,23,97,20,231,131,245,34,150,237,177,236,84,219,119,95,162,213,184,146,103,107,215,106,69,76,191,64,235,39,75,241,12,54,48,33,31,148,249,248,237,10,137,236,64,168,239,187,175,29,253,41,110,220,87,48,193,13,242,141,129,154,127,179,1,227,250,191,225,60,27,218,250,236,243,220,3,214,111,63,207,237,128,127,251,121,238,235,241,124,252,62,250,149,149,113,158,68,227,73,52,62,72,52,94,87,197,36,11,210,221,63,92,191,17,64,52,164,184,231,140,127,158,126,139,30,64,204,40,143,214,115,83,55,60,94,207,31,117,206,205,155,111,129,246,199,150,121,165,245,187,42,162,234,129,179,55,111,191,29,55,220,224,184,205,31,246,227,138,35,210,101,63,46,255,167,31,255,231,251,31,222,46,173,95,241,223,250,28,7,253,113,105,24,119,25,7,198,211,255,252,230,253,247,223,124,247,246,221,187,159,190,146,175,99,230,254,254,238,159,95,45,199,255,219,120,157,229,196,221,232,222,188,145,12,243,79,63,190,255,254,135,159,191,249,233,221,187,247,223,252,227,221,251,119,255,254,227,223,255,242,254,221,191,244,230,127,196,145,114,200,207,223,190,255,207,183,239,254,250,230,237,127,189,249,233,135,55,99,134,191,26,127,201,66,253,247,143,239,245,171,140,117,233,227,56,109,252,226,105,252,226,58,128,153,115,26,100,92,44,208,133,192,63,143,120,30,241,60,226,230,17,159,74,95,242,169,196,188,143,20,47,191,144,150,70,242,119,127,137,251,126,148,214,226,19,222,183,247,52,248,237,239,219,155,0,126,123,45,92,95,224,237,179,107,45,212,228,45,158,105,22,243,170,158,69,198,28,189,236,195,36,35,84,115,152,6,6,205,195,36,180,188,57,76,12,113,187,112,152,56,6,60,15,123,140,195,36,180,233,246,97,154,222,173,57,78,156,68,76,78,62,254,135,180,105,204,77,60,78,252,247,14,143,112,220,175,87,50,77,215,79,113,199,124,217,66,225,112,238,185,94,207,231,237,112,8,220,158,14,155,147,121,246,108,182,151,227,238,176,61,93,175,187,237,5,249,155,186,182,238,108,51,246,47,206,167,15,48,250,205,113,127,61,30,55,231,203,118,14,254,176,63,140,1,30,46,151,29,26,251,182,230,100,11,19,19,135,222,199,93,250,253,245,176,187,156,183,155,235,158,214,190,52,222,94,252,23,63,1,143,188,111,115,223,221,111,103,40,93,95,60,220,157,206,35,26,115,115,57,2,146,68,19,181,185,158,182,251,205,158,225,171,109,204,39,123,60,134,145,171,151,59,240,203,121,115,217,31,246,199,205,145,199,62,112,202,121,55,126,5,220,210,54,54,231,123,80,201,248,249,210,199,127,222,109,246,251,211,117,75,216,230,116,221,159,54,251,227,246,168,45,77,67,62,201,82,134,136,155,217,227,174,248,230,114,184,158,28,172,155,166,118,181,225,98,247,16,123,252,112,190,236,198,251,229,16,182,249,249,52,151,54,253,108,206,25,177,93,51,243,247,19,35,127,94,203,221,82,194,232,193,40,56,66,152,71,4,205,163,205,249,35,90,166,61,41,194,99,112,250,187,227,72,89,112,221,239,9,19,15,74,179,191,28,183,251,237,101,182,174,52,118,231,163,214,195,67,176,250,231,221,233,114,58,159,206,71,22,116,206,131,214,94,246,87,195,182,93,75,119,230,204,123,241,184,171,126,216,108,246,87,112,20,77,67,119,158,5,40,63,192,130,63,240,78,45,93,183,88,166,161,142,124,249,208,118,57,93,206,231,195,129,57,220,205,225,178,29,242,203,105,235,44,236,74,99,115,186,22,175,255,122,187,196,12,191,252,209,31,119,151,227,102,127,24,73,136,198,56,108,248,215,193,209,95,55,23,226,224,87,26,187,243,45,86,120,76,192,3,200,55,203,2,158,119,135,161,42,153,242,139,2,192,230,122,60,111,246,174,75,74,13,221,121,22,77,179,44,253,195,161,155,151,183,103,95,106,56,197,125,225,58,203,220,124,202,144,157,79,19,177,243,145,214,186,125,111,141,253,220,198,186,48,147,191,92,203,143,74,10,75,250,138,199,218,156,150,78,120,176,112,15,178,55,109,253,190,80,208,165,32,96,207,169,162,185,218,173,90,4,253,178,9,182,20,58,154,103,209,242,50,206,115,53,19,47,82,114,232,245,61,159,71,248,115,201,20,146,78,158,249,121,66,182,158,137,119,99,191,236,124,238,185,149,9,166,251,219,119,239,220,76,24,18,207,183,19,236,117,212,82,69,119,133,85,162,103,33,172,210,219,40,174,18,183,14,129,149,210,246,234,2,43,247,207,188,17,175,41,182,123,38,14,68,29,51,108,104,20,166,162,212,212,150,139,199,19,252,88,80,183,103,211,158,57,136,103,65,74,221,201,40,241,130,18,105,161,8,204,146,229,147,66,177,71,202,153,153,243,116,102,49,68,234,49,75,217,175,63,81,80,140,155,208,95,203,218,41,75,138,186,107,150,64,211,138,91,105,6,35,47,65,128,148,20,90,22,142,147,231,98,118,40,245,146,85,5,240,212,83,75,129,15,233,141,215,213,213,202,39,230,88,135,75,106,85,13,170,140,48,122,65,181,18,164,129,142,208,3,230,111,153,74,74,6,137,139,2,157,9,82,212,99,52,185,162,230,6,92,198,111,39,232,170,81,214,70,228,127,194,202,75,11,85,79,208,124,193,94,93,88,115,73,138,11,131,38,232,208,156,62,244,91,174,197,169,63,48,131,84,242,67,19,116,112,146,102,46,242,199,144,49,75,17,35,206,159,234,166,121,41,102,6,73,5,95,136,174,152,138,241,147,139,52,41,61,226,12,38,186,36,186,94,214,128,57,169,167,81,182,59,171,59,193,181,190,120,27,221,200,7,192,105,154,226,73,107,215,110,122,128,85,180,90,208,214,5,241,189,73,213,207,100,213,56,75,220,248,161,43,73,115,131,28,185,56,188,27,17,82,77,119,83,24,166,186,91,141,184,94,156,86,108,217,239,41,235,241,216,204,212,47,64,29,39,149,215,29,187,148,73,112,124,101,179,97,89,8,67,55,145,65,130,193,168,133,180,8,140,43,16,171,217,134,71,39,169,116,134,86,177,40,213,84,113,144,221,139,38,36,118,70,104,141,239,174,178,243,104,87,214,109,75,236,222,114,117,66,43,99,134,230,174,50,236,173,217,207,112,117,206,39,135,205,234,195,154,251,219,151,154,250,184,116,185,193,39,140,114,10,70,170,8,11,67,176,234,44,86,252,0,184,26,216,99,222,83,211,100,91,121,12,189,161,142,74,103,85,41,130,93,2,51,65,93,212,194,54,17,51,7,212,141,106,239,218,113,192,216,242,47,101,176,180,13,71,216,200,246,137,39,16,228,155,8,41,209,108,149,2,0,231,143,79,78,164,157,136,201,137,102,27,103,63,83,42,24,147,159,9,84,190,62,38,246,153,160,232,85,49,177,170,22,9,5,85,44,95,152,39,47,180,92,221,68,188,144,244,81,19,169,171,154,66,83,250,35,53,190,38,54,156,20,3,121,25,129,192,80,49,73,142,81,133,42,229,114,180,116,220,94,114,111,214,177,181,234,62,92,67,21,66,114,40,6,148,70,37,135,93,164,215,226,61,138,247,143,65,37,200,231,24,80,137,230,110,202,89,134,236,56,78,51,52,218,34,34,249,34,11,141,217,45,133,47,225,249,144,242,208,90,250,126,73,40,101,60,7,39,130,181,84,206,158,200,157,235,216,205,196,170,10,63,33,35,167,38,25,181,251,184,118,196,83,217,206,134,201,24,25,131,162,100,216,107,198,90,74,59,226,48,20,62,60,99,61,242,82,81,198,62,203,233,55,201,33,10,106,130,100,78,158,220,18,219,163,120,31,85,242,247,10,11,6,196,211,0,144,10,45,44,208,235,253,155,77,53,227,124,72,40,104,151,112,242,57,141,153,179,22,132,229,2,11,217,235,41,25,24,154,56,189,62,146,244,66,196,228,180,241,214,228,45,150,217,63,95,42,212,78,208,188,95,196,117,162,18,94,232,84,154,236,149,204,134,184,56,23,169,182,114,2,84,123,64,87,203,119,254,204,189,136,74,167,42,146,114,129,234,156,173,49,108,4,33,22,211,35,113,86,185,176,44,204,158,244,145,237,232,0,170,210,162,11,137,202,51,220,68,101,196,112,30,149,78,51,30,154,171,169,145,143,100,110,177,188,233,235,8,45,36,163,206,155,190,153,16,158,180,118,78,105,206,215,23,166,44,31,46,197,116,197,160,186,192,75,106,195,181,72,64,43,160,215,192,103,7,196,5,210,155,253,80,119,77,221,90,117,251,117,155,180,221,204,253,166,103,220,208,162,143,136,97,112,71,66,67,5,75,5,28,182,130,229,50,34,204,168,82,109,13,156,174,16,37,192,121,241,97,148,224,162,161,94,115,222,64,61,212,139,38,32,20,174,94,43,223,104,184,18,167,52,38,200,109,241,65,69,27,21,185,180,24,168,162,169,30,149,37,160,235,96,179,129,225,12,232,177,239,171,40,38,109,241,6,15,116,200,162,193,40,13,222,169,200,41,35,176,130,227,42,138,217,105,233,19,29,88,95,154,129,1,40,11,250,133,70,71,26,30,105,188,66,31,50,251,207,78,130,213,211,250,101,10,119,150,120,29,21,152,82,233,200,89,235,215,151,163,192,52,247,89,5,117,81,19,74,159,54,2,16,43,195,164,126,88,161,97,212,187,208,57,91,138,34,165,180,157,86,18,105,86,160,167,142,82,215,187,161,209,29,117,49,132,191,150,18,25,88,146,210,205,178,91,81,106,64,139,0,232,18,160,68,28,109,27,47,42,139,181,226,130,29,113,63,215,253,30,208,65,193,24,50,55,170,123,144,187,95,123,117,94,232,166,94,68,25,247,169,5,130,139,43,20,56,152,85,168,44,20,120,161,181,160,188,200,56,102,50,104,144,62,84,99,97,155,138,43,45,151,209,135,9,42,211,23,122,141,16,205,49,38,57,54,212,58,184,75,194,192,144,131,132,225,109,36,98,96,140,65,196,88,70,249,250,84,21,125,148,250,83,85,241,244,188,249,116,48,246,137,146,229,126,172,235,77,31,40,255,160,174,55,143,153,197,13,4,229,197,68,169,189,96,21,34,10,184,112,97,160,44,32,122,19,151,180,155,81,101,84,64,136,170,240,160,73,116,48,110,224,157,231,113,205,63,227,94,181,22,26,87,37,68,197,51,147,158,80,250,154,88,4,50,105,123,49,5,106,177,32,48,231,53,80,159,150,90,224,228,67,18,188,178,184,83,179,198,76,33,238,171,140,30,107,56,189,216,58,82,149,145,180,235,83,124,47,55,216,246,42,86,214,85,243,79,248,157,78,81,62,149,10,55,163,43,104,241,18,66,102,18,180,234,246,60,93,209,9,2,83,138,50,96,40,69,17,84,65,203,168,216,40,8,193,65,109,82,60,33,177,136,62,154,152,121,5,119,62,45,142,58,156,181,153,37,205,2,217,72,211,226,148,213,163,165,13,203,94,33,67,69,137,89,217,199,129,72,221,60,32,156,164,249,179,60,249,44,186,45,75,108,6,187,89,178,105,58,123,144,235,151,105,201,97,86,37,224,198,245,192,226,154,29,212,171,233,234,100,171,148,72,170,221,249,175,109,89,92,128,56,239,120,79,105,149,28,14,59,93,43,73,247,210,138,88,101,224,203,255,116,111,149,137,180,96,40,73,76,112,60,80,169,155,234,27,162,103,1,35,192,21,68,118,57,160,10,8,1,34,130,124,55,213,246,252,201,85,208,18,180,182,96,87,128,51,64,48,160,10,19,41,88,9,230,106,42,23,165,183,96,165,186,173,197,196,131,97,158,251,181,40,203,85,22,212,204,184,142,2,240,219,129,75,19,186,154,221,134,42,180,66,28,242,110,7,200,236,129,55,174,179,236,36,65,31,203,77,78,108,226,101,208,40,56,8,117,206,163,230,160,219,14,165,71,77,159,105,84,121,192,52,23,253,100,209,108,150,205,83,247,86,218,124,117,5,187,69,110,0,193,129,165,135,165,132,45,11,70,13,72,183,226,228,128,178,137,228,81,197,194,128,244,35,77,40,100,67,204,254,226,148,37,234,17,45,96,254,145,214,183,106,124,67,19,73,198,186,175,131,96,188,52,189,58,193,248,128,59,62,5,227,87,226,136,170,204,50,155,38,80,134,147,52,89,40,31,235,254,59,48,149,195,99,149,172,174,168,136,239,10,89,84,171,85,236,226,136,115,54,184,6,185,148,157,215,227,38,193,0,197,38,63,59,160,99,56,214,77,236,11,69,245,76,121,59,43,151,161,219,168,72,132,250,150,85,105,79,147,193,179,227,140,50,138,161,175,234,123,133,158,56,126,84,109,167,81,116,185,57,114,59,4,154,70,84,14,124,157,241,42,48,28,44,242,228,252,113,166,122,249,214,226,254,91,214,130,114,147,66,147,8,35,171,75,107,248,69,232,29,124,142,253,167,114,13,248,2,227,96,137,200,76,178,69,166,106,82,150,178,205,202,29,190,204,24,50,184,37,178,131,209,255,74,4,172,12,234,252,127,50,227,179,133,117,203,58,207,198,106,171,75,104,225,233,58,105,66,221,79,34,245,156,196,115,178,215,186,112,1,130,189,62,243,228,86,72,77,79,128,112,183,177,32,3,185,137,20,253,101,215,238,156,250,22,122,94,6,198,35,47,211,18,103,141,141,105,152,218,102,238,227,226,196,245,154,190,153,54,14,133,43,235,50,115,194,104,73,151,32,48,75,168,171,219,191,180,199,43,14,40,40,34,32,144,128,94,42,6,10,130,71,101,81,9,111,41,199,229,40,77,127,167,213,10,156,34,111,241,130,1,2,126,168,40,4,104,61,111,193,186,77,195,86,46,59,61,224,1,178,49,122,3,172,251,84,143,60,220,149,240,101,121,143,32,95,230,35,249,220,67,148,130,39,234,100,32,81,234,92,13,150,248,65,78,9,68,156,0,7,134,15,221,94,163,125,71,153,185,32,170,85,13,65,130,198,0,176,13,64,119,0,223,162,180,85,148,72,40,115,5,173,230,5,40,75,84,22,49,33,251,68,9,152,80,116,116,132,233,76,79,139,10,44,135,213,21,70,95,104,169,20,93,248,5,158,116,102,190,186,205,204,107,165,249,192,204,11,124,188,62,110,254,25,86,246,202,184,121,97,186,169,98,63,90,136,150,120,19,244,213,226,112,98,193,28,236,163,117,49,74,128,16,153,73,238,205,191,200,154,128,210,232,26,138,112,77,163,110,63,136,101,149,22,162,146,240,161,113,162,6,108,55,139,192,171,216,65,169,27,131,59,153,243,58,113,14,148,228,168,183,155,128,82,64,58,76,132,44,170,142,232,182,204,15,181,152,167,48,241,66,150,39,198,234,146,90,121,144,232,102,3,79,15,243,102,34,239,10,107,66,61,215,112,226,60,34,20,128,101,63,28,184,142,56,85,242,224,192,155,125,182,38,131,18,116,194,202,233,59,222,182,60,56,164,223,15,238,111,51,140,112,70,114,153,125,133,23,9,142,192,228,43,130,184,67,154,53,243,204,214,36,112,164,111,95,90,88,59,90,154,210,89,230,101,69,196,27,145,72,238,62,5,15,39,227,123,180,47,228,1,20,230,97,134,91,150,22,231,191,2,240,104,241,94,144,204,57,87,234,173,140,128,47,18,76,116,53,53,80,137,150,22,32,163,62,60,180,106,129,203,95,174,69,115,56,235,211,216,106,232,52,243,111,120,157,216,88,102,45,30,103,113,229,106,227,238,1,14,148,93,54,16,68,87,200,206,100,16,139,143,201,64,152,111,15,210,16,192,64,196,146,110,176,159,152,27,165,51,40,136,242,114,40,4,58,112,71,205,56,211,136,113,151,63,201,8,100,11,234,88,66,245,187,4,144,190,58,236,224,206,192,110,206,85,220,130,254,82,84,154,107,48,131,91,249,188,211,180,0,82,11,58,199,62,230,241,24,229,204,217,223,79,87,101,18,58,220,69,5,54,8,53,254,103,16,91,236,111,146,248,177,196,209,225,143,16,175,58,106,57,28,105,38,3,82,16,65,35,28,34,214,120,3,154,196,226,253,135,200,154,195,142,53,102,113,122,83,185,110,102,25,159,66,37,151,161,54,44,26,86,92,96,192,44,110,238,23,182,108,120,242,139,67,147,42,178,168,201,54,51,54,160,123,105,98,249,201,174,75,241,137,208,154,69,239,121,139,39,33,11,34,52,79,4,102,8,175,38,140,6,127,53,3,157,144,132,141,187,110,94,197,142,104,17,175,153,218,12,189,210,169,60,55,164,209,18,229,239,238,32,253,173,110,181,237,252,53,120,60,35,251,142,36,20,194,209,80,151,74,130,26,58,85,137,89,75,241,42,89,204,148,51,145,214,134,250,154,11,42,185,140,54,144,144,96,165,133,167,6,236,226,228,10,70,59,11,99,178,185,173,46,210,11,5,182,5,89,201,123,226,244,33,10,230,167,5,82,24,200,100,32,160,13,129,237,104,112,161,211,29,41,175,4,127,50,138,108,208,7,95,22,108,252,185,201,86,134,113,142,156,7,246,204,45,114,74,249,157,41,13,46,196,54,189,6,166,105,194,21,17,202,157,72,67,167,50,63,54,163,198,199,202,202,97,3,144,109,123,234,229,92,247,0,204,70,221,84,32,245,233,141,55,212,173,57,45,211,6,95,110,206,166,212,16,48,84,14,181,59,178,43,167,208,105,103,12,4,124,104,59,96,235,208,32,109,95,50,146,86,136,8,139,140,164,13,222,181,217,211,59,53,162,141,76,83,153,254,42,25,152,79,15,252,197,215,4,138,34,116,88,67,58,196,183,197,234,134,163,204,20,5,144,18,164,85,80,108,224,181,131,234,22,246,155,29,146,36,160,139,186,80,168,27,126,239,70,221,205,96,51,95,117,82,249,52,189,80,153,211,117,89,175,93,136,123,13,45,173,160,5,50,108,253,211,93,67,248,121,146,195,73,102,102,11,209,20,83,209,145,103,250,108,202,78,248,206,41,179,51,217,228,84,166,146,61,133,136,88,232,133,202,223,22,30,195,225,59,169,141,148,218,136,173,98,203,149,53,209,206,179,28,160,165,165,16,157,24,206,151,121,148,134,145,169,236,78,165,132,13,185,76,68,181,17,122,147,88,188,34,60,167,149,167,72,1,138,110,107,224,133,128,67,81,42,66,181,164,163,64,100,224,177,56,173,55,120,19,108,4,10,18,243,150,57,15,214,53,95,10,192,151,39,100,233,64,176,64,41,117,85,251,110,241,205,173,216,211,74,70,69,118,170,226,21,150,52,55,152,231,153,115,6,126,213,25,135,109,192,224,230,87,218,40,4,156,179,197,118,142,142,159,130,172,172,193,15,32,57,134,104,162,142,30,33,94,101,171,212,13,149,183,156,157,237,222,139,102,3,33,163,54,245,11,146,85,119,186,199,57,146,8,16,186,228,206,71,132,35,42,26,113,191,206,121,159,53,128,65,6,164,120,86,214,252,208,117,112,119,149,206,10,202,82,92,45,168,217,175,50,79,33,253,7,185,0,16,58,247,181,40,235,63,141,150,222,119,151,180,243,90,175,194,75,188,224,92,248,138,233,180,133,35,244,102,212,105,110,72,90,209,24,96,154,175,50,131,148,114,19,167,225,177,152,119,159,228,245,243,24,25,135,97,64,186,50,7,136,201,61,169,124,22,98,22,45,183,115,108,11,138,133,53,65,176,19,24,91,185,146,251,193,93,163,72,96,29,80,34,45,85,94,117,192,247,22,39,109,69,231,146,116,50,198,64,251,109,117,66,60,39,143,31,194,52,109,229,214,30,180,61,131,12,147,37,147,162,127,173,193,185,161,136,22,83,224,90,193,163,166,246,113,79,215,164,209,105,180,62,6,68,165,133,87,204,186,158,91,232,202,69,7,101,234,55,114,130,199,122,125,240,178,132,43,194,140,89,218,41,106,80,57,145,180,172,178,111,157,83,172,19,168,103,171,28,32,167,29,156,209,171,228,59,135,0,24,189,14,132,164,80,201,66,73,50,169,41,180,200,174,58,197,47,186,175,202,123,17,108,225,71,49,103,162,202,131,89,128,171,34,30,246,166,11,52,186,134,206,68,87,237,111,81,16,7,21,114,213,48,115,183,161,37,205,18,157,37,212,112,248,11,122,181,78,241,230,106,185,16,5,201,254,22,164,215,11,106,63,74,119,69,30,230,96,165,224,142,218,200,143,89,196,108,196,208,48,50,42,129,30,24,129,201,152,87,190,125,141,181,119,36,223,80,219,74,146,103,236,58,7,41,147,10,150,216,171,91,4,183,210,228,66,182,61,199,142,183,20,246,134,153,31,154,15,144,240,21,182,132,68,160,42,39,173,202,82,204,186,172,178,195,249,194,126,210,141,217,69,82,68,10,205,246,29,98,69,165,86,25,207,150,215,32,58,86,88,91,190,135,243,115,129,59,206,120,63,210,133,132,244,26,124,158,41,15,8,5,33,214,230,87,210,96,17,146,181,179,147,51,53,78,33,226,23,121,31,216,121,111,48,58,13,87,83,89,166,112,105,176,14,133,63,242,88,24,218,195,133,247,105,57,147,70,47,222,9,176,69,206,93,21,134,185,243,177,171,80,105,42,191,193,74,175,204,10,85,126,163,97,74,26,198,133,174,140,72,184,192,82,205,149,100,23,186,196,181,84,162,93,9,123,161,253,133,59,232,140,88,141,233,171,54,21,139,89,199,225,165,185,41,156,162,15,187,149,37,146,36,144,182,111,79,205,157,133,204,194,72,148,37,116,5,40,58,9,153,80,138,28,145,252,173,72,176,88,219,2,31,80,215,52,74,157,27,186,31,194,234,9,135,103,225,148,54,94,99,119,204,192,178,134,140,152,1,104,184,212,206,128,233,247,242,124,31,170,181,147,32,232,78,221,88,197,239,74,195,90,233,52,144,198,74,61,43,133,85,84,150,60,210,124,234,27,172,95,84,30,9,237,87,52,91,17,113,97,135,19,195,108,228,55,186,101,19,248,229,5,174,234,137,48,135,6,23,225,148,156,206,6,61,118,37,136,200,120,252,191,101,111,114,71,30,180,96,39,235,249,164,210,35,243,238,186,119,31,43,225,88,203,166,76,174,201,170,243,166,51,145,53,217,145,39,191,182,46,7,100,180,144,21,186,204,9,100,102,161,66,69,1,155,10,89,153,191,171,60,96,199,237,84,142,168,209,34,178,170,177,213,69,242,52,122,216,1,251,82,176,183,69,227,140,145,125,53,130,43,7,185,121,116,94,32,234,230,153,98,55,220,42,208,217,251,179,71,64,114,25,200,30,5,201,225,32,123,36,0,9,81,190,21,197,22,110,80,230,249,128,202,48,98,243,130,239,11,61,40,27,180,8,189,105,71,39,214,173,170,21,26,18,94,200,124,98,4,42,199,81,185,18,76,67,80,29,233,206,118,194,100,106,116,226,196,72,153,116,91,191,84,212,80,45,195,214,176,117,43,202,49,102,44,43,243,89,25,84,94,58,105,20,23,133,81,58,106,89,225,62,185,84,227,242,3,112,164,116,148,176,203,78,131,162,249,102,147,125,98,105,35,79,7,21,93,141,21,165,204,147,54,75,182,49,57,15,82,227,139,210,120,101,220,112,222,136,170,189,118,133,234,66,54,203,93,97,162,194,77,3,91,43,58,183,224,155,67,122,187,48,243,119,230,108,203,86,112,232,46,16,76,173,200,64,78,50,31,83,68,0,144,243,252,114,42,22,71,43,179,248,22,138,214,241,160,84,168,74,135,160,147,40,206,74,45,122,43,8,176,113,205,203,250,155,170,225,73,42,160,206,17,128,122,217,98,229,226,188,199,104,154,15,119,105,54,26,127,138,125,40,18,21,70,178,138,252,40,159,65,117,82,75,58,207,172,20,13,29,80,174,48,99,245,198,21,45,57,171,197,115,52,221,186,230,48,23,196,160,243,93,29,103,50,167,196,124,77,199,247,48,95,180,194,58,37,214,42,243,94,137,83,186,10,232,74,114,131,237,10,147,92,214,179,184,107,118,14,157,201,227,51,185,132,22,200,108,96,55,2,13,245,193,109,70,236,184,85,215,172,248,19,178,203,225,13,151,196,222,157,209,93,29,179,43,100,1,65,238,220,205,44,132,119,133,155,40,10,8,209,38,163,169,102,85,131,27,124,138,55,201,193,227,159,63,28,192,179,2,250,142,83,190,50,178,118,156,175,2,137,31,210,114,120,148,28,76,255,88,93,138,253,243,252,51,158,37,5,97,79,33,197,167,115,220,228,29,71,172,175,42,67,162,163,12,35,32,78,53,205,110,6,140,6,121,216,183,195,208,62,105,216,145,118,33,128,129,204,202,11,200,223,109,206,124,172,42,2,123,67,188,168,37,231,102,3,148,182,133,112,112,229,112,46,28,158,168,124,212,2,244,115,169,71,197,137,41,89,200,42,42,69,54,214,209,136,47,92,149,100,91,169,114,159,28,77,166,136,229,148,22,194,186,235,75,213,214,64,206,185,73,207,97,25,159,9,156,129,204,173,28,127,196,236,158,42,150,116,19,72,158,75,161,231,8,158,97,157,64,38,8,28,134,78,14,173,206,75,217,222,115,230,119,30,66,10,92,133,230,32,138,154,2,63,38,63,69,180,107,104,72,1,247,128,4,210,131,122,174,18,114,155,154,181,88,99,142,100,138,174,164,221,73,119,49,7,177,208,148,148,182,179,129,194,213,41,91,49,60,131,105,218,220,18,205,32,25,229,3,29,69,138,0,13,254,217,208,4,82,180,38,184,84,240,140,148,221,138,203,2,184,243,19,64,128,146,46,91,221,0,203,199,140,243,200,167,29,158,129,156,163,153,34,149,166,191,107,77,107,134,54,173,81,3,28,232,50,170,117,153,255,45,91,86,59,130,166,218,2,223,106,222,234,201,119,206,78,211,161,135,107,123,83,232,221,253,33,191,13,76,87,192,95,221,28,73,241,80,246,101,216,133,253,70,229,123,187,234,145,160,214,4,92,218,65,161,211,101,105,86,38,168,157,197,58,211,205,114,212,53,203,11,27,22,127,29,52,226,210,108,175,18,229,219,251,200,21,132,139,12,204,148,197,150,180,71,170,166,81,244,14,136,183,28,183,156,86,154,216,119,163,220,92,45,171,238,189,184,55,195,222,93,219,222,5,1,100,36,17,177,72,196,50,5,9,69,28,181,130,198,10,170,171,248,176,226,204,14,179,6,244,155,80,115,196,219,107,184,189,160,255,66,32,154,155,22,8,111,247,65,179,89,106,78,195,130,177,11,9,13,100,182,163,194,68,164,87,200,120,34,244,133,21,8,176,43,146,178,180,106,0,197,109,17,139,213,166,214,16,227,64,81,73,140,242,111,88,13,27,228,149,75,225,181,86,157,213,148,17,41,138,76,153,35,211,14,45,13,209,174,198,41,187,102,75,159,72,96,106,35,114,122,45,210,239,122,242,71,84,197,210,88,216,222,21,156,183,124,156,146,230,6,245,246,169,123,220,123,214,134,153,187,106,69,27,25,171,4,148,195,157,147,251,170,128,39,211,55,42,144,175,84,178,0,147,89,146,140,38,210,155,155,34,205,238,104,122,37,249,145,41,168,108,67,226,43,58,198,67,33,31,251,222,118,91,234,38,57,102,204,112,27,210,245,207,174,107,223,102,61,2,213,20,48,146,181,32,157,56,75,247,6,103,164,226,73,4,175,196,176,136,130,112,250,31,206,152,49,158,122,186,117,219,185,166,255,101,132,97,18,214,230,10,217,244,185,240,70,26,195,189,225,7,61,41,131,15,246,28,136,235,192,65,140,235,124,53,93,106,59,78,144,80,1,37,192,81,67,105,69,229,36,177,72,210,181,19,111,253,59,115,204,203,188,166,28,243,200,53,29,148,33,141,46,228,53,166,222,248,68,217,191,159,169,55,158,25,230,87,97,108,193,76,159,63,195,252,225,37,20,79,120,213,25,230,193,69,74,9,215,103,78,156,219,202,79,240,27,86,187,121,178,15,158,182,86,149,147,198,223,195,194,104,229,140,71,253,92,10,74,70,117,92,99,238,148,235,55,15,28,23,2,80,218,90,175,169,110,47,211,94,49,19,234,161,228,181,89,27,189,122,175,212,177,245,44,145,40,91,238,57,250,32,91,144,93,17,117,202,153,67,197,133,97,191,245,116,142,40,190,173,242,204,82,252,153,60,86,172,12,61,113,113,106,228,92,10,199,196,52,103,99,62,213,227,73,142,186,134,60,217,218,18,184,61,42,6,188,204,188,89,186,103,106,78,20,35,158,252,30,34,148,109,17,208,7,228,228,159,67,177,179,168,172,61,95,249,94,78,174,206,179,106,154,70,185,225,104,100,208,97,146,240,57,26,162,20,76,13,170,98,80,72,48,126,141,10,138,155,179,129,103,181,27,195,129,97,90,197,121,132,88,113,52,252,141,153,179,57,8,179,132,121,11,115,73,133,177,23,203,85,191,69,210,50,214,101,14,80,208,64,73,132,162,6,204,2,24,22,32,141,64,28,161,188,221,8,113,13,111,167,125,186,175,0,52,246,105,172,0,173,202,133,200,241,142,37,46,44,175,180,125,105,187,15,213,90,140,64,201,218,155,89,112,206,53,47,228,121,200,249,192,12,237,89,128,35,107,61,231,242,210,73,179,116,6,169,113,57,140,1,94,89,164,34,50,47,22,214,26,241,69,72,137,185,211,10,241,31,93,215,27,72,58,172,170,183,209,170,106,127,195,162,74,111,94,157,32,115,124,102,4,127,77,252,146,185,161,145,103,232,140,70,71,156,252,172,221,156,210,242,112,96,77,242,100,227,226,2,156,164,199,13,11,150,19,199,188,148,80,244,144,210,234,133,126,33,62,67,35,220,201,173,142,11,137,123,139,34,57,166,124,211,226,2,236,151,50,129,197,22,152,157,72,69,103,152,138,235,150,198,136,95,168,50,217,145,206,59,43,200,76,92,98,231,91,231,42,205,19,221,45,68,179,82,109,70,3,255,151,84,238,208,199,153,215,234,116,170,177,191,19,182,198,152,29,235,227,94,193,19,155,59,12,213,107,153,135,56,91,221,124,214,9,159,202,47,99,188,161,102,243,75,76,175,102,74,43,229,76,210,172,53,1,110,67,87,130,92,26,225,25,205,241,78,110,7,162,27,128,90,198,97,221,233,227,152,247,68,179,109,234,222,170,179,92,22,130,87,10,46,220,30,79,199,55,237,247,76,28,75,59,214,28,133,93,102,171,153,209,8,236,171,233,57,238,34,218,122,181,64,179,1,203,247,84,208,191,188,66,154,253,204,251,251,170,116,28,87,240,201,16,69,144,175,23,31,110,105,80,255,44,243,220,82,153,143,202,220,225,24,197,74,228,241,101,169,130,57,199,20,114,130,135,54,235,5,53,64,52,165,76,69,102,27,102,199,51,243,68,115,29,6,170,80,35,171,123,30,31,235,117,184,92,127,76,195,5,91,9,183,120,2,171,166,170,187,59,136,167,196,188,51,135,223,180,108,149,139,184,219,191,47,0,168,53,149,35,132,205,107,233,17,29,197,185,9,65,173,44,94,129,11,111,219,239,96,86,130,224,237,121,48,125,53,104,126,32,105,89,5,109,118,156,130,248,110,148,50,132,57,32,25,167,74,234,172,26,131,148,141,12,251,115,77,151,83,161,16,208,149,71,3,47,161,54,65,119,96,228,2,203,10,117,132,80,82,36,157,134,226,0,77,200,91,61,167,221,148,76,84,180,204,32,133,106,51,171,69,138,147,17,106,202,123,6,113,213,194,216,242,105,206,62,76,180,186,27,155,147,169,135,146,90,139,151,153,70,82,55,117,158,69,125,27,142,65,67,82,54,138,0,32,155,166,123,111,207,52,113,198,22,197,236,187,156,8,203,128,222,125,234,77,113,19,90,208,49,206,86,202,160,176,128,7,150,214,247,138,174,14,109,221,169,157,154,43,130,101,163,170,152,154,120,159,106,49,0,68,186,22,58,9,42,80,27,101,232,11,246,186,109,192,144,168,204,216,95,202,61,154,155,210,153,114,181,185,216,142,6,173,106,31,37,177,132,27,108,136,228,65,10,115,90,145,5,28,83,10,236,120,121,4,35,217,86,38,92,96,113,69,37,67,15,155,176,161,12,36,127,20,219,228,211,228,27,14,243,189,29,239,137,160,96,113,53,225,216,100,69,41,164,15,66,218,139,69,61,78,65,192,226,52,18,2,192,148,245,14,105,118,112,212,84,226,217,65,134,174,117,221,221,197,77,193,157,91,184,131,2,90,162,229,147,11,110,251,120,210,130,111,76,175,79,202,202,209,39,40,51,165,5,153,198,135,182,211,254,183,157,168,152,98,28,0,170,232,78,230,16,64,188,212,198,104,129,221,192,93,13,205,203,138,208,24,130,191,125,202,167,241,0,170,205,21,124,216,224,76,26,167,48,71,240,23,0,0,226,110,154,172,146,239,111,90,225,233,183,6,93,46,181,152,250,206,195,175,70,147,98,8,174,74,3,13,30,21,19,65,134,74,154,149,216,41,69,44,21,3,172,33,137,137,26,227,73,184,140,227,32,224,126,197,237,222,160,154,65,34,70,86,184,132,188,45,194,117,192,59,21,38,165,48,50,29,183,211,50,69,192,241,83,14,50,47,40,46,108,164,51,159,154,112,148,99,36,187,37,247,11,91,133,243,6,27,168,48,50,155,102,2,174,132,100,218,85,207,129,176,180,105,90,82,134,45,187,161,34,12,216,57,168,196,237,104,114,47,56,238,2,99,50,221,91,228,148,140,158,183,45,153,245,164,44,180,106,61,97,142,5,120,41,100,231,134,235,15,33,229,216,111,75,10,111,195,187,197,180,69,222,174,227,254,152,210,84,6,210,42,249,176,211,146,93,32,228,193,8,174,150,184,143,57,146,35,10,2,164,189,104,149,56,138,166,35,131,29,181,132,162,139,146,105,79,2,193,217,187,227,44,81,158,40,38,93,70,128,40,178,214,40,18,95,253,6,149,98,98,70,62,131,224,126,57,205,139,187,119,241,88,186,164,233,85,109,55,243,2,132,72,85,107,8,55,51,124,135,238,176,6,113,38,35,160,0,87,243,60,155,235,25,38,73,166,173,99,31,44,255,50,135,15,27,255,0,110,215,75,97,192,140,102,67,85,80,82,72,243,237,97,174,123,147,107,129,13,47,0,168,137,116,164,16,179,235,194,165,30,55,166,176,176,142,213,73,67,2,116,32,2,113,34,136,217,66,147,147,82,149,217,206,163,157,174,249,226,195,33,72,150,237,58,62,72,136,104,130,128,27,241,35,48,17,243,98,218,226,27,70,217,179,216,130,220,179,180,194,52,42,176,78,198,240,36,75,247,96,30,108,137,212,98,22,189,221,117,161,61,186,210,128,127,208,36,170,88,163,215,230,104,240,120,191,59,51,220,182,108,138,44,48,232,144,112,59,211,219,82,70,50,83,47,79,58,239,121,167,189,37,39,102,39,158,129,184,1,19,189,136,29,104,216,143,202,163,52,140,12,129,101,96,155,200,228,91,165,198,194,72,117,220,86,195,147,153,183,169,114,38,235,236,29,77,174,76,183,199,60,58,167,8,49,208,17,26,1,8,224,37,103,77,27,77,182,105,231,204,53,142,162,163,3,64,15,115,120,148,61,217,155,12,57,249,245,61,236,115,142,207,20,8,92,111,62,13,71,224,30,174,169,142,104,33,251,135,252,90,99,118,73,114,32,69,205,140,41,36,150,196,57,137,134,77,233,216,153,134,235,233,152,163,134,135,114,132,53,17,130,55,145,160,87,100,191,70,66,84,7,33,14,180,234,80,109,135,145,13,101,183,8,189,162,124,38,8,137,96,172,202,165,112,250,96,174,200,155,210,4,69,177,183,78,247,84,124,204,69,49,132,27,88,128,134,157,128,135,51,11,175,176,231,228,58,2,241,82,13,53,173,36,151,233,50,219,116,204,177,192,243,234,176,10,172,178,0,29,163,208,177,19,181,216,85,39,158,55,82,124,35,235,223,226,143,136,137,178,58,33,229,16,206,97,98,11,86,5,125,230,227,26,118,175,215,161,20,133,201,68,50,84,196,129,25,209,21,86,181,36,47,3,154,99,151,16,224,23,232,241,192,98,135,204,34,136,169,225,148,164,48,5,206,222,88,125,77,62,74,137,144,81,96,22,178,34,71,99,177,4,211,24,172,229,170,103,40,1,35,59,78,34,195,161,12,198,43,88,5,23,216,194,168,82,17,44,145,148,24,15,60,72,78,149,23,115,196,104,94,6,182,169,33,237,137,55,164,26,29,184,57,151,145,48,54,138,230,20,209,54,172,171,182,166,148,177,5,246,95,162,169,14,139,102,51,160,14,170,141,213,127,79,94,203,111,229,236,215,13,134,172,114,109,173,108,88,5,72,85,180,250,224,173,101,142,139,71,113,111,29,140,134,215,49,34,70,164,197,100,78,218,174,83,253,67,99,51,110,135,8,175,33,126,202,96,49,119,145,72,230,166,191,226,236,114,38,158,64,146,132,186,35,101,77,51,122,4,120,168,74,238,170,8,111,180,229,141,78,189,209,188,247,250,249,172,31,234,181,72,141,178,169,225,37,121,21,150,133,169,26,122,128,36,72,50,108,88,11,119,52,61,105,41,46,8,212,201,20,158,28,191,70,250,122,167,10,81,191,31,91,76,111,24,76,4,177,127,211,222,31,234,59,2,217,32,229,69,246,196,155,53,96,24,103,90,64,153,187,216,65,217,192,213,184,123,133,191,183,112,79,84,153,150,52,112,85,147,95,212,107,69,1,7,214,56,180,84,61,30,221,200,156,127,139,253,47,42,158,58,213,84,210,94,221,210,114,49,155,217,178,162,129,89,93,101,105,153,20,128,113,227,181,1,106,241,156,197,38,100,7,182,56,230,197,82,244,68,163,214,176,102,39,153,96,126,43,59,204,236,69,213,191,117,74,186,153,139,206,195,229,40,191,227,215,38,94,80,52,217,20,130,244,151,235,174,40,206,48,174,29,59,248,68,14,162,213,82,85,101,86,101,52,26,110,132,47,31,238,200,204,70,171,97,83,220,79,137,244,52,158,154,156,197,184,62,254,52,231,114,1,2,196,212,249,56,112,142,79,155,53,40,216,205,26,44,19,44,16,211,232,155,179,114,52,13,219,19,120,163,134,119,138,204,85,167,81,132,106,187,83,6,101,57,166,17,118,58,163,86,99,249,98,165,81,167,86,138,138,167,78,104,130,105,168,50,214,61,3,222,49,234,172,30,236,20,136,65,195,184,166,134,76,93,8,221,10,10,196,40,101,116,130,72,43,170,68,45,35,171,33,59,65,5,86,74,49,127,50,179,10,39,56,93,9,165,179,156,53,212,36,60,214,35,33,176,132,178,104,152,247,1,199,155,166,28,209,86,58,177,138,43,141,29,146,84,127,85,145,6,27,90,84,120,114,253,99,240,20,132,187,32,219,211,70,85,46,157,82,77,91,36,131,155,50,236,16,155,26,159,58,56,189,21,214,57,51,215,73,149,136,177,215,90,132,174,109,170,230,212,106,208,196,192,137,176,134,190,152,57,186,209,81,86,190,121,245,24,74,250,92,12,181,81,143,184,170,110,108,180,146,141,137,55,94,191,243,60,162,21,94,136,140,137,189,16,188,240,197,246,163,54,234,34,152,162,206,212,167,186,60,186,147,84,125,51,116,33,160,83,134,57,179,255,73,227,162,82,92,88,98,30,207,224,255,210,185,70,88,250,209,204,37,55,190,69,213,255,40,123,40,77,101,123,46,122,237,154,207,153,30,36,102,148,80,212,110,51,144,149,188,86,77,21,202,39,40,167,229,32,91,158,25,206,227,24,118,38,48,33,82,68,234,186,154,137,159,18,161,91,194,209,229,184,156,39,86,57,199,112,42,76,179,166,94,202,182,237,137,164,64,28,130,106,138,184,73,203,197,74,92,105,231,229,214,56,139,21,103,150,226,238,2,212,69,178,52,240,16,9,233,128,41,18,112,149,135,243,90,183,225,62,119,229,195,158,194,15,229,61,7,226,98,103,40,68,250,103,91,247,156,106,27,51,169,64,162,128,184,38,70,174,136,155,214,39,215,154,199,126,82,121,132,80,196,54,43,49,90,77,135,205,107,162,235,32,130,96,119,32,114,133,76,6,133,65,138,204,26,115,115,133,219,99,126,144,34,216,38,36,91,146,87,118,1,47,36,32,83,9,158,129,185,220,200,70,178,225,216,164,106,163,97,45,1,108,6,94,145,126,160,60,99,183,132,196,65,63,48,13,22,189,225,161,106,244,27,197,127,188,61,204,24,141,69,98,6,26,210,197,72,125,182,98,144,232,204,22,173,117,131,239,8,66,210,120,17,52,242,80,146,153,146,80,101,216,34,56,189,22,85,86,81,19,85,77,82,214,54,21,143,134,216,95,82,154,41,50,110,101,198,204,169,38,245,99,84,80,174,169,49,27,101,103,167,19,237,52,167,69,20,65,108,107,226,251,130,248,82,121,197,202,81,54,124,103,228,78,123,254,213,153,52,98,113,88,172,131,56,193,73,8,121,142,97,103,239,60,108,144,153,59,88,53,166,75,143,229,254,38,39,221,222,16,210,52,85,163,74,103,121,89,247,37,36,67,84,99,174,106,28,131,194,232,160,148,86,251,108,54,19,172,56,113,220,225,235,193,182,132,198,228,176,106,151,184,101,212,105,44,63,141,125,168,177,34,65,24,157,26,119,185,144,123,78,147,147,45,223,137,125,120,102,83,238,78,175,215,95,81,138,247,154,243,172,93,95,213,192,223,240,117,168,254,16,157,207,196,138,95,69,148,192,220,107,120,69,145,223,155,26,146,61,162,152,44,90,205,71,166,184,145,44,119,100,155,201,250,42,237,231,254,65,30,170,2,32,9,137,173,16,201,82,230,170,40,186,46,65,221,48,97,84,43,7,245,78,186,46,144,122,209,200,47,153,193,206,168,208,88,11,40,195,63,187,106,208,6,233,120,133,150,164,119,38,255,206,24,193,189,0,201,138,58,201,172,177,44,58,205,70,239,89,112,116,69,228,141,46,35,202,235,36,207,175,137,252,25,40,242,194,116,22,170,74,250,27,246,192,134,114,103,101,137,150,15,226,90,135,13,187,124,131,171,14,220,119,99,14,138,246,162,21,163,82,183,218,61,84,52,254,34,213,169,132,198,39,219,65,221,134,100,69,66,226,176,144,12,173,138,122,85,32,108,229,198,78,192,236,4,81,100,219,51,91,0,183,177,92,107,115,193,169,67,76,63,76,22,172,86,26,7,68,148,243,148,251,99,145,29,156,40,27,195,141,93,37,229,182,187,165,231,9,18,67,9,165,38,89,201,148,187,50,17,85,114,143,2,126,175,2,96,37,1,41,176,160,73,232,84,13,73,27,177,170,179,168,51,217,205,119,93,151,102,249,250,85,14,147,32,48,41,162,146,100,176,220,94,86,74,192,52,234,130,94,171,208,105,31,170,150,162,3,241,186,206,61,52,52,48,163,45,185,160,30,235,143,176,127,148,121,185,17,64,150,195,204,76,155,236,238,115,118,41,119,112,155,113,103,60,59,202,217,144,67,29,184,25,75,236,78,188,117,154,84,106,114,140,161,42,143,21,154,216,105,110,218,5,43,183,171,125,234,250,173,107,74,77,243,74,44,230,193,147,52,185,34,24,31,192,52,3,36,201,48,132,217,214,215,93,255,155,248,128,46,182,178,9,192,44,65,154,113,170,0,219,55,2,150,184,105,93,58,225,121,231,139,201,74,121,214,156,237,117,101,123,37,8,226,208,69,77,111,75,71,212,232,165,204,173,103,57,33,74,65,186,78,31,148,241,170,40,88,215,165,89,188,118,137,59,72,72,224,210,128,84,3,120,29,116,134,153,19,46,82,137,189,76,164,76,254,135,39,124,101,99,183,187,191,70,162,214,208,135,86,108,76,139,149,86,244,230,154,187,41,171,247,127,235,220,228,106,16,91,27,69,192,87,147,118,81,207,122,98,160,54,9,112,38,82,89,61,159,130,104,251,56,219,26,138,155,162,117,99,60,239,13,172,157,113,123,197,255,13,145,232,40,73,195,162,84,62,134,6,175,86,29,81,195,9,191,119,90,1,183,118,135,213,141,216,236,215,186,165,87,4,242,8,126,36,218,119,146,63,41,6,214,180,7,141,167,106,231,206,26,116,61,173,54,200,149,69,13,178,145,32,4,205,56,45,36,72,100,134,182,4,93,81,158,117,26,182,162,132,75,106,186,224,84,208,58,29,184,79,194,186,244,94,36,124,118,92,236,92,27,171,142,164,81,55,52,42,137,98,58,46,198,101,158,149,59,235,18,244,30,43,236,209,18,60,94,86,253,98,76,57,78,213,6,205,236,64,39,34,247,56,115,202,225,246,218,105,217,70,178,38,146,235,247,227,178,203,225,174,49,187,28,202,77,81,70,19,51,135,134,148,38,218,248,250,146,154,96,34,158,73,77,158,25,149,67,26,96,115,114,252,148,176,134,140,43,159,57,179,178,164,172,252,2,183,5,226,249,220,183,253,68,233,171,127,117,30,233,6,128,94,87,62,105,115,97,150,41,120,168,126,163,188,229,32,244,15,150,193,123,22,189,116,142,225,73,8,122,66,128,116,243,31,65,9,180,172,160,240,233,232,223,243,136,231,17,191,226,136,79,197,87,236,91,146,39,42,210,223,182,100,67,203,207,124,134,251,182,12,205,103,184,111,203,209,124,134,251,182,50,202,103,184,47,238,240,185,239,43,174,141,159,226,190,191,150,135,19,15,46,169,247,59,181,8,98,28,26,53,143,108,131,11,253,20,195,174,164,84,16,105,93,142,91,206,160,227,180,106,156,25,128,133,73,213,227,80,67,201,142,19,21,156,112,33,238,228,41,199,73,237,0,63,78,52,31,146,170,66,138,13,44,23,213,227,68,193,225,199,169,53,112,57,78,92,11,150,139,234,113,82,71,192,143,19,61,133,120,34,74,38,124,9,142,147,227,150,51,232,56,85,74,152,110,89,234,62,201,113,23,241,136,245,227,68,21,37,21,221,150,139,74,209,60,61,78,130,10,253,56,209,29,137,115,139,160,69,169,170,47,199,137,183,41,205,179,232,19,37,113,207,114,213,211,92,144,75,94,16,65,183,226,50,186,92,86,61,229,103,205,49,62,80,112,178,228,68,22,79,240,185,36,162,73,226,3,151,59,136,241,73,54,196,105,174,137,184,103,240,129,82,215,94,172,254,203,101,69,155,167,7,166,69,81,29,152,152,69,36,228,111,174,138,24,29,249,64,73,91,45,68,67,102,112,46,203,37,45,139,232,12,213,217,84,166,112,174,203,213,215,229,215,75,33,83,111,42,186,204,199,224,141,23,215,192,205,117,115,184,28,78,219,235,246,176,57,161,58,252,245,186,191,158,119,231,243,101,191,219,236,183,51,105,226,12,69,123,156,209,109,47,155,205,113,127,222,110,174,123,132,115,93,47,231,203,229,112,220,109,199,168,181,205,236,155,139,49,244,113,70,182,223,108,14,135,227,241,120,58,209,186,93,182,199,235,249,186,217,236,175,104,179,236,235,143,53,182,195,88,180,195,126,183,221,93,108,28,99,108,231,227,254,120,222,240,128,97,223,80,251,194,67,173,220,113,172,212,88,61,236,45,93,184,203,238,116,24,166,161,237,241,145,87,174,223,111,167,235,238,180,59,93,109,188,230,233,169,249,165,30,31,85,30,207,199,45,15,206,16,229,195,208,129,135,167,97,199,221,245,112,190,94,47,155,195,233,98,112,119,61,238,54,151,243,97,179,219,59,158,119,99,227,3,109,169,253,32,196,167,203,233,56,7,178,12,110,179,223,29,175,131,68,243,224,30,113,79,237,118,35,110,231,184,191,108,46,71,66,25,199,193,127,236,247,151,203,233,188,213,245,124,84,148,177,223,28,183,231,227,249,226,136,126,208,230,221,225,120,26,4,14,160,74,136,254,145,70,246,164,209,79,26,253,164,209,79,26,253,49,125,55,152,18,71,153,151,221,245,5,106,206,187,203,254,186,63,58,166,30,240,117,222,12,178,116,30,0,69,152,161,109,172,167,207,90,81,151,7,24,251,110,115,61,14,158,106,119,50,84,55,220,195,119,187,253,238,122,222,134,189,213,54,214,211,61,5,201,139,31,250,229,188,60,54,215,235,201,16,164,196,147,14,220,120,56,111,72,109,176,210,216,156,63,19,162,60,196,240,79,251,227,229,116,216,77,166,101,25,253,233,112,188,158,142,199,243,105,107,12,217,74,99,61,29,131,127,233,4,242,183,128,121,74,151,245,242,7,127,26,204,205,84,246,45,56,237,122,184,94,118,215,237,100,118,250,182,120,162,121,57,139,215,223,203,31,243,224,92,175,187,237,158,196,140,133,245,187,158,207,215,211,105,207,18,73,219,216,156,111,153,137,150,48,194,39,105,254,13,87,110,240,226,251,32,19,75,148,251,121,144,225,33,113,177,74,180,109,108,206,167,149,123,132,241,31,182,199,227,24,214,121,10,95,11,174,218,12,29,200,121,127,218,239,166,184,217,52,53,231,78,198,228,17,240,212,64,53,155,211,233,226,172,214,50,242,33,117,30,118,78,153,226,207,230,156,135,66,205,151,243,40,187,28,177,243,192,191,195,134,177,97,5,208,74,99,57,251,201,140,60,6,51,50,124,220,55,251,253,201,89,12,225,70,198,224,118,155,205,233,178,119,50,212,54,54,231,63,22,59,114,60,12,38,203,241,214,130,222,135,222,108,97,174,175,187,235,84,242,118,109,229,92,103,74,30,65,240,186,12,126,226,192,138,93,161,97,167,235,254,16,213,81,109,99,61,253,193,232,218,224,177,14,251,129,171,9,232,55,187,227,192,220,219,211,209,173,154,43,141,245,116,232,231,30,143,29,67,94,129,165,28,211,3,128,236,80,212,111,55,67,217,49,45,234,139,126,120,127,25,82,18,145,225,218,210,156,41,126,40,143,129,160,46,151,205,72,209,224,58,197,49,194,49,176,243,102,59,52,144,140,162,186,198,122,58,34,134,37,25,248,3,48,97,215,253,105,71,88,87,120,176,81,49,112,180,108,135,32,76,156,88,211,88,79,215,196,60,195,141,233,229,51,36,131,180,236,14,131,163,98,221,208,64,196,187,227,233,120,29,89,76,230,10,183,141,245,116,203,174,254,0,67,95,91,244,193,121,29,55,110,225,106,154,186,5,23,247,176,199,0,246,133,133,28,6,216,49,42,34,74,99,28,151,227,97,192,182,227,183,218,212,156,171,17,255,146,127,227,17,16,251,121,115,57,4,69,232,189,120,61,158,168,104,253,197,143,249,161,169,240,121,84,216,56,48,182,25,102,137,243,229,120,28,8,39,44,96,109,109,206,214,152,227,135,24,248,80,99,12,27,52,115,125,3,9,29,6,87,124,184,6,51,123,219,218,158,175,57,102,30,130,13,25,6,247,243,72,104,196,50,192,136,145,223,7,3,232,18,249,148,219,186,83,145,200,235,49,176,242,241,52,96,119,40,226,23,219,219,28,249,88,202,253,200,158,226,184,104,25,122,105,108,207,214,96,255,199,192,203,3,217,110,246,199,19,47,250,254,52,150,246,112,216,70,189,88,211,218,157,174,249,207,70,177,230,71,88,247,227,126,176,80,102,98,25,203,59,52,0,35,145,193,126,234,62,150,37,207,109,229,60,228,120,123,8,252,118,30,235,52,236,14,91,70,90,187,193,65,30,15,155,243,153,188,152,219,214,246,124,77,116,247,24,176,62,20,213,67,82,58,13,83,43,41,58,199,240,134,107,250,249,180,103,195,77,211,218,158,111,216,253,33,56,176,161,226,217,93,47,123,23,144,23,2,62,140,23,71,118,43,19,170,158,27,219,179,17,190,251,128,172,152,165,121,27,57,70,30,194,117,100,160,32,246,70,29,16,184,57,110,134,229,133,92,243,219,214,122,178,20,166,92,138,66,60,194,184,135,43,196,118,112,21,193,6,53,232,238,229,76,164,86,20,217,169,173,61,215,18,68,105,185,137,151,143,170,118,195,220,48,212,209,180,236,67,49,191,59,157,118,251,225,22,57,125,6,219,214,238,116,164,80,146,44,157,47,159,74,109,118,167,1,194,155,45,217,95,6,203,181,57,13,101,60,41,12,114,83,123,38,210,226,45,37,239,30,99,217,119,195,201,124,104,123,72,9,242,113,235,158,206,183,172,103,90,76,249,17,54,253,118,59,150,149,25,148,177,193,135,88,117,72,78,37,77,107,123,190,21,102,88,114,172,62,0,174,31,236,245,110,152,89,93,156,254,56,108,159,78,127,24,124,255,224,36,250,56,92,241,7,111,180,153,138,74,81,235,13,57,113,123,140,28,116,219,216,157,143,58,183,146,90,250,229,163,173,253,238,180,205,86,155,161,0,218,108,134,143,83,208,98,182,141,221,249,86,123,226,33,214,255,52,240,208,62,58,208,236,78,151,221,240,141,31,226,163,147,167,174,173,59,215,32,255,197,231,197,89,20,0,44,44,15,7,229,221,37,41,19,106,19,157,163,9,214,181,38,217,75,31,234,101,136,64,195,28,17,204,53,135,161,8,26,88,151,121,207,166,169,156,105,233,14,37,255,225,203,95,226,225,242,54,104,74,36,191,251,225,24,48,228,227,177,109,137,61,111,27,251,243,173,60,221,225,1,118,247,178,106,131,222,6,254,107,48,159,251,75,116,8,90,105,236,207,151,212,147,15,130,221,135,16,57,112,53,51,213,139,105,110,132,35,92,70,88,100,180,215,53,141,221,249,40,109,59,62,30,194,145,100,40,62,175,155,179,171,252,196,181,247,176,232,136,88,56,109,154,186,115,103,105,136,23,191,246,191,135,228,120,94,181,98,144,154,7,224,255,135,43,210,144,96,24,170,6,58,141,68,39,181,116,167,205,68,214,75,253,207,151,63,234,133,62,156,79,195,146,72,66,223,80,224,12,53,228,150,26,23,172,83,91,219,243,45,109,251,82,148,230,17,140,142,231,225,96,73,12,195,48,164,5,119,52,181,55,102,15,181,124,222,140,230,123,8,170,90,67,155,22,175,227,65,60,71,192,246,102,199,46,139,77,107,31,90,133,152,252,135,24,254,26,204,95,79,99,84,60,248,220,182,6,239,86,8,243,33,12,17,69,113,179,25,38,212,161,207,73,219,189,105,109,207,247,237,254,16,138,237,235,110,127,142,42,174,193,27,142,112,40,222,203,77,91,119,170,85,7,121,0,68,255,224,148,121,40,39,206,151,225,30,207,202,156,97,12,29,201,66,210,142,109,90,219,243,161,153,94,134,255,16,81,66,131,139,31,178,77,176,30,46,106,140,75,200,74,33,190,245,165,181,61,127,86,91,121,144,93,59,72,205,57,122,199,108,23,71,159,17,192,56,200,48,57,137,52,173,221,233,52,252,7,80,126,12,219,247,80,217,141,165,61,177,95,234,97,216,27,70,164,204,128,119,86,204,215,214,246,124,39,215,15,49,254,87,206,174,12,213,197,48,179,94,135,7,170,187,78,12,35,227,110,80,232,131,55,138,93,166,180,182,231,63,214,242,95,143,35,234,51,56,142,12,88,30,180,120,152,225,60,74,76,145,95,110,109,206,118,118,237,33,48,223,249,52,252,114,89,127,35,50,232,96,76,66,114,158,174,177,61,251,209,16,255,176,166,14,223,198,160,181,30,214,154,33,140,13,175,191,24,179,81,91,219,243,137,105,123,188,148,49,86,246,117,164,76,125,236,212,247,210,250,93,205,84,175,7,206,222,188,253,118,220,112,243,183,113,237,229,243,15,251,113,197,205,251,239,127,248,249,155,127,124,251,254,63,223,190,251,235,155,183,255,245,230,167,31,222,140,97,124,245,135,163,206,198,114,168,124,253,227,31,246,163,27,127,250,241,135,239,198,73,95,13,110,111,156,255,127,219,213,254,184,252,28,157,24,255,227,234,163,67,255,129,51,228,14,63,127,248,14,210,101,187,158,158,42,131,222,140,60,204,99,92,118,3,29,4,6,139,65,140,241,201,127,255,243,253,15,111,151,214,175,248,111,125,142,131,168,151,241,244,63,191,121,255,253,55,223,189,125,247,238,167,175,228,235,88,254,191,191,251,231,87,203,241,255,54,94,103,57,113,25,210,102,75,29,179,161,253,244,238,221,251,111,254,241,238,253,187,127,255,241,239,127,121,255,238,95,122,115,27,194,199,141,126,27,70,190,11,32,241,2,202,26,196,20,245,175,224,215,39,75,183,255,133,210,192,75,146,239,151,144,22,61,76,173,137,247,250,203,212,60,250,203,24,72,253,101,36,69,127,197,26,9,22,187,170,191,204,99,89,127,153,127,12,238,110,40,26,63,211,66,199,238,140,212,221,225,103,236,208,36,114,248,153,202,54,196,62,141,157,245,73,114,104,163,180,226,86,10,48,62,22,141,29,94,197,135,193,54,216,99,164,70,212,162,124,220,56,242,207,63,218,160,180,48,232,203,119,191,92,233,185,20,17,124,208,158,63,154,110,112,118,252,209,106,90,61,254,140,63,42,144,63,46,98,121,249,185,68,214,167,252,65,161,252,81,55,231,75,55,148,60,9,208,115,198,159,4,232,73,128,126,51,93,158,73,200,50,186,95,168,221,249,203,247,111,254,37,61,212,62,255,240,254,159,111,254,101,178,63,42,237,253,244,237,223,198,40,252,254,86,201,124,84,173,71,76,137,250,104,47,50,52,148,217,59,113,101,198,47,155,96,252,212,255,112,50,157,59,190,122,50,53,189,190,87,181,15,127,46,245,242,211,201,95,135,139,219,175,169,167,141,253,178,243,185,231,184,131,21,198,71,213,251,217,129,248,111,58,223,78,176,151,212,215,186,179,124,58,122,22,170,167,123,27,213,79,199,173,67,249,116,105,123,117,213,211,165,254,219,179,122,250,151,177,28,124,126,52,243,245,136,86,67,112,181,236,58,108,104,49,26,141,143,229,215,89,62,142,8,36,64,14,127,229,88,176,109,181,42,193,112,74,183,3,142,230,36,165,59,25,249,43,79,122,32,60,114,52,193,223,184,189,228,186,211,204,45,95,111,23,70,127,154,127,224,88,170,87,219,153,41,79,127,74,149,61,115,235,209,38,244,119,92,67,227,16,17,140,137,219,200,197,36,132,92,186,34,248,76,90,150,83,45,74,64,26,228,200,133,3,150,243,81,57,90,206,147,1,142,192,86,69,83,82,16,17,65,37,210,27,169,184,136,4,13,75,119,172,76,44,46,121,214,113,200,95,114,185,209,11,187,234,104,145,6,58,66,15,152,191,101,42,207,126,6,46,10,116,38,72,81,143,185,202,73,75,113,15,11,70,213,19,116,213,174,58,32,109,144,65,99,229,165,69,79,177,249,69,60,163,186,208,143,25,84,109,172,30,138,11,243,111,185,150,92,82,230,28,17,55,186,192,104,145,235,41,157,144,150,163,194,12,18,91,48,100,104,20,169,86,98,209,94,202,172,227,172,165,242,221,56,139,65,82,193,119,9,226,18,152,181,159,222,31,204,29,79,201,104,67,142,39,106,192,156,212,211,102,175,21,208,52,190,27,77,105,27,205,178,141,254,182,211,74,162,162,253,238,247,222,218,181,155,30,96,21,199,248,66,23,36,212,99,108,37,111,83,208,28,109,19,110,190,30,63,116,37,105,110,150,11,57,36,119,35,146,14,247,83,24,166,186,91,141,184,94,114,150,20,214,145,78,240,56,165,255,160,197,115,223,138,150,159,218,116,199,142,81,24,206,30,115,102,179,161,152,40,117,83,186,30,193,168,133,180,8,140,43,16,171,89,103,70,39,13,240,45,222,125,224,32,26,29,29,100,247,162,9,137,157,17,90,227,187,171,236,60,218,149,117,219,18,187,167,129,30,19,173,140,25,154,187,202,176,183,122,175,226,234,132,212,108,179,250,176,230,254,246,165,166,62,138,185,167,226,19,70,57,5,35,85,132,133,33,140,191,209,125,61,17,184,26,216,99,222,115,92,12,235,238,55,180,224,54,59,94,202,254,248,146,134,46,138,225,41,97,230,128,186,229,134,186,212,138,23,176,83,48,10,28,159,177,145,237,147,11,145,20,191,201,44,11,187,21,59,238,240,76,33,84,112,23,15,139,78,4,30,214,219,136,135,5,21,12,60,172,66,229,235,99,98,49,59,79,38,246,117,48,177,131,55,164,72,126,224,105,139,129,155,27,21,181,34,136,120,73,217,136,5,177,217,246,7,251,9,106,163,100,203,41,134,222,6,140,232,184,156,31,131,108,93,166,155,81,151,205,153,179,138,217,89,113,196,154,253,82,191,172,41,36,91,170,115,59,132,71,37,135,73,13,237,145,113,198,223,63,6,149,72,54,237,132,74,52,175,84,196,36,126,156,99,18,105,139,136,228,139,44,52,102,119,174,51,56,27,43,252,102,218,6,16,116,203,34,238,197,252,102,210,7,21,46,78,38,135,204,186,113,14,66,74,19,191,54,174,126,137,123,240,139,202,94,195,201,16,5,76,253,225,208,133,134,201,24,25,131,162,100,216,78,215,37,72,28,134,194,135,146,63,37,190,170,116,113,30,106,124,37,64,155,179,178,68,76,79,144,196,56,164,80,180,182,227,23,254,208,14,104,19,160,84,167,14,247,153,191,153,49,244,38,218,109,22,4,232,44,158,95,194,201,39,4,66,229,54,209,66,32,111,215,210,38,98,99,237,40,231,2,177,57,184,19,222,228,45,50,40,154,52,187,148,110,121,106,129,4,136,22,153,23,154,218,101,96,169,5,251,93,114,17,80,27,184,70,230,32,105,85,208,164,171,229,59,31,223,149,199,3,211,73,61,68,255,121,24,97,35,40,3,201,57,120,0,49,165,69,87,105,207,64,164,77,144,153,233,60,32,1,0,150,103,227,159,155,1,151,50,134,209,91,108,160,216,48,202,109,18,128,162,71,183,17,26,137,73,117,211,55,19,194,147,214,206,41,205,249,250,194,148,229,195,165,152,174,24,84,23,120,73,109,184,22,9,104,5,244,26,248,236,128,184,64,122,179,31,234,174,169,91,171,110,191,110,147,182,155,185,223,244,140,27,90,244,17,49,12,238,72,104,168,96,169,128,195,86,176,92,70,132,25,85,14,170,238,64,187,52,168,168,200,56,6,162,52,9,131,70,206,37,82,192,118,3,157,17,128,80,184,122,153,209,179,172,229,112,44,107,33,183,197,7,21,109,84,228,210,98,160,138,166,122,84,150,128,174,131,205,6,134,51,160,199,190,247,40,166,236,240,22,9,36,68,209,96,147,14,229,52,120,169,193,94,21,197,101,20,51,66,33,68,178,149,239,66,167,203,58,49,0,101,65,191,208,232,72,195,35,141,87,232,147,62,145,112,13,86,15,229,2,164,65,25,61,181,123,140,45,75,11,165,39,152,211,254,92,142,2,211,220,103,21,212,69,77,40,125,218,8,64,172,12,147,250,1,77,145,5,9,232,162,141,94,25,14,53,13,47,24,83,157,3,99,157,208,81,234,122,55,52,186,163,46,134,240,215,87,85,244,72,75,233,102,217,173,200,167,56,130,56,231,18,8,124,15,150,207,247,136,254,192,86,93,46,143,152,79,107,161,253,92,247,123,64,7,5,99,200,220,168,238,65,238,126,237,213,121,161,155,122,17,101,220,167,22,8,137,217,161,192,193,172,66,101,161,123,5,90,139,217,15,108,247,161,232,112,198,85,238,162,26,11,219,49,184,98,63,250,48,65,101,250,66,175,229,20,209,147,200,177,39,129,154,143,145,48,48,228,32,97,120,27,137,24,24,99,16,49,150,81,190,62,85,197,178,142,79,85,197,11,137,212,121,33,240,245,137,195,27,108,171,253,90,24,251,200,232,134,211,130,68,190,52,104,167,169,252,157,128,247,122,234,184,17,24,185,59,143,44,135,20,38,189,56,243,95,14,103,46,224,179,210,88,206,86,205,198,194,234,60,85,144,31,210,76,9,149,5,227,64,162,24,11,152,222,228,124,182,183,145,88,168,44,230,176,235,120,147,232,112,220,64,60,207,59,7,65,194,218,38,191,0,229,207,121,26,233,133,199,27,54,253,196,98,144,73,124,234,139,136,171,158,105,8,157,87,209,219,114,11,156,132,72,73,160,44,242,212,204,49,83,137,251,42,163,200,26,82,240,247,16,142,195,132,210,20,223,203,77,182,189,114,237,46,216,174,252,59,157,162,124,46,146,30,65,181,135,10,96,164,218,163,194,88,58,18,50,9,170,140,76,78,20,152,210,163,30,169,50,48,126,152,110,46,94,97,201,100,231,54,45,158,144,193,96,18,52,161,137,153,95,112,247,211,98,169,195,89,155,89,210,76,144,141,53,45,78,89,61,90,218,176,236,21,50,84,20,89,14,33,145,201,203,156,66,184,73,243,7,161,3,202,87,87,111,152,193,111,214,66,153,206,34,228,58,102,90,118,152,101,9,184,113,61,176,200,102,71,85,92,232,147,173,98,46,169,134,231,191,182,101,113,1,226,220,227,61,165,117,4,182,141,119,93,171,221,170,136,86,6,190,252,79,247,86,153,106,88,216,163,196,5,199,5,149,218,177,219,169,103,1,35,192,149,68,118,57,160,10,8,1,34,134,124,55,213,248,252,73,104,76,129,153,85,175,13,216,21,224,12,16,12,168,194,68,34,63,141,152,187,93,207,7,160,99,165,188,173,197,196,131,97,158,251,181,40,203,85,22,212,204,192,142,2,240,219,129,107,185,188,218,131,116,65,178,82,219,187,29,32,179,7,222,184,206,178,147,4,125,44,55,17,15,188,14,52,10,14,66,77,186,168,121,232,182,67,233,81,211,103,26,85,30,48,205,69,63,89,52,155,101,243,212,189,149,54,95,93,193,110,145,27,64,112,96,233,97,41,97,203,130,81,3,210,173,56,57,160,108,34,121,184,66,65,250,145,38,20,178,33,110,3,226,212,37,234,149,11,35,128,123,173,119,213,120,135,38,146,172,117,95,7,193,122,105,122,125,130,53,162,168,159,130,245,43,113,100,85,102,153,77,27,162,34,59,179,38,76,89,93,242,255,129,169,29,30,175,100,181,29,36,52,88,253,151,235,76,131,62,49,203,179,193,85,224,102,242,240,75,186,95,128,126,5,239,148,209,49,28,243,38,246,133,22,27,87,26,191,28,213,129,95,3,9,87,243,115,81,250,211,100,240,236,56,163,60,146,197,220,212,23,11,61,113,252,168,218,82,163,232,114,243,97,237,46,52,141,168,28,248,58,227,85,96,120,24,132,200,127,156,93,119,57,91,220,255,203,90,148,16,43,77,34,140,172,46,177,225,23,161,119,240,57,246,159,202,53,224,11,140,131,37,34,51,201,22,153,186,73,217,202,54,47,119,24,51,99,202,224,150,200,142,70,255,43,17,128,239,129,255,63,153,241,217,194,186,105,157,103,99,181,213,165,180,240,116,157,52,161,238,43,145,122,78,226,57,217,107,93,184,0,193,224,155,153,91,33,53,63,1,194,221,198,134,12,228,38,82,244,151,93,187,115,234,91,232,121,25,24,143,188,76,75,156,53,54,198,97,106,155,185,143,139,19,215,107,250,118,218,56,20,174,172,203,204,9,163,37,93,130,192,44,161,174,110,255,210,30,175,56,160,160,136,128,64,2,122,169,24,40,8,30,149,69,37,188,165,28,151,163,52,253,157,86,43,112,138,188,197,11,6,8,248,161,162,16,160,245,188,5,235,54,13,91,185,236,244,128,7,200,0,233,13,240,14,0,134,47,119,37,124,89,222,35,200,151,249,72,62,251,16,165,224,201,58,25,200,139,41,1,52,138,129,149,0,136,107,96,204,78,248,208,237,61,218,247,69,115,148,69,181,170,33,72,208,24,0,182,1,232,14,224,91,148,182,138,18,9,101,174,160,213,188,0,101,137,202,34,38,100,159,40,1,19,138,142,142,48,157,233,105,81,129,229,176,186,194,232,11,45,93,0,224,252,11,60,241,76,39,127,155,153,31,192,144,153,121,129,143,87,199,205,139,223,244,147,155,127,69,220,188,48,221,3,7,69,127,140,193,134,123,152,201,108,130,190,90,28,86,44,24,132,125,188,46,70,9,16,98,51,201,189,249,39,89,19,80,26,93,67,17,174,105,212,237,7,177,172,210,66,84,18,62,56,78,212,128,237,150,44,164,126,12,130,66,216,221,70,143,114,94,39,206,129,146,28,245,150,211,92,86,189,183,156,57,182,6,186,45,243,67,45,230,105,76,188,208,136,98,97,63,90,85,92,88,92,239,100,10,44,157,36,9,27,112,32,176,38,100,149,10,39,206,35,220,35,43,185,237,192,245,196,169,146,7,23,222,236,179,53,25,148,160,19,203,133,34,222,94,162,116,146,155,69,112,159,155,97,136,51,18,204,236,43,188,72,112,36,38,95,19,196,45,210,172,153,103,247,224,98,163,190,125,105,97,237,104,105,74,103,153,151,22,17,111,68,50,185,111,21,220,159,140,239,209,190,144,7,81,152,135,25,174,89,90,156,255,10,192,35,9,223,140,100,206,185,82,155,32,2,198,72,48,209,213,212,64,39,90,90,128,140,250,0,209,170,5,46,127,185,22,205,33,98,124,244,90,218,160,151,242,223,240,90,177,177,128,149,245,185,129,177,97,220,61,192,129,178,203,6,130,232,10,217,153,12,98,241,49,25,8,243,13,210,27,206,100,6,81,148,113,251,137,185,97,58,131,130,40,49,135,66,160,3,119,244,140,51,141,24,121,205,199,230,70,32,91,80,199,18,170,223,37,128,244,213,97,7,121,6,118,115,206,226,22,171,165,31,1,155,26,166,85,39,233,100,67,11,58,199,62,234,241,24,229,204,217,25,80,87,101,18,58,220,69,5,54,8,53,254,103,16,91,236,111,146,248,177,196,209,27,144,16,175,58,122,57,28,105,38,4,82,16,65,35,28,34,222,120,3,154,196,226,253,135,200,154,195,150,53,230,113,122,99,185,110,102,25,159,66,37,104,0,100,51,67,255,180,226,2,3,102,113,115,191,50,43,48,12,191,58,52,169,34,139,154,108,51,99,3,186,151,39,150,159,236,186,20,223,8,173,89,244,190,183,120,20,178,32,66,243,68,96,70,57,230,103,155,73,16,19,90,129,24,22,161,128,226,39,179,183,227,232,51,82,255,134,54,67,175,116,42,207,13,105,180,14,250,46,253,173,110,185,237,252,53,120,60,35,251,142,36,20,194,209,80,151,74,130,26,58,85,137,89,75,241,42,89,204,148,51,145,214,134,250,154,11,43,185,156,54,144,144,96,165,133,167,6,236,226,228,10,70,59,11,99,178,185,173,46,210,11,5,182,69,155,26,114,85,105,90,165,96,126,90,32,133,129,76,6,2,218,16,216,142,6,23,58,221,145,242,74,240,39,163,200,6,125,240,101,193,198,159,155,108,101,24,231,200,121,96,207,220,34,167,148,223,153,210,224,130,108,211,107,96,154,38,92,17,33,170,237,207,94,171,204,143,205,168,241,181,178,114,216,0,100,219,158,122,57,215,61,0,179,81,55,21,72,125,122,227,13,117,107,78,203,180,193,151,155,179,41,181,4,12,149,67,237,14,55,165,20,122,237,140,129,128,15,109,7,108,29,26,164,237,75,70,210,10,17,97,145,145,244,193,187,54,123,122,167,70,180,145,105,42,211,95,37,3,243,233,129,191,249,154,64,81,132,14,107,72,135,248,182,88,221,112,148,217,162,0,82,130,180,10,138,13,188,118,80,221,194,126,179,67,146,4,116,81,23,10,117,227,239,221,176,187,25,108,230,171,78,42,159,166,23,42,115,186,46,235,181,11,113,175,161,165,21,180,64,134,173,127,40,225,227,248,121,146,195,73,102,102,11,209,20,83,209,145,103,251,108,202,78,252,206,41,179,51,217,228,84,166,146,61,133,152,88,92,134,202,223,22,94,195,225,63,169,141,148,218,136,205,98,203,149,53,209,206,179,210,77,165,165,16,157,24,14,152,121,148,134,145,169,236,78,165,132,13,185,76,68,181,17,122,147,88,188,34,60,167,149,167,72,3,138,142,107,224,133,128,67,81,42,66,189,164,163,64,100,224,177,244,255,16,205,137,141,64,65,102,222,50,231,193,186,230,75,1,248,242,132,46,29,8,22,40,165,174,106,223,45,62,186,21,123,90,201,168,200,78,85,188,194,146,230,6,243,60,163,44,221,36,33,34,142,219,128,193,205,175,180,81,8,56,103,139,237,28,29,63,5,105,89,131,31,64,114,12,209,68,29,61,66,196,202,86,169,27,42,111,57,59,219,189,23,205,6,66,70,109,234,23,36,171,238,116,143,147,36,17,32,116,201,157,143,8,71,84,52,226,126,157,243,62,107,0,131,12,74,241,172,172,249,161,235,224,238,42,157,21,148,165,184,90,80,179,95,101,158,66,250,15,114,1,32,116,238,107,97,238,139,107,224,48,109,152,62,20,23,188,243,210,175,130,207,92,249,138,234,180,133,67,252,102,216,106,110,72,106,209,24,161,154,175,50,163,156,114,19,231,241,177,160,121,159,229,245,243,24,27,135,97,64,188,50,15,136,201,62,169,128,22,130,30,173,38,95,108,11,154,133,53,73,176,147,24,91,193,146,251,193,93,163,80,98,29,80,162,45,85,96,117,200,247,22,167,109,69,233,146,148,50,198,65,251,109,117,66,60,169,143,31,194,68,109,229,214,30,245,61,163,20,147,41,147,194,135,173,193,217,161,136,23,83,228,91,65,164,166,247,113,87,215,164,210,105,212,62,6,68,165,133,87,204,186,158,91,232,202,69,9,101,250,55,242,130,199,122,125,240,178,132,44,194,140,89,222,42,106,80,65,145,212,172,130,8,156,85,172,19,168,103,171,32,32,167,29,156,211,171,244,59,199,0,24,193,14,148,164,144,201,66,74,50,173,41,196,200,174,58,229,47,186,175,10,124,17,108,225,72,49,103,162,10,132,89,130,171,50,30,246,166,75,52,186,134,206,69,87,245,111,209,16,7,29,114,85,49,115,183,161,38,205,34,157,101,228,112,248,11,138,181,78,243,230,122,185,16,70,201,14,23,164,216,11,122,63,202,151,69,46,230,224,165,224,143,218,8,144,89,198,108,228,208,48,178,153,112,53,113,2,147,51,175,140,251,26,111,239,72,190,33,183,149,38,207,224,119,142,114,38,29,44,241,87,183,40,110,37,202,133,110,123,146,30,111,41,252,13,115,63,52,31,68,195,27,190,132,100,160,42,40,173,10,83,204,187,172,242,195,249,194,126,210,141,217,69,86,197,158,85,205,56,56,226,232,132,128,26,220,154,169,0,144,54,33,185,230,87,82,39,17,194,179,179,147,103,51,78,33,66,20,249,16,24,93,111,48,29,13,135,81,217,151,112,105,144,241,194,171,120,96,10,237,167,194,135,180,92,66,163,164,238,164,201,34,116,174,74,166,220,249,216,85,232,23,149,246,179,6,42,179,37,149,246,55,12,66,195,68,208,149,17,150,22,216,155,185,146,236,207,150,56,136,74,64,43,145,45,116,184,80,234,206,162,212,216,161,106,83,49,95,117,220,86,154,155,194,181,249,176,9,41,124,128,57,167,121,42,162,161,65,174,19,49,152,160,178,32,163,247,232,165,137,116,203,158,128,59,215,152,37,142,86,60,181,33,234,186,83,128,18,146,169,20,73,34,185,92,145,104,177,182,241,62,160,177,105,244,58,55,212,63,132,215,19,22,207,242,41,109,247,198,244,152,65,116,13,5,50,11,208,240,169,157,13,211,239,229,41,67,84,113,183,239,211,188,116,18,120,165,98,173,128,26,136,99,165,159,149,198,42,24,38,167,52,159,250,6,112,139,214,35,17,155,138,220,43,250,47,12,113,98,153,141,0,71,207,108,2,191,188,192,85,67,17,230,208,224,34,156,146,51,226,160,199,174,7,17,41,143,255,183,4,80,238,203,131,22,224,15,61,159,180,122,100,225,93,119,240,99,61,28,43,218,148,205,53,105,117,222,116,230,194,38,83,242,228,216,214,37,129,140,37,178,78,151,145,89,198,69,21,42,10,216,84,200,202,28,94,229,2,59,126,167,242,68,141,34,145,181,141,173,58,146,167,209,35,15,216,157,130,29,46,26,127,140,236,174,17,188,57,200,211,163,115,4,81,79,207,20,190,225,134,129,206,228,159,157,2,146,215,64,118,42,72,62,7,217,41,1,72,136,82,182,40,182,112,155,50,207,7,180,134,17,155,23,124,95,232,65,217,160,69,236,77,59,58,49,140,85,177,208,48,14,133,185,72,236,71,229,115,42,47,132,105,8,202,35,221,217,78,152,76,147,78,252,31,169,147,110,107,152,138,34,170,101,19,27,102,114,69,61,198,236,108,101,121,43,91,204,75,39,141,226,165,176,61,47,59,104,223,231,167,106,188,126,0,142,148,209,18,166,217,105,83,52,247,108,50,81,44,109,228,236,160,194,171,49,192,148,188,210,102,201,54,38,167,82,106,220,81,26,199,140,27,254,27,81,185,215,174,80,93,200,102,185,43,76,84,184,105,96,107,69,235,22,220,115,72,115,23,102,254,206,180,111,217,16,14,237,5,226,169,21,25,200,73,230,102,138,32,0,242,159,95,78,197,226,104,113,23,223,66,209,64,30,212,10,85,237,16,180,18,197,95,169,69,111,5,1,54,222,121,89,131,83,117,60,73,9,212,249,2,80,47,87,12,56,197,198,19,169,2,99,73,197,94,148,147,160,58,154,37,181,101,214,107,134,14,120,56,7,211,137,226,81,200,132,131,15,247,108,121,193,247,44,121,167,85,188,31,206,209,132,237,154,5,93,240,130,78,119,117,157,201,140,18,179,53,29,219,195,108,209,10,231,148,56,171,204,122,37,70,233,42,144,43,233,13,182,43,60,114,153,188,226,176,217,185,116,38,159,207,228,20,90,0,179,1,221,184,66,212,7,93,34,135,145,2,64,153,6,119,171,85,220,13,217,35,241,134,199,98,239,237,232,158,144,217,83,242,102,30,195,187,2,78,20,3,132,120,147,209,84,243,178,193,17,62,69,156,228,240,241,207,31,16,224,121,5,125,191,42,91,25,57,59,206,88,129,212,15,105,198,61,78,14,198,127,44,32,69,255,121,6,26,207,147,130,192,167,144,36,212,25,110,242,143,35,206,87,53,48,209,85,134,209,23,39,171,102,71,3,198,57,60,236,219,129,104,159,52,240,72,187,16,192,64,102,229,5,100,0,55,119,62,214,79,129,187,33,86,212,210,123,179,5,74,219,66,64,184,50,56,23,14,80,84,54,106,1,250,185,212,163,102,197,20,44,100,21,149,32,27,231,104,180,23,206,74,178,173,84,187,79,174,38,83,194,114,66,11,89,221,149,180,106,108,32,247,220,164,230,176,156,209,4,206,64,230,150,213,43,98,118,79,54,75,170,9,164,223,165,224,115,132,207,176,74,32,19,4,14,68,39,151,86,103,165,108,239,57,239,59,15,33,173,177,66,115,144,68,77,131,31,211,167,34,222,53,52,164,144,123,64,2,41,95,61,91,9,57,78,153,82,63,101,89,166,248,74,218,157,116,23,115,17,11,77,73,83,60,27,40,96,157,242,29,195,55,152,166,205,77,209,12,146,81,60,208,81,164,24,208,224,161,13,189,32,197,107,130,73,5,203,72,249,173,184,176,128,187,63,1,4,40,109,179,85,30,176,140,206,56,143,188,218,225,27,200,89,158,41,86,105,122,188,214,196,102,104,115,130,11,249,3,69,19,220,20,54,255,45,91,86,59,130,166,218,2,239,106,222,234,201,123,206,78,211,161,135,107,123,83,232,221,253,65,191,13,76,87,192,95,221,28,73,239,80,246,101,216,133,253,70,229,123,187,230,145,160,214,228,91,218,65,161,211,101,105,86,38,168,157,197,58,211,205,114,212,53,203,11,27,22,127,29,52,226,210,108,175,18,231,219,123,201,21,132,139,28,206,148,7,151,148,71,170,165,81,244,14,136,183,44,185,156,117,154,248,121,163,220,92,111,171,238,189,184,55,195,222,93,219,222,5,1,100,36,17,177,72,196,50,5,9,69,28,181,130,198,10,170,171,248,176,226,204,14,179,6,244,155,80,115,196,219,107,184,189,160,255,66,32,154,155,22,8,111,247,65,179,89,106,86,195,130,177,11,9,13,100,182,163,194,68,164,87,200,120,34,244,133,21,8,176,43,130,178,180,106,8,197,109,17,139,181,166,214,16,35,65,81,139,140,50,112,88,21,28,100,150,75,1,182,86,223,213,116,17,41,142,76,153,35,83,14,45,13,209,152,199,73,187,102,75,159,74,96,42,35,114,130,45,82,239,122,250,71,212,213,210,104,216,222,25,156,183,124,156,146,230,6,245,246,169,123,220,123,86,134,153,195,106,69,27,25,171,4,148,195,157,147,251,170,128,39,211,183,93,137,33,192,254,8,233,27,58,134,184,80,227,72,179,59,154,94,73,126,100,10,42,219,144,248,138,142,241,80,200,199,190,183,221,150,186,73,158,25,51,224,134,84,253,179,235,218,183,89,209,64,53,5,140,100,45,76,39,206,210,189,225,25,169,252,18,193,43,49,44,162,31,156,14,136,51,106,140,167,158,110,221,118,174,233,127,25,97,152,132,181,185,66,62,126,46,221,145,198,112,111,0,66,79,202,224,133,61,7,226,42,112,16,227,58,95,77,151,218,142,19,36,84,64,9,112,212,80,90,81,57,73,52,146,116,77,138,189,125,100,150,122,153,215,148,165,30,249,226,130,50,164,209,133,188,198,228,27,159,40,127,248,51,249,198,51,71,253,42,140,65,63,249,153,115,212,139,33,231,153,163,254,51,230,168,95,88,249,221,121,152,52,206,167,195,233,112,57,104,238,249,133,229,190,108,207,187,253,102,55,124,167,45,35,253,210,122,62,95,135,229,227,178,31,217,234,45,77,253,117,123,56,93,46,131,243,219,31,183,199,147,217,6,5,167,47,117,179,159,185,117,110,171,80,193,181,88,13,233,201,132,120,250,91,85,113,154,148,0,51,165,149,85,30,117,124,41,184,25,85,122,141,69,84,217,193,220,120,92,148,64,137,109,189,166,250,206,76,171,203,76,204,135,210,219,102,178,244,42,194,82,79,215,179,77,162,124,186,231,250,131,132,66,198,73,212,75,103,62,23,23,134,17,216,211,66,162,8,184,74,69,75,17,106,114,123,177,114,248,196,11,170,165,116,41,96,19,211,165,141,249,84,183,41,57,234,26,242,109,107,75,224,25,169,40,241,50,243,102,46,159,41,62,81,20,121,114,141,136,116,182,69,64,31,144,219,127,14,197,206,162,242,250,124,229,123,249,193,58,207,170,175,26,101,143,163,169,66,135,73,34,236,104,136,178,52,53,168,162,66,33,193,184,62,42,108,110,30,11,158,29,111,12,7,214,109,85,10,32,84,139,163,234,111,204,156,205,65,152,37,204,91,152,75,42,208,189,216,191,250,45,146,150,177,46,115,128,130,6,74,34,20,53,96,22,192,176,0,105,4,226,8,229,237,70,136,107,120,59,125,212,125,133,168,177,79,99,37,106,85,81,68,190,121,44,113,97,156,165,237,75,91,143,168,230,99,4,74,214,1,205,194,119,174,191,33,247,69,206,43,102,104,207,2,37,89,119,58,151,151,78,154,37,56,72,25,204,209,16,112,237,34,69,147,185,194,176,238,137,47,66,170,208,157,86,170,255,232,250,226,64,210,97,85,189,141,86,85,251,27,22,85,122,243,250,196,161,103,102,241,215,196,47,153,47,27,185,151,206,168,118,196,219,207,26,210,41,189,15,7,24,36,119,56,46,82,192,201,126,220,60,97,185,117,204,177,8,197,23,41,61,95,232,23,66,75,52,82,158,124,243,184,160,185,183,40,146,99,202,55,237,54,192,126,41,163,88,108,129,241,138,20,125,134,169,184,126,106,12,28,6,243,206,222,120,222,89,65,102,226,87,59,223,58,127,107,158,232,110,33,154,149,106,51,35,248,191,164,184,135,86,207,92,95,167,247,141,253,157,176,53,198,236,88,31,247,10,238,220,220,97,40,112,203,60,196,217,234,230,179,78,248,84,161,25,227,13,101,157,95,98,186,70,83,122,42,103,146,102,205,10,112,27,186,18,228,23,9,247,106,14,213,114,107,18,221,0,212,50,14,235,78,71,201,188,39,154,109,83,247,86,157,229,178,16,188,82,240,3,247,176,60,190,105,191,103,226,88,218,177,230,96,238,50,91,205,140,70,96,95,77,243,113,23,209,214,171,5,154,13,88,190,167,146,255,229,245,209,108,73,28,244,164,217,175,70,199,113,5,159,12,81,4,121,127,241,225,246,10,245,242,50,255,47,149,249,168,92,30,142,81,172,68,126,99,150,114,152,115,85,33,183,120,104,179,94,80,3,68,83,202,120,100,22,102,118,95,51,127,54,215,97,160,212,53,178,195,231,241,177,94,135,34,252,208,201,105,144,197,69,168,197,19,97,53,213,229,221,203,60,37,248,157,185,0,167,125,172,92,196,99,7,124,1,64,173,169,172,33,44,103,75,143,232,40,206,113,8,106,101,65,15,92,221,219,126,7,227,20,4,111,207,167,233,171,65,243,3,73,203,42,121,179,251,21,196,119,163,148,33,86,2,73,61,85,82,103,213,24,164,108,100,234,159,107,186,156,10,133,128,174,60,26,120,9,181,9,186,3,35,23,88,86,168,35,132,146,34,121,53,20,7,104,66,254,235,57,237,166,100,162,226,103,6,41,84,35,90,237,90,156,212,80,83,231,51,136,171,22,198,150,79,115,255,97,162,213,47,217,92,85,61,32,213,90,188,220,53,146,195,169,11,46,234,228,112,32,27,146,187,81,24,1,89,70,221,7,124,166,155,51,182,40,102,241,229,132,90,6,244,238,215,111,138,155,208,130,142,113,214,83,6,133,5,60,176,180,190,87,116,117,104,235,78,237,212,92,17,44,27,85,215,212,4,254,84,211,1,32,210,181,208,73,80,129,218,40,67,95,176,215,109,3,134,132,103,198,254,82,14,211,220,148,206,148,171,205,197,118,52,104,213,255,40,25,38,156,105,67,56,16,82,161,211,138,44,224,152,82,105,199,203,35,162,201,182,50,225,2,11,78,42,137,126,216,16,14,101,32,121,181,216,38,159,134,227,112,152,239,237,120,79,68,22,139,195,10,7,56,43,74,33,125,16,178,103,44,234,113,138,36,22,215,147,16,69,166,172,119,200,214,131,163,166,18,207,14,50,116,173,235,238,142,114,10,238,220,194,29,20,208,18,45,159,92,112,219,7,165,22,124,99,122,125,82,86,142,62,65,153,41,45,200,88,62,180,157,246,191,237,68,197,20,227,0,80,69,119,85,135,0,226,37,59,70,11,236,6,238,176,104,190,90,132,198,16,65,238,83,62,141,7,80,109,174,224,195,6,103,210,56,133,57,130,215,1,0,16,119,211,164,151,124,127,211,10,79,239,55,232,114,169,197,212,119,30,195,53,154,20,67,112,117,27,104,240,168,40,9,50,93,210,172,196,78,41,98,169,24,96,13,73,76,212,24,79,194,101,28,7,1,247,43,110,247,6,213,12,18,49,178,2,40,228,179,17,174,163,155,2,186,124,42,7,59,154,220,95,12,156,12,234,193,250,110,85,248,33,247,93,0,114,219,146,217,43,202,216,170,22,2,166,202,216,123,33,147,53,156,100,8,241,196,126,71,203,10,151,82,50,181,170,39,84,88,218,52,175,41,3,85,96,211,10,43,215,241,123,45,91,8,42,55,103,206,188,201,184,68,148,194,94,106,194,81,142,147,237,150,220,47,204,40,103,96,182,205,194,232,60,77,132,101,151,183,203,221,226,218,34,115,215,177,127,76,106,42,7,105,37,129,216,247,201,46,16,114,120,4,143,77,220,199,252,209,17,76,1,218,94,212,74,28,140,211,209,193,142,92,66,211,69,89,185,39,133,224,52,224,113,150,40,223,20,211,46,163,64,20,159,107,36,137,175,126,131,76,49,53,35,215,67,176,191,156,162,198,189,196,120,44,93,246,245,170,183,155,217,5,66,188,171,53,132,155,25,194,67,119,88,133,56,83,26,80,152,172,57,176,205,245,12,147,36,211,214,241,15,150,200,153,131,144,141,129,0,187,235,53,53,96,71,179,161,42,40,41,164,57,236,155,7,224,100,91,96,196,11,0,106,50,29,105,196,236,186,240,204,199,141,41,186,172,227,117,210,144,0,29,8,100,156,216,115,182,208,228,164,148,103,182,243,8,13,106,226,249,112,8,178,110,187,146,15,34,34,154,32,225,70,244,0,52,205,204,152,182,248,134,81,254,44,182,32,137,45,173,48,141,10,188,147,113,60,201,212,61,184,7,91,34,53,153,69,167,121,93,104,15,210,52,224,31,68,137,74,223,232,181,57,166,60,222,239,206,84,185,45,159,34,11,12,52,44,236,206,116,218,148,145,204,28,206,147,208,123,2,107,111,201,25,222,137,105,32,118,192,100,47,226,7,26,254,163,50,41,13,39,67,96,25,248,38,178,249,86,177,177,112,82,29,187,213,48,101,230,180,170,172,201,58,127,71,147,43,211,237,161,147,206,42,66,14,116,132,70,0,2,120,201,217,215,70,147,109,218,57,115,141,191,233,232,0,208,195,28,30,165,97,246,38,67,78,126,125,143,30,157,227,51,13,2,23,174,79,195,17,184,135,135,171,35,90,8,255,33,55,216,152,93,18,29,72,83,51,67,19,137,34,59,155,213,176,43,29,53,111,136,126,199,27,52,44,132,35,172,137,16,188,137,36,189,34,252,53,34,162,122,8,113,188,86,135,106,59,140,108,40,187,69,232,21,229,51,65,72,4,99,85,48,133,215,7,179,140,222,148,38,40,202,189,117,186,167,230,99,46,138,33,220,192,2,52,236,4,28,165,89,122,133,65,39,23,36,136,151,106,168,105,37,185,76,151,217,168,99,158,5,158,157,135,117,96,149,5,232,24,133,142,157,168,85,179,58,249,188,17,227,27,97,255,22,127,68,76,148,21,28,41,135,112,38,20,91,176,42,233,51,31,215,176,123,189,18,165,104,76,38,146,161,106,16,204,136,174,176,170,37,5,26,208,28,251,132,0,191,64,145,7,22,59,228,39,65,104,14,167,54,133,45,112,246,198,10,117,242,81,74,132,140,2,179,140,17,57,26,11,73,152,214,96,173,123,61,35,18,24,217,41,246,43,12,69,43,211,85,193,79,149,128,222,29,107,153,195,0,209,242,197,54,173,60,65,146,90,49,253,247,100,102,124,228,206,223,220,224,120,194,40,56,197,14,71,122,24,15,100,37,110,96,228,163,82,78,232,49,37,43,196,157,114,250,194,152,65,71,211,86,176,177,16,73,97,188,33,21,49,193,205,185,206,134,177,135,4,43,8,70,98,37,188,53,165,124,54,30,72,121,79,69,141,134,217,49,42,70,180,197,36,114,218,175,83,1,68,115,111,236,14,81,94,195,252,148,137,99,110,35,17,209,77,131,197,73,234,76,62,129,40,9,133,71,74,190,102,4,9,19,87,213,220,85,21,222,232,203,27,173,122,163,123,239,53,244,89,67,212,235,145,26,117,83,195,76,242,42,44,11,83,117,244,216,50,160,201,176,98,45,236,209,244,165,165,248,34,144,39,83,121,114,28,28,105,236,157,44,68,13,127,108,49,205,97,48,18,196,254,77,139,127,168,20,9,108,131,212,25,217,23,111,86,147,97,164,105,129,105,238,100,7,109,3,215,245,238,85,254,222,194,61,81,117,90,210,193,85,93,126,81,176,21,21,28,120,227,208,82,53,121,116,35,118,9,137,36,167,85,107,84,237,71,165,76,13,249,226,203,135,59,50,117,106,85,50,138,223,40,127,155,198,241,146,123,17,87,102,159,6,64,206,124,143,88,46,31,7,206,241,224,47,107,208,85,157,213,63,38,129,65,44,157,47,102,37,129,13,157,12,196,180,33,182,145,26,119,42,40,24,146,59,237,65,102,124,27,238,184,51,131,52,182,18,214,50,116,122,136,168,169,232,184,108,24,19,42,39,214,115,108,29,103,199,250,164,78,227,20,84,82,107,122,171,212,133,208,173,160,113,138,108,105,199,185,182,188,109,84,75,177,222,170,227,108,97,215,18,250,206,220,13,220,166,116,37,20,47,115,178,74,19,9,88,241,128,80,4,202,222,96,246,106,142,115,76,9,145,173,104,95,229,111,27,203,21,233,138,170,230,5,86,151,168,33,227,202,187,160,65,164,174,135,48,72,27,85,217,58,202,171,108,190,239,174,3,183,67,108,106,124,234,224,38,85,120,146,204,181,36,221,19,198,94,171,224,185,122,162,26,224,170,9,12,3,39,68,28,250,98,6,204,202,244,85,45,87,163,248,242,211,160,212,42,150,189,168,119,90,85,79,53,90,172,198,38,24,175,223,185,170,208,2,127,61,21,37,102,143,51,195,156,109,71,109,212,53,48,197,142,169,219,116,117,116,35,169,184,63,100,103,249,229,244,34,59,44,52,62,13,197,231,33,102,143,12,14,19,157,45,221,146,94,102,166,170,113,70,169,14,43,217,165,101,42,103,115,181,101,215,148,205,172,20,49,145,129,98,118,155,129,172,20,180,50,158,80,86,64,153,41,7,217,242,204,248,15,71,176,51,111,6,81,34,82,239,212,172,243,148,126,219,210,92,46,199,229,236,164,202,104,132,83,97,203,51,117,68,54,134,78,28,5,218,16,84,25,196,124,88,6,80,98,98,58,183,168,198,187,168,120,63,20,255,8,96,46,146,81,128,134,72,248,1,76,145,188,166,102,92,47,178,26,238,163,91,18,219,136,40,249,84,79,234,47,183,42,81,34,129,198,173,42,154,245,58,195,95,178,13,174,42,229,146,242,174,85,240,5,21,224,170,162,144,5,108,208,127,102,120,33,21,123,69,9,99,8,130,178,49,230,44,85,246,132,70,173,57,103,28,110,161,82,172,74,70,86,218,84,147,111,103,23,158,121,130,61,151,1,229,222,78,107,119,87,82,237,41,250,80,242,116,144,33,118,134,66,190,128,108,235,158,67,50,16,38,13,72,20,15,215,132,200,21,97,211,250,228,74,243,216,79,170,236,16,138,225,102,89,191,85,8,216,54,73,92,26,88,26,48,175,16,184,66,62,132,194,238,70,214,155,193,160,240,238,204,221,83,4,219,68,76,150,41,150,93,192,11,65,207,52,159,103,96,46,55,114,154,108,56,54,169,154,104,88,71,0,147,129,87,182,31,20,204,152,103,97,88,160,29,152,246,138,222,238,80,21,250,141,222,63,222,30,86,140,198,32,49,3,13,233,98,164,61,91,177,71,116,86,139,214,184,193,119,4,95,208,120,88,52,27,55,109,238,180,251,13,249,7,167,215,162,104,43,170,184,170,173,203,26,189,226,237,17,251,11,101,161,35,175,22,185,101,228,151,180,143,81,63,185,166,197,108,116,157,157,74,180,83,156,22,193,18,177,173,137,139,15,194,104,229,252,171,124,208,72,17,81,214,232,165,17,103,185,137,135,101,33,29,194,33,167,50,228,57,134,153,189,243,47,65,122,239,96,212,152,14,45,150,64,156,156,116,123,59,72,211,84,109,42,157,225,101,221,151,144,236,80,141,181,170,113,139,9,163,131,238,86,205,179,217,74,176,226,195,113,135,171,7,155,18,26,139,195,170,89,226,150,77,167,49,252,52,230,161,198,136,4,213,194,84,76,203,133,220,115,154,156,108,249,78,236,194,51,155,114,119,104,10,73,47,188,162,59,238,21,204,89,9,189,170,168,190,225,234,80,221,33,58,151,137,21,183,138,40,79,187,215,112,213,119,115,9,200,164,145,79,106,251,162,217,111,245,88,153,226,70,178,220,145,109,38,235,171,180,159,251,7,233,182,138,243,36,242,183,42,1,214,25,172,42,22,214,69,228,27,6,150,106,131,161,222,73,215,5,82,47,26,249,37,51,216,153,20,26,91,1,149,9,96,79,13,218,32,29,175,208,146,244,206,226,223,153,34,184,23,32,89,145,121,206,172,117,97,190,27,6,189,224,232,138,200,27,205,84,212,190,144,118,102,77,129,147,129,34,47,76,103,63,171,164,191,97,15,108,40,119,150,167,104,249,32,46,153,216,176,203,55,184,234,192,125,55,198,160,104,45,90,49,41,117,171,221,67,69,227,46,82,125,74,104,124,178,29,212,107,72,86,36,164,31,11,41,213,170,228,94,229,251,86,13,208,233,11,58,189,2,114,246,153,208,202,109,172,166,176,185,224,212,33,166,237,39,251,85,171,92,1,68,148,243,148,251,99,13,12,56,81,182,133,27,187,74,166,10,119,75,207,19,36,102,18,74,77,178,146,111,119,101,34,170,34,38,234,107,122,141,14,235,124,72,29,9,197,80,167,57,74,202,165,85,21,84,157,201,110,190,235,186,52,203,215,175,114,152,4,129,73,17,149,36,15,230,246,178,82,71,166,209,254,244,74,162,78,153,84,149,78,29,136,215,117,238,161,161,129,25,109,201,181,0,89,29,136,253,163,204,203,141,0,178,28,102,102,182,1,247,158,179,75,185,127,219,140,59,227,217,81,206,134,252,233,192,205,88,122,120,226,173,211,164,82,147,99,12,85,121,172,208,196,78,17,215,46,88,185,93,237,83,215,111,93,83,106,154,87,98,49,15,142,164,201,81,194,248,0,166,25,32,73,134,33,204,178,190,238,248,222,120,199,119,177,149,77,0,102,9,210,140,83,5,216,190,17,176,196,77,235,210,9,207,59,95,76,86,202,179,230,108,175,43,219,43,65,16,135,46,106,146,92,58,162,70,47,101,110,61,203,9,81,10,210,117,250,160,140,87,69,193,186,46,205,226,181,75,220,65,66,2,151,6,164,26,192,235,160,51,204,156,112,145,74,236,101,34,101,242,219,186,88,105,234,210,252,222,92,129,66,150,9,23,180,8,163,6,175,214,96,137,86,210,244,78,134,94,119,145,7,209,69,174,70,176,181,17,4,124,53,105,23,85,187,103,5,106,243,8,103,10,149,77,45,41,130,182,15,178,173,113,184,41,84,55,6,243,222,64,217,25,177,87,228,223,80,136,142,140,52,252,73,101,98,104,240,106,161,19,29,156,48,123,167,21,88,107,183,87,221,133,205,102,173,251,121,69,26,143,128,68,114,125,39,246,147,86,96,77,117,208,120,169,118,174,172,65,209,211,170,130,92,83,212,96,26,9,64,208,164,213,66,127,68,96,104,55,107,209,156,117,234,181,162,129,75,58,186,224,31,210,250,143,184,123,201,186,232,94,196,123,118,238,235,220,255,170,130,164,209,53,52,250,136,226,5,80,252,4,120,86,238,44,109,208,219,196,216,238,18,236,50,171,214,27,211,140,83,189,66,179,57,208,137,72,95,206,108,114,49,235,40,2,216,202,154,28,56,219,203,125,169,229,112,215,152,90,14,25,97,41,157,137,153,182,67,62,19,109,124,125,25,77,22,156,247,204,104,242,76,202,156,51,9,155,127,227,167,204,120,183,236,235,207,159,156,249,130,44,47,159,251,182,182,102,159,249,182,159,40,3,246,175,78,69,221,0,208,239,59,37,117,238,179,121,47,203,20,60,84,191,81,33,115,16,250,199,234,185,169,128,151,153,127,18,130,155,132,0,168,248,35,8,129,22,38,20,54,29,221,123,69,71,124,42,18,120,106,177,51,178,240,253,118,68,65,4,171,207,127,91,81,184,124,129,219,182,148,247,183,191,109,203,74,255,246,183,69,137,213,207,124,91,203,205,253,107,111,251,43,249,12,17,21,69,200,148,170,222,178,121,101,247,74,45,12,57,76,34,184,68,255,103,18,166,30,38,78,103,126,152,218,13,197,238,177,28,39,217,114,229,56,33,134,126,156,42,20,69,182,94,142,147,52,102,114,156,148,0,243,227,52,145,182,120,172,89,173,101,61,78,252,24,252,56,17,121,69,243,36,216,71,44,164,114,156,164,175,241,227,196,76,40,2,191,252,43,113,80,242,77,124,3,253,56,145,178,213,2,102,22,3,57,238,32,185,111,63,81,137,144,169,65,18,173,206,203,230,18,134,9,239,122,221,157,206,199,243,101,139,2,218,163,228,199,254,120,56,109,15,187,217,184,248,79,237,15,215,145,250,220,202,134,140,243,46,167,235,254,114,56,159,172,60,8,178,198,46,246,148,151,63,230,243,238,122,29,250,159,253,254,56,7,180,57,239,15,135,205,241,184,245,201,88,198,125,222,158,118,135,243,241,120,241,35,199,217,167,243,246,56,234,171,92,174,27,140,158,170,17,60,194,138,31,135,9,248,26,70,63,86,253,114,220,238,183,151,217,136,85,223,157,247,167,203,246,116,192,72,117,229,119,251,161,138,60,143,25,195,161,115,241,15,143,198,22,63,55,235,115,179,190,236,21,223,140,237,182,221,95,198,40,46,54,250,195,126,44,239,126,79,67,234,26,219,179,167,77,77,18,27,189,248,225,95,174,167,227,225,120,216,110,172,12,213,240,209,56,12,180,179,59,109,231,136,106,83,119,34,76,162,18,169,253,210,135,61,106,113,237,54,187,203,101,67,128,188,140,101,108,244,205,118,239,107,217,182,118,167,123,80,234,224,77,95,250,232,199,6,222,93,15,231,235,245,178,25,85,200,48,166,211,241,56,176,218,121,191,61,28,142,3,208,103,164,106,105,109,207,55,39,52,241,53,122,241,64,191,185,140,5,61,92,6,153,118,76,127,88,112,216,225,178,191,208,86,110,91,219,243,45,141,192,226,96,247,220,243,47,115,216,231,205,225,124,216,13,44,62,121,173,69,103,183,63,95,15,199,227,241,68,12,88,215,214,156,141,42,115,162,178,124,241,131,223,15,107,230,105,59,216,82,175,86,184,31,69,10,207,231,81,177,112,240,165,19,16,218,198,114,182,123,108,12,9,245,193,152,58,225,223,70,161,198,243,225,186,153,3,234,219,210,153,40,51,179,248,7,62,154,86,29,165,238,94,122,199,151,41,31,204,245,176,194,159,2,168,142,12,137,135,203,238,28,9,118,219,216,156,15,9,68,82,224,188,248,225,159,70,241,208,43,115,216,82,64,116,55,34,15,135,252,200,3,109,27,235,233,179,36,229,35,12,126,172,221,238,56,4,98,151,123,117,149,3,163,82,26,234,105,234,28,243,0,99,126,224,141,122,57,93,142,231,211,38,46,197,162,205,216,109,143,227,15,230,36,154,214,254,124,139,130,126,233,99,63,110,199,128,70,65,223,205,198,249,199,203,216,115,251,49,162,211,105,114,71,146,133,167,180,118,167,75,98,200,197,83,243,197,111,209,195,102,63,8,229,222,85,29,131,101,24,204,240,96,152,72,127,176,48,23,165,177,59,153,75,174,62,152,94,11,49,1,195,39,237,1,16,235,160,10,129,117,29,235,115,25,50,221,133,117,148,203,162,149,198,230,220,153,124,226,165,251,68,12,65,117,51,244,118,139,8,183,119,149,205,121,115,189,238,55,135,237,96,237,28,67,213,198,238,100,243,169,95,188,110,95,215,146,131,133,120,238,209,223,82,42,223,92,183,131,26,28,46,151,81,70,222,232,199,118,232,153,143,251,211,137,149,205,93,91,119,54,60,105,37,239,246,203,7,215,227,168,134,127,142,98,218,126,20,206,63,15,237,123,208,205,182,141,245,116,141,42,147,184,203,151,207,246,110,143,219,211,118,56,239,211,186,15,149,252,208,182,236,14,44,142,182,141,245,108,100,178,145,240,211,199,218,176,143,232,105,231,241,175,195,43,253,1,168,194,46,42,119,148,4,28,135,126,119,144,187,235,100,228,187,182,230,100,84,85,18,87,253,151,47,176,236,143,151,83,52,228,29,7,205,31,152,115,115,217,109,166,118,187,107,171,231,34,0,103,137,199,125,249,58,133,33,128,109,134,249,106,40,53,93,179,63,36,230,195,246,112,138,138,190,182,177,59,223,236,29,75,0,242,115,191,254,118,75,119,188,14,195,211,64,249,100,115,220,13,195,203,102,40,127,166,173,185,54,117,39,206,4,165,82,177,251,229,35,170,129,109,134,221,233,52,201,218,162,154,190,30,135,206,107,88,158,120,236,77,107,119,186,39,100,125,8,69,216,110,164,102,56,156,14,23,162,253,199,177,57,247,215,101,127,186,245,162,105,109,206,70,145,13,13,185,127,176,221,106,233,68,134,159,221,99,123,85,75,235,119,197,9,90,143,155,157,121,251,237,184,223,230,111,227,210,203,231,31,246,227,130,155,247,223,255,240,243,55,255,248,246,253,127,190,125,247,215,55,111,255,235,205,79,63,188,25,163,248,234,15,71,157,140,229,80,249,250,199,63,236,71,47,254,244,227,15,223,141,147,190,26,179,54,206,255,191,237,106,127,92,126,142,62,140,255,113,245,209,159,255,192,25,114,135,159,63,124,7,233,178,93,79,79,149,49,111,134,247,228,24,150,221,64,7,129,177,98,16,123,28,255,63,223,255,240,118,105,253,138,255,214,231,56,136,122,25,79,255,243,155,247,223,127,243,221,219,119,239,126,250,74,190,142,213,255,251,187,127,126,181,28,255,111,227,117,150,19,151,33,141,12,125,222,49,27,218,79,239,222,189,255,230,31,239,222,191,251,247,31,255,254,151,247,239,254,165,55,183,33,124,220,232,183,97,228,187,0,17,95,222,97,62,58,148,255,70,191,62,153,67,250,151,241,149,150,180,78,95,222,123,56,78,236,46,252,50,175,49,253,101,34,172,254,50,20,174,191,98,12,129,49,163,230,159,252,73,252,109,17,144,190,149,176,245,7,48,246,238,135,140,76,148,179,241,177,92,245,188,76,39,91,28,244,67,120,114,93,47,195,73,101,187,25,190,73,52,246,195,240,92,57,68,131,90,105,107,207,69,34,170,71,16,111,70,159,15,195,109,97,8,172,147,255,219,28,119,151,106,69,110,90,187,211,53,101,171,36,1,125,0,223,205,235,240,208,26,130,185,243,190,155,1,208,199,211,158,192,120,25,122,105,236,78,134,249,81,50,250,189,210,141,254,90,247,249,35,200,132,207,141,254,59,222,232,31,18,171,140,121,146,249,249,133,156,246,95,190,127,243,47,233,161,246,249,135,247,255,124,243,47,227,10,17,46,248,211,183,127,27,163,240,251,91,190,146,145,155,198,202,82,121,149,9,43,115,67,191,140,105,178,252,81,154,82,212,82,144,206,115,53,233,52,210,207,232,245,61,119,77,248,115,201,138,147,78,158,201,169,66,170,170,41,50,199,126,217,249,220,115,43,136,77,247,183,239,222,185,153,28,39,158,111,39,216,235,168,53,185,238,74,146,130,158,133,28,41,222,70,89,82,112,235,144,36,69,218,94,95,142,20,200,37,207,28,41,95,64,137,243,249,209,204,204,145,137,130,125,216,208,168,192,70,89,216,45,239,148,39,179,178,82,160,158,56,126,166,219,158,165,87,117,39,67,21,138,90,128,161,122,213,146,208,150,82,169,141,244,74,51,189,239,76,216,137,188,123,22,241,160,63,81,57,143,155,208,95,75,80,43,75,138,2,131,150,43,214,10,142,104,182,46,47,158,130,124,242,90,255,144,243,68,99,118,40,205,152,21,192,240,52,107,75,105,34,233,141,87,144,214,146,77,22,97,143,75,106,61,32,170,233,50,122,65,85,94,164,129,142,208,3,230,111,153,74,202,123,138,139,2,157,9,82,212,99,52,143,168,166,193,92,198,111,39,232,170,81,130,82,228,58,195,202,75,11,21,10,153,252,10,234,104,195,192,109,169,187,112,97,254,45,215,226,98,69,152,65,42,86,164,113,194,156,143,156,171,89,50,100,204,162,219,240,254,161,2,129,94,116,156,65,82,193,119,241,188,240,140,139,227,39,87,151,83,122,68,83,130,18,77,186,94,214,96,190,39,229,52,74,245,104,37,86,184,118,14,111,35,121,73,30,204,249,214,165,36,139,39,173,93,187,233,1,86,209,170,158,91,23,36,64,60,85,164,145,85,227,140,136,227,135,174,36,205,13,210,65,227,240,110,68,200,170,222,77,97,152,234,110,53,226,122,113,10,189,101,191,167,4,223,99,51,83,191,0,117,92,63,65,119,236,82,17,196,241,213,116,60,9,169,192,209,77,36,26,101,48,106,33,45,2,227,10,196,106,98,237,209,73,170,18,163,5,91,74,221,96,28,100,247,162,9,137,157,17,90,227,187,171,236,60,218,149,117,219,18,187,167,30,24,19,173,140,25,154,187,202,176,183,198,207,224,234,156,59,17,155,213,135,53,247,183,47,53,245,81,52,129,21,159,48,202,41,24,169,34,44,12,193,10,17,89,157,15,224,106,96,143,121,79,205,8,111,149,96,244,134,58,42,157,85,165,8,118,9,204,4,117,81,189,125,35,102,14,168,91,51,148,203,127,40,221,166,59,133,210,183,218,134,35,108,100,251,196,147,101,242,77,132,148,168,103,144,0,192,153,11,250,220,155,232,15,185,54,40,207,223,108,227,76,127,74,5,99,162,63,129,202,87,199,196,94,113,199,39,19,251,58,152,88,77,14,26,106,7,89,126,123,79,212,105,105,233,137,120,33,193,169,214,12,80,211,131,86,175,64,21,8,77,226,57,41,6,114,144,2,129,161,56,152,28,3,31,8,207,91,106,153,231,189,86,232,44,216,108,133,172,130,207,36,21,89,176,186,87,105,84,114,152,228,217,219,105,102,20,125,255,24,84,130,220,165,1,149,104,242,249,136,73,252,56,199,36,210,22,17,201,23,89,104,204,110,169,216,139,74,59,41,231,178,85,170,176,228,8,84,8,84,133,11,203,90,238,53,11,184,2,231,76,34,172,240,19,178,207,106,66,93,187,143,107,71,60,109,243,108,152,140,145,49,40,74,134,189,6,163,229,229,37,14,67,225,195,139,51,160,244,47,149,72,209,210,12,84,226,0,149,128,65,50,39,79,110,53,28,80,182,209,139,147,83,53,112,3,226,89,70,44,213,20,89,160,215,251,55,155,106,113,5,98,241,252,18,78,62,33,16,82,217,19,171,17,17,10,53,80,169,86,52,113,37,9,36,164,134,136,201,21,18,172,201,91,172,136,69,190,84,40,19,162,149,102,136,235,68,13,207,208,169,52,217,75,177,140,82,47,13,5,52,98,53,118,115,92,163,50,27,186,90,190,243,241,29,229,93,245,131,122,136,254,243,48,194,70,80,6,18,169,207,39,79,135,142,89,189,36,110,162,226,119,56,143,10,254,25,59,204,53,0,103,170,245,89,63,102,182,204,250,49,150,224,220,248,84,128,99,232,17,247,241,54,66,11,137,215,243,166,111,38,132,39,173,157,83,154,243,245,133,41,203,135,75,49,93,49,168,46,240,146,218,112,45,18,208,10,232,53,240,217,1,113,129,244,102,63,212,93,83,183,86,221,126,221,38,109,55,115,191,233,25,55,180,232,35,98,24,220,145,208,80,193,82,1,135,173,96,185,140,8,51,170,84,87,89,90,52,228,239,14,139,175,45,46,12,26,57,23,47,91,219,31,161,208,61,1,225,204,171,54,66,0,60,139,123,133,220,22,31,84,180,81,145,75,139,129,42,154,234,81,89,2,186,14,54,27,24,206,128,30,251,190,134,98,242,22,47,88,160,69,20,9,153,52,24,167,67,75,13,238,106,48,92,70,49,195,34,39,146,173,124,239,171,144,48,0,101,65,191,208,232,72,195,35,141,87,232,67,209,140,217,77,176,122,234,20,169,112,103,69,6,204,8,28,171,164,206,42,229,190,28,5,166,185,207,42,168,139,154,80,250,180,17,128,88,25,38,245,195,74,164,163,180,139,46,209,82,255,107,254,111,243,11,126,24,233,8,38,228,198,174,119,67,163,59,234,98,8,127,45,213,96,176,36,165,155,101,183,194,247,91,11,94,232,18,160,26,34,109,27,47,135,141,181,226,218,52,113,63,215,253,30,208,65,193,24,50,55,170,123,208,84,136,189,58,47,116,83,47,162,140,251,212,2,193,10,10,5,14,102,21,42,11,221,25,208,90,204,126,96,187,107,9,30,171,56,140,99,104,127,112,141,248,50,250,48,65,101,250,66,175,229,20,209,147,200,177,161,174,199,93,18,6,134,28,36,12,111,35,17,3,99,12,34,198,50,202,215,167,170,120,9,41,204,159,53,9,62,27,124,1,234,95,138,107,237,227,56,239,10,214,45,27,69,210,225,254,166,222,187,86,101,229,87,223,247,147,186,239,254,210,95,159,198,237,247,87,253,122,173,5,18,64,219,31,192,227,239,180,36,183,25,117,208,60,236,87,148,166,35,63,217,200,196,182,25,89,201,102,28,116,219,216,156,15,110,88,172,17,47,63,110,115,228,78,25,145,151,251,145,148,128,115,202,140,92,164,201,195,175,107,107,206,86,245,160,148,117,123,249,9,44,206,99,45,143,41,116,115,180,110,70,124,27,199,104,246,77,249,92,104,83,133,211,125,249,17,128,35,161,238,72,23,19,147,176,142,204,124,167,227,126,228,234,224,220,124,109,99,115,62,42,27,46,185,121,159,200,234,119,107,122,66,145,59,46,158,152,21,139,222,196,85,127,103,206,83,42,178,72,149,10,209,36,186,123,119,12,154,231,113,89,100,83,169,104,185,88,46,220,140,162,176,166,117,27,190,92,73,180,36,87,168,105,39,32,5,203,68,127,46,163,162,132,63,181,192,57,148,212,197,170,26,153,22,25,86,38,224,190,170,32,96,203,24,180,56,80,138,134,9,165,41,190,87,139,208,246,202,173,122,16,183,243,239,116,138,234,55,144,207,15,38,29,202,240,231,101,22,205,149,68,71,66,174,32,170,27,37,231,57,76,41,80,131,234,62,241,195,108,50,241,10,26,63,109,190,12,60,33,40,24,26,155,88,233,1,173,206,244,84,209,225,172,205,44,105,164,201,183,38,45,78,89,61,90,218,176,236,21,50,84,5,53,171,31,58,16,169,123,32,148,90,105,254,160,108,162,194,167,170,227,52,71,143,89,214,114,58,9,146,203,176,89,87,225,142,67,192,141,235,65,53,98,254,51,200,171,54,39,91,149,153,100,18,156,255,218,150,197,5,72,99,19,239,41,173,82,64,99,167,107,37,165,54,90,213,92,25,248,242,63,221,91,117,105,90,83,157,52,109,112,88,83,109,45,149,128,70,207,2,70,128,11,161,236,114,64,21,16,2,84,75,32,218,166,242,196,79,174,20,155,160,181,5,187,2,156,1,130,1,85,152,72,193,74,112,115,162,146,154,122,11,54,198,218,90,76,60,24,230,185,95,139,178,92,101,65,205,253,199,81,0,126,59,112,73,77,209,105,239,167,34,246,80,163,121,183,3,100,246,192,27,215,89,118,146,160,143,229,38,39,118,13,98,208,40,56,8,41,39,163,198,185,219,14,165,71,77,159,105,84,121,192,52,23,253,100,209,108,150,205,83,247,86,218,124,117,5,187,69,110,0,193,129,165,135,165,132,45,11,70,13,72,183,226,228,128,178,137,228,81,85,231,128,244,35,77,40,100,67,220,197,196,153,87,212,234,18,12,252,177,94,27,213,105,3,77,164,81,213,125,29,20,170,75,211,235,83,168,182,37,162,158,10,213,223,109,0,131,50,203,108,210,70,169,114,178,128,160,230,190,251,125,194,197,10,145,14,228,173,163,229,251,221,219,203,74,252,43,118,113,196,57,27,220,208,105,166,110,191,100,172,99,13,138,77,254,217,64,199,112,200,158,216,23,214,203,89,224,113,150,237,70,183,181,216,230,130,248,82,161,108,179,33,250,100,240,236,56,163,60,138,5,221,180,19,10,61,113,252,168,86,50,163,232,114,243,225,229,84,104,26,81,57,240,117,198,171,192,224,188,200,147,243,199,217,109,86,179,197,253,126,173,5,37,185,133,38,17,70,70,82,76,254,69,232,29,124,142,253,167,114,13,248,2,227,96,137,200,76,178,69,46,78,100,100,99,95,7,119,20,54,35,250,224,150,200,127,130,254,87,34,96,165,226,231,255,147,25,159,45,108,147,212,121,54,86,91,67,9,10,79,215,73,19,234,182,24,169,231,36,158,147,189,214,133,11,16,12,190,153,185,21,50,239,18,32,220,109,100,206,64,110,34,69,127,217,181,59,167,190,133,158,151,129,241,200,203,180,196,89,99,39,12,76,109,51,247,113,113,226,122,77,159,126,27,135,194,149,117,153,57,97,180,164,75,16,152,37,212,213,237,95,218,227,21,7,20,20,17,16,72,64,47,21,3,5,193,163,178,168,132,183,148,227,114,148,166,191,211,106,5,78,145,183,120,193,0,1,63,84,20,2,180,158,183,96,221,166,97,43,151,157,30,240,0,185,153,120,3,188,194,128,225,203,93,9,95,150,247,8,242,101,62,82,172,22,68,41,68,48,76,6,242,98,74,0,141,94,99,37,0,226,217,24,179,19,62,116,59,191,246,29,217,1,131,168,86,53,4,9,26,3,192,54,0,221,1,124,139,210,86,81,34,161,204,21,180,154,23,160,44,81,89,196,132,236,19,37,96,66,209,209,17,166,51,61,45,42,176,28,86,87,24,125,161,165,82,238,250,23,120,96,155,219,195,109,102,126,0,67,102,230,5,62,94,31,55,255,12,71,126,101,220,188,48,221,3,7,69,63,188,193,134,123,120,225,108,130,190,90,28,21,45,8,144,125,123,47,70,9,16,90,57,201,189,249,165,90,19,80,26,93,67,17,174,105,212,237,7,177,172,210,66,84,18,190,151,78,212,128,237,134,247,155,199,138,41,182,38,85,193,236,170,243,58,113,14,148,228,168,151,180,128,82,64,58,76,132,44,26,155,232,182,204,15,181,88,132,9,241,66,35,122,145,227,39,84,113,97,249,28,38,83,0,15,65,243,130,37,175,60,107,82,57,97,58,75,146,141,128,195,114,224,96,56,175,11,151,67,167,74,30,84,126,179,207,214,100,80,130,78,44,23,138,120,123,137,206,76,238,117,193,109,122,134,159,207,8,96,179,175,240,34,33,128,132,124,12,17,175,78,179,102,17,61,90,165,139,244,237,75,11,107,71,75,83,58,203,188,115,137,120,35,130,213,61,104,225,228,106,124,143,246,133,60,71,195,60,204,48,253,210,226,252,87,0,30,113,6,49,146,57,231,74,205,216,8,20,38,193,68,87,83,3,92,105,105,1,50,234,251,73,171,22,184,124,41,231,204,11,107,209,246,179,65,47,229,191,225,173,104,99,1,43,235,115,3,99,195,184,123,128,3,101,151,13,4,209,21,178,51,25,196,226,99,50,16,230,19,170,55,52,3,17,75,186,193,126,98,238,247,206,160,32,58,216,161,16,232,192,29,252,227,76,35,55,138,38,73,114,35,144,45,168,99,9,213,239,18,64,250,234,112,96,20,3,187,57,229,114,11,250,75,209,204,174,193,12,225,72,243,78,211,2,72,45,232,28,199,38,197,99,148,51,103,151,111,93,149,73,232,112,23,21,216,32,212,248,159,65,108,177,191,73,226,199,18,71,191,116,66,188,234,224,235,112,164,25,112,72,65,4,141,112,136,116,230,13,104,18,139,247,31,34,107,78,87,161,177,238,211,11,215,117,51,82,129,157,3,194,33,155,25,250,167,21,23,24,48,139,155,251,19,207,36,216,190,167,180,24,96,108,178,205,140,13,232,222,253,88,126,178,235,82,92,59,180,102,49,234,202,226,16,201,130,8,205,19,129,153,21,34,117,140,230,197,41,39,180,2,49,44,66,1,197,205,103,47,247,209,103,100,223,13,109,134,94,233,84,158,27,210,104,141,146,239,203,187,244,183,134,99,180,243,215,224,241,140,236,59,146,80,8,71,67,93,42,9,106,232,84,37,102,45,197,171,100,49,83,206,68,90,27,234,107,161,11,20,106,208,64,66,130,149,22,158,26,176,139,147,43,24,237,44,140,201,230,182,186,72,47,20,216,22,109,106,200,85,165,105,149,130,249,105,129,20,6,50,25,8,104,67,96,59,26,92,232,116,71,202,43,193,159,140,34,27,244,193,151,5,27,127,110,178,149,97,156,35,231,129,61,115,139,156,82,126,103,74,67,232,137,77,175,129,105,154,112,69,132,150,153,207,19,43,40,97,154,84,18,6,56,108,0,178,109,79,189,156,235,30,128,217,168,155,10,164,62,189,241,134,186,53,167,101,218,224,203,205,217,148,82,8,134,74,173,117,205,42,65,40,226,157,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,146,253,120,215,102,79,239,212,136,54,50,77,101,250,171,100,96,62,61,136,51,90,19,40,138,208,97,13,233,16,223,22,171,27,142,50,26,21,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,46,234,66,161,225,91,125,248,77,55,131,205,124,213,73,229,211,244,66,101,78,215,101,189,118,33,238,53,180,180,130,22,200,176,245,79,119,13,225,231,73,14,39,153,153,45,68,83,76,69,71,17,77,179,41,7,111,57,167,204,206,100,147,83,153,74,246,20,90,104,209,119,42,127,91,88,37,135,125,166,54,82,106,35,38,151,45,87,214,68,59,207,170,102,148,150,66,116,98,24,120,230,81,26,70,166,178,59,149,18,54,228,50,17,213,70,232,77,98,241,138,240,156,86,158,34,204,40,42,186,129,23,2,14,69,169,8,241,149,142,2,145,129,199,210,255,67,20,63,54,2,5,23,123,203,156,7,235,154,47,5,224,203,19,121,205,134,2,93,158,162,202,91,200,165,137,116,190,45,4,86,32,109,46,179,214,157,176,35,202,166,161,153,211,169,180,52,29,173,20,214,10,106,69,148,171,210,30,32,44,55,152,35,28,37,55,39,129,21,233,68,104,18,136,95,177,124,185,113,251,187,224,167,191,221,137,212,136,42,43,106,220,144,219,93,190,63,220,175,104,119,152,187,46,223,82,161,144,236,222,97,114,17,8,93,16,67,69,31,25,193,216,217,238,171,105,22,31,50,225,83,191,32,71,118,167,123,54,0,18,120,66,151,20,243,11,162,247,131,38,196,146,54,133,28,10,136,56,208,88,43,42,211,22,14,221,158,233,8,114,67,82,123,198,204,3,249,42,51,122,53,55,113,126,54,75,134,226,219,110,253,60,198,182,97,24,16,159,204,195,97,178,71,42,128,133,96,118,43,119,20,219,130,230,96,77,210,235,36,194,86,112,228,126,112,215,40,69,132,14,40,209,142,42,144,250,182,243,22,167,93,69,169,146,148,46,198,33,251,109,117,66,60,89,155,31,194,68,107,229,214,158,205,99,70,159,39,83,37,165,133,176,6,103,119,34,162,113,7,86,61,14,221,240,6,21,139,72,169,40,120,193,25,163,122,57,10,144,46,136,206,212,68,238,25,155,52,64,141,150,200,96,178,180,48,0,216,76,228,22,186,114,209,89,153,186,142,156,230,177,252,31,188,172,206,144,178,246,50,53,7,231,221,42,69,206,94,253,70,130,3,182,44,148,166,160,203,140,79,11,194,181,171,78,137,138,238,171,34,92,4,84,184,70,204,25,169,34,94,150,201,170,212,134,221,232,50,138,78,179,243,197,85,161,91,116,190,65,43,92,149,198,220,109,40,62,179,144,102,185,149,28,68,130,170,172,211,165,185,166,45,4,196,179,11,5,169,234,130,38,143,50,31,146,211,56,184,35,120,152,54,34,97,150,26,27,201,50,140,108,166,206,78,212,110,242,218,149,21,95,227,214,29,173,55,172,82,101,203,102,26,19,206,87,65,90,85,98,81,110,81,189,74,24,11,237,244,116,107,222,82,104,56,83,120,154,15,77,167,176,198,11,146,84,83,69,159,85,241,200,249,197,27,19,133,84,183,61,227,150,49,94,196,136,25,95,102,116,106,252,101,242,18,198,41,132,244,35,205,135,1,243,6,129,111,168,121,101,21,194,165,65,50,11,95,224,65,30,4,201,133,230,183,20,185,81,248,118,146,89,17,224,86,165,60,238,124,236,42,116,117,74,103,89,155,147,89,128,74,103,27,98,220,16,108,186,50,66,188,2,43,49,87,146,125,195,18,181,174,212,165,82,160,66,164,10,25,235,172,51,141,77,167,54,21,83,80,199,217,164,185,41,28,146,15,27,44,124,100,64,64,224,137,163,104,126,177,122,40,19,118,190,32,107,67,26,193,51,239,119,150,253,248,36,194,27,31,144,136,170,8,180,46,17,245,244,217,217,192,44,162,197,203,23,249,206,118,176,147,81,152,181,178,52,173,119,156,254,35,28,134,132,84,89,69,158,72,142,85,36,96,172,161,132,15,232,101,26,237,205,13,37,15,225,250,132,217,179,92,70,136,168,225,11,59,19,99,177,66,230,29,182,6,97,241,194,124,47,79,9,165,10,186,125,159,198,171,161,126,149,64,86,34,170,171,156,252,200,124,30,27,184,40,154,129,68,130,42,13,169,84,166,112,245,137,239,55,10,27,157,169,9,150,242,106,85,49,187,17,197,43,169,111,37,105,156,99,128,17,110,147,19,158,97,148,174,0,16,60,193,255,91,126,63,119,217,65,11,80,155,158,79,202,59,50,228,174,251,241,177,186,141,245,105,202,251,154,208,58,111,58,75,29,144,197,120,178,113,235,226,65,198,45,89,117,203,232,43,163,135,10,73,5,212,42,52,102,182,175,178,134,29,182,173,24,185,209,23,178,82,177,213,58,242,52,122,128,1,123,77,176,95,69,227,118,145,189,50,130,211,6,57,116,116,254,30,234,208,153,162,52,92,255,223,89,246,179,237,63,57,7,100,223,129,228,90,144,125,15,128,204,40,35,151,238,14,55,29,243,124,16,173,117,24,40,8,191,16,132,178,169,139,188,159,176,64,34,222,85,191,208,240,52,133,239,73,156,81,101,193,42,155,134,105,8,58,36,221,217,78,153,76,97,78,172,41,105,149,110,43,154,138,62,170,229,96,27,62,119,69,75,198,156,118,229,198,43,199,206,75,39,141,226,140,176,61,47,59,104,223,167,31,108,156,123,0,142,148,176,24,22,216,105,58,52,47,108,178,68,44,109,228,211,160,18,173,241,230,148,155,216,102,201,54,38,103,202,107,188,78,26,255,139,27,110,26,81,199,215,174,80,93,200,102,185,43,76,84,184,105,96,107,69,249,22,188,112,72,129,23,102,254,206,172,158,217,222,13,149,6,194,166,21,25,200,73,230,77,10,95,127,114,147,95,78,197,226,104,237,46,223,66,209,14,30,116,13,85,23,17,84,21,197,45,169,69,111,5,1,54,78,120,89,173,83,21,63,73,51,212,153,252,169,151,45,86,46,110,122,140,166,249,112,103,193,162,93,165,152,94,34,81,97,36,171,200,143,50,23,84,119,180,164,173,204,234,204,208,1,181,21,100,172,222,56,157,37,183,180,120,142,22,228,208,42,23,130,24,116,190,43,251,153,57,37,230,107,58,190,135,249,162,21,214,41,177,86,153,247,74,156,210,85,64,87,210,24,108,87,121,228,180,158,197,49,179,115,221,76,190,157,201,249,179,64,102,3,187,17,104,168,15,110,207,97,23,173,186,102,197,115,144,157,11,111,56,31,246,142,139,238,212,152,157,30,11,8,114,231,110,230,169,189,43,176,68,81,64,136,43,25,77,53,239,38,28,222,83,100,73,14,19,255,252,142,255,158,55,214,119,156,242,149,145,181,227,204,20,72,241,144,150,195,227,225,96,228,199,234,82,148,159,103,154,241,124,40,8,112,10,73,160,157,227,38,63,56,98,125,85,59,20,93,98,24,1,113,49,2,118,40,96,52,200,195,190,29,112,246,73,3,140,180,11,1,12,100,86,94,64,133,7,115,219,99,221,25,216,27,226,69,173,124,3,155,142,180,45,4,126,43,135,115,225,64,68,229,163,22,160,159,75,61,106,18,77,201,66,86,81,41,178,177,142,70,124,225,148,36,219,74,117,254,228,82,50,69,44,167,180,16,240,93,99,166,38,8,114,195,77,58,12,171,9,64,224,12,100,110,25,231,34,102,247,100,226,36,139,35,189,58,5,153,35,76,134,245,8,153,32,112,192,57,185,174,58,47,101,123,207,153,223,121,8,105,180,21,154,131,40,106,122,253,152,30,27,113,173,161,33,133,214,3,18,72,49,236,89,73,200,65,202,84,253,41,139,62,197,81,210,238,164,187,152,43,88,104,74,90,236,217,64,129,233,148,207,30,62,192,52,109,110,146,102,144,140,242,129,142,34,197,122,6,79,108,168,19,41,46,19,92,42,120,70,202,99,197,133,99,220,205,9,32,64,105,249,173,178,140,101,236,199,121,228,189,14,31,64,206,226,79,49,73,211,179,181,38,48,67,155,102,136,7,14,116,25,213,186,204,255,150,45,171,29,65,83,109,129,23,53,111,245,228,37,103,167,233,208,195,181,189,41,244,238,254,224,222,6,166,43,224,175,110,142,164,120,40,251,50,236,194,126,163,242,189,93,213,70,80,107,2,46,237,160,208,233,178,52,43,19,212,206,98,157,233,102,57,234,154,229,133,13,139,191,14,26,113,105,182,146,29,251,220,123,195,21,132,139,28,253,148,231,156,180,71,170,166,81,244,14,136,183,44,232,92,67,128,216,119,163,220,92,79,177,238,189,184,55,195,222,93,219,222,5,1,100,36,17,177,72,196,50,5,9,69,28,181,130,198,10,170,171,248,176,226,204,14,179,6,244,155,80,115,196,219,107,184,189,160,255,66,32,154,155,22,8,111,247,65,179,89,106,246,194,130,177,11,9,13,100,182,163,194,68,164,87,200,120,34,244,133,21,8,176,43,146,178,180,106,168,196,109,17,139,213,166,214,16,35,62,81,107,146,50,109,88,149,51,100,144,75,129,180,86,191,219,148,17,41,94,76,153,35,211,14,45,13,209,208,200,201,185,102,75,159,50,96,106,35,114,34,45,210,239,122,154,71,212,77,212,168,215,222,233,155,183,124,156,146,230,6,245,246,169,123,220,123,214,134,153,39,104,69,27,25,171,4,148,195,157,147,251,170,128,39,211,39,249,195,219,90,71,96,50,75,58,209,68,122,115,83,164,217,29,77,175,36,63,50,5,149,109,72,124,69,199,120,40,228,99,223,219,110,75,221,36,127,141,25,88,67,186,254,217,117,237,219,172,88,163,154,2,70,178,22,142,19,103,233,222,48,140,84,94,143,224,149,24,22,81,16,78,71,196,25,29,198,83,79,183,110,59,215,244,191,140,48,76,194,218,92,161,222,10,151,102,74,99,184,55,208,160,39,101,112,111,158,3,113,29,56,136,113,157,175,166,75,109,199,9,18,42,160,4,56,106,40,173,168,156,36,234,72,186,118,226,173,127,103,21,18,153,215,84,133,4,153,36,130,50,164,209,133,188,194,36,27,219,77,91,91,225,153,101,227,89,132,228,89,132,36,237,20,91,131,207,92,133,100,43,172,225,179,12,201,179,12,201,175,203,236,15,158,94,74,174,191,248,138,12,231,243,254,114,58,156,15,167,205,213,202,107,236,54,151,221,254,116,186,142,74,11,71,52,46,210,92,109,237,78,95,44,222,34,208,12,246,224,197,15,126,59,148,31,219,227,238,178,223,109,80,77,99,240,83,155,243,254,112,57,237,119,151,89,155,35,55,181,103,90,188,244,121,176,111,47,190,252,202,168,170,113,222,110,15,163,134,202,28,210,241,186,221,108,246,135,225,69,113,154,5,89,74,91,119,234,82,37,1,25,231,94,252,130,31,174,151,243,225,114,62,95,119,62,162,253,102,52,31,54,219,203,241,120,240,161,55,173,237,249,75,0,181,73,240,79,52,245,123,77,153,6,33,245,74,185,203,68,32,243,172,230,106,209,50,165,16,220,82,198,214,16,153,234,106,137,68,220,198,225,245,88,85,85,100,110,155,174,57,186,34,42,71,174,169,190,146,211,200,61,243,173,138,148,119,157,46,42,118,238,130,132,84,137,4,253,133,224,99,139,91,34,133,20,57,163,92,106,2,84,92,24,78,63,158,237,119,140,75,3,128,144,178,205,84,135,115,98,70,90,77,18,253,213,51,102,169,71,25,179,96,142,249,84,215,90,57,234,26,202,40,104,75,80,17,96,246,213,161,217,242,77,235,201,114,150,64,50,41,9,128,144,109,17,208,7,148,108,153,67,177,179,144,136,33,95,249,94,241,191,206,179,154,39,174,84,24,65,16,133,14,147,52,150,163,33,170,78,169,65,245,210,10,9,38,228,3,92,204,27,45,38,61,29,195,129,55,147,234,128,17,51,203,201,82,110,204,156,205,65,152,37,204,91,152,75,248,182,201,186,169,215,85,179,69,210,50,214,101,14,80,208,64,73,132,162,6,204,2,24,22,32,141,64,28,161,188,221,8,113,13,111,103,5,188,75,73,98,251,52,104,73,70,35,112,16,169,73,198,18,23,61,137,180,125,105,103,1,42,225,30,129,146,85,254,179,142,181,171,235,201,197,157,211,69,26,218,179,136,112,54,149,205,229,165,147,102,101,37,178,253,113,72,28,92,121,201,174,96,174,143,108,106,224,139,144,229,107,39,10,179,29,215,4,185,107,89,129,164,195,170,122,27,173,170,246,55,44,170,244,230,21,106,191,158,21,35,94,19,195,100,206,203,20,79,48,211,131,32,143,138,5,56,186,89,201,140,132,30,67,150,252,159,185,248,12,39,113,115,115,180,229,76,51,223,86,20,83,167,180,171,161,95,8,115,212,148,35,228,140,173,13,236,24,173,174,135,147,202,130,228,76,59,61,208,95,202,20,25,91,224,172,64,134,29,67,85,152,24,96,68,78,24,97,34,74,234,137,118,86,176,153,4,82,204,183,46,192,134,39,186,91,136,102,165,218,140,55,254,47,25,106,97,197,177,88,135,233,138,105,127,39,116,141,49,59,218,199,189,66,252,14,119,24,6,187,50,15,113,182,186,249,172,19,62,77,38,198,121,195,56,227,151,152,177,48,148,118,208,185,164,89,139,8,236,134,174,4,57,194,35,158,134,195,134,221,123,128,110,0,114,25,135,117,167,103,124,222,19,205,182,169,123,171,206,114,89,8,94,41,4,254,120,20,40,223,180,223,51,113,44,237,88,115,18,143,50,91,205,140,70,96,95,77,223,116,23,213,214,171,5,162,13,88,142,68,27,67,9,84,123,153,141,87,72,180,159,137,225,95,149,150,227,10,78,25,194,8,18,186,227,195,13,212,234,214,107,14,191,42,245,81,29,84,28,163,104,137,28,133,45,151,60,39,33,68,209,136,208,102,189,160,6,83,44,179,16,59,147,84,206,54,115,96,118,45,134,90,199,151,74,15,24,87,24,31,107,118,40,168,27,157,156,30,56,184,8,181,120,134,67,206,65,74,120,206,115,153,114,85,25,203,159,58,29,34,202,69,60,90,204,23,0,228,154,234,213,194,85,98,233,17,29,197,201,107,65,174,44,204,205,238,202,218,145,224,141,0,209,219,19,37,251,106,208,252,64,214,82,145,44,230,233,133,0,111,164,50,68,199,33,91,179,202,234,172,28,131,156,141,18,44,115,77,151,83,161,18,208,149,71,3,47,161,54,65,123,96,244,2,203,10,133,132,144,82,84,37,128,234,0,77,40,108,48,167,221,212,76,84,213,210,32,229,228,48,174,142,12,156,173,86,107,162,48,136,171,30,198,150,79,147,186,98,162,53,74,197,98,19,60,141,129,181,152,214,2,206,241,150,212,7,5,208,56,116,153,148,206,20,4,4,56,241,160,159,153,71,212,248,162,152,158,157,51,37,26,208,123,40,150,169,110,66,11,58,198,233,172,25,20,22,240,192,210,250,94,209,213,161,173,59,245,83,115,69,176,108,84,54,89,43,179,80,177,30,128,72,215,66,39,65,9,106,163,12,125,193,94,183,13,24,50,89,26,255,75,201,169,115,83,58,83,174,54,23,219,209,160,149,117,165,44,199,136,158,8,1,160,168,113,65,43,2,27,10,215,72,136,151,71,12,171,109,101,194,5,22,142,90,50,188,177,231,19,212,129,228,198,104,155,124,122,10,133,195,124,111,199,123,34,153,132,120,40,114,78,11,69,41,164,17,66,18,165,69,65,78,121,33,196,215,48,196,13,43,239,29,210,180,225,168,169,198,179,131,12,93,235,186,187,103,180,130,59,183,112,7,5,180,68,207,39,23,220,246,105,8,10,190,49,205,62,169,43,71,159,160,206,148,22,148,162,24,250,78,251,223,118,162,98,138,113,0,168,162,199,38,65,2,241,90,76,163,5,150,3,247,80,55,231,92,66,99,72,26,226,83,62,205,7,80,110,174,224,195,6,103,210,56,133,57,130,155,25,0,16,119,211,108,198,124,127,211,11,79,119,103,104,115,169,197,20,120,30,181,59,154,20,67,112,217,50,232,240,168,218,20,82,24,211,172,196,78,41,98,169,24,96,13,73,76,212,24,79,194,101,28,7,1,247,43,110,247,6,213,13,18,49,178,202,86,228,164,23,174,163,155,2,218,124,170,243,61,154,220,65,24,156,12,10,125,251,110,85,248,161,120,13,0,114,219,146,217,43,74,197,173,54,2,166,202,216,123,161,68,1,188,34,9,241,196,126,71,219,10,215,200,51,197,170,39,222,89,218,52,97,53,3,85,96,211,10,43,215,241,123,45,91,8,42,55,103,206,220,135,185,246,159,194,94,106,194,81,142,147,237,150,220,47,204,40,167,214,183,205,194,232,60,77,132,149,13,33,55,135,85,174,45,50,119,29,251,199,164,166,114,144,86,235,141,157,93,237,2,33,161,84,112,209,199,125,44,0,9,209,115,160,237,69,175,196,209,151,29,29,236,200,37,84,93,84,110,97,82,8,174,239,16,103,137,210,14,50,237,50,10,68,25,25,140,36,241,213,111,144,41,166,102,228,107,14,246,151,243,165,185,91,48,143,165,43,171,81,21,119,51,159,76,200,112,96,13,225,102,134,240,208,29,214,33,206,36,54,148,24,193,60,150,231,122,134,73,146,105,235,248,7,203,208,207,105,39,140,129,0,187,235,197,146,96,73,179,161,42,40,41,164,57,236,155,203,247,100,91,96,198,11,0,106,50,29,169,196,236,186,8,197,194,141,41,156,184,227,117,210,144,0,29,136,92,159,216,115,182,208,228,164,204,151,182,243,8,13,106,69,145,112,8,202,41,184,150,15,34,34,154,32,225,70,244,0,52,205,204,152,182,248,134,81,254,44,182,32,59,57,173,48,141,10,188,147,113,60,201,216,61,184,7,91,34,53,154,197,40,41,93,104,143,202,55,224,31,68,137,106,154,233,181,57,139,72,188,223,157,57,208,91,62,69,22,24,104,88,216,157,233,165,47,35,153,201,249,39,161,247,202,4,222,146,75,119,16,211,64,236,128,201,94,196,15,52,252,71,101,82,26,78,134,192,50,240,77,100,245,173,98,99,225,164,58,118,171,97,202,44,74,65,89,147,117,254,142,38,87,166,219,99,229,157,85,132,28,232,8,141,0,4,240,146,147,112,142,38,219,180,115,230,154,0,131,209,1,160,135,57,60,202,175,239,77,134,156,252,250,158,46,96,142,207,52,8,100,99,201,195,17,184,71,72,131,35,90,8,255,33,81,229,152,93,18,29,72,83,51,99,209,137,34,59,155,213,176,43,29,53,111,136,126,199,27,52,44,132,35,172,137,16,188,137,36,189,34,252,53,34,162,250,8,113,128,110,135,106,59,140,108,40,187,69,232,21,229,51,65,72,4,99,85,48,133,223,7,179,140,222,148,38,40,202,189,117,186,167,230,99,46,138,33,220,192,2,52,236,4,34,99,88,122,133,69,39,87,154,137,151,106,168,105,37,185,76,151,217,170,99,190,5,158,143,141,117,96,149,5,232,24,133,142,157,168,229,16,59,249,188,17,227,27,97,255,22,127,68,76,148,85,146,42,135,112,238,43,91,176,42,233,51,31,215,176,123,189,18,165,104,76,38,146,161,50,63,204,136,174,176,170,37,235,37,208,28,123,133,0,191,64,145,7,22,59,100,164,66,44,38,103,184,134,49,112,246,198,42,48,243,81,74,132,140,2,179,140,17,57,26,139,65,155,230,224,161,249,230,16,52,70,118,138,253,10,67,209,202,116,85,240,83,37,160,119,199,90,230,48,64,180,124,177,77,43,79,144,164,102,76,255,61,153,25,31,185,243,55,55,56,158,48,10,78,170,198,161,125,198,3,89,237,50,88,249,168,70,31,122,76,153,115,113,167,156,75,55,230,76,211,60,69,108,45,68,26,48,111,72,213,169,112,115,46,160,100,236,33,193,10,162,79,89,9,111,77,41,131,153,71,206,223,83,42,169,97,118,140,138,17,109,49,137,156,246,235,84,0,209,220,27,187,67,148,215,48,63,165,62,154,219,72,68,116,211,96,113,42,83,147,79,32,74,66,225,145,210,109,26,65,194,196,85,53,119,85,133,55,250,242,70,171,222,232,222,123,13,125,214,16,245,122,164,70,221,212,48,147,188,10,203,194,84,29,61,182,12,104,50,172,88,11,123,52,189,105,41,160,20,228,201,84,158,28,248,76,26,123,39,11,81,195,31,91,76,115,24,140,4,177,127,211,228,31,74,0,3,219,32,87,82,246,198,155,101,194,24,105,90,36,178,187,217,65,219,64,103,173,168,252,189,133,123,162,234,180,164,131,171,186,252,162,96,43,42,56,240,198,161,165,106,242,232,70,236,19,18,73,78,171,214,168,218,143,74,153,26,242,197,151,15,119,100,234,212,170,100,20,191,81,198,78,77,220,64,254,69,51,225,15,27,0,185,228,9,130,119,125,28,56,199,163,125,173,65,87,117,214,81,154,4,6,193,211,190,152,149,4,54,116,50,16,211,134,216,70,106,220,169,160,96,72,238,180,7,153,241,109,184,227,206,12,210,216,74,88,203,208,233,33,162,166,162,227,178,97,76,168,156,88,207,177,117,156,29,235,147,58,141,83,80,73,173,233,173,82,23,66,183,130,198,41,178,165,29,231,218,242,182,81,45,197,122,171,142,179,133,93,75,232,59,115,55,240,155,210,149,80,188,204,233,137,77,36,96,197,3,130,17,40,93,143,217,171,57,176,61,101,231,183,106,172,149,191,109,44,87,164,43,170,154,23,88,93,162,134,140,75,170,131,6,145,186,30,194,32,109,84,101,235,40,201,191,121,191,187,14,220,14,177,169,241,169,131,159,84,225,73,50,215,146,116,79,24,123,45,111,234,234,137,106,128,171,38,48,12,156,16,113,232,139,25,48,43,211,87,181,92,141,226,203,79,179,236,242,217,178,23,245,78,171,234,169,70,139,213,216,4,227,245,59,87,21,90,224,175,167,162,196,236,113,102,152,179,237,168,141,186,6,166,216,49,117,155,174,142,110,36,21,247,135,236,44,191,156,94,100,135,133,198,167,161,248,60,196,124,193,193,97,162,179,165,91,154,227,204,84,53,206,40,213,97,37,187,180,76,229,108,46,163,239,154,178,153,134,40,102,174,81,204,110,51,144,149,130,86,159,25,202,10,40,51,229,32,91,158,25,1,226,8,118,38,74,34,74,68,234,157,90,2,133,42,46,88,98,227,229,184,156,143,90,25,141,112,42,108,121,166,142,200,198,208,137,163,64,27,130,42,131,152,15,203,249,76,76,76,231,22,213,120,23,21,239,135,226,31,1,204,69,50,10,208,16,9,63,128,41,146,215,212,140,235,213,179,195,125,116,75,98,27,17,37,159,234,73,253,229,86,37,202,28,211,184,85,69,179,94,103,248,75,182,193,85,165,92,82,222,181,10,190,160,2,92,85,20,178,128,13,250,207,12,47,164,98,175,96,98,12,65,80,54,198,44,213,202,158,208,168,53,201,152,195,45,84,138,85,201,200,74,155,106,242,237,236,194,51,51,188,39,175,161,106,11,105,237,238,42,163,48,69,31,42,15,1,50,196,206,80,72,16,147,109,221,115,72,6,194,164,1,137,226,225,154,16,185,34,108,90,159,92,105,30,251,73,101,134,66,149,243,44,235,183,10,1,219,38,137,75,3,75,3,230,21,2,87,72,128,83,216,221,200,122,51,24,20,222,157,185,123,138,97,155,136,201,114,131,179,15,120,33,232,153,230,243,12,204,229,70,18,171,13,71,39,85,19,13,235,8,96,50,64,30,32,181,23,25,243,44,12,11,180,3,211,94,209,219,29,170,66,191,209,251,199,219,195,138,209,24,36,102,168,33,93,140,180,103,43,246,136,206,106,209,26,55,248,142,224,11,26,15,139,102,227,166,205,157,118,191,33,255,224,244,90,20,109,69,21,87,181,117,89,163,87,188,61,98,127,161,44,116,228,213,34,183,140,252,146,246,49,234,39,215,180,152,141,174,179,83,137,118,138,211,34,88,34,186,53,113,241,65,24,173,156,127,149,15,26,41,34,202,26,189,52,226,44,55,241,176,44,164,67,56,228,220,181,60,199,48,179,119,254,37,40,232,16,140,26,211,161,197,74,70,144,147,110,111,7,105,154,170,77,165,51,188,172,251,18,146,29,170,177,86,53,110,49,97,116,208,221,170,121,54,91,9,86,124,56,238,112,245,96,83,66,99,113,88,53,75,220,178,233,52,134,159,198,60,212,24,145,160,90,152,138,105,185,144,123,78,147,147,45,223,137,93,120,102,83,238,14,77,33,233,133,87,116,199,189,130,57,43,161,87,21,213,55,92,29,170,59,68,231,50,177,226,86,17,229,105,247,26,174,250,110,174,253,155,52,242,73,109,95,52,251,173,30,43,83,220,72,150,59,178,205,100,125,149,246,115,255,32,221,86,113,158,68,254,86,37,192,58,131,85,197,194,186,136,124,195,192,82,109,48,212,59,233,186,64,234,69,67,191,100,6,59,147,66,99,43,160,194,48,236,169,65,27,164,227,21,90,146,222,89,252,59,83,4,247,2,36,43,50,207,153,181,46,204,119,195,160,23,28,93,17,121,163,153,138,218,23,210,206,172,41,112,50,80,228,133,233,236,103,149,244,55,236,129,13,229,206,130,68,45,31,196,149,115,27,118,249,6,87,29,184,239,198,24,20,173,69,43,38,165,110,181,123,168,104,220,69,170,79,9,141,79,182,131,122,13,201,138,132,124,147,33,135,102,149,220,171,124,223,170,1,58,125,65,167,87,64,146,86,19,90,185,141,213,20,54,23,156,60,196,180,253,100,191,106,149,43,128,136,114,158,114,127,172,129,1,39,202,182,112,99,87,201,84,225,110,233,121,130,196,76,66,201,73,86,18,172,175,76,68,85,196,68,125,77,175,209,97,157,15,169,35,161,24,234,52,71,73,185,180,170,130,170,51,217,205,119,93,151,102,249,250,85,14,147,32,48,41,162,146,36,62,222,94,86,42,135,53,218,159,94,73,212,41,147,170,210,169,3,241,186,206,61,52,52,48,163,45,185,48,45,171,3,177,127,148,121,185,17,64,150,195,204,204,54,224,222,115,118,41,247,111,155,113,103,60,59,202,217,144,63,29,184,25,171,7,66,188,117,154,84,106,114,140,161,42,143,21,154,216,41,226,218,5,43,183,171,125,234,250,173,107,74,77,243,74,44,230,193,145,52,57,74,24,31,192,52,3,36,201,48,132,89,214,215,29,223,27,239,248,46,182,178,9,192,44,65,154,113,170,0,219,55,2,150,184,105,93,58,225,121,231,139,201,74,121,222,156,237,117,101,123,213,33,55,243,210,206,94,55,201,105,37,154,213,106,214,180,91,248,0,214,28,79,169,169,218,233,136,26,82,149,69,136,44,188,68,209,76,187,252,65,193,179,202,167,97,230,132,135,84,82,47,61,150,169,111,235,32,166,62,166,129,220,28,106,33,202,132,9,90,116,81,67,87,107,168,68,43,103,122,39,67,175,187,184,131,232,32,87,227,215,218,248,1,190,154,180,139,162,221,179,2,181,105,227,51,125,202,134,150,20,63,219,135,216,214,40,220,20,168,27,67,121,111,32,236,140,214,43,234,111,232,67,71,68,26,238,164,178,48,52,120,181,207,137,6,78,88,189,211,10,172,181,112,92,193,189,217,21,117,227,172,200,226,17,144,72,170,239,132,126,210,9,172,41,14,26,31,213,206,145,53,168,121,90,69,144,235,137,154,45,45,225,7,90,163,64,168,143,136,11,237,102,45,122,179,78,185,86,244,111,73,67,23,188,67,90,239,17,119,46,89,23,220,139,112,207,174,125,157,243,95,85,143,52,154,134,70,27,81,124,0,138,151,0,207,202,157,149,108,122,139,24,91,93,130,85,102,213,118,99,122,113,170,79,107,22,7,58,17,213,42,152,73,46,70,29,69,0,91,89,147,3,39,123,185,47,181,28,238,26,83,203,33,129,53,101,51,49,195,118,72,103,162,141,175,47,161,137,32,173,103,66,147,215,146,208,100,230,255,242,170,233,230,109,101,28,42,187,75,1,57,171,71,42,188,156,167,2,217,130,89,80,163,22,22,151,121,174,151,205,212,82,233,116,99,40,54,128,54,166,231,144,255,156,182,117,23,160,103,194,166,153,186,161,56,116,206,234,103,102,22,131,242,139,44,147,168,248,14,151,58,234,192,237,164,166,247,102,83,42,232,167,203,165,132,170,23,156,74,105,255,26,49,207,179,250,199,107,194,60,208,156,121,221,90,85,101,199,162,197,92,57,19,152,135,235,253,89,193,233,148,12,117,102,95,181,234,102,206,98,132,123,144,199,55,187,143,153,191,167,171,149,204,146,138,235,83,229,58,215,207,207,4,175,94,233,219,146,227,83,255,82,97,193,95,154,94,21,29,143,156,141,140,43,103,87,93,238,157,178,171,190,198,60,109,150,99,248,137,92,158,165,133,184,142,140,21,110,183,125,119,79,235,194,8,220,251,143,196,205,127,225,86,171,25,205,248,37,254,243,137,90,63,93,86,69,212,19,250,252,229,141,128,46,239,188,241,39,188,179,221,35,221,25,119,200,119,54,240,254,205,134,140,27,252,134,83,45,201,170,190,196,26,155,6,32,221,120,141,22,252,230,119,94,153,106,112,195,159,228,190,159,170,90,216,175,44,218,245,68,182,191,1,178,125,93,133,195,44,0,212,106,181,61,78,191,17,108,52,180,165,207,25,255,60,253,22,38,80,244,244,15,215,115,203,123,240,236,248,231,169,243,5,29,193,2,235,79,201,234,83,21,109,245,128,120,35,136,177,254,229,243,136,223,221,17,159,74,2,188,126,161,250,182,215,47,36,120,138,231,207,23,17,120,191,148,20,38,65,91,95,228,198,173,38,240,115,200,157,109,125,167,47,80,58,89,84,238,98,131,19,17,70,164,10,209,75,123,1,100,245,92,17,191,139,229,56,217,231,114,156,152,198,188,52,178,152,254,212,25,200,92,69,245,56,193,10,94,52,249,222,227,196,244,39,250,113,41,78,36,12,156,28,39,110,12,142,132,68,109,46,6,57,73,26,191,124,211,227,150,111,35,10,212,142,83,63,175,229,56,9,60,147,128,17,57,78,82,61,90,21,218,227,127,136,199,181,104,242,167,63,186,30,39,245,13,175,243,56,113,89,144,67,68,18,149,32,76,57,110,249,54,124,124,236,56,141,75,52,255,204,131,84,25,18,251,169,212,125,246,34,212,226,42,34,76,83,58,78,114,222,120,121,106,81,150,8,104,229,3,165,74,31,45,156,166,93,90,59,208,87,238,147,30,248,235,101,209,233,130,36,110,65,47,190,72,238,245,186,59,157,169,50,240,102,127,28,181,142,79,163,28,238,246,176,57,153,221,167,105,45,231,154,29,91,50,174,190,252,113,159,119,167,203,233,28,199,62,234,91,31,71,142,175,43,13,60,53,181,103,122,53,203,151,94,22,88,23,109,127,222,156,54,84,233,120,172,238,245,122,60,92,246,251,235,229,48,107,128,55,173,221,233,190,236,47,94,60,149,238,143,33,237,70,109,115,170,239,189,217,140,225,93,119,231,29,21,54,111,91,219,243,221,11,240,17,42,192,215,238,47,11,189,217,94,207,219,195,158,171,95,183,141,237,232,45,111,201,99,12,191,95,254,235,225,104,149,221,115,195,218,162,219,168,31,98,199,31,135,235,207,149,107,249,47,155,251,178,217,37,144,47,141,237,217,86,16,241,65,118,252,235,69,244,199,227,249,112,61,14,118,125,59,119,245,110,20,244,207,219,63,183,181,231,250,162,63,4,117,31,36,235,124,24,238,40,12,221,35,54,229,24,233,94,105,105,78,68,188,200,226,211,253,96,170,192,7,98,68,115,223,17,72,175,249,138,30,20,197,108,206,151,227,49,99,216,218,218,158,63,203,182,62,192,232,47,215,205,249,48,198,181,153,4,115,120,184,239,199,78,218,236,246,206,77,150,182,230,76,139,214,146,32,149,151,63,238,243,246,184,219,92,175,188,190,67,70,58,158,7,251,112,24,239,62,29,93,99,61,29,17,20,154,67,232,165,143,254,50,248,129,49,128,203,206,70,180,36,171,59,156,246,199,205,230,122,62,29,141,134,54,77,229,204,153,247,227,197,88,44,86,71,61,137,225,112,159,188,14,110,97,123,56,29,92,54,106,154,236,4,196,185,136,172,240,0,75,59,194,163,15,115,201,116,101,119,219,221,249,52,80,151,211,202,182,49,159,236,137,250,199,1,15,187,165,143,199,45,227,246,166,169,219,206,51,39,222,19,137,191,46,210,109,49,26,79,166,235,51,59,165,44,117,241,30,180,227,15,232,219,129,158,15,52,247,242,183,249,105,183,217,28,79,3,69,59,230,218,92,246,151,235,238,178,219,237,136,210,213,198,246,108,184,228,152,57,229,37,35,246,195,249,114,26,212,105,191,113,34,61,242,5,28,118,139,66,127,195,26,144,166,181,61,31,209,111,146,170,245,197,15,255,116,188,142,168,219,19,175,251,238,120,185,108,175,199,203,102,224,243,201,187,214,198,238,100,196,80,47,249,159,94,62,200,239,55,231,221,49,176,222,35,48,237,186,219,109,183,87,54,237,212,198,238,100,68,104,63,0,158,82,237,213,238,116,61,159,89,155,55,180,92,215,237,41,66,124,105,107,207,213,4,158,163,16,240,147,40,126,46,205,149,197,183,142,20,103,143,219,245,135,83,186,205,190,75,104,226,203,223,229,187,97,159,60,36,202,182,189,108,15,151,203,102,104,24,88,132,171,173,237,249,150,77,89,130,35,95,252,248,207,155,33,112,14,35,157,27,170,134,101,118,176,47,67,167,77,106,251,182,181,57,219,12,121,90,215,253,197,15,126,152,37,207,67,22,221,145,216,182,31,67,25,186,135,171,235,95,36,242,53,55,118,39,91,170,150,37,131,220,35,104,41,134,113,118,179,187,238,174,14,247,199,97,167,30,21,94,183,187,33,142,59,105,175,173,221,233,179,226,236,3,140,125,40,31,134,204,189,223,30,200,62,59,232,247,176,217,196,157,220,182,182,231,91,133,227,37,133,230,147,76,126,166,174,63,98,192,142,103,34,125,4,36,113,61,15,72,63,30,142,151,224,210,115,26,128,95,60,61,186,198,238,124,75,250,246,8,163,223,109,15,219,108,232,30,95,70,60,238,101,68,208,147,52,216,54,118,231,123,90,150,71,208,231,14,26,119,218,156,175,195,57,217,165,191,205,245,178,31,250,250,253,137,152,131,218,216,157,108,70,240,37,219,242,203,103,13,22,143,181,221,62,184,173,237,135,102,227,124,28,62,30,35,251,154,15,190,105,109,207,159,153,12,151,252,198,47,222,124,179,31,98,251,101,191,48,57,190,157,143,99,33,7,19,116,222,93,142,115,77,219,214,246,124,75,181,248,16,230,232,177,124,155,197,24,227,6,70,89,232,145,133,122,115,153,30,76,181,169,61,83,242,54,73,73,182,87,184,225,173,214,229,67,136,130,175,29,221,255,134,212,254,17,29,159,30,133,81,43,93,183,60,78,35,36,228,229,3,221,229,176,13,24,116,115,28,174,29,199,221,33,134,14,148,198,122,170,149,36,253,122,187,100,105,125,0,92,59,60,31,46,187,19,233,83,70,102,138,243,105,151,52,47,181,177,63,25,75,46,169,78,31,64,2,63,157,175,195,1,226,64,234,135,225,51,60,84,41,251,243,206,221,0,68,189,94,90,219,243,103,153,234,7,89,253,209,253,227,62,153,13,79,99,141,119,135,203,113,79,156,84,219,216,156,62,114,201,62,18,0,12,109,218,48,145,68,166,226,112,217,237,175,219,253,240,25,118,70,186,109,172,103,163,244,250,50,250,151,239,0,182,172,222,97,179,57,237,131,123,212,199,173,126,62,159,151,255,33,182,255,233,176,223,140,55,50,173,13,52,55,70,27,157,202,83,91,119,170,213,23,121,144,145,191,106,172,63,108,162,163,227,108,77,30,110,95,135,205,150,188,255,196,73,42,181,117,167,90,69,228,7,65,247,139,117,252,50,66,5,98,144,228,241,178,63,4,63,193,210,214,158,107,21,118,150,177,63,156,125,240,229,49,167,191,48,183,136,180,126,87,83,129,232,129,179,55,111,191,29,55,220,224,184,205,31,246,227,138,155,195,31,246,227,242,127,250,241,127,190,255,225,237,210,250,21,255,173,207,113,208,31,151,134,113,151,113,96,60,253,207,111,222,127,255,205,119,111,223,189,251,233,43,249,58,102,238,239,239,254,249,213,114,252,191,141,215,89,78,220,141,238,141,172,2,122,35,25,230,159,126,124,255,253,15,63,127,243,211,187,119,239,191,249,199,187,247,239,254,253,199,191,255,229,253,187,127,233,205,255,136,35,229,144,159,191,125,255,159,111,223,253,245,205,219,255,122,243,211,15,111,198,12,127,53,254,146,133,250,239,31,223,235,87,25,235,102,43,167,141,95,60,141,47,32,215,74,204,206,241,176,191,62,89,254,144,47,150,92,240,83,37,242,248,181,73,30,82,170,186,152,64,111,253,151,199,253,47,191,60,49,131,228,45,8,191,98,106,58,79,165,32,69,221,227,202,122,94,132,95,248,243,215,231,23,64,5,151,237,3,56,94,214,174,35,73,253,67,240,185,151,211,200,110,176,113,141,216,18,47,56,56,215,203,105,80,122,82,162,111,182,35,112,244,48,226,102,137,229,185,28,6,47,48,242,179,184,203,228,172,22,253,0,3,63,12,226,112,58,145,34,121,179,63,12,215,208,253,96,111,98,126,128,225,70,48,228,152,193,243,145,124,119,186,12,46,119,119,165,0,234,153,190,238,33,220,11,186,85,223,143,101,220,14,45,22,251,86,140,214,195,110,120,145,80,32,196,240,168,25,156,238,132,13,20,206,28,26,244,7,216,166,18,246,158,44,97,75,195,144,87,146,149,228,186,189,92,207,3,20,220,83,118,22,200,120,4,249,125,184,118,142,202,48,151,45,11,161,155,221,226,3,27,157,190,71,219,97,120,135,110,135,216,102,12,253,96,127,217,109,6,21,97,37,21,192,35,36,62,104,34,162,187,21,143,198,208,110,181,31,198,20,90,7,125,107,55,15,133,228,8,94,35,189,198,178,163,183,135,160,173,210,226,202,143,225,31,248,91,33,242,165,134,240,147,239,248,109,229,86,99,129,191,80,69,19,81,78,120,61,195,101,38,80,85,115,168,107,233,151,77,176,149,220,212,2,231,86,16,125,158,171,30,244,86,113,201,191,90,205,68,138,150,172,39,207,122,158,161,186,231,212,73,196,126,217,249,220,115,220,193,124,60,81,107,111,118,32,254,155,206,183,19,236,37,217,204,238,172,108,130,158,133,202,38,222,70,165,77,112,235,80,219,68,218,94,95,113,19,201,32,247,44,110,242,90,42,39,205,146,221,163,222,59,237,119,161,54,40,96,124,214,66,67,40,215,232,213,53,7,21,194,190,85,235,137,23,111,51,111,37,148,140,68,133,204,113,154,58,57,83,237,202,229,246,98,128,64,109,215,81,239,113,233,25,23,230,95,20,181,168,151,201,63,37,169,161,121,25,104,19,250,107,245,242,101,73,181,83,179,116,61,106,150,163,124,232,242,215,136,167,114,91,192,114,10,74,128,107,254,105,155,29,170,123,170,177,9,203,132,204,106,252,139,83,222,210,27,43,72,185,196,251,44,221,177,212,182,184,228,72,216,142,6,137,220,91,206,152,133,115,151,128,182,165,129,142,208,3,230,111,153,74,42,195,142,139,2,159,9,86,180,8,49,189,182,228,191,164,130,85,186,106,84,47,29,197,87,177,242,210,130,240,131,137,152,229,155,86,218,84,147,129,38,252,244,74,88,252,219,98,81,189,164,150,94,110,150,78,197,149,149,80,112,49,213,225,223,149,33,99,156,167,14,9,240,252,187,82,113,84,173,60,59,206,98,144,84,240,93,28,177,189,74,245,248,233,253,193,220,241,148,140,182,165,71,186,94,214,128,57,169,167,81,121,108,0,130,215,76,77,219,72,94,146,223,116,190,117,53,82,227,73,107,215,110,122,128,85,28,227,11,93,16,55,250,177,149,188,77,65,115,180,81,249,254,133,125,148,101,240,185,89,46,228,144,220,141,8,197,195,187,41,12,83,221,173,70,92,47,174,233,187,236,119,186,146,244,159,235,23,47,251,86,210,189,82,155,238,216,49,138,89,122,209,106,105,155,29,55,117,83,186,30,193,168,133,180,8,140,43,16,187,4,41,72,39,103,81,93,173,84,188,224,32,26,29,29,100,247,162,9,137,157,17,90,227,187,171,236,60,218,149,117,219,18,191,183,92,157,208,202,152,161,185,171,12,123,171,23,49,174,206,197,156,177,89,125,88,115,127,251,82,83,31,69,133,91,241,9,163,156,130,145,42,194,194,16,198,223,232,190,197,63,41,108,224,187,221,115,92,12,235,238,55,212,81,233,172,42,69,176,75,96,38,168,139,162,76,78,152,57,160,110,185,161,46,181,226,5,236,20,42,121,111,27,142,176,145,237,19,175,222,205,55,17,82,162,117,226,5,0,206,31,95,158,79,59,17,203,243,205,54,46,61,172,84,48,86,30,22,168,124,133,92,236,179,254,231,171,226,98,181,92,249,172,193,59,253,166,103,5,126,45,61,62,3,50,173,9,153,20,6,75,55,21,21,130,100,64,110,80,86,124,146,12,84,69,7,6,147,127,113,140,106,108,40,78,31,88,129,42,16,131,159,181,2,232,83,139,231,53,134,81,179,124,145,164,205,49,139,70,37,135,93,164,215,154,254,28,73,208,63,2,151,160,154,122,192,37,106,25,201,117,132,237,56,46,36,60,218,34,38,249,34,11,141,217,157,235,12,214,102,208,84,231,6,173,13,165,235,151,179,152,233,152,201,145,164,13,130,8,128,131,120,114,16,69,173,135,15,59,2,213,195,215,18,255,118,31,215,143,140,132,91,19,186,208,48,57,35,227,80,148,14,219,233,136,127,140,44,134,194,135,210,63,165,190,170,118,113,38,202,202,218,78,122,168,179,2,231,30,5,73,140,3,245,101,197,233,71,127,225,15,237,128,54,1,74,117,234,112,159,249,155,57,67,111,162,221,6,97,45,212,212,181,75,56,253,164,48,158,217,66,32,111,215,210,38,226,99,237,40,103,3,177,57,184,19,222,228,45,48,173,120,175,112,41,221,242,212,194,117,123,177,48,52,181,98,91,137,45,125,113,95,92,220,121,65,124,199,236,163,73,87,203,119,254,44,63,44,3,208,15,234,33,250,207,195,8,27,65,57,72,57,23,76,31,248,53,14,164,224,38,136,200,128,43,109,161,131,116,125,169,201,144,169,138,233,177,197,134,133,237,161,204,37,129,99,232,17,247,241,54,66,35,57,169,110,250,102,66,120,210,218,57,165,57,95,95,152,178,124,184,20,211,21,131,234,2,47,169,13,215,34,9,173,128,94,3,159,29,16,23,72,111,246,67,221,53,117,107,213,237,215,109,210,118,51,247,155,158,113,67,139,62,34,134,193,29,9,13,21,44,21,112,216,10,150,203,136,48,163,74,53,135,210,162,169,172,200,56,6,178,52,73,131,70,206,145,246,85,97,150,206,8,64,40,108,189,204,232,89,214,82,235,130,84,200,109,241,65,69,27,21,185,180,24,168,162,169,30,149,37,160,235,96,179,129,225,12,232,177,239,107,40,38,111,241,130,5,90,68,145,144,73,131,113,58,180,212,224,174,6,195,101,20,51,194,204,68,180,149,239,66,167,203,58,49,0,101,73,191,208,232,72,195,35,141,87,232,147,30,144,116,13,86,79,51,214,43,220,41,163,167,150,143,177,101,105,161,244,4,115,76,159,203,81,96,154,251,172,146,186,232,9,165,79,82,243,120,109,152,212,15,168,138,44,243,136,46,209,146,140,98,254,111,243,11,126,88,116,181,96,157,208,81,234,122,55,52,186,163,46,134,240,215,82,163,10,75,82,186,89,118,171,184,237,168,255,138,45,129,192,247,96,249,124,143,232,15,108,85,41,186,19,54,47,239,231,186,223,3,58,40,24,67,230,70,149,15,114,247,107,175,207,11,221,212,139,40,227,62,213,64,72,243,1,13,14,102,21,58,11,221,25,80,91,204,126,96,187,15,77,135,51,174,114,23,85,89,216,254,192,21,251,209,135,9,42,211,23,122,45,167,136,162,68,142,29,85,136,62,82,194,192,144,131,132,225,109,36,98,96,140,65,196,88,70,249,10,117,21,109,157,184,167,174,226,247,90,244,242,99,252,176,63,29,144,181,149,234,62,30,200,62,214,135,89,106,170,125,105,224,78,147,249,218,170,92,131,166,188,24,39,200,23,172,69,132,123,213,228,1,141,17,35,25,209,155,156,85,246,54,146,236,148,75,92,34,172,102,147,168,97,220,200,59,207,27,21,177,139,222,242,236,36,31,250,155,243,52,180,11,155,54,236,242,137,75,32,179,246,84,249,16,175,108,18,217,148,69,76,150,227,22,120,250,144,228,175,92,238,84,174,49,95,136,251,42,175,199,74,78,203,221,160,220,113,152,80,154,226,123,25,194,182,87,174,160,5,231,148,127,167,83,148,85,69,69,22,104,231,148,241,153,126,74,106,110,51,179,160,142,132,204,122,42,230,146,35,4,166,244,168,71,170,24,139,31,166,94,139,87,176,72,83,181,75,241,132,12,30,145,160,9,77,204,191,130,65,159,86,71,29,206,218,204,146,114,129,236,164,105,113,202,234,209,210,134,101,175,144,161,210,132,149,235,133,212,131,78,187,124,146,230,15,114,3,244,167,174,161,48,163,157,74,91,122,78,184,190,26,203,117,124,48,173,18,112,227,122,224,114,205,22,170,153,116,124,178,85,46,37,237,238,252,215,182,44,46,64,204,119,188,167,180,162,130,165,124,23,198,173,149,178,202,192,151,255,233,222,42,22,13,43,121,20,154,224,124,160,130,55,118,59,245,44,96,4,184,131,104,40,163,30,10,132,0,41,65,190,155,118,123,254,36,52,166,192,204,218,211,6,236,10,112,6,8,6,84,97,34,53,164,84,77,214,174,170,3,208,177,94,221,214,98,226,193,48,207,253,90,148,229,42,11,106,166,92,71,1,248,237,192,181,92,94,77,58,186,32,89,47,237,221,14,144,217,3,111,92,103,217,73,130,62,150,155,140,178,172,61,104,20,28,68,5,11,92,121,208,109,135,210,163,166,207,52,170,60,96,154,139,126,178,104,54,203,230,169,123,43,109,190,186,130,221,34,55,128,224,192,210,195,82,194,150,5,163,6,164,91,113,114,64,217,68,242,112,133,130,244,35,77,40,100,67,76,255,226,152,165,69,126,25,1,220,107,128,171,246,55,52,145,112,172,251,58,200,198,75,211,43,148,141,23,152,127,202,198,175,199,27,85,185,101,54,79,136,154,235,204,218,44,229,117,201,137,7,230,114,184,173,146,229,117,208,208,96,185,95,174,51,141,242,196,45,207,6,87,90,155,217,194,47,233,182,125,253,10,230,41,227,99,120,215,77,244,11,77,52,174,52,126,57,174,3,195,6,26,174,38,228,162,184,167,201,224,217,113,78,121,148,6,189,169,243,21,130,226,8,82,53,158,70,210,229,230,40,17,21,136,26,145,57,48,118,198,172,192,120,176,8,148,243,199,217,245,143,179,197,157,184,172,5,49,92,66,148,8,37,171,95,107,248,69,248,29,140,142,253,167,130,13,24,3,99,97,137,202,76,186,69,230,106,82,152,178,221,202,189,190,204,32,50,216,37,178,133,209,255,74,5,224,63,224,255,79,110,124,182,176,126,89,231,153,146,216,73,165,181,196,212,117,226,132,186,160,68,242,57,169,231,228,175,117,225,2,4,131,113,102,118,133,84,245,4,8,119,27,12,50,144,155,76,209,95,118,237,206,169,111,161,231,101,96,60,242,50,45,113,214,216,160,134,169,109,230,62,46,78,92,175,233,160,105,227,176,210,81,218,101,102,133,209,146,46,65,96,150,80,87,183,127,105,143,87,28,80,80,68,64,32,1,189,84,12,20,36,143,202,163,18,222,82,150,203,81,154,254,78,171,21,88,69,222,226,5,3,4,252,80,81,8,208,122,222,130,117,155,134,173,92,118,122,192,3,100,50,244,6,88,248,129,225,203,93,9,95,150,247,8,242,101,62,146,227,61,100,41,184,163,78,14,242,98,90,0,13,69,96,45,0,130,19,24,179,19,62,116,155,141,246,125,81,29,101,89,173,170,8,18,52,6,128,109,0,186,3,248,22,165,173,162,68,66,153,43,104,53,47,64,89,162,178,136,9,217,39,74,192,132,162,163,35,76,103,122,90,84,96,57,172,174,112,250,66,75,23,0,56,255,2,111,58,51,97,221,230,230,7,48,100,110,94,224,227,245,177,243,194,169,60,217,249,87,196,206,11,215,173,245,101,201,169,98,240,225,30,44,50,155,160,177,22,175,19,11,233,96,71,173,139,145,2,4,202,76,122,111,78,70,214,4,156,70,215,80,140,107,58,117,251,65,60,171,180,16,153,132,35,141,83,53,160,187,165,126,172,31,195,69,190,131,79,153,51,59,113,14,148,230,168,203,155,128,82,192,58,76,133,44,182,142,8,183,204,15,181,152,187,48,49,67,150,50,24,206,176,170,186,176,240,220,201,21,192,221,195,92,154,200,197,194,154,84,80,152,158,47,100,37,96,31,107,120,139,204,235,194,127,196,201,146,135,8,222,236,179,53,25,148,160,19,203,133,34,226,182,148,200,164,225,15,62,112,51,152,112,198,115,153,133,133,23,9,222,192,228,48,130,232,67,154,53,115,207,30,108,108,212,184,47,45,172,31,45,77,233,44,115,181,34,234,141,120,36,119,135,130,199,146,49,62,218,23,114,3,10,243,48,131,46,75,139,51,96,1,120,36,21,147,209,204,57,87,234,178,140,176,47,146,76,116,53,53,92,137,150,22,32,163,142,60,180,106,129,205,95,174,69,115,56,211,206,216,106,232,52,243,111,184,158,216,88,192,203,250,220,192,220,48,238,30,224,64,249,101,3,65,116,133,44,77,6,177,248,152,28,132,57,248,232,13,103,78,130,40,203,184,5,197,124,41,157,67,65,172,151,67,33,208,129,123,107,198,153,70,168,187,252,73,102,32,91,80,199,18,170,225,37,128,244,213,97,47,119,6,118,243,176,226,22,244,151,98,211,92,135,25,124,203,231,157,166,13,144,90,208,57,118,52,143,199,40,107,206,254,123,186,42,147,208,225,46,42,177,89,234,138,249,103,144,91,236,111,18,249,177,196,209,201,144,16,175,122,107,57,28,105,66,3,210,16,65,39,28,226,214,120,3,154,200,226,253,135,204,154,131,143,53,114,113,186,84,185,114,102,25,159,66,37,104,0,132,51,67,255,180,226,2,3,102,115,115,231,176,101,195,147,115,28,154,60,161,141,51,246,236,162,231,174,154,88,126,178,236,82,148,34,212,102,209,133,222,130,74,200,134,8,213,19,129,153,21,29,112,140,6,167,53,3,29,194,249,139,84,64,81,144,217,101,113,244,25,217,42,67,155,161,87,58,149,231,134,84,90,7,125,151,254,86,223,218,118,254,26,60,158,145,125,71,18,10,225,104,168,75,37,65,13,157,170,196,172,165,120,149,44,102,202,153,72,107,67,125,103,214,226,106,227,231,120,213,8,43,45,60,53,96,23,39,87,48,218,89,24,147,145,126,243,150,190,72,47,20,216,22,109,106,200,85,165,105,149,130,249,105,129,20,6,50,25,8,104,67,96,59,26,92,232,116,71,202,43,193,159,140,34,155,244,193,151,5,43,127,110,178,149,97,156,35,231,129,61,115,155,156,82,126,103,74,131,31,177,77,175,129,105,154,112,69,132,168,143,60,123,173,66,63,54,163,70,201,202,202,97,3,144,117,123,42,230,92,249,0,204,70,221,84,32,245,233,141,55,212,173,57,109,211,6,95,110,208,166,4,17,48,85,14,189,187,172,139,111,7,104,226,157,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,82,55,120,215,102,79,239,84,137,54,50,77,101,250,171,100,96,94,61,112,26,95,19,40,138,208,97,13,233,16,223,22,171,27,142,242,83,20,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,46,234,68,161,190,248,189,47,117,55,131,205,124,213,73,229,211,244,66,101,78,215,101,189,118,33,238,181,180,180,130,22,200,176,245,79,119,13,225,231,73,14,39,153,153,45,68,83,76,71,71,238,233,179,41,123,226,59,167,204,238,100,147,83,153,90,246,20,39,98,161,20,42,127,91,140,12,199,240,164,54,210,106,35,192,138,77,87,214,68,59,207,234,193,148,150,66,116,98,76,95,230,81,26,70,166,178,59,149,18,54,228,50,17,213,70,232,77,98,241,138,240,156,86,158,194,5,40,196,173,129,23,2,14,69,169,136,215,146,142,122,197,51,235,27,216,26,99,167,176,17,40,82,204,91,230,60,88,215,124,41,0,95,158,150,165,3,193,2,165,212,85,237,187,5,57,183,98,79,43,25,21,217,169,138,87,88,210,220,96,190,103,148,123,151,36,68,4,99,27,48,184,253,149,54,10,1,231,108,177,157,163,227,167,72,43,107,240,3,72,142,33,154,168,163,71,156,87,217,42,117,67,229,45,103,103,187,255,162,25,65,200,170,77,253,130,100,213,157,238,193,142,36,2,132,46,185,251,17,225,136,138,70,220,179,115,222,103,13,96,144,7,41,158,149,53,63,116,29,220,93,165,179,130,178,20,87,11,106,246,171,204,83,72,255,65,62,0,132,206,125,45,202,250,79,171,165,247,221,37,237,188,214,171,240,18,47,56,23,190,98,58,109,225,48,189,25,122,154,27,146,86,52,70,153,230,171,204,72,165,220,196,201,120,44,240,221,39,121,253,60,70,198,97,24,144,174,204,3,98,114,79,42,159,133,192,69,171,243,21,219,130,98,97,77,16,236,4,198,86,174,228,126,112,215,40,28,88,7,148,72,75,149,87,29,240,189,197,73,91,209,185,36,157,140,49,208,126,91,157,16,207,204,227,135,48,77,91,185,181,71,110,207,72,195,100,202,164,16,96,107,112,110,40,162,197,20,189,86,240,168,169,125,220,215,53,105,116,26,173,143,1,81,105,225,21,179,174,231,22,186,114,209,65,153,250,141,220,224,177,94,31,188,44,225,138,48,99,150,124,138,26,84,78,36,45,171,236,91,231,20,235,4,234,217,42,7,200,105,7,103,244,42,249,206,65,0,70,175,3,33,41,84,178,80,146,76,106,10,45,178,171,78,241,139,238,171,242,94,4,91,56,82,204,153,168,242,96,22,224,170,136,135,189,233,2,141,174,161,51,209,85,251,91,20,196,65,133,92,53,204,220,109,104,73,179,68,103,89,53,28,254,130,94,173,83,188,185,90,46,132,66,178,195,5,233,245,130,218,143,146,94,145,143,57,88,41,56,164,54,242,99,22,49,27,49,52,140,108,166,77,77,140,192,100,204,43,223,190,198,218,59,146,111,168,109,37,201,51,128,157,35,149,73,5,75,236,213,45,130,91,105,114,33,219,158,104,199,91,10,123,195,204,15,205,7,72,248,10,91,66,34,80,149,147,86,101,41,102,93,86,217,225,124,97,63,233,198,236,34,53,34,197,103,251,14,129,122,59,51,73,31,224,53,136,142,21,214,150,239,225,252,92,224,142,51,222,143,116,33,33,189,6,159,103,202,3,66,65,136,181,249,149,52,88,132,100,237,236,228,78,141,83,136,248,69,222,7,118,222,27,140,78,195,213,84,150,41,92,26,172,67,225,143,60,26,134,246,112,225,125,90,206,164,209,139,119,2,108,145,115,87,133,97,238,124,236,42,84,154,202,111,176,210,43,179,66,149,223,104,152,146,134,113,161,43,35,22,46,176,84,115,37,217,135,46,113,45,149,104,87,194,94,104,127,225,14,58,35,86,99,250,170,77,197,98,214,113,120,105,110,10,167,232,195,110,101,137,36,9,164,237,219,83,115,103,33,179,48,18,101,9,93,1,138,79,66,58,148,34,71,36,135,43,18,44,214,182,192,7,212,53,141,82,231,134,238,135,176,122,194,225,89,56,165,141,215,216,29,51,176,172,33,35,102,0,26,46,181,51,96,250,189,60,233,135,106,237,246,125,162,150,78,252,174,52,172,149,78,3,105,172,212,179,82,88,69,101,201,37,205,167,190,193,250,69,229,145,208,126,69,179,21,17,23,118,56,49,204,70,126,163,95,54,129,95,94,224,170,158,8,115,104,112,17,78,201,57,109,208,99,87,130,136,140,199,255,91,10,39,119,228,65,11,118,178,158,79,42,61,50,239,174,187,247,177,18,142,181,108,202,228,154,172,58,111,58,211,89,147,29,121,242,107,235,114,64,70,11,89,161,203,156,64,102,22,42,84,20,176,169,144,149,249,187,202,3,118,220,78,229,136,26,45,34,171,26,91,93,36,79,163,199,29,176,47,5,123,91,52,206,24,217,87,35,184,114,144,155,71,231,5,162,126,158,41,120,195,173,2,157,189,63,123,4,36,151,129,236,81,144,28,14,178,71,2,144,16,37,93,81,108,225,6,101,158,15,168,12,35,54,47,248,190,208,131,178,65,139,208,155,118,116,98,221,170,90,161,33,225,133,204,39,70,160,114,28,149,43,193,52,4,213,145,238,108,39,76,166,70,39,78,140,148,73,183,245,75,69,13,213,50,108,13,91,183,162,28,99,198,178,50,159,149,65,229,165,147,70,113,81,216,158,151,29,180,239,51,76,53,46,63,0,71,202,73,9,187,236,52,40,154,115,54,217,39,150,54,242,116,80,209,213,88,81,74,63,105,179,100,27,147,147,33,53,190,40,141,87,198,13,231,141,168,218,107,87,168,46,100,179,220,21,38,42,220,52,176,181,162,115,11,190,57,164,183,11,51,127,103,226,182,108,5,135,238,2,225,212,138,12,228,36,243,49,69,8,0,121,207,47,167,98,113,180,64,139,111,161,104,29,15,74,133,170,116,8,58,137,226,172,212,162,183,130,0,27,215,188,172,191,169,26,158,164,2,234,28,1,168,151,45,86,46,206,123,140,166,249,112,151,102,163,241,167,216,135,34,81,97,36,171,200,143,50,26,84,39,181,164,243,204,74,209,208,1,229,10,51,86,111,92,209,146,179,90,60,71,147,174,107,38,115,65,12,58,223,213,113,38,115,74,204,215,116,124,15,243,69,43,172,83,98,173,50,239,149,56,165,171,128,174,164,55,216,174,48,201,101,61,139,187,102,231,208,153,60,62,147,75,104,129,204,6,118,35,208,80,31,220,102,196,142,91,117,205,138,63,33,187,28,222,112,73,236,221,25,221,213,49,187,66,22,16,228,206,221,76,69,120,87,188,137,162,128,16,110,50,154,106,106,53,184,193,167,128,147,28,62,254,249,195,1,60,53,160,239,56,229,43,35,107,199,25,43,144,250,33,45,135,135,201,193,244,143,213,165,224,63,207,64,227,121,82,16,247,20,242,124,58,199,77,222,113,196,250,170,50,36,58,202,48,2,226,124,211,236,102,192,104,144,135,125,59,14,237,147,198,29,105,23,2,24,200,172,188,128,36,222,230,204,199,170,34,176,55,196,139,90,134,110,54,64,105,91,136,7,87,14,231,194,241,137,202,71,45,64,63,151,122,212,157,152,146,133,172,162,82,100,99,29,141,248,194,85,73,182,149,42,247,201,209,100,138,88,78,105,33,172,187,190,84,109,13,228,156,155,244,28,150,246,153,192,25,200,28,41,141,149,219,204,17,208,81,55,129,12,186,20,123,142,224,25,214,9,100,130,192,113,232,228,208,234,188,148,237,61,103,126,231,33,164,192,85,104,14,162,168,41,240,99,6,84,132,187,134,134,20,113,15,72,32,61,168,103,43,33,183,41,211,233,167,68,201,20,94,73,187,147,238,98,14,98,161,41,41,109,103,3,197,171,83,202,98,120,6,211,180,185,37,154,65,50,202,7,58,138,20,2,26,252,179,161,9,164,112,77,112,169,224,25,41,191,21,215,6,112,231,39,128,0,101,94,182,226,1,150,148,25,231,145,79,59,60,3,57,81,51,69,42,77,127,215,154,216,12,109,154,4,24,56,208,101,84,235,50,255,91,182,172,118,4,77,181,5,190,213,188,213,147,239,156,157,166,67,15,215,246,166,208,187,251,99,126,27,152,174,128,191,186,57,146,226,161,236,203,176,11,251,141,202,247,118,213,35,65,173,9,184,180,131,66,167,203,210,172,76,80,59,139,117,166,155,229,168,107,150,23,54,44,254,58,104,196,165,217,94,37,204,183,247,145,43,8,23,105,152,41,149,45,105,143,84,77,163,232,29,16,111,137,110,57,77,52,177,239,70,185,185,102,86,221,123,113,111,134,189,187,182,189,11,2,200,72,34,98,145,136,101,10,18,138,56,106,5,141,21,84,87,241,97,197,153,29,102,13,232,55,161,230,136,183,215,112,123,65,255,133,64,52,55,45,16,222,238,131,102,179,212,172,134,5,99,23,18,26,200,108,71,133,137,72,175,144,241,68,232,11,43,16,96,87,36,101,105,213,0,138,219,34,22,171,77,173,33,198,129,162,158,24,37,224,176,66,54,200,44,151,194,107,173,72,171,41,35,82,20,153,50,71,166,29,90,26,162,93,141,147,118,205,150,62,147,192,212,70,228,4,91,164,223,245,244,143,168,141,165,177,176,189,43,56,111,249,56,37,205,13,234,237,83,247,184,247,172,13,51,119,213,138,54,50,86,9,40,135,59,39,247,85,1,79,166,111,187,18,65,128,253,17,178,55,116,12,113,161,198,145,102,119,52,189,146,252,200,20,84,182,33,241,21,29,227,161,144,143,125,111,187,45,117,147,28,51,102,184,13,233,250,103,215,181,111,179,40,129,106,10,24,201,90,144,78,156,165,123,131,51,82,5,37,130,87,98,88,68,65,56,253,15,103,204,24,79,61,221,186,237,92,211,255,50,194,48,9,107,115,133,148,250,92,125,35,141,225,222,240,131,158,148,193,7,123,14,196,117,224,32,198,117,190,154,46,181,29,39,72,168,128,18,224,168,161,180,162,114,146,88,36,233,218,137,183,254,157,137,230,101,94,83,162,121,164,139,11,202,144,70,23,242,42,115,111,124,162,12,224,207,220,27,207,52,243,235,64,6,13,229,231,78,51,47,153,87,159,105,230,191,96,154,121,48,146,82,203,245,153,22,231,182,254,19,44,135,21,113,158,28,132,231,174,85,253,164,177,248,48,50,90,93,227,81,72,151,226,146,81,38,215,248,59,101,252,205,9,199,229,0,212,184,214,107,170,231,203,52,89,204,164,122,168,125,109,6,71,47,227,43,5,109,61,83,36,234,151,123,158,62,136,23,100,90,68,193,114,102,82,113,97,152,112,61,165,35,170,112,171,72,179,84,129,38,167,21,171,71,79,140,156,218,57,151,2,50,49,213,217,152,79,117,122,146,163,174,33,89,182,182,4,134,143,170,2,47,51,111,198,238,153,158,19,85,137,39,203,135,32,101,91,4,244,1,137,249,231,80,236,44,170,111,207,87,190,151,153,171,243,172,202,166,81,119,56,218,25,116,152,36,127,142,134,40,8,83,131,106,25,20,18,140,101,163,202,226,230,111,224,153,237,198,112,96,155,86,137,30,81,86,28,16,127,99,230,108,14,194,44,97,222,194,92,82,133,236,197,120,213,111,145,180,140,117,153,3,20,52,80,18,161,168,1,179,0,134,5,72,35,16,71,40,111,55,66,92,195,219,153,159,238,171,4,141,125,26,75,65,171,126,33,50,189,99,137,11,215,43,109,95,218,244,67,53,23,35,80,178,2,103,22,158,115,229,11,57,31,114,74,48,67,123,22,227,200,138,207,185,188,116,210,172,159,65,154,92,142,100,128,99,22,105,137,204,145,133,21,71,124,17,210,99,238,180,84,252,71,23,248,6,146,14,171,234,109,180,170,218,223,176,168,210,155,87,40,203,60,211,130,191,38,134,201,92,209,200,59,116,70,164,35,86,126,22,113,78,169,121,56,184,38,121,179,113,137,1,78,212,227,198,5,203,139,99,158,74,168,126,72,169,245,66,191,16,163,161,81,238,228,90,199,21,197,189,69,177,28,147,190,105,117,1,250,75,217,192,98,11,76,79,164,166,51,84,197,5,76,99,212,47,212,153,236,76,231,157,21,108,38,110,177,243,173,115,151,230,137,238,22,162,89,169,54,171,129,255,75,106,119,232,228,204,115,117,58,214,216,223,9,93,99,204,142,246,113,175,224,141,205,29,134,250,181,204,67,156,173,110,62,235,132,79,5,152,113,222,80,181,249,37,166,103,51,165,150,114,46,105,86,156,0,187,161,43,65,110,141,240,142,230,152,39,183,5,209,13,64,46,227,176,238,244,115,204,123,162,217,54,117,111,213,89,46,11,193,43,5,55,110,143,169,227,155,246,123,38,142,165,29,107,142,196,46,179,213,204,104,4,246,213,20,29,119,81,109,189,90,32,218,128,229,123,74,233,95,94,33,209,22,55,200,39,209,126,53,90,142,43,56,101,8,35,72,218,139,15,55,55,168,147,150,185,111,169,212,71,213,238,112,140,162,37,114,251,178,124,193,156,104,10,153,193,67,155,245,130,26,32,156,82,186,34,51,16,179,247,153,185,163,185,22,3,165,165,145,219,61,143,143,53,59,92,184,63,230,226,130,193,132,91,60,139,85,83,223,221,189,196,83,118,222,153,200,111,154,183,202,69,220,247,223,23,0,228,154,170,18,194,240,181,244,136,142,226,4,133,32,87,22,180,192,21,191,237,119,176,45,65,244,246,100,152,190,26,52,63,144,181,172,150,54,123,79,65,128,55,82,25,98,29,144,145,83,101,117,86,142,65,206,70,158,253,185,166,203,169,80,9,232,202,163,129,151,80,155,160,61,48,122,129,101,133,66,66,72,41,50,79,67,117,128,38,36,175,158,211,110,106,38,170,93,102,144,66,85,154,213,44,197,25,9,53,241,61,131,184,234,97,108,249,52,113,31,38,90,125,142,205,211,212,227,73,173,197,11,78,35,179,155,122,208,162,202,13,7,162,33,51,27,133,1,144,97,211,93,184,103,174,56,227,139,98,10,94,206,134,101,64,239,142,245,166,186,9,45,232,24,167,44,101,80,88,192,3,75,235,123,69,87,135,182,238,212,79,205,21,193,178,81,113,76,77,191,79,21,25,0,34,93,11,157,4,37,168,141,50,244,5,123,221,54,96,200,86,102,252,47,37,32,205,77,233,76,185,218,92,108,71,131,86,188,143,50,89,194,23,54,132,243,32,143,57,173,200,2,142,41,15,118,188,60,34,146,108,43,19,46,176,224,162,146,166,135,237,216,80,7,146,83,138,109,242,105,247,13,135,249,222,142,247,68,100,176,248,155,112,128,178,162,20,210,8,33,247,197,162,32,167,72,96,241,28,9,81,96,202,123,135,92,59,56,106,170,241,236,32,67,215,186,238,238,231,166,224,206,45,220,65,1,45,209,243,201,5,183,125,80,105,193,55,166,217,39,117,229,232,19,212,153,210,130,116,227,67,223,105,255,219,78,84,76,49,14,0,85,116,79,115,72,32,94,112,99,180,192,114,224,254,134,230,106,69,104,12,17,224,62,229,211,124,0,229,230,10,62,108,112,38,141,83,152,35,56,13,0,0,113,55,205,88,201,247,55,189,240,116,94,131,54,151,90,76,129,231,49,88,163,73,49,4,215,166,129,14,143,74,138,32,77,37,205,74,236,148,34,150,138,1,214,144,196,68,141,241,36,92,198,113,16,112,191,226,118,111,80,221,32,17,35,43,95,66,46,23,225,58,224,157,10,147,82,24,153,142,219,105,153,34,224,248,41,8,153,43,20,151,55,210,153,79,77,56,202,49,146,221,146,251,133,173,194,201,131,13,84,24,153,77,67,1,215,67,50,253,170,39,66,88,218,52,55,41,195,150,221,80,17,6,44,29,84,233,118,52,185,43,28,119,129,49,153,238,45,242,76,70,207,219,150,204,122,82,42,90,181,159,48,199,2,188,20,82,116,195,255,135,144,114,236,183,101,134,183,225,221,98,218,34,111,215,113,127,76,105,42,3,105,245,124,216,115,201,46,16,146,97,4,127,75,220,199,188,201,17,10,1,210,94,212,74,28,74,211,145,193,142,90,66,211,69,25,181,39,129,224,20,222,113,150,40,89,20,147,46,35,64,20,94,107,20,137,175,126,131,74,49,49,35,199,65,112,191,156,235,197,125,188,120,44,93,230,244,170,183,155,201,1,66,184,170,53,132,155,25,190,67,119,88,133,56,51,18,80,148,171,185,159,205,245,12,147,36,211,214,177,15,150,132,153,99,136,141,127,0,183,235,245,48,96,72,179,161,42,40,41,164,249,246,48,255,189,201,181,192,138,23,0,212,68,58,210,136,217,117,225,87,143,27,83,108,88,199,234,164,33,1,58,16,134,56,17,196,108,161,201,73,249,202,108,231,209,78,215,164,241,225,16,100,204,118,37,31,36,68,52,65,192,141,248,17,152,136,121,49,109,241,13,163,236,89,108,65,2,90,90,97,26,21,88,39,99,120,146,173,123,48,15,182,68,106,51,139,46,239,186,208,30,98,105,192,63,104,18,149,173,209,107,115,72,120,188,223,157,105,110,91,54,69,22,24,116,72,184,157,233,114,41,35,153,249,151,39,157,247,228,211,222,146,179,179,19,207,64,220,128,137,94,196,14,52,236,71,229,81,26,70,134,192,50,176,77,100,244,173,82,99,97,164,58,110,171,225,201,204,229,84,57,147,117,246,142,38,87,166,219,3,31,157,83,132,24,232,8,141,0,4,240,146,83,167,141,38,219,180,115,230,26,111,209,209,1,160,135,57,60,74,161,236,77,134,156,252,250,30,251,57,199,103,10,4,46,59,159,134,35,112,15,255,84,71,180,144,253,67,146,173,49,187,36,57,144,162,102,6,22,18,75,226,156,68,195,166,116,236,76,195,245,116,204,81,195,67,57,194,154,8,193,155,72,208,43,178,95,35,33,170,139,16,71,91,117,168,182,195,200,134,178,91,132,94,81,62,19,132,68,48,86,229,82,184,125,48,87,228,77,105,130,162,216,91,167,123,42,62,230,162,24,194,13,44,64,195,78,192,205,153,133,87,24,116,114,49,129,120,169,134,154,86,146,203,116,153,141,58,230,90,224,201,117,88,5,86,89,128,142,81,232,216,137,90,241,170,19,207,27,41,190,145,245,111,241,71,196,68,89,177,144,114,8,39,50,177,5,171,130,62,243,113,13,187,215,235,80,138,194,100,34,25,170,228,192,140,232,10,171,90,50,152,1,205,177,83,8,240,11,244,120,96,177,67,122,17,4,214,112,94,82,216,2,103,111,172,202,38,31,165,68,200,40,48,11,89,145,163,177,128,130,105,13,214,162,213,51,158,128,145,29,103,146,225,120,6,227,21,172,140,11,140,97,84,174,8,166,72,202,142,7,30,36,231,203,139,137,98,52,57,3,27,213,144,251,196,27,82,161,14,220,156,107,73,24,27,69,115,138,144,27,214,85,91,83,74,219,2,3,48,209,84,135,69,179,25,80,7,213,200,234,191,39,175,229,183,114,246,235,6,67,86,185,182,86,54,172,2,164,42,90,125,240,214,50,199,197,163,184,183,24,70,195,235,24,17,35,210,98,50,39,109,215,169,254,161,177,25,183,67,132,215,16,63,165,177,152,187,72,36,115,211,95,113,138,57,19,79,32,73,66,221,145,82,167,25,61,2,60,84,37,119,85,132,55,218,242,70,167,222,104,222,123,253,124,214,15,245,90,164,70,217,212,240,146,188,10,203,194,84,13,61,64,18,36,25,54,172,133,59,154,190,180,20,28,4,234,100,10,79,14,98,35,125,189,83,133,168,223,143,45,166,55,12,38,130,216,191,105,240,15,69,30,129,108,144,247,34,251,226,205,66,48,140,51,45,170,204,157,236,160,108,224,154,220,189,194,223,91,184,39,170,76,75,26,184,170,201,47,234,181,162,128,3,107,28,90,170,30,143,110,100,238,191,197,254,23,21,79,157,106,42,105,175,110,105,185,152,205,108,89,209,192,172,174,178,180,76,10,192,184,241,218,0,181,120,226,98,19,178,3,91,28,147,99,41,122,162,81,107,108,179,147,76,48,191,149,29,102,246,162,234,223,58,37,221,76,72,231,49,115,148,228,241,107,19,47,40,164,108,10,65,250,203,117,87,20,108,24,215,142,61,124,34,7,209,106,169,170,50,171,50,26,13,55,194,151,15,119,100,102,163,213,176,41,238,167,108,122,26,84,77,222,98,92,37,127,154,115,185,10,1,2,235,124,28,56,199,167,205,26,20,236,102,33,150,9,22,8,108,244,205,89,57,154,134,237,9,188,81,195,59,69,230,170,211,40,66,181,221,41,131,178,28,211,8,59,157,81,171,177,124,177,210,168,83,43,69,197,83,39,52,193,52,84,25,235,158,1,239,24,117,86,15,118,10,196,160,97,92,83,67,166,46,132,110,5,5,98,148,50,58,65,164,21,85,162,150,145,213,144,157,160,2,43,165,152,63,153,89,133,23,156,174,132,210,89,78,29,106,18,30,235,145,16,90,66,169,52,204,251,128,131,78,83,162,104,171,159,88,197,149,198,14,73,170,191,170,72,131,13,45,42,60,185,8,50,120,10,194,93,144,237,105,163,42,151,78,249,166,45,150,193,77,25,118,136,77,141,79,29,188,222,10,235,156,153,235,164,74,196,216,107,65,66,215,54,85,115,106,53,104,98,224,68,88,67,95,204,28,221,232,40,43,223,188,122,12,101,126,46,134,218,168,71,92,85,55,54,90,201,198,196,27,175,223,121,30,209,10,47,68,198,196,94,8,94,248,98,251,81,27,117,17,76,81,103,234,83,93,30,221,73,170,190,25,186,16,208,41,195,156,217,255,164,113,81,41,46,44,49,153,103,240,127,233,92,35,44,7,105,230,146,27,223,162,234,127,148,61,148,166,178,61,87,190,118,205,231,204,17,18,211,74,40,106,183,25,200,74,94,43,169,10,229,19,148,211,114,144,45,207,12,232,113,12,59,179,152,16,41,34,117,93,77,199,79,217,208,45,235,232,114,92,78,22,171,156,99,56,21,166,89,83,47,101,219,246,68,82,32,14,65,53,69,220,164,37,100,37,174,180,243,114,107,156,197,138,51,75,113,119,1,234,34,89,26,120,136,132,116,192,20,9,184,202,195,121,193,219,112,159,187,146,98,79,225,135,146,159,3,113,177,51,20,194,253,179,173,123,78,181,141,153,84,32,81,64,92,19,35,87,196,77,235,147,107,205,99,63,169,70,66,168,100,155,149,24,173,166,195,230,53,209,117,16,65,176,59,16,185,66,58,131,194,32,69,102,141,185,185,194,237,49,63,72,49,108,19,146,45,211,43,251,128,23,18,144,169,4,207,192,92,110,164,36,217,112,116,82,181,209,176,150,0,54,3,47,75,63,80,158,177,91,66,226,160,31,152,6,139,222,240,80,53,250,141,226,63,222,30,102,140,198,34,49,67,13,233,98,164,62,91,49,72,116,102,139,214,186,193,119,4,33,105,188,8,26,121,40,201,76,73,168,50,108,17,156,94,139,42,171,168,137,170,38,41,107,155,138,71,67,236,47,41,205,20,25,183,50,99,230,84,147,250,49,42,40,215,212,152,141,178,179,211,137,118,154,211,34,138,32,186,53,241,125,65,124,169,188,98,229,40,27,190,51,114,167,61,255,234,76,26,177,56,44,214,65,156,224,76,132,60,199,176,179,119,30,54,72,207,29,172,26,211,165,199,18,128,147,147,110,111,8,105,154,170,81,165,179,188,172,251,18,146,33,170,49,87,53,142,65,97,116,80,74,171,125,54,155,9,86,156,56,238,240,245,96,91,66,99,114,88,181,75,220,50,234,52,150,159,198,62,212,88,145,32,140,78,141,187,92,200,61,167,201,201,150,239,196,62,60,179,41,119,167,215,235,175,40,197,123,205,121,214,174,175,106,224,111,248,58,84,127,136,206,103,98,197,175,34,74,96,238,53,188,162,200,239,77,13,201,30,81,76,22,173,230,35,83,220,72,150,59,178,205,100,125,149,246,115,255,32,15,85,1,144,132,196,86,136,100,41,115,85,20,93,151,160,110,152,48,170,149,131,122,39,93,23,72,189,104,232,151,204,96,103,84,104,172,5,148,230,159,93,53,104,131,116,188,66,75,210,59,147,127,103,140,224,94,128,100,69,157,100,214,88,22,157,102,163,247,44,56,186,34,242,70,151,17,229,117,146,231,215,68,254,12,20,121,97,58,11,85,37,253,13,123,96,67,185,179,188,68,203,7,113,193,195,134,93,190,193,85,7,238,187,49,7,69,123,209,138,81,169,91,237,30,42,26,127,145,234,84,66,227,147,237,160,110,67,178,34,33,123,88,200,136,86,69,189,42,16,182,114,99,39,96,118,130,40,82,238,153,45,128,219,88,174,181,185,224,228,33,166,31,38,11,86,43,141,3,34,202,121,202,253,177,200,14,78,148,141,225,198,174,146,114,219,221,210,243,4,137,161,132,146,147,172,164,203,93,153,136,42,185,71,1,191,87,1,176,146,128,20,88,208,36,116,170,134,164,141,88,213,89,212,153,236,230,187,174,75,179,124,253,42,135,73,16,152,20,81,73,210,88,110,47,43,117,96,26,117,65,175,85,232,180,15,85,75,209,129,120,93,231,30,26,26,152,209,150,92,85,143,245,71,216,63,202,188,220,8,32,203,97,102,166,77,118,247,57,187,148,59,184,205,184,51,158,29,229,108,200,161,14,220,140,101,119,39,222,58,77,42,53,57,198,80,149,199,10,77,236,52,55,237,130,149,219,213,62,117,253,214,53,165,166,121,37,22,243,224,73,154,92,17,140,15,96,154,1,146,100,24,194,108,235,235,174,255,77,124,64,23,91,217,4,96,150,32,205,56,85,128,237,27,1,75,220,180,46,157,240,188,243,197,100,165,60,111,206,246,186,178,189,186,89,15,48,197,193,140,154,245,150,142,168,241,76,153,127,207,146,67,148,139,116,229,62,40,245,85,225,176,174,84,179,156,237,162,119,176,145,0,168,1,178,6,20,195,204,9,15,169,164,94,38,77,166,190,157,238,110,195,230,109,221,238,253,26,135,90,3,31,90,161,49,45,76,90,189,155,235,235,134,172,222,251,173,115,146,171,33,108,109,12,1,95,77,218,69,57,235,137,129,218,60,192,153,68,101,229,124,10,161,237,163,108,107,32,110,138,213,141,209,188,55,112,118,198,236,21,251,55,36,162,163,35,13,131,82,185,24,26,188,218,116,68,9,39,220,222,105,5,220,218,221,84,55,93,179,55,235,246,93,17,199,35,248,145,96,223,201,253,164,22,88,211,29,52,126,170,157,51,107,208,244,180,186,32,87,21,53,136,69,66,16,52,233,180,16,32,145,24,218,42,116,69,117,214,233,215,138,10,46,41,233,130,75,65,235,114,224,30,9,235,178,123,145,239,217,109,177,115,108,172,26,146,70,217,208,40,36,138,225,184,152,150,121,86,238,44,77,208,251,171,176,63,75,240,119,89,245,138,49,213,56,21,28,52,163,3,157,136,244,227,204,39,135,219,107,167,101,27,201,154,28,56,223,203,125,217,229,112,215,152,93,14,249,92,41,161,137,25,67,67,70,19,109,124,133,57,77,22,164,247,204,105,242,90,114,154,204,20,96,94,6,215,92,116,140,73,101,31,27,32,103,117,75,213,115,81,130,213,11,226,90,141,107,24,93,230,185,94,7,77,107,223,210,141,161,219,0,218,152,238,38,254,115,122,45,186,12,61,115,54,205,236,13,197,171,115,150,179,49,203,24,244,95,100,156,68,9,95,248,97,81,7,110,231,53,189,55,161,82,65,63,93,58,37,236,56,206,166,180,127,141,152,231,153,206,253,85,101,83,34,23,74,83,164,49,186,65,6,95,171,243,158,42,201,194,52,233,216,69,181,154,94,41,103,86,129,214,179,72,13,78,247,253,36,185,78,107,213,6,111,99,46,99,166,186,37,38,99,244,240,21,110,116,20,113,124,110,244,87,81,183,225,0,68,240,193,194,13,86,21,215,118,222,47,111,93,80,193,199,254,243,49,173,140,31,238,253,231,229,181,74,92,255,179,117,165,213,74,167,254,238,91,63,93,14,235,133,36,23,188,110,73,50,127,195,90,41,134,97,238,187,241,222,240,209,167,184,115,59,100,187,67,25,50,8,223,111,55,102,187,195,111,57,217,70,23,62,251,42,183,21,113,36,237,89,115,99,44,204,111,119,99,52,230,251,66,189,244,73,238,219,150,30,250,5,51,253,43,107,0,61,233,242,147,46,63,233,242,23,163,203,175,171,234,150,133,121,239,31,180,223,47,166,86,216,239,126,190,69,157,34,102,184,135,235,185,101,221,120,118,252,243,84,242,131,47,232,2,235,79,101,205,167,81,214,204,12,221,196,96,157,10,49,123,30,241,60,226,121,196,243,136,231,17,43,71,124,50,229,155,216,175,190,132,90,70,242,124,125,137,27,155,150,237,243,223,248,75,105,192,246,173,111,206,231,184,113,107,177,251,28,58,191,182,44,226,231,87,129,169,151,158,176,191,18,195,36,198,99,73,78,150,4,248,231,113,175,229,56,113,18,186,227,56,65,247,119,28,39,142,154,221,113,34,138,72,185,70,57,78,156,217,229,56,169,209,123,153,199,105,72,221,60,78,18,90,203,113,75,79,79,215,121,156,6,243,204,227,164,136,179,28,39,122,88,63,78,163,18,230,113,18,166,38,199,9,241,242,227,196,137,66,180,153,162,190,146,67,228,109,233,41,29,167,161,155,243,56,113,39,147,227,150,158,210,113,226,231,41,196,82,142,243,245,144,244,52,126,156,120,247,138,43,153,28,231,235,177,244,148,142,19,119,220,101,48,122,220,92,15,113,201,166,227,196,146,160,114,162,28,56,23,228,36,11,66,7,10,53,159,43,34,230,1,61,80,86,132,14,20,71,184,185,36,226,247,160,7,46,157,29,17,8,243,64,241,52,159,107,34,86,37,61,80,180,129,82,132,95,15,20,15,223,185,40,154,247,68,14,20,5,247,46,30,40,20,50,31,40,154,246,231,129,95,226,192,95,175,209,157,158,250,226,61,255,178,181,48,35,86,242,122,61,157,175,199,211,241,176,187,158,46,230,159,185,25,169,97,143,231,211,233,180,217,30,79,112,230,234,218,186,179,45,240,99,137,21,120,249,163,191,156,142,231,221,238,132,17,73,74,142,237,24,208,40,96,122,62,158,47,91,27,123,215,88,78,182,84,53,18,125,241,0,11,63,86,109,183,63,237,119,24,145,172,251,121,248,120,238,199,58,31,118,91,93,207,149,198,230,116,100,40,125,140,117,31,128,123,61,92,70,200,10,70,180,12,126,115,220,157,14,187,203,206,151,116,165,177,57,221,98,219,30,101,211,95,174,251,17,45,124,56,211,72,71,173,212,195,225,114,61,31,78,155,235,126,78,74,109,109,207,183,88,84,169,76,242,176,203,127,184,110,118,251,131,13,179,182,180,11,63,19,193,62,236,150,223,111,70,78,131,235,113,63,209,93,211,214,111,248,71,130,249,39,170,127,162,250,39,170,127,133,168,126,115,57,28,206,97,161,47,151,235,241,114,62,56,106,23,152,40,173,221,233,62,250,151,110,142,215,222,167,173,187,140,243,112,56,30,143,167,211,97,227,152,48,183,181,231,122,88,240,139,95,248,71,22,202,114,223,145,126,77,179,200,191,120,144,59,12,76,177,221,156,174,251,253,209,81,203,126,168,167,7,112,157,175,135,171,211,149,182,177,57,127,228,99,152,213,122,94,250,240,207,215,235,72,153,181,57,15,50,122,113,212,114,188,94,14,167,195,245,116,188,236,54,147,161,106,27,155,243,103,138,128,151,207,96,30,207,155,203,117,183,223,239,199,208,230,224,47,187,237,160,44,135,141,171,8,250,182,122,178,101,84,120,241,227,190,156,55,167,203,96,25,137,97,94,210,98,15,122,178,63,239,207,231,43,141,178,109,108,206,247,228,30,227,152,7,224,173,71,100,193,97,119,62,51,61,29,92,196,144,34,46,182,141,187,150,122,34,66,134,151,108,82,47,31,213,29,198,120,206,164,54,219,15,46,225,184,223,71,110,163,109,76,231,90,202,153,135,192,113,151,237,117,123,25,3,186,50,243,120,60,239,143,219,211,229,48,118,177,99,184,166,173,158,60,241,219,35,72,82,187,235,24,202,254,188,219,204,33,45,203,126,26,251,246,114,218,94,182,196,63,181,141,205,249,51,217,207,139,119,146,28,221,31,194,193,102,116,252,188,191,144,36,57,242,81,140,136,147,241,199,16,156,231,58,183,141,205,249,200,86,160,41,198,159,203,255,220,248,47,116,232,3,83,31,55,199,73,186,22,242,190,31,60,234,118,115,60,56,109,47,45,249,180,153,30,250,197,56,185,174,195,250,113,127,222,28,198,138,49,47,183,187,158,135,110,236,52,100,197,141,43,199,218,198,122,250,100,227,31,65,107,112,185,236,135,236,123,57,154,169,75,208,220,162,31,216,157,246,167,243,148,86,186,182,114,238,44,205,246,20,59,63,155,23,188,216,218,71,50,213,71,83,83,88,254,155,145,5,249,1,184,254,211,110,232,76,79,219,35,219,76,46,251,33,197,177,14,117,17,5,74,99,123,246,172,189,180,228,220,120,249,40,226,112,25,38,113,214,149,142,132,149,135,221,241,176,61,110,246,87,215,173,53,173,205,217,72,123,168,169,177,95,252,216,79,199,235,176,20,236,130,170,116,119,188,92,54,135,253,110,120,155,210,232,155,214,246,124,100,239,91,10,252,60,2,31,56,116,197,131,141,189,12,77,213,92,253,253,101,113,133,24,99,189,14,11,138,51,135,181,181,61,223,242,102,74,2,232,23,207,13,157,134,109,112,81,215,24,109,31,44,223,102,72,242,187,235,158,120,190,133,57,172,173,205,217,72,43,185,100,238,124,132,149,167,81,143,213,189,108,55,251,97,54,35,197,71,109,76,231,45,25,102,101,188,15,192,5,62,119,250,115,167,63,119,250,115,167,63,119,250,115,167,255,126,119,58,59,176,46,235,123,30,3,28,22,42,151,96,114,83,57,203,178,198,191,124,153,115,217,170,251,203,112,104,57,156,120,255,14,37,198,118,55,210,42,178,138,171,180,181,231,154,67,204,131,236,243,235,216,158,167,93,176,191,109,247,219,129,198,131,178,39,182,116,167,161,112,248,136,52,120,234,24,62,83,215,31,49,89,138,87,122,122,4,84,120,62,237,7,82,31,122,25,218,242,187,177,25,134,45,99,51,181,187,11,102,200,109,237,185,230,43,245,16,218,172,205,105,63,148,52,71,230,229,14,99,140,231,205,53,41,130,155,214,238,116,171,149,33,229,9,94,190,223,202,80,97,39,50,120,26,106,187,161,219,62,109,7,185,247,149,111,90,187,211,151,186,31,94,132,247,197,47,254,254,56,12,86,251,224,246,186,63,110,118,195,45,238,116,14,94,13,77,107,119,186,85,141,248,250,17,188,194,135,12,115,14,188,205,102,104,101,175,215,243,176,224,50,219,219,180,54,103,91,73,31,73,2,253,242,241,221,254,52,20,177,67,108,97,78,104,56,253,159,19,35,148,154,218,51,81,178,69,43,24,190,124,166,247,176,33,135,246,133,195,221,141,50,46,161,81,248,222,210,90,206,157,176,46,165,76,30,65,206,61,15,59,60,107,227,7,139,59,156,222,175,236,143,38,98,110,105,237,78,183,42,7,75,225,148,151,191,215,183,3,81,5,212,61,28,178,54,199,129,186,163,39,83,211,218,156,61,189,106,165,44,225,163,174,252,176,205,92,167,7,42,214,61,180,173,172,58,106,117,62,132,87,238,171,221,237,35,54,117,232,164,142,219,173,27,232,119,151,203,160,213,187,35,27,233,74,91,119,170,239,244,7,80,231,93,54,67,71,119,56,184,27,245,216,212,141,251,78,105,235,78,117,62,254,33,4,252,193,162,29,7,55,206,1,47,67,109,113,14,75,217,180,117,167,206,96,159,7,96,103,30,88,242,44,93,183,66,32,35,169,198,3,240,207,195,127,251,18,183,85,17,17,170,204,80,79,67,157,182,175,183,75,69,191,7,216,102,53,166,240,58,98,136,142,67,55,206,90,228,182,177,158,173,229,229,150,170,143,47,127,228,231,193,21,238,88,209,47,194,209,121,240,11,155,109,136,37,237,26,155,211,133,135,120,156,133,31,189,223,108,41,15,196,50,252,225,214,127,217,143,129,77,242,89,91,154,19,81,224,253,197,239,242,7,192,79,191,48,91,169,180,126,87,147,139,234,129,179,55,111,191,29,55,220,224,184,205,31,246,227,138,99,2,246,227,242,127,250,241,127,190,255,225,237,210,250,21,255,173,207,113,208,31,151,134,113,151,113,96,60,253,207,111,222,127,255,205,119,111,223,189,251,233,43,249,58,102,238,239,239,254,249,213,114,252,191,141,215,89,78,220,141,238,109,182,184,145,12,243,79,63,190,255,254,135,159,191,249,233,221,187,247,223,252,227,221,251,119,255,254,227,223,255,242,254,221,191,244,230,127,196,145,114,200,207,223,190,255,207,183,239,254,250,230,237,127,189,249,233,135,55,99,134,191,26,127,201,66,253,247,143,239,245,171,140,117,179,149,211,198,47,158,198,23,144,189,53,102,39,124,254,122,254,106,126,125,186,236,148,95,42,101,162,164,96,122,9,9,4,31,18,8,60,189,149,86,171,224,95,135,240,203,228,23,253,21,147,159,198,148,119,158,176,110,249,229,201,210,228,238,158,18,77,126,166,190,197,238,140,164,105,225,103,236,208,140,196,198,207,148,143,53,165,225,123,193,63,127,125,210,48,173,11,189,125,249,238,18,181,227,90,214,250,17,188,150,75,176,233,146,237,101,132,160,15,245,238,226,210,67,170,129,218,218,157,62,194,12,30,103,236,67,175,49,162,145,134,22,211,181,34,163,106,247,126,248,51,4,77,79,219,218,158,63,43,167,63,194,240,135,142,107,132,88,135,36,40,195,85,235,52,244,92,81,247,91,27,187,147,71,228,26,138,187,63,128,133,107,216,168,70,248,69,144,196,134,70,119,59,140,247,195,114,55,99,213,22,29,104,109,109,207,63,105,96,144,84,130,127,128,40,141,97,177,24,121,38,56,52,117,132,159,94,174,219,32,191,150,182,238,84,13,88,124,140,72,213,235,97,244,121,4,161,142,68,11,174,255,29,107,59,226,78,162,85,183,54,182,103,67,15,250,16,113,249,67,181,178,31,209,167,27,78,172,49,214,117,64,242,112,81,97,60,95,27,219,179,225,198,249,24,152,238,60,72,84,178,224,36,79,197,220,208,157,36,105,114,156,157,124,209,139,61,210,74,16,194,218,30,207,219,237,48,214,111,134,63,18,237,239,218,90,206,213,80,236,7,217,222,99,87,14,107,108,240,86,218,110,135,121,118,187,219,111,8,167,151,182,246,92,53,239,60,198,222,30,9,202,246,231,161,59,39,11,246,41,146,112,250,217,157,96,88,252,33,54,243,176,75,30,135,171,221,112,185,114,119,188,129,149,246,35,186,62,184,164,215,198,246,236,147,218,235,31,134,116,15,54,60,58,101,13,58,125,62,142,1,69,206,165,105,109,207,119,190,237,33,182,248,230,50,104,211,101,248,34,56,114,27,53,101,7,117,98,18,22,91,218,243,52,69,233,67,112,171,67,198,26,124,199,72,182,201,33,197,139,183,229,96,65,179,136,150,26,219,179,165,18,218,67,236,246,151,47,88,127,200,194,96,218,52,25,221,47,212,159,255,229,251,55,255,146,30,106,159,127,120,255,207,55,255,50,69,33,212,132,63,125,251,183,49,10,191,255,226,146,33,234,173,101,87,171,91,190,184,183,47,122,44,24,84,119,18,139,130,95,54,193,248,169,255,225,100,58,87,189,251,145,158,70,175,47,95,197,252,19,254,28,30,49,249,228,175,195,197,237,215,180,30,197,126,217,249,220,115,220,97,252,53,239,111,223,189,115,214,146,206,183,19,236,37,197,42,220,99,229,175,188,124,178,86,255,251,207,63,192,210,99,61,147,198,55,0,78,111,251,63,126,32,110,45,141,118,160,180,13,80,248,162,213,241,76,63,124,219,188,242,41,21,231,82,188,163,232,175,109,87,125,38,245,245,239,175,24,237,125,6,205,207,143,103,190,30,113,78,34,28,93,117,219,97,71,11,211,53,62,150,95,103,249,24,233,11,231,255,26,13,39,233,221,100,223,170,189,127,240,109,118,0,242,64,137,83,157,58,217,233,105,114,32,188,121,224,112,56,162,237,144,72,71,126,46,116,125,90,165,245,250,195,143,64,69,153,233,79,34,218,101,151,235,172,9,253,29,215,144,107,203,146,106,167,150,219,88,64,27,226,249,4,161,73,203,114,234,66,130,113,202,85,143,212,218,163,54,59,232,174,12,112,68,13,40,158,146,122,48,26,123,36,21,111,148,198,33,108,110,233,142,21,97,195,37,207,58,14,249,75,46,7,6,22,45,210,64,71,232,1,243,183,76,229,40,247,235,29,151,139,2,159,9,86,212,99,174,114,210,146,209,87,199,111,39,204,24,70,111,144,65,99,229,165,5,129,111,19,49,203,183,197,23,88,220,44,213,36,162,135,226,194,252,91,174,37,151,148,57,31,83,135,28,32,222,34,215,83,66,33,45,26,85,50,238,48,87,204,32,99,156,167,222,184,195,77,81,123,169,220,174,158,181,72,120,227,44,6,73,5,223,37,56,71,96,214,126,122,127,48,119,60,37,163,109,233,145,174,151,53,96,78,234,105,179,215,10,104,163,101,78,92,222,70,242,146,2,65,243,109,56,226,10,229,90,76,80,253,222,91,187,118,211,3,172,226,24,95,232,130,36,93,145,156,84,214,166,160,57,218,38,220,124,61,126,232,74,210,220,44,23,114,72,238,70,36,29,238,167,48,76,117,183,26,113,189,228,172,1,158,10,62,97,156,210,127,16,227,185,111,197,212,70,109,186,99,199,40,12,103,143,57,179,217,80,76,148,186,41,93,143,96,212,66,90,4,198,21,136,85,39,159,209,73,3,252,129,186,100,234,144,227,20,163,163,131,236,94,52,33,177,51,66,107,124,119,149,157,71,187,178,110,91,226,247,150,171,19,90,25,51,52,119,149,97,111,13,103,193,213,9,169,217,102,245,97,205,253,237,75,77,125,20,155,107,197,39,140,114,10,70,170,8,11,67,24,127,91,162,36,172,135,194,6,190,219,61,199,197,176,238,126,67,29,149,206,170,82,4,187,4,102,130,186,40,214,223,132,153,3,234,150,27,234,82,43,94,192,78,193,40,112,124,198,70,182,79,46,68,82,252,38,66,74,100,8,82,1,109,184,231,18,42,184,139,137,69,39,2,19,235,109,196,196,130,10,6,38,86,161,242,21,114,177,96,231,159,92,236,235,224,98,213,227,192,130,193,129,168,225,138,59,247,37,232,143,21,103,23,76,7,12,60,247,63,248,79,144,27,165,91,78,50,244,54,224,68,151,192,137,121,12,130,44,76,31,167,186,123,249,37,155,159,248,217,225,191,78,253,90,220,217,73,76,182,244,177,118,8,143,74,14,187,72,175,181,42,159,190,127,12,46,145,240,213,132,75,22,69,121,70,37,126,156,163,18,105,139,152,228,139,44,52,102,119,174,51,88,155,37,170,131,245,13,160,232,202,238,235,170,78,166,67,155,172,220,143,69,62,89,166,15,7,33,37,138,95,27,91,191,36,242,243,139,202,94,195,201,144,5,76,1,226,208,133,134,201,25,25,135,130,92,50,179,123,66,27,34,139,161,240,161,244,79,169,175,170,93,156,137,26,95,9,208,230,172,44,161,79,19,36,49,14,9,120,209,118,252,194,31,218,1,109,2,148,234,212,225,62,243,55,115,134,28,39,55,219,32,172,17,143,231,151,112,250,9,137,80,217,77,180,16,200,219,181,180,137,248,88,59,202,217,64,108,14,238,132,55,121,139,12,138,38,205,46,165,91,158,90,32,2,162,69,230,133,166,86,194,164,98,11,246,187,132,81,83,27,216,70,102,33,105,85,208,164,171,229,59,31,223,149,201,3,215,73,61,68,255,121,24,97,35,40,7,137,220,203,147,169,67,199,52,235,126,108,130,136,12,184,154,145,237,19,140,60,216,125,130,62,46,101,252,161,183,216,176,176,61,148,185,36,112,12,61,226,62,222,70,104,36,39,213,77,223,76,8,79,90,59,167,52,231,235,11,83,150,15,151,98,186,98,80,93,224,37,181,225,90,36,161,21,208,107,224,179,3,226,2,233,205,126,168,187,166,110,173,186,253,186,77,218,110,230,126,211,51,110,104,209,71,196,48,184,35,161,161,130,165,2,14,91,193,114,25,17,102,84,169,214,6,90,52,149,21,25,199,64,150,38,105,208,200,185,164,241,182,253,65,103,4,32,20,182,94,235,31,107,149,97,57,183,66,110,139,15,42,218,168,200,165,197,64,21,77,245,168,44,1,93,7,155,13,12,103,64,143,125,95,67,49,121,139,23,44,208,34,138,132,76,26,140,211,161,165,6,119,53,24,46,163,152,97,62,19,209,86,190,11,157,46,235,196,0,148,37,253,66,163,35,13,143,52,94,161,79,122,64,210,53,88,61,181,92,42,220,41,163,167,150,143,177,101,105,161,244,4,139,40,154,203,81,96,154,251,172,146,186,232,9,165,79,27,1,136,149,97,82,63,160,42,90,202,241,168,206,19,73,205,13,135,154,138,23,140,169,206,129,177,78,232,40,117,189,27,26,221,81,23,67,248,235,171,106,122,164,165,116,179,236,86,169,39,176,40,97,167,140,163,240,173,158,30,83,69,59,49,140,246,19,1,163,214,66,251,185,238,247,128,14,10,198,144,185,81,229,131,220,253,218,235,243,66,55,245,34,202,184,79,53,16,82,121,67,131,131,89,133,206,66,119,6,212,22,179,31,216,238,67,211,225,140,171,220,69,85,22,182,63,112,197,126,244,97,130,202,244,133,94,207,210,234,87,57,86,42,150,127,148,132,129,33,7,9,195,219,72,196,192,24,131,136,177,140,242,21,234,42,32,127,61,117,21,47,33,132,240,133,0,216,167,142,135,58,46,251,249,19,0,217,71,135,67,45,200,241,75,3,119,154,204,223,9,128,223,93,62,2,52,229,197,36,239,122,193,90,68,245,19,118,107,143,49,98,36,35,122,147,179,202,222,70,146,157,114,137,75,16,252,108,66,173,85,99,141,231,121,231,32,11,88,219,36,249,208,223,156,167,161,93,216,180,97,151,79,92,2,153,181,167,202,135,120,229,89,235,199,217,13,189,45,183,192,211,135,36,127,229,114,167,114,141,249,66,220,23,185,67,73,60,4,67,14,249,54,76,40,77,241,189,12,97,219,43,87,208,130,115,202,191,211,41,202,170,34,199,19,180,115,240,39,36,237,156,219,250,49,18,50,235,169,152,75,142,16,152,82,36,203,85,49,22,63,76,189,22,175,96,185,17,212,46,197,19,98,94,249,161,137,249,87,48,232,211,234,168,195,89,155,89,82,46,144,157,52,45,78,89,61,90,218,176,236,21,50,84,154,88,14,33,169,7,157,118,249,36,205,31,228,6,232,79,93,67,97,70,59,149,182,200,119,221,174,175,198,114,29,31,76,171,4,220,184,30,184,92,179,133,106,34,103,159,108,149,75,73,187,59,255,181,45,139,11,16,243,29,239,41,173,35,66,116,188,235,90,237,86,165,172,50,240,229,127,186,183,138,69,195,74,30,133,38,56,31,168,224,141,221,78,61,11,24,1,238,32,200,100,36,135,2,33,64,74,64,228,131,73,175,248,73,104,76,129,153,181,167,13,216,21,224,12,16,12,168,194,68,10,86,130,201,218,85,117,0,58,214,171,219,90,76,60,24,230,185,95,139,178,92,101,65,205,148,235,40,0,191,29,184,150,203,171,73,71,23,36,235,165,189,219,1,50,123,224,141,235,44,59,73,208,199,114,147,19,155,121,25,52,10,14,226,224,195,0,244,121,59,148,30,53,125,166,81,229,1,211,92,244,147,69,179,89,54,79,221,91,105,243,213,21,236,22,185,1,4,7,150,30,150,18,182,44,24,53,32,221,138,147,3,202,38,146,135,43,20,164,31,105,66,33,27,98,250,23,199,44,209,144,92,24,1,220,107,128,171,246,55,52,145,112,172,251,58,200,198,75,211,235,147,141,101,31,61,101,227,215,227,141,170,220,50,155,39,68,205,117,102,109,150,242,186,228,196,3,115,57,220,86,201,242,58,104,104,176,220,47,215,153,70,121,226,150,103,131,43,173,205,108,225,151,116,219,190,126,5,243,148,241,49,188,235,38,250,133,38,26,87,66,97,52,66,153,75,249,76,197,124,241,6,83,31,236,147,193,179,227,156,242,8,149,186,169,243,21,130,226,8,82,53,158,51,10,116,57,22,217,173,3,81,35,50,7,198,206,152,21,24,15,22,129,114,254,56,187,254,113,182,184,19,151,181,40,37,86,162,68,40,89,253,90,195,47,194,239,96,116,236,63,21,108,192,24,24,11,75,84,102,210,45,50,87,147,194,148,237,86,238,245,101,6,145,193,46,145,45,140,254,87,42,0,255,1,255,127,114,227,179,133,245,203,58,207,198,107,171,95,104,97,234,58,113,66,93,80,34,249,156,212,115,242,215,179,2,171,67,48,24,103,102,87,72,85,79,128,112,183,193,32,3,185,201,20,253,101,215,238,156,250,22,122,94,6,198,35,47,211,18,103,141,13,106,152,218,102,238,227,226,196,245,154,14,154,54,14,133,43,235,50,179,194,104,73,151,32,48,75,168,171,219,191,180,199,43,14,40,40,34,32,144,128,94,42,6,10,146,71,229,81,9,111,41,203,229,40,77,127,167,213,10,172,34,111,241,130,1,2,126,168,40,4,104,61,111,193,186,77,195,86,46,59,61,224,1,50,25,122,3,44,252,192,240,229,174,132,47,203,123,4,249,50,31,201,241,30,178,20,220,81,39,7,121,49,45,128,134,34,176,22,0,193,9,140,217,9,31,186,205,70,251,190,168,142,178,172,86,85,4,9,26,3,192,54,0,221,1,124,139,210,86,81,34,161,204,21,180,154,23,160,44,81,89,196,132,236,19,37,96,66,209,209,17,166,51,61,45,42,176,28,86,87,56,125,161,165,11,0,156,127,129,55,157,153,176,110,115,243,3,24,50,55,47,240,241,10,217,249,103,112,217,43,99,231,133,235,70,146,2,106,33,98,226,77,208,88,139,215,137,133,116,176,163,214,197,72,1,2,101,38,189,55,39,35,107,2,78,163,107,40,198,53,157,186,253,32,158,85,90,136,76,194,145,198,169,154,165,51,38,93,205,146,137,218,203,6,4,159,50,103,118,226,28,40,205,81,151,55,205,184,214,187,188,153,119,106,32,220,50,63,212,98,238,194,196,12,141,88,20,118,134,85,213,133,133,231,78,174,0,238,30,230,210,68,46,22,214,164,130,194,244,124,33,43,1,251,88,195,91,100,94,23,254,35,78,150,60,68,240,102,159,173,201,160,4,157,176,228,252,142,184,151,88,155,228,43,17,124,224,102,48,225,140,231,50,11,11,47,18,188,129,201,97,4,209,135,52,107,230,158,173,37,47,73,227,110,165,241,216,125,47,52,165,179,204,213,138,168,55,226,145,220,29,10,30,75,198,248,104,95,200,13,40,204,195,12,186,44,45,206,128,5,224,145,220,137,70,51,231,92,169,203,50,194,190,56,155,132,172,166,134,43,209,210,2,100,144,124,193,87,45,176,249,203,181,104,14,17,169,163,215,210,6,189,148,255,134,235,137,141,5,188,172,207,13,204,13,227,238,1,14,148,95,54,16,68,87,200,210,100,16,139,143,201,65,152,131,15,178,17,120,54,5,150,101,220,130,98,190,148,206,161,32,214,203,161,16,232,192,189,53,227,76,35,212,93,254,36,51,144,45,168,99,9,213,240,18,64,250,234,176,151,59,3,187,121,88,113,11,250,75,177,105,174,195,12,190,229,243,78,211,6,72,45,232,28,59,154,199,99,148,53,103,255,61,93,149,73,232,44,249,16,75,53,254,103,144,91,236,111,18,249,177,196,209,201,144,16,175,122,107,57,28,105,66,3,210,16,65,39,28,226,214,120,3,154,200,226,253,135,204,154,131,143,53,114,113,186,84,185,114,102,25,159,66,37,104,0,132,51,67,255,180,226,2,3,102,115,115,231,176,101,195,147,115,28,154,84,147,69,77,182,153,177,1,221,85,19,203,79,150,93,138,82,132,218,44,186,208,91,80,9,217,16,161,122,34,48,179,2,17,142,209,224,180,102,160,67,56,95,74,225,121,20,100,118,89,28,125,70,94,241,208,102,232,149,78,229,185,33,149,150,100,205,221,29,164,191,213,183,182,157,191,6,143,103,100,223,145,132,66,56,26,234,82,73,80,67,167,42,49,107,41,94,37,139,153,114,38,210,218,80,223,153,103,191,218,248,57,94,53,194,74,11,79,13,216,197,201,21,140,118,22,198,100,115,91,95,164,23,10,108,139,54,53,228,170,210,180,74,193,252,180,64,10,3,153,12,4,180,33,176,29,13,46,116,186,35,229,149,224,79,70,145,77,250,224,203,130,149,63,55,217,202,48,206,145,243,44,21,225,36,34,74,249,157,41,13,126,196,54,189,6,166,105,194,21,17,34,87,208,236,181,10,253,216,140,26,37,43,43,135,13,64,214,237,169,152,115,229,3,48,27,117,83,129,212,167,55,222,80,183,230,180,77,27,124,185,65,155,18,68,192,84,57,244,238,200,101,150,2,168,157,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,82,55,120,215,102,79,239,84,137,54,50,77,101,250,171,100,96,94,61,112,26,95,19,40,138,208,97,13,233,16,223,22,171,27,142,242,83,20,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,46,234,68,161,190,248,189,47,117,55,131,205,124,213,73,229,211,244,66,101,78,215,101,189,118,33,238,181,180,180,130,22,200,176,245,79,119,13,225,231,73,14,39,153,153,45,68,83,76,71,71,238,233,179,41,123,226,59,167,204,238,100,147,83,153,90,246,20,39,98,161,20,42,127,91,140,12,199,240,164,54,210,106,35,192,138,77,87,214,68,59,207,138,55,149,150,66,116,98,76,95,230,81,26,70,166,178,59,149,18,54,228,50,17,213,70,232,77,98,241,138,240,156,86,158,194,5,40,196,173,129,23,2,14,69,169,136,215,146,142,2,145,129,199,210,255,67,72,38,54,2,69,138,121,203,156,7,235,154,47,5,224,203,211,178,204,134,2,93,158,112,196,91,200,169,137,148,190,45,4,86,32,109,46,179,214,157,176,35,202,166,161,153,211,169,180,152,235,86,10,107,5,181,34,202,85,105,15,16,150,27,204,21,206,25,21,191,234,140,13,167,73,32,126,5,214,155,180,253,93,240,211,223,238,70,106,68,149,21,53,110,201,237,46,223,31,238,87,180,59,204,93,151,111,169,80,72,134,239,48,185,136,106,43,136,161,162,143,140,96,236,108,247,214,52,147,15,217,240,169,95,144,35,187,211,61,180,147,4,158,208,37,197,252,130,232,253,160,9,177,164,77,33,143,2,34,14,52,214,138,202,180,133,227,240,102,108,105,110,72,106,207,24,70,154,175,50,67,145,114,19,103,219,177,200,118,223,118,235,231,49,182,13,195,128,248,100,46,14,147,61,82,1,44,68,38,90,213,189,216,22,52,7,107,146,94,39,17,182,130,35,247,131,187,70,241,190,58,160,68,59,170,64,234,219,206,91,156,118,21,165,74,82,186,24,135,236,183,213,9,241,212,59,126,8,19,173,149,91,123,104,246,12,37,76,182,74,138,241,181,6,103,119,34,162,113,23,86,61,14,221,240,6,21,139,72,169,40,120,193,25,163,122,57,138,118,43,136,206,212,68,238,27,155,52,64,141,150,200,96,178,180,48,0,216,76,228,22,186,114,209,89,153,186,142,220,230,177,252,31,188,172,206,144,178,246,50,53,7,231,221,42,69,206,126,253,70,130,3,182,44,148,166,160,203,140,79,11,194,181,171,78,137,138,238,171,34,92,4,84,248,70,204,25,169,34,94,150,201,170,212,134,221,232,50,138,78,179,243,197,85,161,91,116,190,65,43,92,149,198,220,109,40,62,179,144,102,137,50,28,68,130,170,172,211,165,185,166,45,68,55,178,15,5,169,234,130,38,143,242,88,145,219,56,184,35,248,152,54,34,97,150,26,27,201,50,140,108,102,66,77,212,110,242,218,149,21,95,227,214,29,173,55,172,82,101,203,102,76,58,7,31,147,86,149,88,148,91,84,175,18,198,66,59,61,119,142,183,20,26,206,20,158,230,67,99,99,215,120,65,146,106,170,232,179,42,30,57,191,120,99,162,144,184,176,103,220,50,198,139,24,49,227,203,140,78,141,191,76,126,194,56,133,144,126,164,249,48,96,222,32,240,13,53,175,172,66,184,52,72,102,225,11,60,204,131,32,185,208,252,150,34,55,10,223,78,50,43,2,220,170,148,199,157,143,93,133,174,78,233,44,107,115,50,11,80,233,108,67,140,27,130,77,87,70,144,87,96,37,230,74,178,115,88,162,214,149,186,84,10,84,136,84,33,99,157,117,166,177,233,212,166,98,10,234,56,155,52,55,133,67,242,97,131,133,143,12,8,8,60,113,20,205,47,86,15,101,194,206,23,100,109,72,35,120,230,253,206,178,31,159,68,120,227,3,18,81,21,129,214,37,162,158,62,59,27,152,69,180,120,249,34,223,217,14,118,50,10,179,86,150,166,245,142,211,127,132,3,145,144,247,164,200,19,201,179,138,4,140,53,148,240,1,189,76,163,189,185,161,228,33,92,159,48,123,150,203,8,17,53,124,97,103,98,44,86,200,188,195,214,32,44,94,152,239,229,249,61,84,65,183,239,115,178,116,178,103,165,109,173,232,24,72,102,165,170,149,242,42,104,36,239,51,159,252,6,152,138,58,33,209,173,74,120,42,105,42,162,64,18,22,140,44,71,23,108,2,192,188,196,85,54,15,115,8,97,187,30,51,253,82,29,51,240,255,150,158,201,157,116,208,2,100,166,231,147,186,46,119,43,196,253,173,59,243,177,202,141,117,106,202,255,154,224,58,187,49,147,87,147,213,120,178,114,235,34,66,198,47,89,125,203,40,44,163,136,10,24,5,114,42,112,101,214,175,178,135,29,198,173,88,185,209,25,178,98,177,213,60,242,52,122,148,1,123,78,176,111,69,227,122,145,61,51,130,227,6,57,117,116,62,31,234,213,153,66,53,220,6,208,89,247,179,253,63,57,8,100,255,129,228,94,144,253,15,128,208,40,197,138,34,12,55,31,243,124,16,189,117,24,40,72,191,16,133,178,71,139,204,159,54,117,34,224,85,199,208,240,53,133,247,73,220,81,101,195,42,171,134,105,8,122,36,221,235,78,157,76,105,78,236,41,105,150,110,43,155,138,78,170,229,98,27,94,119,69,83,198,220,118,229,200,43,215,206,75,39,141,226,144,176,61,47,59,104,223,231,147,106,28,124,0,142,148,129,18,86,216,105,62,52,87,108,178,70,44,109,228,215,160,82,173,241,231,148,108,210,102,201,54,38,167,62,106,60,79,26,31,140,27,174,26,81,207,215,174,80,93,200,102,185,43,76,84,184,105,96,107,69,1,23,60,113,72,137,23,102,254,206,52,109,217,230,13,181,6,130,167,21,25,200,73,230,81,10,135,127,242,149,95,78,197,226,104,57,22,223,66,209,22,30,244,13,85,31,17,212,21,197,53,169,69,111,5,1,54,142,120,89,181,83,149,63,73,59,212,153,253,169,151,45,86,46,174,122,140,166,249,112,151,200,163,109,165,152,95,34,81,97,36,171,200,143,242,23,84,151,180,164,177,204,42,205,208,1,101,97,50,86,111,28,207,146,107,90,60,71,83,172,107,222,114,65,12,58,223,13,11,154,153,165,194,218,48,239,211,241,70,204,59,173,176,87,137,253,202,204,210,85,160,87,242,25,140,186,160,43,238,60,105,73,139,127,102,231,193,153,92,60,147,15,104,1,206,6,124,35,220,80,31,220,172,195,158,90,117,217,138,3,33,251,24,222,240,65,236,253,23,221,183,49,251,62,22,40,228,206,221,204,61,120,87,128,137,98,129,16,95,50,154,106,46,53,248,189,167,8,147,28,47,254,249,253,255,61,23,160,111,58,101,45,35,119,199,41,42,144,235,33,45,135,199,197,193,214,143,213,165,104,63,79,57,227,137,81,16,232,20,18,123,58,211,77,238,112,196,253,170,146,40,122,198,48,14,226,4,211,236,87,192,152,144,135,125,59,240,236,147,6,26,105,23,2,24,200,172,188,128,172,221,230,189,199,42,52,112,56,196,142,90,74,110,182,32,105,91,8,0,87,38,231,194,1,137,202,74,45,64,63,151,122,20,154,152,194,133,172,162,18,101,227,30,141,254,194,55,73,182,149,170,254,201,179,100,74,89,78,108,33,178,187,226,76,45,17,228,141,155,84,25,150,231,153,192,25,216,27,57,140,149,225,204,33,207,81,67,129,148,185,20,108,142,104,25,214,12,100,10,192,129,231,228,193,234,236,148,237,61,231,127,231,33,164,216,86,104,14,210,168,169,247,99,202,83,196,183,134,134,20,98,15,72,32,253,176,167,39,33,63,41,211,248,167,204,200,20,79,73,187,147,238,98,30,97,161,41,41,179,103,3,5,168,83,142,98,184,2,211,180,185,101,154,65,50,138,8,58,138,20,243,25,28,178,161,85,164,248,76,48,170,96,27,41,161,21,23,3,112,111,39,128,0,165,90,182,106,1,150,133,25,231,145,19,59,92,1,57,51,51,133,38,77,7,215,154,201,12,109,154,245,23,56,208,197,84,235,50,255,91,182,172,118,4,77,181,5,206,212,188,213,147,179,156,157,166,67,15,215,246,166,208,187,251,131,124,27,152,174,128,191,186,57,146,238,161,236,203,176,11,251,141,202,247,118,5,36,65,173,201,184,180,131,66,167,203,210,172,76,80,59,139,117,166,155,229,168,107,150,23,54,44,254,58,104,196,165,217,94,37,174,183,119,138,43,8,23,121,151,41,119,45,41,144,84,83,163,232,29,16,111,153,109,57,47,52,113,240,70,185,185,72,86,221,123,113,111,134,189,187,182,189,11,2,200,72,34,98,145,136,101,10,18,138,56,106,5,141,21,84,87,241,97,197,153,29,102,13,232,55,161,230,136,183,215,112,123,65,255,133,64,52,55,45,16,222,238,131,102,179,212,52,134,5,99,23,18,26,200,108,71,133,137,72,175,144,241,68,232,11,43,16,96,87,132,101,105,213,136,137,219,34,22,107,78,173,33,6,126,162,128,24,101,220,176,202,53,72,37,151,226,105,173,42,171,233,35,82,216,152,50,71,166,32,90,26,162,189,145,179,116,205,150,62,117,192,84,72,228,140,90,164,226,245,124,143,40,134,165,193,175,189,239,55,111,249,56,37,205,13,234,237,83,247,184,247,172,16,51,135,208,138,54,50,86,9,40,135,59,39,247,85,1,79,166,111,187,18,50,128,253,17,210,53,116,12,113,161,198,145,102,119,52,189,146,252,200,20,84,182,33,241,21,29,227,161,144,143,125,111,187,45,117,147,220,54,102,124,13,169,251,103,215,181,111,179,10,129,106,10,24,201,90,84,78,156,165,123,163,49,82,201,36,130,87,98,88,68,71,56,253,17,103,144,24,79,61,221,186,237,92,211,255,50,194,48,9,107,115,133,28,250,92,110,35,141,225,222,120,131,158,148,193,203,121,14,196,213,224,32,198,117,190,154,46,181,29,39,72,168,128,18,224,168,161,180,162,114,146,224,35,233,154,100,130,248,200,204,242,50,175,41,179,60,210,75,7,101,72,163,11,121,149,201,54,62,81,202,239,103,178,141,103,94,249,117,32,91,112,211,23,200,43,127,122,9,69,19,94,117,94,121,48,146,82,188,245,153,7,231,182,254,19,44,135,85,109,158,28,132,39,171,85,253,164,177,248,176,51,90,33,227,81,57,151,2,145,81,23,215,248,59,101,252,205,21,199,229,0,20,181,214,107,170,243,203,52,89,204,44,122,40,118,109,54,71,175,219,43,21,108,61,53,36,10,150,123,98,62,136,23,100,93,68,133,114,102,82,113,97,88,113,61,135,35,202,110,171,72,179,148,125,38,191,21,43,64,79,140,156,154,58,151,138,49,49,183,217,152,79,117,125,146,163,174,33,59,182,182,4,134,143,202,0,47,51,111,246,238,153,143,19,101,136,39,203,135,168,100,91,4,244,1,153,248,231,80,236,44,42,104,207,87,190,151,153,171,243,172,202,166,81,104,56,218,25,116,152,36,127,142,134,40,8,83,131,106,25,20,18,140,101,163,82,226,230,114,224,169,236,198,112,96,158,86,137,30,129,80,28,1,127,99,230,108,14,194,44,97,222,194,92,82,73,236,197,120,213,111,145,180,140,117,153,3,20,52,80,18,161,168,1,179,0,134,5,72,35,16,71,40,111,55,66,92,195,219,169,158,238,43,253,140,125,26,107,63,171,126,33,50,189,99,137,11,215,43,109,95,218,244,67,69,22,35,80,178,2,103,86,154,115,229,11,185,32,114,14,48,67,123,22,230,199,138,207,185,188,116,210,44,152,65,154,92,142,115,128,111,22,105,137,204,151,133,21,71,124,17,210,99,238,180,54,252,71,87,244,6,146,14,171,234,109,180,170,218,223,176,168,210,155,215,39,203,72,217,244,167,44,243,90,24,38,243,70,35,7,209,25,243,141,224,248,89,181,57,229,226,225,192,128,228,208,198,53,5,56,51,143,27,23,44,17,142,57,43,161,220,33,229,210,11,253,66,236,138,198,145,147,119,29,151,16,247,22,197,114,76,250,166,213,5,232,47,165,255,138,45,48,61,145,154,206,80,21,87,44,141,81,192,80,103,178,63,157,119,86,176,153,120,198,206,183,206,99,154,39,186,91,136,102,165,218,52,6,254,47,169,221,161,147,51,231,213,233,88,99,127,39,116,141,49,59,218,199,189,130,67,54,119,24,234,215,50,15,113,182,186,249,172,19,62,21,96,198,121,67,213,230,151,152,206,205,148,75,202,185,164,89,98,2,236,134,174,4,121,54,194,65,154,99,193,220,22,68,55,0,185,140,195,186,211,213,49,239,137,102,219,212,189,85,103,185,44,4,175,20,60,185,61,180,135,111,218,239,153,56,150,118,172,57,50,187,204,86,51,163,17,216,87,115,114,220,69,181,245,106,129,104,3,150,239,169,157,127,121,141,68,251,153,237,247,85,105,57,174,224,148,33,140,32,75,47,62,220,220,160,78,90,230,190,165,82,31,149,183,195,49,138,150,200,237,203,18,4,115,102,41,164,2,15,109,214,11,106,128,112,74,249,137,204,64,204,222,103,230,142,230,90,12,212,146,70,50,247,60,62,214,236,112,165,254,152,124,11,6,19,110,241,180,85,77,65,119,119,20,79,233,120,103,230,190,105,222,42,23,113,247,127,95,0,144,107,42,67,8,195,215,210,35,58,138,51,18,130,92,89,220,2,151,248,182,223,193,182,4,209,219,179,95,250,106,208,252,64,214,178,226,217,236,61,5,1,222,72,101,8,119,64,10,78,149,213,89,57,6,57,27,137,245,231,154,46,167,66,37,160,43,143,6,94,66,109,130,246,192,232,5,150,21,10,9,33,165,72,53,13,213,1,154,144,173,122,78,187,169,153,168,88,153,65,10,149,101,86,179,20,167,32,212,76,247,12,226,170,135,177,229,211,76,125,152,104,245,57,54,79,83,143,77,181,22,175,48,141,84,110,234,65,139,178,54,28,139,134,84,108,20,9,64,134,77,119,225,158,201,225,140,47,138,57,119,57,253,149,1,189,251,214,155,234,38,180,160,99,156,163,148,65,97,1,15,44,173,239,21,93,29,218,186,83,63,53,87,4,203,70,213,48,53,223,62,149,96,0,136,116,45,116,18,148,160,54,202,208,23,236,117,219,128,33,61,153,241,191,148,113,52,55,165,51,229,106,115,177,29,13,90,181,62,74,93,9,95,216,16,209,131,196,229,180,34,11,56,166,196,215,241,242,8,74,178,173,76,184,192,226,139,74,218,30,182,99,67,29,72,78,41,182,201,167,221,55,28,230,123,59,222,19,17,194,226,111,194,129,202,138,82,72,35,132,204,24,139,130,156,130,125,197,115,36,4,130,41,239,29,114,239,224,168,169,198,179,131,12,93,235,186,187,159,155,130,59,183,112,7,5,180,68,207,39,23,220,246,113,165,5,223,152,102,159,212,149,163,79,80,103,74,11,242,139,15,125,167,253,111,59,81,49,197,56,0,84,209,61,205,33,129,120,133,141,209,2,203,129,251,27,154,171,21,161,49,68,130,251,148,79,243,1,148,155,43,248,176,193,153,52,78,97,142,224,52,0,0,196,221,52,69,37,223,223,244,194,211,121,13,218,92,106,49,5,158,135,97,141,38,197,16,92,140,6,58,60,170,33,130,188,148,52,43,177,83,138,88,42,6,88,67,18,19,53,198,147,112,25,199,65,192,253,138,219,189,65,117,131,68,140,172,94,9,185,92,132,235,128,119,42,76,74,97,100,58,110,167,101,138,128,227,167,32,100,174,80,92,207,72,103,62,53,225,40,199,72,118,75,238,23,182,10,103,11,54,80,97,100,54,13,5,92,0,201,244,171,158,84,97,105,211,100,164,12,91,118,67,69,24,176,116,80,105,219,209,228,174,112,220,5,198,100,186,183,200,51,25,61,111,91,50,235,73,185,103,213,126,194,28,11,240,82,200,201,13,255,31,66,202,177,223,150,10,222,134,119,139,105,139,188,93,199,253,49,165,169,12,164,21,240,97,207,37,187,64,72,18,18,252,45,113,31,243,38,71,40,4,72,123,81,43,113,40,77,71,6,59,106,9,77,23,165,208,158,4,130,115,118,199,89,162,84,82,76,186,140,0,81,132,173,81,36,190,250,13,42,197,196,140,28,7,193,253,114,14,28,247,241,226,177,116,169,210,171,222,110,230,7,8,17,171,214,16,110,102,248,14,221,97,21,226,76,74,64,129,174,230,126,54,215,51,76,146,76,91,199,62,88,214,101,14,35,54,254,1,220,174,23,192,128,33,205,134,170,160,164,144,230,219,195,252,247,38,215,2,43,94,0,80,19,233,72,35,102,215,133,95,61,110,76,177,97,29,171,147,134,4,232,64,24,226,68,16,179,133,38,39,101,51,179,157,71,59,93,179,196,135,67,144,34,219,149,124,144,16,209,4,1,55,226,71,96,34,230,197,180,197,55,140,178,103,177,5,25,103,105,133,105,84,96,157,140,225,73,182,238,193,60,216,18,169,205,44,186,188,235,66,123,136,165,1,255,160,73,84,167,70,175,205,81,225,241,126,119,230,181,109,217,20,89,96,208,33,225,118,166,203,165,140,100,38,92,158,116,222,179,77,123,75,78,199,78,60,3,113,3,38,122,17,59,208,176,31,149,71,105,24,25,2,203,192,54,145,209,183,74,141,133,145,234,184,173,134,39,51,151,83,229,76,214,217,59,154,92,153,110,15,124,116,78,17,98,160,35,52,2,16,192,75,78,172,54,154,108,211,206,153,107,188,69,71,7,128,30,230,240,40,103,178,55,25,114,242,235,123,236,231,28,159,41,16,184,206,124,26,142,192,61,252,83,29,209,66,246,15,201,199,198,236,146,228,64,138,154,25,88,72,44,137,115,18,13,155,210,177,51,13,215,211,49,71,13,15,229,8,107,34,4,111,34,65,175,200,126,141,132,168,46,66,28,109,213,161,218,14,35,27,202,110,17,122,69,249,76,16,18,193,88,149,75,225,246,193,92,145,55,165,9,138,98,111,157,238,169,248,152,139,98,8,55,176,0,13,59,1,55,103,22,94,97,208,201,213,3,226,165,26,106,90,73,46,211,101,54,234,152,107,129,231,215,97,21,88,101,1,58,70,161,99,39,106,137,171,78,60,111,164,248,70,214,191,197,31,17,19,101,213,65,202,33,156,203,196,22,172,10,250,204,199,53,236,94,175,67,41,10,147,137,100,168,116,3,51,162,43,172,106,201,100,6,52,199,78,33,192,47,208,227,129,197,14,25,70,16,88,195,89,75,97,11,156,189,177,178,154,124,148,18,33,163,192,44,100,69,142,198,2,10,166,53,88,171,84,207,120,2,70,118,156,76,134,227,25,140,87,176,186,45,48,134,81,125,34,152,34,41,107,32,120,144,156,71,48,230,138,209,228,12,108,84,67,250,19,111,72,149,57,112,115,46,30,97,108,20,205,41,66,110,88,87,109,77,41,115,11,12,192,68,83,29,22,205,102,64,29,84,35,171,255,158,188,150,223,202,217,175,27,12,89,229,218,90,217,176,10,144,170,104,245,193,91,203,28,23,143,226,222,234,23,13,175,99,68,140,72,139,201,156,180,93,167,250,135,198,102,220,14,17,94,67,252,148,198,98,238,34,145,204,77,127,197,137,230,76,60,129,36,9,117,71,202,158,102,244,8,240,80,149,220,85,17,222,104,203,27,157,122,163,121,239,245,243,89,63,212,107,145,26,101,83,195,75,242,42,44,11,83,53,244,0,73,144,100,216,176,22,238,104,250,210,82,112,16,168,147,41,60,57,136,141,244,245,78,21,162,126,63,182,152,222,48,152,8,98,255,166,193,63,84,117,4,178,65,222,139,236,139,55,43,191,48,206,180,168,50,119,178,131,178,129,139,112,247,10,127,111,225,158,168,50,45,105,224,170,38,191,168,215,138,2,14,172,113,104,169,122,60,186,145,185,255,22,251,95,84,60,117,170,169,164,189,186,165,229,98,54,179,101,69,3,179,186,202,210,50,41,0,227,198,107,3,212,226,249,83,77,200,14,108,113,204,143,165,232,137,70,173,177,205,78,50,193,252,86,118,152,217,139,170,127,235,148,116,51,39,157,199,204,81,230,199,175,77,188,160,144,178,41,4,233,47,215,93,81,176,97,92,59,246,240,137,28,68,171,165,170,202,172,202,104,52,220,8,95,62,220,145,153,141,86,195,166,184,159,18,234,105,80,53,121,139,113,89,252,105,206,229,170,4,8,172,243,113,224,28,159,54,107,80,176,155,165,78,38,88,32,176,209,55,103,229,104,26,182,39,240,70,13,239,20,153,171,78,163,8,213,118,167,12,202,114,76,35,236,116,70,173,198,242,197,74,163,78,173,20,21,79,157,208,4,211,80,101,172,123,6,188,99,212,89,61,216,41,16,131,134,113,77,13,153,186,16,186,21,20,136,81,202,232,4,145,86,84,137,90,70,86,67,118,130,10,172,148,98,254,100,102,21,94,112,186,18,74,103,57,123,168,73,120,172,71,66,104,9,165,210,48,239,3,14,58,77,9,180,173,96,98,21,87,26,59,36,169,254,170,34,13,54,180,168,240,228,170,199,224,41,8,119,65,182,167,141,170,92,58,229,225,182,88,6,55,101,216,33,54,53,62,117,240,122,43,172,115,102,174,147,42,17,99,175,21,8,93,219,84,205,169,213,160,137,129,19,97,13,125,49,115,116,163,163,172,124,243,234,49,156,1,58,27,106,163,30,113,85,221,216,104,37,27,19,111,188,126,231,121,68,43,188,16,25,19,123,33,120,225,139,237,71,109,212,69,48,69,157,169,79,117,121,116,39,169,250,102,232,66,64,167,12,115,102,255,147,198,69,165,184,176,196,124,158,193,255,165,115,141,176,52,164,153,75,110,124,139,170,255,81,246,80,154,202,246,92,234,218,53,159,51,71,72,76,43,161,168,221,102,32,43,121,173,134,42,148,79,80,78,203,65,182,60,51,160,199,49,236,204,98,66,164,136,212,117,181,76,1,101,69,183,196,163,203,113,57,95,172,114,142,225,84,152,102,77,189,148,109,219,19,73,129,56,4,213,20,113,147,150,147,149,184,210,206,203,173,113,22,43,206,44,197,221,5,168,139,100,105,224,33,18,210,1,83,36,224,42,15,231,21,110,195,125,238,202,139,61,133,31,74,129,14,196,197,206,80,8,247,207,182,238,57,213,54,102,82,129,68,1,113,77,140,92,17,55,173,79,174,53,143,253,164,218,17,161,116,109,86,98,180,154,14,155,215,68,215,65,4,193,238,64,228,10,233,12,10,131,20,153,53,230,230,10,183,199,252,32,197,176,77,72,182,100,175,236,3,94,72,64,166,18,60,3,115,185,145,146,100,195,209,73,213,70,195,90,2,216,12,188,14,253,64,121,198,110,9,137,131,126,96,26,44,122,195,67,213,232,55,138,255,120,123,152,49,26,139,196,12,53,164,139,145,250,108,197,32,209,153,45,90,235,6,223,17,132,164,241,34,104,228,161,36,51,37,161,202,176,69,112,122,45,170,172,162,38,170,154,164,172,109,42,30,13,177,191,164,52,83,100,220,202,140,153,83,77,234,199,168,160,92,83,99,54,202,206,78,39,218,105,78,139,40,130,232,214,196,247,5,241,165,242,138,149,163,108,248,206,200,157,246,252,171,51,105,196,226,176,88,7,113,130,51,17,242,28,195,206,222,121,216,32,67,119,176,106,76,151,30,203,1,78,78,186,189,33,164,105,170,70,149,206,242,178,238,75,72,134,168,198,92,213,56,6,133,209,65,41,173,246,217,108,38,88,113,226,184,195,215,131,109,9,141,201,97,213,46,113,203,168,211,88,126,26,251,80,99,69,130,48,58,53,238,114,33,247,156,38,39,91,190,19,251,240,204,166,220,157,94,175,191,162,20,239,53,231,89,187,190,170,129,191,225,235,80,253,33,58,159,137,21,191,138,40,129,185,215,240,138,34,191,55,53,36,123,68,49,89,180,154,143,76,113,35,89,238,200,54,147,245,85,218,207,253,131,60,84,5,64,18,18,91,33,146,165,204,85,81,116,93,130,186,97,194,168,86,14,234,157,116,93,32,245,162,161,95,50,131,157,81,161,177,22,80,166,127,118,213,160,13,210,241,10,45,73,239,76,254,157,49,130,123,1,146,21,117,146,89,99,89,116,154,141,222,179,224,232,138,200,27,93,70,148,215,73,158,95,19,249,51,80,228,133,233,44,84,149,244,55,236,129,13,229,206,10,19,45,31,196,229,16,27,118,249,6,87,29,184,239,198,28,20,237,69,43,70,165,110,181,123,168,104,252,69,170,83,9,141,79,182,131,186,13,201,138,132,236,97,33,35,90,21,245,170,64,216,202,141,157,128,217,9,162,72,185,103,182,0,110,99,185,214,230,130,147,135,152,126,152,44,88,173,52,14,136,40,231,41,247,199,34,59,56,81,54,134,27,187,74,202,109,119,75,207,19,36,134,18,74,78,178,146,46,119,101,34,170,228,30,5,252,94,5,192,74,2,82,96,65,147,208,169,26,146,54,98,85,103,81,103,178,155,239,186,46,205,242,245,171,28,38,65,96,82,68,37,137,115,220,94,86,74,193,52,234,130,94,171,208,105,31,170,150,162,3,241,186,206,61,52,52,48,163,45,185,218,32,235,143,176,127,148,121,185,17,64,150,195,204,76,155,236,238,115,118,41,119,112,155,113,103,60,59,202,217,144,67,29,184,25,203,238,78,188,117,154,84,106,114,140,161,42,143,21,154,216,105,110,218,5,43,183,171,125,234,250,173,107,74,77,243,74,44,230,193,147,52,185,34,24,31,192,52,3,36,201,48,132,217,214,215,93,255,155,248,128,46,182,178,9,192,44,65,154,113,170,0,219,55,2,150,184,105,93,58,225,121,231,139,201,74,121,222,156,237,117,101,123,213,33,55,243,210,206,94,55,201,105,37,154,213,106,214,180,91,248,0,214,28,79,169,137,119,233,136,26,82,149,69,136,44,188,68,209,76,187,252,65,193,179,202,167,97,230,132,135,84,82,47,61,150,169,111,166,187,223,176,121,91,183,123,191,198,161,214,192,135,86,104,76,179,146,166,238,230,228,186,33,171,247,126,235,156,228,106,8,91,27,67,192,87,147,118,81,206,122,98,160,54,15,112,38,81,89,57,159,66,104,251,40,219,26,136,155,98,117,99,52,239,13,156,157,49,123,197,254,13,137,232,232,72,195,160,84,46,134,6,175,54,29,81,194,9,183,119,90,1,183,22,148,43,196,55,27,163,238,157,21,113,60,130,31,9,246,157,220,79,106,129,53,221,65,227,167,218,57,179,6,77,79,171,11,114,85,81,179,171,37,4,65,147,78,11,1,18,137,161,45,68,87,84,103,157,126,173,168,224,146,146,46,184,20,180,46,7,238,145,176,46,187,23,249,158,221,22,59,199,198,170,33,105,148,13,141,66,162,24,142,139,105,153,103,229,206,210,4,189,191,10,251,179,4,127,151,85,175,24,83,141,83,205,65,51,58,208,137,72,63,206,124,114,184,189,118,90,182,145,172,201,129,243,189,220,151,93,14,119,141,217,229,80,113,138,18,154,152,49,52,100,52,209,198,87,152,211,4,51,241,204,105,242,42,114,154,204,20,96,94,9,215,92,116,140,73,101,31,27,32,103,117,75,213,115,81,133,213,107,226,90,25,107,24,93,230,185,94,7,77,203,223,210,141,161,219,0,218,152,238,38,254,115,122,45,186,12,61,115,54,205,236,13,197,171,115,150,179,49,203,24,244,95,100,156,68,21,95,248,97,81,7,110,231,53,189,55,161,82,65,63,93,58,37,100,17,226,108,74,251,215,136,121,158,233,220,95,83,58,119,43,243,120,71,62,119,36,105,67,159,158,173,93,171,150,20,125,254,243,57,254,121,182,126,177,214,79,71,109,192,24,69,106,115,64,181,135,223,176,176,131,8,95,95,228,198,144,124,62,255,141,251,82,22,104,45,55,70,55,63,201,157,219,226,29,191,96,200,191,186,138,198,115,43,63,73,216,147,132,61,91,95,109,53,29,11,223,220,63,92,191,81,223,127,200,43,15,215,115,139,238,126,176,194,75,112,221,89,64,230,41,68,127,26,33,218,169,1,44,207,82,254,136,113,212,243,136,47,113,4,255,187,176,165,207,35,30,229,8,65,174,55,215,246,121,196,243,136,47,118,196,39,83,148,28,63,149,12,253,209,21,48,63,74,67,35,126,179,191,233,157,183,176,211,252,150,67,254,82,186,161,211,151,210,13,153,225,253,133,64,151,65,81,185,49,214,254,147,220,25,101,86,62,191,30,238,83,221,248,215,106,195,52,28,82,140,170,203,155,56,118,72,40,192,41,226,54,63,78,4,232,59,142,19,203,243,237,227,196,71,70,14,190,125,156,154,126,63,124,156,152,133,31,251,56,45,88,30,142,219,11,19,100,242,23,4,45,245,100,139,199,9,1,114,154,212,28,34,138,94,241,130,27,185,85,237,56,177,241,63,143,251,93,31,39,254,93,9,92,132,87,49,201,92,15,19,239,174,116,152,68,128,75,237,105,57,108,249,41,65,77,233,48,4,134,217,97,146,40,235,195,135,73,217,217,223,211,97,130,210,62,124,152,96,180,15,31,38,111,55,15,147,85,255,240,97,226,126,249,225,195,196,93,242,119,122,216,175,215,245,78,223,92,241,151,125,217,138,188,17,29,117,189,158,78,135,253,102,188,109,78,26,178,255,205,102,55,170,4,111,175,231,221,233,168,77,75,108,122,110,235,78,181,16,20,73,72,254,242,71,126,57,93,206,231,195,97,75,35,63,92,118,215,241,243,188,191,236,46,219,57,246,218,218,157,78,197,166,205,152,240,146,71,63,150,242,114,58,159,206,199,243,28,211,102,140,240,56,50,128,94,109,68,181,169,61,83,252,254,36,117,249,171,92,244,25,44,247,74,55,251,64,159,15,102,175,120,44,20,125,217,29,7,200,157,118,23,223,132,219,203,113,108,193,253,230,122,60,111,246,19,102,155,214,238,116,36,15,149,24,153,151,15,178,199,195,254,124,218,237,54,52,164,205,117,132,69,92,121,72,11,208,150,198,246,108,91,122,201,135,251,88,96,139,204,27,154,64,244,217,245,223,20,230,142,187,203,101,115,57,94,247,72,47,186,64,215,233,112,222,109,79,231,235,32,1,4,115,169,181,59,253,129,96,238,85,163,155,106,144,23,109,231,82,109,235,1,24,155,195,97,127,218,236,143,67,255,111,104,242,120,60,31,143,167,237,113,183,31,88,208,64,182,52,118,39,107,14,141,145,195,250,1,6,190,31,122,210,253,110,27,224,117,187,63,12,110,229,120,60,248,94,45,109,237,185,26,12,40,105,220,95,254,70,61,110,14,167,253,216,130,91,27,208,240,85,221,93,78,215,203,216,148,60,242,218,218,156,109,213,227,37,100,240,9,238,47,151,133,63,158,119,103,22,200,54,131,77,191,158,54,167,235,126,111,4,71,120,248,210,218,156,173,137,251,70,1,208,39,106,254,92,178,135,5,181,141,212,70,15,0,109,167,235,8,243,218,29,78,27,130,172,243,101,63,154,73,132,204,13,205,105,40,46,179,132,242,189,252,65,239,78,35,120,57,140,121,59,232,196,118,252,225,152,54,55,212,179,80,100,64,226,173,95,62,45,57,15,30,118,127,188,236,7,110,244,81,87,12,210,52,117,231,106,174,46,169,87,247,132,241,151,73,70,118,3,118,55,35,122,124,42,241,198,32,199,170,14,225,229,178,247,149,92,105,236,206,159,137,217,30,205,99,248,129,80,242,35,58,150,47,57,225,119,135,161,77,60,238,15,3,107,78,14,116,224,139,237,241,188,221,28,14,132,70,143,215,237,102,168,113,206,172,238,185,156,54,199,203,56,236,224,88,7,137,98,36,193,253,195,233,30,45,179,246,35,160,137,211,105,119,190,108,206,167,173,137,9,138,28,175,215,195,249,184,185,158,93,65,220,54,118,231,123,77,143,23,191,118,66,219,54,131,170,159,55,199,49,62,87,124,12,18,184,187,238,24,249,175,52,118,231,35,171,249,146,153,240,133,111,220,145,11,98,183,63,95,46,67,157,181,61,16,95,176,223,12,98,48,134,52,134,75,202,176,221,229,48,50,191,156,130,164,117,188,156,199,238,221,110,206,7,219,226,51,149,226,146,134,241,185,252,15,185,253,175,99,69,55,105,247,215,182,238,108,173,95,250,68,217,159,173,235,150,74,120,120,138,60,128,73,250,58,116,201,135,227,133,185,207,33,84,109,182,251,169,165,90,224,47,53,181,103,90,37,170,199,24,248,200,85,115,60,76,92,58,144,201,48,192,30,167,249,96,65,57,161,161,61,229,97,70,123,217,45,166,245,237,198,53,119,131,106,236,15,131,166,236,130,113,33,181,181,103,106,233,136,231,18,191,184,157,124,185,30,118,67,47,224,164,112,217,181,219,65,16,142,78,34,176,151,83,107,119,250,227,236,230,7,64,192,191,48,52,82,90,191,171,145,140,122,224,236,205,219,111,199,13,55,56,110,243,135,253,184,226,72,196,181,31,151,255,211,143,255,243,253,15,111,151,214,175,248,111,125,142,131,254,184,52,140,187,140,3,227,233,127,126,243,254,251,111,190,123,251,238,221,79,95,201,215,49,115,127,127,247,207,175,150,227,255,109,188,206,114,226,110,116,111,148,22,210,27,201,48,255,244,227,251,239,127,248,249,155,159,222,189,123,255,205,63,222,189,127,247,239,63,254,253,47,239,223,253,75,111,254,71,28,41,135,252,252,237,251,255,124,251,238,175,111,222,254,215,155,159,126,120,51,102,248,171,241,151,44,212,127,255,248,94,191,202,88,55,91,57,109,252,226,105,124,1,249,150,98,128,209,243,215,243,215,111,246,235,211,133,169,125,169,8,166,203,167,74,36,244,171,115,204,188,156,165,117,23,105,141,165,229,95,49,51,198,163,252,50,221,146,254,138,241,51,30,37,243,106,126,253,122,191,118,164,212,222,74,226,237,199,98,194,102,214,208,71,240,227,25,78,199,135,235,102,184,108,144,118,101,136,64,155,195,110,183,63,237,217,67,185,182,182,231,91,161,155,135,24,253,121,72,125,151,203,249,116,61,186,183,231,24,200,80,253,111,55,236,205,83,27,219,179,173,240,207,99,248,180,12,143,156,205,229,26,92,148,54,99,61,143,167,115,148,133,106,99,123,246,112,186,92,108,119,243,161,59,97,49,91,219,99,212,137,121,88,144,24,178,114,118,121,169,173,183,129,226,33,208,193,254,50,92,76,217,28,251,49,184,32,156,252,48,136,224,229,227,239,15,201,208,198,233,125,161,36,225,163,8,4,108,13,179,218,11,42,198,160,218,172,85,167,139,127,162,120,159,21,251,155,231,170,151,152,165,18,247,175,86,12,196,91,150,242,19,233,228,89,171,38,84,174,153,250,145,216,47,59,159,123,142,59,88,157,9,20,145,152,29,136,255,166,243,237,4,123,29,151,51,238,204,6,142,158,133,108,224,222,70,9,193,113,235,144,17,92,218,94,95,74,240,11,210,46,60,83,130,191,138,98,4,179,28,221,168,101,72,251,93,232,15,138,115,105,69,82,171,240,226,101,99,80,75,148,106,52,207,202,182,168,120,132,90,40,40,253,178,132,23,230,162,44,203,237,197,2,128,162,69,163,144,201,172,164,57,107,227,161,14,151,41,144,245,231,114,136,213,179,65,19,250,107,181,32,101,73,181,83,179,44,35,234,241,161,46,142,23,182,71,233,230,229,148,89,254,26,231,35,23,161,151,46,69,173,121,47,104,36,14,83,75,111,172,210,202,226,211,42,149,248,189,152,190,36,10,154,197,98,80,111,127,244,130,42,240,75,3,29,161,7,204,223,50,149,84,98,16,23,5,62,19,172,168,199,104,201,62,173,56,183,140,223,78,208,85,163,90,128,168,42,132,149,151,22,170,201,175,85,104,205,7,112,153,34,185,160,21,201,193,133,249,183,92,203,139,42,105,129,80,44,48,90,228,122,84,234,20,85,130,80,10,148,33,99,156,167,33,55,40,233,48,92,187,83,73,37,171,250,10,216,82,240,93,28,192,188,2,219,248,233,253,177,90,172,52,37,163,77,242,28,120,23,71,3,230,164,158,70,165,223,0,8,94,12,40,109,35,121,73,77,139,249,214,21,255,137,39,173,93,187,233,1,86,113,41,152,202,93,144,188,14,92,104,30,160,105,37,244,173,230,143,174,36,205,13,42,175,226,240,110,68,40,140,215,77,97,152,234,110,53,226,122,113,177,170,101,191,167,90,186,99,51,83,191,0,117,92,170,92,119,236,82,124,223,241,149,205,134,149,228,11,221,68,145,57,6,163,22,210,34,48,174,64,44,252,98,245,88,43,76,167,45,94,202,77,247,49,14,178,123,209,132,196,206,8,173,241,221,85,118,30,237,202,186,109,137,223,91,174,78,104,101,204,208,220,85,134,189,181,166,22,174,206,85,202,176,89,125,88,115,127,251,82,83,31,69,35,87,241,9,163,156,130,145,42,194,194,16,80,118,116,116,95,79,4,174,6,246,152,247,212,226,203,203,186,251,13,117,84,58,171,74,17,236,18,152,9,234,226,210,231,140,153,3,234,214,132,59,242,159,226,5,236,20,42,231,104,27,142,176,145,237,19,47,75,199,55,17,82,162,94,181,2,0,103,175,137,123,127,73,45,176,100,84,81,107,182,113,77,45,165,130,177,164,150,64,229,43,228,98,159,37,181,94,21,23,171,117,248,102,113,41,174,37,237,53,241,220,111,113,162,52,132,204,105,125,110,85,84,104,165,120,232,89,180,94,222,36,25,40,247,7,12,166,101,122,245,24,56,75,122,137,64,171,242,236,165,181,192,207,90,101,191,89,140,220,139,103,65,189,179,72,210,22,109,76,163,146,195,46,210,107,205,168,166,239,31,131,75,80,38,48,224,18,45,244,156,11,100,217,113,92,33,107,180,69,76,242,69,22,26,179,75,229,78,141,79,116,110,208,203,155,90,85,120,41,92,102,76,7,215,23,181,10,193,94,31,220,65,72,137,226,172,164,58,32,138,11,61,106,237,74,187,143,235,71,188,66,234,108,152,156,145,113,40,74,135,237,116,93,130,196,98,40,124,120,33,116,56,208,160,30,164,182,44,160,71,229,196,117,86,22,247,222,9,146,24,7,28,86,37,140,91,127,225,15,43,220,111,64,108,245,250,151,38,174,223,191,64,175,247,111,54,213,66,230,196,227,249,37,156,126,66,34,84,118,19,45,4,242,118,45,148,123,165,38,174,218,142,218,175,144,49,185,26,185,53,121,139,21,140,207,151,10,37,249,5,188,152,237,212,121,137,149,218,211,100,171,251,187,78,43,183,145,179,147,177,144,180,42,104,210,213,242,157,143,239,202,228,129,235,164,30,162,255,60,140,176,17,148,131,132,218,108,50,117,184,90,104,209,85,178,178,123,212,4,161,153,206,179,154,162,122,109,28,52,155,12,189,122,217,84,111,177,129,98,195,40,187,73,0,138,30,221,70,104,161,198,113,222,244,205,132,240,164,181,115,74,115,190,190,48,101,249,112,41,166,43,6,213,5,94,82,27,174,69,18,90,1,189,6,62,59,32,46,144,222,236,135,186,107,234,214,170,219,175,219,164,237,102,238,55,61,227,134,22,125,68,12,131,59,18,26,42,88,42,224,176,21,44,151,17,97,70,149,90,132,146,22,13,165,114,195,226,83,125,76,244,92,201,185,212,175,180,221,64,103,4,32,20,182,94,102,84,234,29,161,96,114,133,220,22,31,84,180,81,145,75,139,129,42,154,234,81,89,2,186,14,54,27,24,206,128,30,251,222,163,152,178,195,91,36,144,16,69,131,77,58,148,211,224,165,6,123,85,20,151,81,204,136,102,17,209,86,190,247,21,255,25,128,178,164,95,104,116,164,225,145,198,43,244,161,96,252,236,19,88,189,145,68,102,242,145,86,207,91,161,140,23,74,79,208,57,195,110,106,97,154,251,172,146,186,232,9,165,79,161,112,106,30,38,245,3,170,162,165,250,184,39,81,24,189,50,28,106,42,94,178,59,58,235,132,142,82,215,187,161,209,29,117,49,52,123,163,106,122,188,226,43,119,179,236,86,84,176,215,144,65,93,2,129,111,205,95,54,85,180,19,195,104,63,17,243,97,45,180,159,235,126,15,232,160,96,12,153,27,85,62,200,221,175,189,62,47,116,83,47,162,140,251,84,3,193,110,13,13,14,102,21,58,11,221,43,80,91,204,126,96,187,15,77,135,51,174,114,23,85,89,216,142,193,21,251,209,135,9,42,211,23,122,45,167,136,162,68,51,201,114,9,253,187,36,12,12,57,72,24,222,70,34,6,198,24,68,140,101,148,175,80,87,209,215,234,123,234,42,126,159,245,131,100,123,61,157,194,191,156,219,242,165,47,122,141,157,245,91,186,45,183,197,0,126,193,141,95,132,219,242,253,14,199,247,59,242,198,66,43,158,218,252,55,253,245,90,139,3,130,213,120,128,52,105,35,157,196,245,56,242,245,80,4,233,117,248,9,94,70,62,56,142,96,110,218,242,169,176,35,14,131,217,3,68,89,110,54,195,69,244,180,115,183,199,133,77,93,18,185,108,70,30,60,206,87,217,54,54,231,131,13,127,132,148,62,199,227,126,231,14,208,139,246,230,186,59,140,17,94,119,156,205,185,109,76,231,14,91,43,120,240,23,63,232,209,233,241,188,112,138,230,33,223,13,127,216,203,54,164,191,107,154,154,115,143,34,205,137,24,250,92,238,23,186,193,15,219,227,134,147,181,127,220,246,14,103,207,205,253,8,126,242,35,63,208,72,95,25,115,149,125,12,78,79,103,75,41,182,199,203,36,244,242,104,240,11,54,240,138,14,3,106,25,82,116,179,250,222,155,92,139,233,109,164,116,87,5,222,194,5,204,38,100,194,55,61,230,60,111,148,79,46,38,229,179,107,99,96,90,59,79,31,72,209,160,13,151,201,164,192,33,143,195,105,141,35,157,101,136,145,87,77,144,222,150,91,224,132,77,38,24,85,64,78,187,39,171,236,112,95,85,195,177,253,25,218,83,152,30,194,132,210,20,223,171,171,107,123,229,182,115,40,181,242,239,116,138,106,17,145,99,27,134,83,202,186,13,165,171,187,97,98,36,228,113,165,22,8,242,81,197,148,14,26,8,210,225,63,204,242,25,175,176,36,123,116,151,33,158,144,65,75,8,154,208,196,170,69,232,78,167,67,152,14,103,109,102,201,238,67,46,108,105,113,202,234,209,210,134,101,175,144,161,138,94,43,78,9,133,52,58,237,170,227,52,127,80,233,194,180,237,198,35,243,167,82,69,184,158,19,174,175,126,140,58,62,120,189,17,112,227,122,80,64,154,155,154,230,253,240,201,86,35,2,25,222,231,191,182,101,113,1,210,139,198,123,74,171,212,84,27,41,56,228,125,85,1,94,6,190,252,79,247,86,141,245,112,96,140,250,108,248,133,170,77,4,187,157,122,22,48,2,60,117,101,151,3,170,128,16,160,192,149,239,230,120,48,127,18,26,83,96,102,195,118,3,118,5,56,3,4,3,170,48,145,130,149,224,77,232,86,84,0,29,187,60,216,90,76,60,24,230,185,95,139,178,92,101,65,205,203,206,81,0,126,59,112,45,151,87,111,27,93,144,236,50,224,221,14,144,217,3,111,92,103,217,73,130,62,150,155,156,216,3,143,65,163,224,32,69,65,115,152,14,244,121,59,148,30,53,125,166,81,229,1,211,92,244,147,69,179,89,54,79,221,91,105,243,213,21,236,22,185,1,4,7,150,30,150,18,182,44,24,53,32,221,138,147,3,202,38,146,135,43,20,164,31,105,66,33,27,226,149,41,62,243,98,188,186,48,2,184,215,55,170,186,70,161,137,236,22,186,175,131,217,98,105,122,125,102,139,43,110,249,52,91,188,146,64,33,229,150,217,115,68,44,144,103,54,52,42,175,75,254,213,240,100,68,68,17,57,197,13,26,26,156,42,151,235,76,127,73,226,150,103,131,123,24,152,71,137,95,210,221,46,245,43,152,167,140,143,17,248,48,209,47,156,4,112,165,241,203,113,29,24,54,208,112,245,238,43,62,21,52,25,60,59,206,41,239,196,94,188,110,142,87,185,117,34,72,53,70,27,73,151,155,15,103,194,66,212,136,204,129,177,51,102,5,126,29,139,64,57,127,156,221,52,60,91,220,191,222,90,148,18,43,81,34,148,172,33,71,225,23,225,119,48,58,246,159,10,54,96,12,140,133,37,42,51,233,22,121,18,146,45,155,93,138,220,33,223,124,85,6,187,68,110,74,244,191,82,1,184,118,250,255,147,27,159,45,108,250,215,121,54,94,91,67,118,10,83,215,137,19,234,29,28,201,231,164,158,147,191,214,133,11,16,12,198,153,217,21,242,162,32,64,184,219,151,35,3,185,201,20,253,101,215,238,156,250,22,122,94,6,198,35,47,211,18,103,141,125,157,48,181,205,220,199,197,137,235,53,99,103,108,28,10,87,214,101,102,133,209,146,46,65,96,150,80,87,183,127,105,143,87,28,80,80,68,64,32,1,189,84,12,20,36,143,202,163,18,222,82,150,203,81,154,254,78,171,21,88,69,222,226,5,3,4,252,80,81,8,208,122,222,130,117,155,134,173,92,118,122,192,3,228,223,229,13,112,190,4,134,47,119,37,124,89,222,35,200,151,249,72,49,145,144,165,16,41,52,57,200,139,105,1,52,74,148,181,0,136,27,101,204,78,248,208,221,105,180,239,139,234,40,203,106,85,69,144,160,49,0,108,3,208,29,192,183,40,109,21,37,18,202,92,65,171,121,1,202,18,149,69,76,200,62,81,2,38,20,29,29,97,58,211,211,162,2,203,97,117,133,211,23,90,186,0,192,249,23,4,58,152,119,209,109,110,126,0,67,230,230,5,62,94,33,59,255,140,251,127,101,236,188,112,221,139,49,56,248,187,14,62,220,227,120,103,211,76,120,78,209,182,236,67,127,49,82,128,24,230,73,239,205,255,219,154,128,211,232,26,138,113,77,167,110,63,136,103,149,22,34,147,240,113,118,170,6,116,55,188,76,61,40,83,209,53,41,11,102,87,157,217,137,115,160,52,71,163,17,4,148,2,214,97,42,100,105,15,136,112,203,252,80,139,69,114,17,51,100,85,19,16,167,164,170,11,203,156,50,185,2,120,226,154,183,57,121,191,90,147,10,10,211,41,153,172,4,28,254,6,71,222,121,93,184,246,58,89,242,236,13,55,251,108,77,6,37,232,196,114,161,136,184,173,42,4,105,248,67,120,194,204,243,48,67,237,205,194,194,139,132,64,45,242,229,69,98,8,154,53,139,156,83,251,54,105,220,151,22,214,143,150,166,116,150,121,193,19,245,70,168,184,251,174,195,189,220,24,31,237,11,121,104,135,121,152,249,48,74,139,51,96,1,120,196,87,202,104,230,156,43,141,38,67,68,62,73,38,186,154,26,73,78,75,11,144,81,251,47,173,90,96,243,151,107,209,28,34,136,90,175,165,13,122,41,255,13,175,96,27,11,120,89,159,27,152,27,198,221,3,28,40,191,108,32,136,174,144,165,201,32,22,31,147,131,48,223,107,189,225,76,23,21,101,25,183,160,88,152,139,115,40,8,195,119,40,4,58,240,64,154,56,211,200,66,36,127,146,25,200,22,212,177,132,106,120,9,32,125,117,56,0,145,129,221,156,223,185,5,253,165,180,1,174,195,12,97,127,243,78,211,6,72,45,232,28,199,0,198,99,148,53,231,96,11,93,149,73,232,112,23,149,216,32,213,248,159,65,110,177,191,73,228,199,18,199,104,11,66,188,234,72,239,112,164,185,166,72,67,4,157,112,72,41,192,27,208,68,22,239,63,100,214,156,23,70,147,74,76,111,119,87,206,44,227,83,168,4,13,128,112,102,232,159,86,92,96,192,108,110,238,183,191,108,120,138,91,64,147,106,178,168,201,54,51,54,160,71,209,96,249,201,178,75,9,36,160,54,139,209,141,22,239,75,54,68,168,158,8,204,144,255,134,48,26,226,9,12,116,8,231,47,82,1,37,168,200,209,36,163,207,72,106,30,218,12,189,210,169,60,55,164,210,58,232,187,244,183,134,61,181,243,215,224,241,140,236,59,146,80,8,71,67,93,42,9,106,232,84,37,102,45,197,171,100,49,83,206,68,90,27,234,107,33,66,20,210,211,64,66,130,149,22,158,26,176,139,147,43,24,237,44,140,201,230,182,190,72,47,20,216,22,109,106,200,85,165,105,149,130,249,105,129,20,6,50,25,8,104,67,96,59,26,92,232,116,71,202,43,193,159,140,34,155,244,193,151,5,43,127,110,178,149,97,156,35,231,129,61,115,155,156,82,126,103,74,67,136,151,77,175,129,105,154,112,69,132,200,226,56,123,173,66,63,54,163,38,48,145,149,195,6,32,235,246,84,204,185,242,1,152,141,186,169,64,234,211,27,111,168,91,115,218,166,13,190,220,160,77,185,187,96,170,28,122,119,248,18,166,220,54,206,24,8,248,208,118,192,214,161,65,218,190,100,36,173,16,17,22,25,89,181,188,107,179,167,119,170,68,27,153,166,50,253,85,50,48,175,30,196,243,173,9,20,69,232,176,134,116,136,111,139,213,13,71,169,195,10,32,37,72,171,160,216,192,107,7,213,45,236,55,59,36,73,64,23,117,162,208,48,201,62,204,173,155,193,102,190,234,164,242,105,122,161,50,167,235,178,94,187,16,247,90,90,90,65,11,100,216,250,55,139,220,27,2,155,228,112,146,153,217,66,52,197,116,116,20,57,56,155,114,144,164,115,202,236,78,54,57,149,169,101,79,33,188,22,247,170,242,183,133,47,115,120,117,106,35,173,54,98,223,217,116,101,77,180,243,172,52,86,105,41,68,39,166,91,200,60,74,195,200,84,118,167,82,194,134,92,38,162,218,8,189,73,44,94,17,158,211,202,83,36,39,101,31,104,224,133,128,67,81,42,66,233,165,163,64,100,224,177,244,255,144,45,3,27,129,130,248,189,101,206,131,117,205,151,2,240,229,25,243,58,16,44,80,74,93,213,190,91,254,153,86,236,105,37,163,34,59,85,241,10,75,154,27,204,247,140,210,203,147,132,136,60,57,6,12,110,127,165,141,66,192,57,91,108,231,232,248,41,8,222,26,252,0,146,99,136,38,234,232,17,130,95,182,74,221,80,121,203,217,217,238,191,104,70,16,178,106,83,191,32,89,117,167,123,30,10,18,1,66,151,220,253,136,112,68,69,35,238,217,57,239,179,6,48,72,81,25,207,202,154,31,186,14,238,174,210,89,65,89,138,171,5,53,251,85,230,41,164,255,32,31,0,66,231,190,22,101,253,167,213,210,251,238,146,118,94,235,85,120,137,23,156,11,95,49,157,182,112,6,133,153,21,36,55,36,173,104,76,0,146,175,50,131,200,115,19,231,73,180,156,68,62,201,235,231,49,50,14,195,128,116,101,30,16,147,123,154,213,116,29,59,91,201,195,216,22,20,11,107,130,96,39,48,182,114,37,247,131,187,70,153,90,116,64,137,180,84,121,213,1,223,91,156,180,21,157,75,210,201,24,3,237,183,213,9,241,164,137,126,8,211,180,149,91,123,82,157,153,4,34,153,50,41,59,139,53,56,55,20,209,98,74,44,80,240,168,169,125,220,215,53,105,116,26,173,143,1,81,105,225,21,179,174,231,22,186,114,209,65,153,250,141,220,224,177,94,31,188,44,225,138,48,99,150,23,148,26,84,78,36,45,171,236,91,231,20,235,4,234,217,42,7,200,105,82,236,103,205,80,156,131,0,140,94,7,66,82,168,100,161,36,153,212,20,90,100,87,157,226,23,221,87,229,189,8,182,112,164,152,51,81,229,193,44,192,85,17,15,123,211,5,26,93,67,103,162,171,246,183,40,136,131,10,185,106,152,185,219,208,146,102,137,206,18,158,57,252,5,189,90,167,120,115,181,92,200,82,193,14,23,164,215,11,106,63,202,71,74,62,230,96,165,224,144,218,200,143,89,196,108,196,208,48,178,153,209,62,49,2,147,49,175,124,251,26,107,239,72,190,161,182,149,36,207,220,66,156,68,134,84,176,196,94,221,34,184,149,38,23,178,237,57,16,189,165,176,55,204,252,208,124,128,132,175,176,37,36,2,85,57,105,85,150,98,214,101,149,29,206,23,246,147,110,204,46,178,86,83,234,28,223,33,80,111,103,38,233,3,188,6,209,177,194,218,242,61,156,159,11,220,113,198,251,145,46,36,164,215,224,243,76,121,64,40,8,177,54,191,146,6,139,144,172,157,157,220,169,113,10,17,191,200,251,192,206,123,131,209,105,184,154,202,50,133,75,131,117,40,252,145,71,195,208,30,46,188,79,203,153,52,122,241,78,128,45,114,238,170,48,204,157,143,93,133,74,83,249,13,86,122,101,86,168,242,27,13,83,210,48,46,116,101,196,194,5,150,106,174,36,251,208,37,174,165,18,237,74,216,11,237,47,220,65,103,196,106,76,95,181,169,88,204,58,14,47,205,77,225,20,125,216,173,44,145,36,129,180,125,123,106,238,44,100,22,70,162,44,161,43,64,241,73,200,84,87,228,136,228,112,69,130,197,218,22,248,128,186,166,81,234,220,208,253,16,86,79,56,60,11,167,180,241,26,187,99,6,150,53,100,196,12,64,195,165,118,6,76,191,151,231,99,83,173,221,190,207,161,215,137,223,149,134,181,210,105,32,141,149,122,86,10,171,168,44,185,164,249,212,55,88,191,168,60,18,218,175,104,182,34,226,194,14,39,134,217,200,111,244,203,38,240,203,11,92,213,19,97,14,13,46,194,41,57,221,32,122,236,74,16,145,241,248,127,203,174,233,142,60,104,193,78,214,243,73,165,71,230,221,117,247,62,86,194,177,150,77,153,92,147,85,231,77,103,165,17,178,35,79,126,109,93,14,200,104,33,43,116,153,19,200,204,66,133,138,2,54,21,178,50,127,87,121,192,142,219,169,28,81,163,69,100,85,99,171,139,228,105,244,184,3,246,165,96,111,139,198,25,35,251,106,4,87,14,114,243,232,188,64,212,207,51,5,111,184,85,160,179,247,103,143,128,228,50,144,61,10,146,195,65,246,72,0,18,162,124,120,138,45,220,160,204,243,1,149,97,196,230,5,223,23,122,80,54,104,17,122,211,142,78,172,91,85,43,52,36,188,144,249,196,8,84,142,163,114,37,152,134,160,58,210,157,237,132,201,212,232,196,137,145,50,233,182,126,169,168,161,90,134,173,97,235,86,148,99,204,88,86,230,179,50,168,188,116,210,40,46,10,219,243,178,131,246,125,242,207,198,229,7,224,72,233,194,97,151,157,6,69,115,206,38,251,196,210,70,158,14,42,186,26,43,74,153,193,109,150,108,99,114,158,202,198,23,165,241,202,184,225,188,17,85,123,237,10,213,133,108,150,187,194,68,133,155,6,182,86,116,110,193,55,135,244,118,97,230,239,204,169,155,173,224,208,93,32,156,90,145,129,156,100,62,166,8,1,32,239,249,229,84,44,142,214,206,243,45,20,173,227,65,169,80,149,14,65,39,81,156,149,90,244,86,16,96,227,154,151,245,55,85,195,147,84,64,157,35,0,245,178,197,202,197,121,143,209,52,31,238,210,108,52,254,20,251,80,36,42,140,100,21,249,81,70,131,234,164,150,116,158,89,41,26,58,160,92,97,198,234,141,43,90,114,86,139,231,104,61,28,45,50,35,136,65,231,187,58,206,100,78,137,249,154,142,239,97,190,104,133,117,74,172,85,230,189,18,167,116,21,208,149,244,6,219,21,38,185,172,103,113,215,236,28,58,147,199,103,114,9,45,144,217,192,110,4,26,234,131,219,140,216,113,171,174,89,241,39,100,151,195,27,46,137,189,59,163,187,58,102,87,200,2,130,220,185,155,89,162,239,138,55,81,20,16,194,77,70,83,205,122,11,55,248,20,112,146,195,199,63,127,56,128,103,109,246,29,167,124,101,100,237,56,99,5,82,63,164,229,240,48,57,152,254,177,186,20,252,231,25,104,60,79,10,226,158,66,10,118,231,184,201,59,142,88,95,85,134,68,71,25,70,64,92,10,132,221,12,24,13,242,176,111,199,161,125,210,184,35,237,66,0,3,153,149,23,80,95,197,156,249,88,85,4,246,134,120,81,43,158,194,6,40,109,11,241,224,202,225,92,56,62,81,249,168,5,232,231,82,143,146,96,83,178,144,85,84,138,108,172,163,17,95,184,42,201,182,82,229,62,57,154,76,17,203,41,45,132,117,215,151,170,173,129,156,115,147,158,195,42,114,16,56,3,153,35,233,154,114,155,57,2,58,234,38,80,220,128,98,207,17,60,195,58,129,76,16,56,14,157,28,90,157,151,178,189,231,204,239,60,132,20,184,10,205,65,20,53,5,126,76,78,143,112,215,208,144,34,238,1,9,164,7,245,108,37,228,54,101,58,253,84,195,130,194,43,105,119,210,93,204,65,44,52,37,165,237,108,160,120,117,170,38,1,207,96,154,54,183,68,51,72,70,249,64,71,145,66,64,131,127,54,52,129,20,174,9,46,21,60,35,229,183,226,178,77,238,252,4,16,160,162,24,86,215,201,234,101,224,60,242,105,135,103,32,215,208,160,72,165,233,239,90,19,155,161,77,235,51,0,7,186,140,106,93,230,127,203,150,213,142,160,169,182,192,183,154,183,122,242,157,179,211,116,232,225,218,222,20,122,119,127,204,111,3,211,21,240,87,55,71,82,60,148,125,25,118,97,191,81,249,222,174,122,36,168,53,1,151,118,80,232,116,89,154,149,9,106,103,177,206,116,179,28,117,205,242,194,134,197,95,7,141,184,52,219,171,132,249,246,62,114,5,225,162,66,6,85,25,32,237,145,170,105,20,189,3,226,173,6,1,215,244,32,246,221,40,55,151,51,173,123,47,238,205,176,119,215,182,119,65,0,25,73,68,44,18,177,76,65,66,17,71,173,160,177,130,234,42,62,172,56,179,195,172,1,253,38,212,28,241,246,26,110,47,232,191,16,136,230,166,5,194,219,125,208,108,150,154,213,176,96,236,66,66,3,153,237,168,48,17,233,21,50,158,8,125,97,5,2,236,138,164,44,173,26,64,113,91,196,98,181,169,53,196,56,80,148,122,165,4,28,86,99,16,153,229,82,120,173,213,207,55,101,68,138,34,83,230,200,180,67,146,36,61,216,213,56,105,215,108,233,51,9,76,109,68,78,176,69,250,93,79,255,136,178,165,26,11,219,187,130,243,150,143,83,210,220,160,222,62,117,143,123,207,218,48,115,87,173,104,35,99,149,128,114,184,115,114,95,21,240,100,250,182,43,17,4,216,31,33,123,67,199,16,23,106,28,105,118,71,211,43,201,143,76,65,101,27,18,95,209,49,30,10,249,216,247,182,219,82,55,201,49,99,134,219,144,174,127,118,93,251,54,235,69,169,166,128,145,172,5,233,196,89,186,55,56,35,21,183,36,120,37,134,69,20,132,211,255,112,198,140,241,212,211,173,219,206,53,253,47,35,12,147,176,54,87,168,118,196,133,209,210,24,238,13,63,232,73,25,124,176,231,64,92,7,14,98,92,231,171,233,82,219,113,130,132,10,40,1,142,26,74,43,42,39,137,69,146,174,157,120,235,223,89,3,200,202,239,114,13,32,20,191,8,202,144,70,23,242,42,115,111,244,21,73,158,185,55,158,21,128,158,21,128,126,131,10,64,162,80,255,18,21,128,36,65,233,179,2,208,179,2,208,75,168,62,0,249,226,186,16,255,151,95,49,98,123,24,229,30,70,150,170,253,241,106,53,79,182,187,243,238,188,63,30,175,199,243,198,43,228,108,46,251,227,229,124,58,156,14,86,29,98,112,218,163,20,206,245,184,185,238,206,103,43,153,2,102,240,186,200,30,47,126,244,167,227,232,250,118,119,216,80,197,151,193,146,157,78,219,205,118,115,62,236,188,48,210,246,116,30,83,49,74,193,108,230,156,72,197,140,221,102,123,58,109,182,86,96,5,54,255,235,224,62,95,126,85,156,81,238,230,114,58,236,142,231,89,243,101,63,10,161,28,247,215,125,172,148,51,2,150,207,99,168,251,75,168,22,50,154,82,205,24,136,6,139,9,226,165,15,254,178,44,218,24,249,126,248,177,96,145,7,91,127,189,142,202,39,231,195,118,36,170,194,102,88,196,198,253,249,180,25,171,62,234,194,248,68,93,143,215,81,1,42,156,111,126,39,146,231,238,17,22,255,176,223,95,246,231,139,213,185,249,232,213,31,90,76,199,26,22,163,190,248,131,60,194,182,223,142,76,230,92,231,105,217,245,135,227,249,56,106,2,81,81,176,177,233,119,231,203,101,115,113,228,56,166,98,84,61,219,210,182,89,188,122,116,211,15,193,242,97,17,254,101,148,3,26,24,222,225,254,35,240,189,142,126,76,198,147,80,255,94,211,26,66,101,52,8,27,87,78,249,122,235,181,7,212,190,108,42,90,56,137,13,171,181,104,56,6,59,64,121,101,212,57,104,234,231,84,113,107,78,212,174,199,189,34,24,78,174,169,158,203,211,229,100,38,69,22,157,139,0,159,56,140,217,185,103,57,75,43,39,192,107,109,42,165,212,169,4,234,97,114,13,187,212,44,197,184,48,92,240,60,37,247,24,151,198,221,33,173,162,41,242,231,196,140,220,183,164,136,83,63,181,165,54,115,76,85,59,230,83,157,214,229,168,107,40,118,162,45,65,97,135,217,215,232,2,75,10,175,39,203,89,2,201,164,178,67,146,25,91,4,244,1,133,149,230,80,236,44,36,75,201,87,190,87,25,87,231,89,141,133,87,42,95,34,36,66,135,73,246,131,209,16,13,25,212,160,86,34,133,4,83,185,1,92,204,55,52,102,38,30,195,129,111,161,90,100,16,37,207,9,141,110,204,156,205,65,152,37,204,91,152,75,120,154,202,186,169,15,100,179,69,210,50,214,101,14,80,208,64,73,132,162,6,204,2,24,22,32,141,64,28,161,188,221,8,113,13,111,103,238,188,75,101,105,251,52,232,44,71,35,112,16,41,45,199,18,23,173,165,180,125,105,215,29,44,36,5,141,132,128,32,115,153,112,143,12,160,49,182,35,155,35,163,95,14,166,43,152,64,205,106,22,210,221,133,32,39,51,30,114,138,5,179,240,113,222,109,59,142,188,53,173,42,90,24,0,26,224,62,111,54,199,56,92,50,88,239,68,207,45,10,149,143,91,127,237,80,92,126,25,87,92,125,189,119,88,252,165,233,213,169,172,135,56,249,84,89,191,34,190,202,34,14,40,8,104,38,30,66,74,36,11,194,117,91,176,237,123,143,161,78,65,11,92,73,138,243,49,186,15,137,165,63,52,135,116,193,67,20,98,152,250,133,80,92,77,102,68,17,20,218,192,209,12,138,28,39,49,6,101,154,206,53,64,61,41,233,107,108,129,135,17,89,99,45,180,2,19,3,199,23,78,238,98,5,124,83,79,180,179,66,203,36,250,105,190,117,81,113,60,209,221,66,52,43,213,38,175,242,127,137,16,64,74,178,0,165,233,63,109,127,167,252,2,24,179,147,29,220,43,4,221,113,135,97,101,47,243,16,103,171,155,207,58,225,211,206,105,12,58,44,170,126,137,25,192,70,25,68,157,122,204,194,98,224,74,116,37,40,122,5,65,112,28,218,238,46,63,116,3,144,170,56,172,59,195,89,242,158,104,182,77,221,91,117,150,203,66,240,74,33,90,207,137,39,223,180,223,51,113,44,237,88,115,194,157,50,91,205,140,70,96,95,205,196,118,23,205,214,171,5,146,13,88,142,52,27,67,9,68,123,153,141,87,72,180,159,53,30,94,149,50,228,10,207,50,200,44,168,205,128,15,247,42,81,95,124,243,210,87,225,144,138,26,227,24,69,75,228,221,111,101,33,56,159,40,10,192,132,54,235,5,53,176,30,218,100,221,153,111,118,182,89,212,129,43,59,84,124,89,170,182,96,92,97,124,172,0,162,68,12,232,228,116,155,195,69,168,197,147,149,114,58,97,194,115,158,150,152,43,68,89,42,228,233,197,84,46,226,33,158,190,0,32,215,84,124,26,254,77,75,143,232,40,206,67,13,114,101,177,169,118,87,86,162,4,23,34,72,232,158,243,220,87,131,230,7,177,206,234,59,29,83,110,67,206,55,82,25,66,90,145,120,93,69,122,214,161,65,28,71,57,165,185,166,203,169,208,28,232,202,163,129,151,80,155,160,100,48,122,129,101,133,222,66,72,41,10,140,64,195,128,38,212,40,153,211,110,218,40,42,81,107,144,114,114,24,87,239,35,78,60,173,245,141,24,196,85,93,99,203,167,249,153,49,209,26,90,102,1,69,158,54,196,90,76,185,129,136,22,75,185,133,98,134,156,111,0,9,120,41,218,147,140,84,30,169,55,83,2,27,95,20,43,45,112,210,83,3,122,143,159,52,13,79,104,65,199,56,51,61,131,130,152,227,77,125,105,123,69,87,135,182,238,84,99,205,21,193,178,81,13,116,173,178,68,133,183,0,34,93,11,157,4,93,169,141,50,244,5,123,221,54,96,72,74,107,252,47,229,153,207,77,233,76,185,218,92,108,71,131,86,163,153,18,150,35,228,41,68,109,163,92,13,173,200,2,142,169,220,73,188,60,2,207,109,43,19,46,176,24,242,146,141,145,221,21,161,53,36,223,99,219,228,211,189,47,28,230,123,59,222,19,9,96,196,173,152,243,208,40,74,33,207,109,164,56,91,244,232,148,240,69,28,132,67,176,191,242,222,33,165,34,142,154,218,62,59,200,208,181,174,187,171,161,20,220,185,133,59,40,160,37,234,64,185,224,182,207,29,82,240,141,25,0,72,171,57,250,4,173,167,180,160,170,204,98,18,199,255,182,19,21,83,140,3,64,21,61,160,16,18,136,215,85,27,45,48,48,120,88,137,121,212,19,26,67,162,31,159,242,105,101,128,14,116,5,31,54,56,147,198,41,204,17,124,67,1,128,184,155,38,38,231,251,155,250,120,198,40,64,233,75,45,86,186,201,67,237,71,147,98,8,46,65,136,232,19,170,28,135,108,228,52,43,177,83,138,88,42,6,88,67,18,19,53,198,147,112,25,199,65,192,253,138,219,189,65,53,131,68,140,172,74,29,121,214,134,235,232,166,128,210,159,138,246,143,38,247,234,7,39,131,170,253,190,91,21,126,40,200,10,128,220,182,100,246,138,178,234,171,41,129,169,50,246,94,168,54,2,87,102,66,60,177,223,209,4,195,245,46,45,139,148,39,186,90,218,52,247,60,3,85,96,211,10,43,215,241,123,45,91,8,42,55,103,206,124,254,185,142,167,194,94,106,194,81,142,147,237,150,220,47,204,40,87,201,176,205,194,232,60,77,132,85,0,178,203,221,226,218,34,115,215,177,127,76,106,42,7,105,117,27,217,67,221,46,16,146,158,133,184,26,220,199,162,6,17,242,10,218,94,244,74,28,50,221,209,193,142,92,66,213,69,149,83,38,133,224,82,45,113,150,40,41,40,211,46,163,64,148,70,197,72,18,95,253,6,153,98,106,70,1,34,96,127,57,167,159,251,242,243,88,186,10,57,85,113,55,147,64,133,180,36,214,16,110,102,8,15,221,97,29,226,204,60,69,217,76,44,204,96,174,103,152,36,153,182,142,127,176,98,27,156,43,198,24,8,176,187,94,247,12,6,55,27,170,130,146,66,154,195,190,197,105,76,182,5,214,190,0,160,38,211,145,74,204,174,139,248,73,220,152,114,0,116,188,78,26,18,160,3,233,38,38,246,156,45,52,57,41,47,173,237,60,66,131,90,28,40,28,130,202,40,174,229,131,136,136,38,72,184,17,61,0,77,51,51,166,45,190,97,148,63,139,45,40,52,64,43,76,163,2,239,100,28,79,178,137,15,238,193,150,72,13,193,49,180,81,23,218,83,105,24,240,15,162,68,229,9,245,218,156,250,39,222,239,206,114,6,45,159,34,11,12,52,44,236,206,12,173,145,145,204,58,27,147,208,123,145,17,111,201,85,120,136,105,32,118,192,100,47,226,7,26,254,163,50,41,13,39,67,96,25,248,38,50,14,87,177,177,112,82,29,187,213,48,101,22,90,164,172,201,58,127,71,147,43,211,237,9,46,156,85,132,28,232,8,141,0,4,240,146,83,228,142,38,219,180,115,230,154,168,160,209,1,160,135,57,60,42,149,225,77,134,156,252,250,158,227,99,142,207,52,8,100,99,201,195,17,184,71,28,146,35,90,8,255,33,153,234,152,93,18,29,72,83,51,19,72,16,69,118,54,171,97,87,58,106,222,16,253,142,55,104,88,8,71,88,19,33,120,19,73,122,69,248,107,68,68,117,37,226,168,250,14,213,118,24,217,80,118,139,208,43,202,103,130,144,8,198,170,96,10,247,16,102,25,189,41,77,80,148,123,235,116,79,205,199,92,20,67,184,129,5,104,216,9,132,179,177,244,10,139,78,46,26,21,47,213,80,211,74,114,153,46,179,85,199,162,226,61,137,34,235,192,42,11,208,49,10,29,59,81,43,155,118,242,121,35,198,55,194,254,45,254,136,152,40,243,216,46,135,112,194,58,91,176,42,233,51,31,215,176,123,189,18,165,104,76,38,146,161,138,93,204,136,174,176,170,37,83,45,208,28,89,166,44,204,23,138,60,176,216,33,141,28,188,80,56,255,60,140,129,179,55,86,77,157,143,82,34,100,20,152,101,140,200,209,88,224,232,52,7,15,205,55,199,141,50,178,83,236,87,24,138,86,166,171,130,159,42,1,189,59,214,50,135,1,162,229,139,109,90,121,130,36,53,99,250,239,201,204,248,200,157,191,185,193,241,132,81,112,38,68,142,199,53,30,200,202,16,194,202,71,229,54,209,99,202,238,140,59,229,124,207,49,209,161,38,23,99,107,33,114,247,121,67,42,52,135,155,115,45,52,99,15,9,86,16,50,206,74,120,107,74,105,7,61,221,197,61,85,207,26,102,199,168,24,209,22,147,200,105,191,78,5,16,205,189,177,59,68,121,13,243,83,190,178,185,141,68,68,55,13,22,231,18,54,249,4,162,36,20,30,41,71,174,17,36,76,92,85,115,87,85,120,163,47,111,180,234,141,238,189,215,208,103,13,81,175,71,106,212,77,13,51,201,171,32,241,99,69,71,143,45,3,154,12,43,214,194,30,77,167,91,138,2,7,121,50,149,39,103,43,32,141,189,147,133,168,225,143,45,166,57,12,70,130,216,191,105,242,15,213,188,129,109,144,224,12,132,168,86,252,99,164,233,174,118,70,238,160,109,96,199,187,94,229,239,45,220,19,85,167,37,29,92,213,229,23,5,91,81,193,129,55,14,45,85,147,71,55,98,159,144,72,114,90,181,70,213,126,84,202,212,144,47,190,124,184,35,83,167,86,37,163,248,141,210,236,106,182,21,242,47,154,89,186,216,0,200,229,137,16,113,239,227,192,57,30,162,111,13,186,170,179,66,219,36,48,200,120,224,139,89,73,96,67,39,3,49,109,136,109,164,198,157,10,10,134,228,78,123,144,25,223,134,59,238,204,32,141,173,132,181,12,157,30,34,106,42,58,46,27,198,132,202,137,245,28,91,199,217,177,62,169,211,56,5,149,212,154,222,42,117,33,116,43,104,156,34,91,218,113,174,45,111,27,213,82,172,183,234,56,91,216,181,132,190,51,119,3,191,41,93,9,197,203,156,83,220,68,2,86,60,32,102,129,114,108,153,189,154,179,81,164,10,18,86,88,185,242,183,141,229,138,116,69,85,243,2,171,75,212,144,81,94,83,163,65,164,174,135,48,72,27,85,217,58,42,68,97,78,242,174,3,183,67,108,106,124,234,224,39,85,120,146,204,181,36,221,19,198,94,43,21,187,122,162,26,224,170,9,12,3,39,68,28,250,98,6,204,202,244,85,45,87,163,248,242,211,160,212,42,150,189,168,119,90,85,79,53,90,172,198,38,24,175,223,185,170,208,2,127,61,21,37,102,143,51,195,156,109,71,109,212,53,48,197,142,169,219,116,117,116,35,169,184,63,100,103,249,229,244,34,59,44,52,62,13,197,231,33,38,249,14,14,19,157,45,221,114,147,103,166,170,113,70,169,14,43,217,165,101,42,103,9,200,146,166,108,230,14,139,233,166,20,179,219,12,100,165,160,149,90,135,178,2,202,76,57,200,150,103,6,138,56,130,157,217,205,136,18,145,122,167,150,233,161,42,41,150,141,124,57,46,39,145,87,70,35,156,10,91,158,169,35,178,49,116,226,40,208,134,160,202,32,230,195,18,181,19,19,211,185,69,53,222,69,197,251,161,248,71,0,115,145,140,2,52,68,194,15,96,138,228,53,53,227,122,33,252,112,31,221,146,216,70,68,201,167,122,82,127,185,85,137,210,61,53,110,85,209,172,215,25,254,146,109,112,85,41,151,148,119,173,130,47,168,0,87,21,133,44,96,131,254,51,195,11,169,216,99,67,140,33,8,202,198,152,90,94,217,19,26,181,102,6,116,184,133,74,177,42,25,89,105,83,77,190,157,93,120,150,115,240,140,83,84,34,37,173,221,93,181,79,166,232,67,53,110,44,162,135,156,161,144,213,41,219,186,231,144,12,132,73,3,18,197,195,53,33,114,69,216,180,62,185,210,60,246,147,74,97,17,73,172,178,126,171,16,176,109,146,184,52,176,52,96,94,33,112,133,172,85,133,221,141,172,55,131,65,225,221,153,187,167,80,183,137,152,44,161,63,251,128,23,130,158,105,62,207,192,92,110,100,158,147,192,153,117,19,13,235,8,96,50,64,242,46,181,23,25,243,44,12,11,180,3,211,94,209,219,29,170,66,191,209,251,199,219,195,138,209,24,36,102,68,34,93,140,180,103,43,246,136,206,106,209,26,55,248,142,224,11,26,15,139,102,227,166,205,157,118,191,33,255,224,244,90,20,109,69,21,87,181,117,89,163,87,188,61,98,127,161,44,116,228,213,34,183,140,252,146,246,49,234,39,215,180,152,141,174,179,83,137,118,138,211,34,88,34,8,54,113,241,65,24,173,156,127,149,15,26,41,34,202,26,189,52,226,44,55,241,176,44,164,67,56,228,208,69,158,99,152,217,59,255,18,84,97,9,70,141,233,208,98,117,94,200,73,183,183,131,52,77,213,166,210,25,94,214,125,9,201,14,213,88,171,26,183,152,48,58,232,110,213,60,155,173,4,43,62,28,119,184,122,176,41,161,177,56,172,154,37,110,217,116,26,195,79,99,30,106,140,72,80,45,76,197,180,92,200,61,167,201,201,150,239,196,46,60,179,41,119,135,166,144,244,194,43,186,227,94,193,156,149,208,171,138,234,27,174,14,213,29,162,115,153,88,113,171,136,242,180,123,13,87,125,55,215,233,78,26,249,164,182,47,154,253,86,143,149,41,110,36,203,29,217,102,178,190,74,251,185,127,144,110,171,56,79,34,127,171,18,96,157,193,170,98,97,93,68,190,97,96,169,54,24,234,157,116,93,32,245,162,161,95,50,131,157,73,161,177,21,80,53,39,246,212,160,13,210,241,10,45,73,239,44,254,157,41,130,123,1,146,21,153,231,204,90,23,230,187,97,208,11,142,174,136,188,209,76,69,237,11,105,103,214,20,56,25,40,242,194,116,246,179,74,250,27,246,192,134,114,103,21,177,150,15,226,186,214,13,187,124,131,171,14,220,119,99,12,138,214,162,21,147,82,183,218,61,84,52,238,34,213,167,132,198,39,219,65,189,134,100,69,66,146,216,144,248,182,74,238,85,190,111,213,0,157,190,160,211,43,32,179,178,9,173,220,198,106,10,155,11,206,49,98,218,126,178,95,181,202,21,64,68,57,79,185,63,214,192,128,19,101,91,184,177,171,100,170,112,183,244,60,65,98,38,161,28,38,43,85,17,86,38,162,42,98,162,190,166,215,232,176,206,135,212,145,80,12,117,154,163,164,92,90,85,65,213,153,236,230,187,174,75,179,124,253,42,135,73,16,152,20,81,73,178,149,111,47,43,229,254,26,237,79,175,36,234,148,73,85,233,212,129,120,93,231,30,26,26,152,209,150,92,60,153,213,129,216,63,202,188,220,8,32,203,97,102,102,27,112,239,57,187,148,251,183,205,184,51,158,29,229,108,200,159,14,220,140,21,241,33,222,58,77,42,53,57,198,80,149,199,10,77,236,20,113,237,130,149,219,213,62,117,253,214,53,165,166,121,37,22,243,224,72,154,28,37,140,15,96,154,1,146,100,24,194,44,235,235,142,239,141,119,124,23,91,217,4,96,150,32,205,56,85,128,237,27,1,75,220,180,46,157,240,188,243,197,100,165,60,189,142,230,178,109,22,176,155,245,0,83,28,204,168,197,13,232,136,26,207,148,249,247,44,57,68,185,72,87,238,131,82,95,21,14,235,74,53,203,217,46,122,7,27,9,128,26,32,107,64,49,204,156,240,144,74,234,101,210,100,234,219,226,165,105,154,210,92,222,156,237,66,148,9,19,180,232,162,134,174,214,80,137,86,206,244,78,134,94,119,113,7,209,65,174,198,175,181,241,3,124,53,105,23,69,187,231,4,106,107,61,100,250,148,13,45,41,126,182,15,177,173,81,184,41,80,55,134,242,222,64,216,25,173,87,212,223,208,135,142,136,52,220,73,101,97,104,240,106,159,19,13,156,176,122,167,21,88,107,183,82,221,113,205,198,172,123,119,69,22,143,128,68,82,125,39,244,147,78,96,77,113,208,248,168,118,142,172,65,205,211,42,130,92,79,212,96,21,9,63,208,194,34,66,125,68,92,104,55,107,209,155,117,202,181,162,127,75,26,186,224,29,210,122,143,184,115,201,186,224,94,132,123,118,237,235,156,255,170,122,164,209,52,52,218,136,226,3,80,188,4,120,86,238,44,63,213,91,196,216,234,18,172,50,171,182,27,211,139,83,81,105,179,56,208,137,40,49,195,76,114,49,234,40,2,216,202,154,28,56,217,203,125,25,200,112,215,152,130,12,85,69,41,155,137,25,182,67,58,19,109,124,133,9,77,48,19,207,132,38,175,34,161,201,204,255,101,238,58,198,126,104,11,244,19,19,135,3,57,171,71,42,188,156,167,2,217,130,89,80,88,26,22,151,121,174,215,186,93,174,28,110,12,197,6,208,198,244,28,242,159,211,182,238,2,244,76,216,52,83,55,20,135,206,89,178,208,204,98,80,126,145,101,82,185,32,115,169,163,14,220,206,125,122,111,54,165,130,126,186,92,74,72,33,196,169,148,246,175,17,243,60,75,246,60,75,246,180,149,85,144,161,45,213,77,121,173,173,90,32,254,227,254,249,2,173,159,14,47,0,80,62,119,105,161,221,198,64,253,179,223,24,60,234,231,191,113,91,76,201,210,56,151,27,131,112,125,146,59,127,170,250,81,191,186,140,211,19,217,60,48,178,121,93,229,166,166,7,251,16,193,31,173,231,130,84,68,137,242,112,61,183,160,212,7,43,121,2,107,248,162,119,121,178,166,159,150,53,85,92,8,165,229,13,108,249,60,226,121,196,103,60,226,147,85,247,20,159,171,47,82,221,243,11,241,254,219,235,23,226,253,85,65,255,69,110,220,43,126,63,195,141,145,115,252,243,75,59,159,234,198,191,86,230,80,191,36,243,181,57,200,155,216,109,98,97,85,177,197,136,115,152,216,214,244,184,229,231,48,46,134,227,196,110,41,217,116,151,127,245,184,229,231,168,62,30,142,19,115,145,28,39,158,180,114,156,196,243,121,25,90,97,1,68,11,154,142,91,230,110,184,168,217,113,162,3,94,61,206,57,119,209,237,250,113,146,144,209,143,243,162,182,98,128,242,227,36,218,197,143,115,252,39,10,221,121,220,65,202,57,248,113,94,8,247,55,57,78,52,194,50,132,121,220,81,170,241,122,201,93,117,52,88,142,147,33,136,134,93,142,147,164,6,190,190,154,107,108,25,170,92,74,4,27,57,78,226,221,124,125,197,53,80,124,38,211,113,203,196,158,125,125,229,150,162,224,79,199,193,254,103,199,169,133,213,28,137,232,56,17,44,124,125,197,166,41,68,70,14,241,227,150,14,13,239,149,9,47,98,231,22,5,191,144,35,63,80,66,179,124,129,245,192,229,31,61,80,222,228,192,165,75,122,224,175,151,234,166,101,91,172,205,47,191,66,227,245,124,60,206,138,147,75,0,199,246,114,220,29,182,167,235,213,107,149,118,109,249,76,115,144,88,108,234,15,48,234,205,168,61,122,60,206,34,171,203,192,71,97,222,81,145,245,180,29,69,43,103,149,210,182,177,57,29,222,34,226,168,240,242,71,127,190,156,70,157,89,46,62,58,198,182,57,158,15,215,227,118,212,27,157,203,222,53,214,179,197,187,231,1,10,177,94,199,112,54,199,211,214,43,177,106,225,209,203,40,206,235,195,105,155,186,115,167,99,207,96,99,94,254,216,15,219,90,101,122,12,244,116,30,149,117,105,87,119,109,205,201,72,164,187,184,234,60,192,178,15,236,181,223,140,34,227,113,213,183,163,36,239,101,63,202,169,240,186,151,198,230,116,179,251,62,2,200,127,218,157,110,222,132,143,48,242,235,102,127,57,141,109,59,75,78,3,197,199,37,207,13,221,121,22,216,240,32,200,253,122,30,21,163,183,3,146,169,172,246,66,192,247,163,126,252,229,60,139,141,175,52,118,231,35,163,192,203,167,236,143,204,139,229,190,35,68,81,51,65,60,64,145,243,205,121,119,218,199,162,222,187,227,40,243,125,61,134,90,246,93,91,115,182,187,17,155,224,240,146,203,251,15,202,112,189,92,118,206,75,34,137,141,70,202,165,191,45,160,123,225,31,94,250,208,206,155,195,168,72,63,140,180,190,92,75,232,209,102,96,140,243,113,148,118,63,56,139,180,210,88,206,135,39,169,110,205,151,62,126,11,174,58,157,6,67,120,28,245,249,39,11,180,210,200,11,188,148,41,127,216,5,30,101,247,119,151,227,246,104,50,207,218,242,94,54,251,195,105,112,140,39,157,129,233,237,253,0,139,219,236,219,195,32,127,151,195,249,48,138,15,59,73,252,208,54,126,0,30,248,163,208,243,254,48,24,225,203,137,24,193,155,248,249,73,88,63,171,166,66,153,214,177,227,14,135,61,175,102,211,218,157,110,201,7,197,15,245,17,68,246,145,113,39,202,104,231,49,208,40,202,113,75,61,201,120,192,37,56,224,229,15,120,96,220,17,243,122,61,29,46,115,64,219,221,24,209,254,176,221,111,88,79,215,180,182,231,91,136,154,100,206,125,56,129,85,69,211,195,110,183,63,237,9,79,215,198,230,92,47,169,252,196,80,159,217,63,104,169,123,245,242,97,237,114,57,111,46,135,235,137,68,226,195,97,144,185,64,19,5,181,150,214,238,116,100,22,145,128,247,151,63,248,227,97,104,186,46,140,60,54,215,161,228,63,238,79,35,126,144,198,94,26,187,147,17,70,245,24,67,31,108,205,160,145,167,43,19,202,161,216,221,12,194,97,75,41,1,28,161,165,61,15,217,200,31,2,218,207,231,253,80,226,94,54,167,169,215,25,220,222,230,114,26,246,141,205,49,40,71,155,214,246,124,141,92,28,133,23,31,96,205,15,215,243,110,55,198,180,217,155,90,111,164,155,24,180,243,116,56,158,143,99,107,187,126,180,105,109,207,71,158,200,37,243,198,3,172,253,224,134,246,39,182,97,141,69,62,156,142,199,243,105,42,124,117,229,83,99,119,242,172,100,240,16,234,208,3,13,122,59,228,213,243,254,116,28,107,121,130,100,43,118,144,210,26,79,92,134,43,209,218,79,90,252,121,212,182,22,54,55,50,39,61,2,37,221,94,135,200,188,61,76,197,136,144,205,237,49,224,207,210,208,157,135,226,53,75,190,159,151,79,69,119,65,25,180,236,163,161,27,57,156,54,137,176,118,141,229,228,89,151,248,229,107,123,135,61,240,176,29,180,113,55,70,69,186,148,243,113,83,150,184,109,236,207,7,184,63,130,136,118,25,162,229,101,147,250,63,124,67,246,151,193,28,159,247,83,65,182,210,216,157,143,212,253,146,231,250,17,68,212,195,208,140,70,91,250,34,144,14,134,56,57,18,116,141,221,249,200,89,39,185,160,159,168,250,183,84,166,29,246,199,195,110,128,223,1,250,234,101,233,246,155,193,230,15,53,18,75,119,109,99,119,62,242,180,44,227,127,8,216,189,230,209,47,106,237,211,101,240,246,71,107,93,105,44,39,91,205,184,7,25,250,117,55,156,119,6,201,13,74,211,97,235,31,22,144,160,71,234,218,186,179,145,140,242,17,134,255,123,136,60,243,252,146,143,224,96,56,204,37,67,172,136,64,52,228,199,221,126,55,204,109,65,143,219,180,182,231,91,206,226,37,157,232,203,55,173,13,206,118,63,134,224,98,228,80,161,13,219,210,241,112,152,142,101,139,185,173,52,214,83,45,71,215,146,135,245,197,91,83,79,227,177,59,94,207,46,71,158,134,245,101,184,211,12,74,50,24,159,185,232,77,107,115,182,165,211,90,18,81,190,244,161,15,91,248,16,102,46,65,117,63,204,165,195,116,120,56,14,126,215,12,201,139,113,185,182,118,167,91,202,41,205,223,246,250,86,158,10,62,188,202,221,254,8,202,165,223,6,203,91,181,186,39,125,254,77,37,129,205,225,58,188,26,88,17,184,88,140,247,217,251,163,109,236,206,183,2,101,15,18,2,112,202,248,118,97,251,143,231,237,16,123,194,14,109,27,187,243,205,57,248,17,86,127,248,249,144,171,179,232,235,134,233,252,16,221,44,106,83,57,209,18,135,62,136,230,226,146,85,223,67,243,61,150,245,176,119,103,223,190,173,156,170,37,220,159,40,234,179,117,221,202,41,140,8,192,7,64,174,195,72,56,172,104,12,84,195,155,112,40,78,50,194,173,173,221,233,179,60,242,67,12,62,238,20,217,79,215,227,38,216,24,115,83,187,55,81,2,243,49,226,233,78,215,195,133,253,96,135,171,232,8,153,25,198,68,247,195,90,198,93,91,235,201,86,135,115,25,249,67,24,24,135,111,196,105,48,8,228,42,176,221,12,150,46,210,214,220,212,158,57,235,103,61,202,216,187,101,63,236,206,209,54,80,27,251,69,127,168,145,15,119,224,193,21,157,135,87,132,155,248,238,221,232,233,204,69,42,196,208,31,35,192,232,52,56,223,225,54,78,222,225,31,137,222,211,249,132,223,31,207,202,254,96,148,121,120,119,132,48,63,89,166,211,8,2,27,238,45,68,179,106,83,119,174,218,237,190,222,62,70,28,232,128,197,225,219,126,24,66,55,129,232,240,99,59,158,220,4,223,181,116,103,90,89,199,49,244,135,240,246,59,13,229,82,112,95,18,188,60,98,60,162,233,163,180,116,103,170,223,215,50,244,71,240,252,26,130,250,121,184,110,178,14,110,104,223,6,120,31,93,174,43,13,245,44,43,3,246,32,131,46,140,215,117,152,162,147,163,124,219,152,78,181,10,101,11,156,63,183,248,11,71,237,213,77,254,110,204,158,78,157,69,185,30,32,187,193,3,16,228,95,152,117,80,90,191,171,73,2,245,192,217,155,183,223,142,27,110,254,54,174,189,124,254,97,63,174,184,121,255,253,15,63,127,243,143,111,223,255,231,219,119,127,125,243,246,191,222,252,244,195,155,49,140,175,254,112,212,217,88,14,149,175,127,252,195,126,116,227,79,63,254,240,221,56,233,171,49,109,227,252,255,219,174,246,199,229,231,232,196,248,31,87,31,29,250,15,156,33,119,248,249,195,119,144,46,219,245,244,84,25,244,102,228,173,26,227,178,27,232,32,48,88,12,226,140,227,255,231,251,31,222,46,173,95,241,223,250,28,7,81,47,227,233,127,126,243,254,251,111,190,123,251,238,221,79,95,201,215,177,252,127,127,247,207,175,150,227,255,109,158,184,12,105,84,243,246,142,217,208,126,122,247,238,253,55,255,120,247,254,221,191,255,248,247,191,188,127,247,47,189,185,13,225,227,70,191,13,35,223,5,144,120,1,25,37,99,102,191,87,254,235,211,101,48,252,82,41,181,37,207,213,139,72,108,205,147,235,9,192,36,71,216,103,254,21,19,57,123,78,48,201,157,246,121,126,253,250,212,98,230,107,246,128,190,232,179,236,201,35,112,145,67,69,51,66,105,55,206,253,47,185,82,246,199,253,240,89,136,130,68,211,218,158,175,233,146,30,36,2,179,136,249,11,211,120,61,239,135,238,46,6,203,55,173,237,249,179,6,253,163,69,97,162,230,244,99,40,229,50,204,173,129,231,253,48,43,57,61,31,32,135,197,154,86,171,129,206,123,65,22,129,125,47,40,100,252,67,34,132,144,222,200,84,230,163,254,255,51,18,9,222],"type":"zlib"} \ No newline at end of file +{"buffer":[120,156,236,189,91,239,93,183,177,39,248,105,22,144,52,176,5,146,235,254,120,146,158,110,204,195,153,121,56,64,99,94,149,88,137,221,80,172,192,214,153,238,124,251,217,155,117,251,21,171,214,255,34,203,142,148,81,16,201,90,181,121,45,22,235,198,98,113,218,255,48,181,246,243,199,183,127,125,119,255,239,52,255,219,212,1,255,235,135,239,62,126,79,128,185,148,169,253,241,254,239,239,223,253,240,215,239,63,50,240,60,8,248,151,191,255,76,144,218,8,240,167,191,254,241,195,251,15,63,113,99,247,191,219,252,151,254,191,199,191,247,255,74,133,254,252,253,219,159,222,254,249,227,187,159,184,242,180,254,129,250,125,247,191,63,190,251,241,187,159,181,246,143,119,64,251,238,205,119,63,252,252,247,247,111,255,241,230,223,63,252,191,63,188,251,227,251,31,254,222,27,126,180,244,241,195,199,183,239,255,219,79,111,255,198,195,223,185,131,15,63,126,252,233,195,251,247,239,126,210,14,126,252,207,247,239,31,63,174,127,40,211,250,95,233,95,85,255,213,244,95,179,254,107,209,127,173,250,175,237,241,175,149,167,241,221,15,127,254,248,195,135,31,223,254,244,143,97,26,63,234,120,116,14,58,98,157,251,255,249,29,227,178,210,15,247,137,195,68,184,244,125,101,126,250,8,96,46,251,231,59,14,254,235,187,191,203,26,21,198,236,235,59,95,207,172,243,57,239,188,125,230,206,143,61,235,124,201,59,159,63,115,231,181,166,83,95,243,222,151,207,221,251,154,174,250,150,247,190,126,238,222,143,180,247,61,239,125,251,204,189,183,154,246,126,228,189,239,215,189,203,62,188,243,134,63,191,251,247,183,127,255,53,247,122,239,227,255,254,211,255,124,247,231,143,35,211,250,219,219,143,63,253,240,191,21,248,64,87,225,63,143,127,215,181,188,121,44,96,61,207,55,91,129,255,245,113,0,18,159,111,231,254,119,43,229,11,175,246,79,157,236,114,190,217,79,248,159,140,229,64,224,193,141,202,218,190,237,108,124,92,214,191,4,174,75,229,148,206,63,126,255,195,207,111,126,254,248,225,239,191,251,253,52,255,193,228,219,88,187,93,215,254,235,187,143,127,252,254,135,247,223,253,225,31,255,215,189,248,239,166,245,143,182,127,250,191,127,255,230,231,63,191,125,255,238,255,153,90,153,230,123,235,229,119,255,254,246,227,247,111,254,242,254,195,135,159,232,159,63,189,253,241,187,15,127,187,15,161,149,255,114,255,211,126,255,251,94,246,191,221,255,190,109,253,159,247,222,202,246,228,8,231,47,126,132,203,23,63,194,245,139,31,225,246,197,143,112,255,178,70,232,89,207,207,255,248,219,159,62,188,215,81,169,124,123,70,103,253,143,239,223,254,253,157,22,254,211,15,31,255,246,246,239,34,9,89,179,254,235,79,63,48,64,4,87,107,63,252,248,135,94,148,224,127,121,251,254,231,119,244,195,79,239,254,252,225,187,119,198,172,78,102,127,235,155,206,236,110,243,155,181,51,189,251,159,227,205,210,65,237,13,124,21,255,35,253,198,149,161,238,220,217,248,250,166,172,218,126,145,223,110,238,199,91,172,124,115,141,223,134,158,111,126,92,183,100,228,220,195,13,250,191,193,0,252,175,67,125,169,32,127,186,166,181,43,179,255,211,135,255,180,213,234,11,251,191,255,253,7,38,54,25,89,7,190,101,49,99,176,127,88,65,238,186,3,165,96,135,237,142,102,126,177,61,35,250,254,179,246,204,235,108,146,107,229,236,51,25,35,47,85,205,158,85,175,190,182,109,120,171,229,77,125,144,198,73,84,201,4,223,214,190,229,30,221,223,246,254,159,245,205,174,191,111,111,136,170,103,38,235,173,255,183,244,114,188,69,150,222,54,83,250,250,134,171,109,218,196,242,230,88,185,251,131,54,67,239,171,182,55,167,20,169,220,126,165,214,26,239,66,254,124,20,217,104,232,2,58,180,141,67,250,169,133,97,133,26,59,185,219,173,239,200,214,33,143,170,197,54,235,73,37,231,55,92,191,119,193,195,109,4,218,104,27,31,2,185,143,180,143,102,211,54,143,62,156,170,223,189,201,157,230,209,127,234,205,109,196,1,24,210,1,203,240,109,191,159,212,196,186,250,70,121,187,119,166,65,101,206,55,212,246,204,243,151,10,180,106,39,77,136,0,5,86,190,67,168,138,224,119,166,127,213,62,177,66,13,54,46,202,13,227,119,111,171,72,91,119,122,96,12,30,6,233,237,53,69,204,157,50,24,129,199,72,25,247,122,125,170,247,111,158,213,182,90,173,157,106,33,73,18,249,86,98,181,187,126,218,120,24,119,136,146,27,45,201,105,67,220,9,157,103,39,195,161,154,142,154,8,237,14,81,196,141,219,168,255,153,221,95,173,55,243,24,248,213,222,187,106,59,25,1,175,98,173,126,8,143,105,212,25,230,199,164,89,103,163,155,219,253,131,86,18,112,243,104,200,40,57,155,81,185,70,161,67,117,182,26,126,189,26,149,152,137,124,220,60,251,248,87,28,23,83,221,2,48,218,177,149,55,40,225,76,176,177,173,201,48,75,36,163,148,210,60,49,94,80,108,37,8,149,237,144,153,80,183,178,14,65,179,131,66,210,23,32,196,15,166,75,126,219,93,97,231,193,174,140,219,22,212,161,71,235,192,86,238,24,58,172,4,109,149,165,183,194,173,47,110,162,213,79,75,247,183,45,53,140,177,27,176,145,159,32,203,9,28,41,50,172,83,127,230,225,55,94,143,25,248,183,246,185,19,158,103,236,112,7,50,35,137,208,112,73,221,16,203,20,57,179,99,221,213,150,122,23,26,155,109,22,92,126,228,70,178,79,14,16,41,214,73,23,37,125,10,181,19,192,222,123,102,86,240,34,29,143,7,225,116,60,131,129,142,199,82,208,233,120,68,149,95,187,146,199,115,253,166,228,77,159,168,228,53,210,199,26,74,1,218,41,15,152,16,50,237,166,27,48,247,198,12,74,183,7,171,103,204,141,137,173,27,71,109,168,168,213,254,43,151,233,141,208,46,98,113,194,187,152,182,247,100,234,94,101,157,142,198,117,227,79,54,178,10,255,36,69,112,86,189,216,209,71,93,23,251,251,53,91,173,17,6,220,86,107,111,142,176,211,172,220,63,160,220,62,110,180,47,159,42,120,41,148,40,102,213,185,118,192,186,72,199,131,177,254,104,64,5,56,129,72,83,223,68,169,103,74,2,253,150,5,204,77,84,228,250,166,65,163,157,243,114,101,214,171,197,214,54,82,100,64,177,10,27,15,118,129,234,180,94,131,184,38,98,42,170,220,20,182,240,77,33,41,157,78,139,201,22,194,202,173,40,129,178,37,65,5,25,206,95,252,195,177,26,136,73,122,21,208,138,223,168,101,25,8,182,230,140,104,108,190,9,147,69,108,93,85,213,85,233,95,178,63,154,117,117,107,168,19,74,41,83,169,154,216,107,115,2,50,72,133,145,96,83,69,45,31,134,20,84,225,8,47,197,13,106,64,246,141,153,195,173,192,8,138,52,190,0,104,129,85,97,80,179,182,120,128,36,238,105,2,133,237,187,109,242,152,196,105,184,141,80,108,241,103,83,144,184,53,7,153,185,208,62,130,90,168,215,176,208,186,14,32,225,197,179,106,95,6,153,13,66,128,101,114,4,202,35,122,154,251,129,205,17,55,125,130,16,68,90,138,83,192,249,245,194,132,229,227,166,80,8,9,85,7,122,25,96,39,80,201,5,233,37,244,153,17,113,160,244,100,63,196,93,19,183,86,220,126,217,38,77,55,115,190,233,145,55,164,236,195,115,152,102,248,6,158,227,184,148,227,97,23,92,110,100,132,35,171,108,108,252,235,162,145,221,213,220,226,19,196,44,43,145,253,27,238,6,168,225,136,240,241,103,238,24,221,251,90,214,61,167,220,148,31,68,182,17,153,75,202,129,34,155,202,89,217,64,116,25,109,38,52,60,18,186,31,123,206,98,194,14,79,153,192,192,40,18,110,146,177,156,132,47,37,220,43,178,184,145,197,180,153,12,219,254,239,35,93,39,36,160,209,106,14,50,218,203,112,47,227,137,250,22,250,249,48,8,87,16,98,227,125,203,46,248,246,6,23,138,42,52,94,159,213,64,3,77,227,152,123,187,93,251,58,250,152,202,246,196,52,97,28,236,118,185,67,250,127,105,209,238,163,218,244,119,193,56,43,207,7,161,98,134,129,194,208,179,169,65,143,180,24,93,25,63,15,91,146,48,204,176,91,103,34,193,69,189,39,204,172,22,220,54,139,113,24,26,231,226,54,47,238,231,184,223,29,59,8,28,163,227,134,12,249,222,251,153,251,198,220,48,169,17,210,242,213,165,50,83,7,236,13,97,172,110,200,177,217,5,160,227,40,82,70,21,52,54,85,54,97,84,59,180,152,207,222,33,40,160,207,141,186,87,233,78,135,94,118,43,48,209,23,153,35,60,101,103,142,24,12,236,17,158,163,179,71,30,179,252,218,237,126,62,1,254,114,237,254,95,140,210,182,190,8,167,15,82,147,48,159,111,95,159,237,235,115,209,233,154,210,233,69,112,220,107,67,34,175,187,77,195,17,63,161,219,23,237,143,223,98,81,154,251,154,221,215,226,190,86,247,181,185,175,221,125,29,238,235,244,189,23,255,57,140,205,15,167,206,191,238,231,75,184,79,203,195,202,186,226,63,89,196,194,44,162,239,153,40,182,187,86,186,173,103,219,107,91,202,93,179,155,205,255,183,110,91,45,181,236,75,171,7,91,135,41,48,169,207,186,218,195,25,253,76,231,199,182,149,218,214,125,110,218,226,67,67,62,247,186,213,99,91,181,197,28,150,212,94,89,90,63,59,237,189,236,247,121,172,203,124,46,235,92,155,88,85,101,47,103,107,199,90,215,173,177,89,148,130,198,186,124,76,251,208,4,158,157,242,122,158,251,92,23,236,247,49,187,185,206,203,190,105,39,9,40,86,229,67,157,229,161,66,190,96,157,171,67,224,171,151,217,87,39,125,231,225,158,123,178,231,111,148,249,141,50,191,82,202,252,218,78,120,42,153,65,106,114,139,221,91,208,249,37,32,243,76,24,12,28,105,100,148,175,230,217,162,99,156,155,197,167,104,189,221,185,94,4,166,22,22,187,203,119,141,17,154,233,19,14,149,201,198,181,80,23,245,176,131,31,66,183,160,89,119,212,45,66,56,134,15,220,170,139,1,196,220,21,51,188,136,221,8,70,44,7,254,80,103,141,131,156,0,161,128,226,151,218,223,233,168,24,162,128,240,61,84,33,207,192,130,254,10,182,66,53,2,145,34,5,36,162,129,102,178,58,116,77,46,134,139,81,186,82,201,194,33,94,232,124,63,124,11,183,42,246,246,136,144,21,206,22,20,132,238,2,246,135,52,128,60,129,89,240,229,66,136,199,176,56,97,245,96,105,221,178,71,202,32,231,205,34,107,104,68,180,106,247,114,162,104,179,111,130,81,240,214,157,147,197,27,116,0,99,204,181,79,113,62,52,191,77,3,171,132,184,87,231,153,92,45,162,163,72,128,24,181,220,38,23,44,166,191,110,10,224,14,44,70,202,245,217,161,253,26,75,163,181,106,151,78,173,48,241,221,247,221,56,186,76,194,244,216,71,181,139,35,249,236,31,224,115,169,244,51,112,132,211,32,66,85,187,225,81,8,102,83,103,33,127,2,27,155,7,106,77,201,46,16,167,163,96,166,170,195,218,190,113,180,205,27,168,48,175,126,246,55,89,139,101,202,240,156,175,69,88,174,176,160,18,133,178,143,223,70,92,11,47,85,229,5,25,143,1,109,216,142,50,115,226,245,235,220,119,82,103,31,143,78,54,140,80,65,210,8,60,136,88,208,102,0,33,181,113,59,132,17,37,99,134,89,141,19,6,92,228,200,2,108,134,205,19,247,214,176,249,226,10,102,139,156,16,130,17,75,78,75,3,183,12,28,213,49,221,200,147,29,203,6,145,183,90,252,148,99,250,94,38,4,177,241,248,211,37,213,214,29,210,7,50,128,151,6,71,76,33,54,130,65,224,139,220,13,38,197,246,127,1,87,100,122,249,242,75,114,69,126,233,10,42,31,147,226,97,105,119,186,239,232,91,39,85,16,194,243,56,210,231,64,102,86,169,154,133,36,45,220,78,255,232,187,207,24,139,2,236,80,77,14,81,173,201,169,253,17,226,80,155,232,22,35,187,154,245,76,171,114,24,37,75,111,86,112,228,80,75,56,202,44,34,238,240,29,232,233,148,33,3,177,179,234,206,108,253,136,228,250,4,106,241,252,131,206,95,68,226,137,25,20,120,62,72,1,214,123,68,150,87,57,0,105,246,177,219,105,136,66,44,60,83,32,36,168,136,103,3,199,234,159,254,11,216,31,235,1,242,91,97,25,32,150,66,25,184,114,65,6,203,88,131,227,27,134,172,6,145,163,41,214,38,24,207,195,239,141,121,189,156,210,159,134,129,230,32,120,218,69,120,22,85,148,34,190,131,206,147,105,219,20,61,231,165,139,10,23,85,63,105,225,28,5,175,90,92,165,57,28,28,2,33,244,46,95,114,124,57,18,185,168,220,121,179,87,61,15,99,115,35,15,19,195,153,7,180,120,172,181,136,218,4,247,126,113,252,122,9,89,221,100,30,68,87,50,100,212,20,25,50,52,1,100,54,176,174,108,255,194,30,143,60,32,176,8,199,64,28,123,137,28,200,41,230,81,133,3,190,181,57,210,149,239,97,181,156,38,133,91,60,112,0,199,31,34,11,97,182,62,110,193,184,77,221,86,14,59,221,241,1,218,62,171,7,112,188,209,238,130,240,173,87,224,151,225,111,79,242,1,31,212,15,42,76,4,49,134,248,168,114,136,145,188,216,7,143,139,175,29,33,103,159,140,31,78,122,130,76,99,191,233,16,140,246,8,161,104,65,15,212,232,8,54,33,232,140,224,83,150,118,201,18,215,97,5,179,53,245,11,16,150,40,44,226,192,236,7,73,128,130,34,147,35,40,103,114,89,20,104,217,173,238,227,207,210,101,233,131,0,246,79,8,4,150,3,245,167,149,221,195,194,240,237,250,229,252,245,7,220,231,25,47,190,169,187,175,81,119,187,86,186,186,93,53,117,61,213,174,73,41,136,29,158,61,70,236,128,157,46,97,149,135,176,202,6,95,96,234,42,136,247,60,180,65,28,73,92,178,242,1,58,221,65,227,68,127,194,228,156,191,204,14,110,96,234,87,98,103,96,107,234,80,87,180,154,1,7,196,147,251,78,173,221,49,234,118,37,114,105,185,85,10,130,109,31,32,114,19,0,148,133,153,67,1,23,3,45,122,111,251,48,144,220,122,128,182,22,4,145,34,125,184,138,90,194,130,32,31,223,16,41,199,209,94,43,132,43,201,52,158,28,179,128,132,74,154,221,152,245,140,237,54,227,10,73,204,31,94,182,228,107,180,122,147,81,28,244,139,115,246,159,140,35,129,240,189,91,192,154,220,188,88,221,185,1,67,160,80,13,160,161,150,4,70,130,116,227,155,120,22,206,200,17,135,162,24,208,88,38,149,196,30,15,115,64,150,146,74,132,136,134,34,87,25,12,87,116,22,87,85,200,139,230,78,171,73,23,245,230,64,50,203,184,144,78,13,62,173,39,42,82,173,45,2,180,225,155,3,197,54,43,64,0,211,1,249,52,203,171,115,179,46,221,108,67,129,131,10,161,88,254,143,74,88,9,199,163,14,229,132,1,77,65,107,195,240,15,199,43,124,203,209,168,112,81,150,163,0,196,116,1,106,128,83,4,89,80,227,18,228,32,4,130,180,213,97,0,15,214,136,93,226,33,17,194,227,109,0,241,0,61,22,48,0,31,33,1,164,2,218,72,175,217,125,153,194,113,126,166,248,108,138,56,98,200,139,18,132,106,253,246,163,211,235,229,103,48,137,121,137,13,176,78,206,199,74,177,149,70,71,61,22,6,61,40,68,224,22,239,77,186,35,156,182,177,74,111,227,103,155,110,188,118,79,119,118,53,0,210,156,23,139,82,37,203,128,19,102,225,87,188,208,66,236,204,135,116,135,207,42,81,96,1,235,8,146,205,188,160,126,13,203,111,203,115,107,232,102,229,88,78,84,202,229,190,88,179,182,217,53,115,142,99,194,152,252,89,85,236,197,64,226,52,134,82,114,17,192,24,45,223,87,30,96,194,94,161,42,226,166,131,201,229,179,208,223,125,188,49,18,62,197,95,194,199,71,102,159,137,132,32,56,18,233,18,69,80,34,167,162,48,75,37,94,20,139,163,228,4,52,55,163,37,196,91,213,117,9,71,196,120,83,219,211,74,74,79,9,217,121,228,118,142,182,119,197,164,60,237,79,169,40,121,26,128,18,113,21,101,90,148,96,86,205,137,66,39,38,157,0,77,4,108,38,131,131,156,206,68,121,20,248,170,40,226,137,240,30,65,219,8,42,54,4,91,43,26,230,112,60,125,3,31,45,21,56,70,92,90,210,141,1,225,196,8,247,213,104,236,81,104,99,177,171,82,146,79,112,22,177,121,241,24,120,133,188,25,84,141,35,187,23,43,65,220,119,214,111,236,144,182,230,36,71,155,66,95,147,158,135,50,154,251,33,27,239,31,62,19,179,237,192,158,106,83,12,110,36,18,236,166,62,149,157,29,155,226,129,158,0,98,223,157,173,232,102,92,189,249,145,246,177,61,239,50,76,108,154,168,244,71,203,160,42,211,177,50,137,65,17,140,14,1,12,69,108,91,92,110,56,200,204,18,8,105,160,180,72,138,9,189,102,84,157,210,126,178,67,6,11,232,160,51,120,186,57,147,223,124,200,48,152,224,43,34,21,171,149,28,167,215,182,94,186,16,171,14,240,233,147,136,212,208,98,49,188,40,128,175,212,85,5,48,97,150,117,132,128,76,17,31,214,150,128,116,217,25,215,45,0,116,86,19,203,3,253,128,91,93,114,21,170,224,217,84,101,144,203,144,49,22,171,114,29,242,28,87,28,10,177,240,172,232,209,19,72,16,58,254,6,238,168,163,36,138,76,84,119,162,36,76,196,229,32,84,19,163,119,48,139,121,125,34,200,173,124,175,72,151,123,122,179,71,174,192,56,226,32,150,202,183,43,55,96,100,55,75,235,177,248,11,212,139,78,200,120,181,64,218,56,52,91,138,69,238,70,30,35,32,80,87,9,134,60,196,158,53,169,22,9,238,146,72,147,102,174,134,227,118,68,216,52,128,185,98,184,42,80,98,180,119,131,161,22,76,185,104,237,53,60,0,48,64,69,192,236,91,213,180,15,128,4,33,45,253,26,183,191,25,126,11,223,41,30,16,86,208,81,99,39,157,89,243,121,113,107,81,122,168,235,69,151,11,90,109,160,1,16,114,249,14,106,96,12,145,125,140,12,70,106,211,132,185,48,120,224,248,106,117,117,229,189,239,92,170,219,69,236,58,64,100,72,196,249,15,79,196,74,177,213,175,103,9,142,64,152,107,100,101,21,115,165,193,30,112,163,241,56,213,58,24,57,51,182,162,23,7,71,80,113,170,186,220,134,110,207,214,67,110,235,166,193,230,147,132,0,168,122,180,200,221,113,99,191,139,226,21,97,220,36,130,162,165,151,89,132,169,225,136,227,192,161,149,55,195,132,6,217,17,13,82,219,118,6,57,176,167,201,57,85,6,167,139,104,200,111,112,246,147,122,51,92,145,58,142,63,118,109,137,20,244,226,47,8,44,162,182,121,4,152,186,51,57,70,83,93,125,201,50,6,128,234,249,16,95,160,55,197,40,54,215,48,104,109,96,116,226,38,178,208,202,193,3,148,120,137,132,38,3,164,6,178,143,144,54,58,99,219,72,224,224,44,211,229,127,182,89,194,80,71,77,235,168,89,76,119,139,18,153,233,80,27,17,17,236,184,101,144,52,129,93,142,252,52,48,92,105,85,32,216,47,153,112,158,80,57,118,64,49,18,77,188,209,38,139,86,219,44,81,4,139,2,168,226,169,223,163,67,55,248,124,157,87,56,58,141,113,216,236,248,28,134,169,105,109,118,128,128,171,44,243,165,153,167,141,215,30,92,113,209,85,231,60,121,205,86,6,162,142,43,134,210,102,38,225,104,53,38,150,165,155,153,92,158,24,165,221,109,16,60,160,150,93,105,235,198,214,19,85,41,170,101,154,65,2,83,5,172,158,30,155,104,0,215,82,47,10,198,32,59,45,45,150,65,130,12,159,64,194,3,62,202,244,148,46,8,86,77,52,125,46,205,163,2,135,8,151,136,226,148,157,58,195,250,132,106,55,112,196,145,95,142,236,84,244,203,33,204,180,130,203,55,147,249,91,42,215,80,192,39,210,60,170,10,174,105,22,153,65,47,176,91,2,64,201,65,230,167,18,57,113,248,102,150,89,48,224,46,173,188,226,207,45,96,168,236,171,35,57,139,222,156,81,5,136,114,54,17,198,137,192,134,150,139,141,8,20,163,125,108,36,72,235,40,93,162,4,10,66,42,136,177,236,116,134,0,1,55,30,20,142,130,50,205,102,192,77,208,144,108,218,197,144,95,225,140,100,31,52,138,228,11,221,67,163,96,199,6,209,27,146,24,158,227,126,71,219,15,43,1,223,120,198,34,130,5,141,246,209,80,60,151,207,166,6,142,38,154,111,62,216,119,178,131,77,140,242,177,214,104,77,23,101,70,68,145,112,143,101,247,128,104,62,4,3,227,138,37,60,227,151,73,188,55,79,56,121,128,215,79,158,179,143,118,25,48,162,68,47,204,142,24,195,41,228,184,195,174,40,204,55,140,125,245,127,118,74,34,7,221,156,103,80,74,164,95,20,144,81,136,210,42,239,35,224,244,85,144,46,130,103,96,16,65,81,134,68,41,19,180,250,65,239,23,9,235,163,141,139,55,35,220,133,193,96,102,39,166,120,20,245,169,37,93,236,140,187,141,221,140,185,166,170,145,8,240,9,252,93,82,171,201,238,85,200,1,88,2,42,133,46,31,127,46,2,221,208,221,134,254,180,71,237,85,141,86,237,84,83,182,195,137,177,170,113,140,149,196,60,24,121,203,232,186,69,246,53,178,135,72,73,129,212,34,53,142,106,95,84,13,51,110,27,57,114,226,47,68,167,98,234,117,68,52,90,4,62,70,77,96,92,69,18,118,49,70,101,184,160,13,8,232,48,108,88,188,7,69,60,14,215,24,204,255,159,157,236,219,74,18,128,150,94,5,223,52,196,14,12,161,5,99,236,1,51,179,101,212,149,103,56,147,51,124,128,172,45,104,76,79,201,38,5,129,16,54,117,176,247,39,207,5,6,225,29,253,11,137,78,19,244,158,65,51,138,42,88,84,211,22,217,164,224,67,154,61,105,202,73,51,170,166,224,85,74,64,67,127,183,68,47,244,26,108,162,231,94,120,201,138,11,136,24,181,241,168,177,227,210,117,96,15,70,168,251,99,7,205,121,230,183,36,184,135,201,17,114,197,110,58,64,218,147,18,166,12,39,17,183,77,114,167,113,27,231,100,186,57,31,162,174,128,37,217,152,139,243,77,133,168,147,36,254,226,137,48,141,26,215,250,202,61,248,228,114,71,154,136,116,147,208,214,148,59,223,172,200,228,28,120,14,243,157,153,208,106,61,149,80,113,60,239,94,229,202,162,114,47,62,76,148,104,82,14,134,135,56,242,153,155,227,115,110,187,184,53,158,131,59,95,67,244,69,56,87,69,51,108,160,51,99,96,111,129,1,38,65,120,163,91,39,58,126,6,207,80,118,228,15,163,156,50,174,28,194,244,144,77,99,113,83,193,252,185,202,58,66,188,80,65,38,75,204,15,174,190,199,112,180,193,91,57,186,51,221,0,232,172,96,228,234,73,208,217,16,150,230,235,116,218,232,1,75,181,116,198,64,248,142,234,167,45,35,234,69,152,1,218,235,61,168,23,93,168,78,131,106,53,234,94,131,166,116,118,210,237,193,237,245,82,71,30,214,51,4,102,102,161,155,147,143,237,28,130,63,3,101,38,180,235,137,6,198,96,231,57,24,162,21,215,44,68,14,98,112,33,177,147,52,248,176,234,207,24,184,104,65,141,38,182,103,13,250,115,36,136,131,235,189,95,165,8,125,209,205,11,98,1,238,226,197,70,115,24,111,94,196,148,135,71,184,103,252,133,223,18,176,252,158,182,61,55,134,160,30,200,2,18,52,185,99,88,187,85,151,224,230,72,129,89,45,64,92,246,141,74,0,151,172,215,212,115,250,102,99,206,199,112,3,191,153,148,253,19,105,74,216,157,17,187,76,201,120,38,78,219,152,69,118,125,235,179,94,215,153,227,221,244,142,149,175,138,104,52,138,115,117,94,57,86,156,64,203,157,89,191,194,67,41,130,185,59,215,164,59,29,120,7,112,101,16,208,197,161,167,8,124,171,249,224,235,162,164,148,138,88,231,112,167,133,121,143,209,27,243,65,102,61,74,26,236,58,152,253,104,76,207,41,163,119,68,18,189,3,237,179,152,144,132,92,147,147,25,150,33,26,172,252,153,32,112,191,155,47,224,44,30,226,143,5,128,109,154,104,191,21,96,226,114,115,57,20,1,95,121,225,50,96,228,202,137,129,2,216,18,63,2,192,234,204,64,9,224,114,182,132,25,55,119,106,24,122,189,233,201,199,16,10,7,189,72,144,153,3,49,100,25,1,112,39,92,250,154,132,83,33,174,237,176,27,73,210,91,30,187,163,1,25,35,6,25,176,163,82,89,156,28,156,136,169,0,41,150,152,31,161,195,156,239,84,222,44,73,245,173,234,219,34,43,79,136,235,65,92,60,71,23,78,102,48,224,109,39,141,153,197,93,233,118,106,153,128,97,138,44,45,58,100,252,53,108,217,25,253,150,17,194,241,217,184,213,135,248,59,169,214,240,228,125,30,64,110,116,79,51,230,112,149,252,22,124,132,158,240,47,55,199,224,210,8,251,210,237,194,124,163,222,156,199,64,140,98,160,218,99,4,13,131,14,75,115,129,160,20,139,17,211,201,114,196,53,27,23,214,45,254,53,105,248,165,169,103,191,74,219,46,86,102,96,184,156,120,29,146,87,131,95,170,188,49,246,206,20,47,169,173,69,128,211,167,37,153,98,49,143,47,206,197,189,231,247,166,219,187,87,219,59,48,128,145,73,120,46,226,185,76,96,66,158,71,93,176,177,192,234,34,63,140,60,51,227,172,142,253,14,172,217,243,237,43,222,30,216,127,16,16,73,167,129,194,211,125,144,108,150,105,220,80,163,116,76,68,168,19,179,153,20,6,33,125,33,198,7,65,31,84,1,71,187,143,127,109,29,74,151,48,158,54,222,208,33,43,0,195,238,62,137,109,86,21,219,171,190,115,213,123,114,33,22,143,223,229,5,96,113,115,224,6,160,159,13,240,104,255,176,79,126,198,115,13,144,73,183,71,155,236,182,190,250,57,140,146,41,199,211,58,206,175,255,171,203,47,190,79,155,135,147,227,150,111,99,27,99,7,177,251,97,120,56,122,153,47,48,133,132,109,140,92,165,122,87,184,13,174,247,75,166,99,71,95,189,184,133,208,36,166,30,246,86,166,16,7,105,236,101,118,38,211,163,200,247,74,65,84,27,6,189,34,83,60,22,37,107,137,232,46,65,105,128,72,16,189,178,3,167,8,58,116,26,155,112,139,219,130,105,108,228,238,131,196,104,3,150,122,59,47,184,224,49,60,176,6,244,10,10,203,141,175,28,157,171,193,135,75,198,208,117,58,184,100,252,97,134,14,9,87,184,106,46,171,79,75,230,96,146,242,233,43,12,185,40,219,140,141,161,89,123,83,97,28,241,149,12,41,29,56,80,66,36,20,71,71,137,164,125,252,57,31,213,122,178,190,186,225,214,127,225,211,18,29,175,147,127,90,130,147,156,57,55,203,58,5,47,203,191,64,126,11,158,213,151,155,223,226,55,194,233,131,248,62,39,94,151,207,131,215,246,186,135,16,186,168,248,173,150,115,64,217,103,72,215,207,90,68,127,6,247,107,204,61,205,50,224,52,123,156,88,186,229,179,124,124,30,170,115,241,121,146,60,211,124,202,13,96,115,33,216,171,86,164,137,73,188,133,41,102,252,100,55,181,73,65,14,205,106,115,38,177,133,154,151,179,37,169,75,239,76,83,54,78,62,224,82,41,179,161,190,215,38,61,69,58,98,106,175,83,239,224,81,163,42,32,119,190,194,201,185,86,68,51,87,196,240,59,245,179,92,199,235,95,46,37,221,66,248,164,152,152,131,62,84,165,96,179,240,244,18,24,30,57,190,9,190,216,136,168,244,187,104,63,52,234,77,115,117,155,228,222,36,89,119,27,107,45,18,43,233,91,126,169,116,141,120,38,235,255,132,148,184,27,225,20,14,174,24,96,38,194,236,1,100,246,157,54,71,57,237,144,183,70,137,162,44,157,215,237,148,99,200,133,39,51,158,188,62,133,57,193,129,195,82,75,112,201,135,210,7,173,245,150,111,145,97,25,227,50,59,42,72,168,196,83,81,66,102,142,12,3,145,122,34,246,84,158,110,4,191,134,180,242,29,3,73,58,159,151,61,108,205,251,212,41,33,149,12,62,175,133,156,170,173,152,26,210,97,95,149,227,30,222,200,244,20,124,243,254,106,91,70,2,212,201,153,218,82,186,168,46,42,110,51,33,71,123,39,18,169,109,195,206,197,33,133,79,65,210,55,216,248,18,224,128,102,63,54,98,187,191,182,174,188,182,250,90,26,96,142,238,72,192,96,255,192,130,129,2,250,104,190,122,77,244,91,98,225,95,182,171,22,181,193,244,192,115,113,71,153,42,186,192,5,34,14,45,139,164,158,204,6,133,111,136,100,46,208,8,121,52,228,40,129,19,52,192,32,90,28,23,7,251,211,197,91,245,92,8,0,195,131,78,229,2,40,71,212,167,204,236,97,200,151,228,33,155,65,88,46,202,86,102,196,48,199,192,107,147,236,172,153,215,113,108,226,64,232,233,10,236,175,44,204,244,24,112,52,46,68,178,82,233,189,111,251,149,6,197,30,43,252,162,37,104,240,243,192,206,102,241,72,10,91,92,4,117,16,197,138,3,46,23,120,240,216,202,240,25,17,174,230,189,168,177,236,72,176,38,52,34,212,214,208,94,69,213,132,21,34,187,105,37,32,28,140,163,74,241,242,140,121,186,161,131,34,8,198,105,117,116,117,69,224,201,248,176,113,79,36,219,38,238,173,136,229,176,16,184,82,213,102,201,65,13,208,105,190,103,252,92,210,185,42,38,174,176,149,96,212,19,251,101,18,131,23,73,181,69,60,41,38,212,150,76,168,241,84,156,84,123,96,227,107,23,106,141,123,252,38,212,166,79,52,169,79,214,180,78,240,127,178,194,127,128,179,241,144,88,12,227,228,125,15,192,3,44,55,214,233,49,232,67,50,142,98,170,154,93,211,222,24,76,70,1,0,182,132,32,225,137,28,15,97,236,137,4,163,232,14,173,252,184,52,103,79,30,231,135,110,4,184,250,195,131,60,12,178,12,16,203,131,131,153,170,128,15,16,203,160,239,19,24,6,30,103,176,255,197,53,98,49,197,7,192,56,13,144,93,163,87,163,26,75,97,138,51,102,231,141,32,77,122,93,225,219,121,150,87,177,234,150,176,26,128,31,214,213,229,237,108,140,157,152,13,67,38,35,37,159,143,88,174,226,117,22,79,12,27,117,135,248,231,129,197,179,253,121,190,1,0,46,33,129,216,84,93,20,160,105,105,25,194,118,157,216,169,12,90,8,52,91,67,66,75,27,180,205,32,165,241,227,13,162,239,1,161,212,210,72,226,187,36,191,211,67,148,77,142,119,40,150,81,130,210,68,174,24,68,76,228,89,114,67,81,176,221,76,163,192,11,46,52,10,80,18,133,24,125,104,168,102,155,154,245,152,72,175,220,1,101,34,209,91,192,238,77,197,218,184,49,22,60,49,119,164,80,108,105,109,175,156,236,14,128,149,101,103,200,97,144,254,79,120,157,141,18,92,67,206,115,38,145,12,210,6,136,189,208,227,198,194,123,93,54,160,203,119,196,218,18,132,141,159,35,104,168,89,104,221,121,177,141,13,110,122,196,52,27,72,175,4,0,215,43,195,138,60,200,113,82,214,208,98,243,5,104,15,3,58,22,189,180,0,59,86,134,143,233,219,248,252,172,34,136,27,91,98,177,21,64,216,39,95,57,236,167,205,120,243,145,88,10,120,20,248,170,125,5,11,129,79,180,124,170,75,210,77,93,50,143,106,16,119,218,41,236,154,214,125,135,70,218,0,193,1,118,210,234,78,165,222,96,205,47,171,5,126,35,110,100,240,141,213,42,190,179,14,225,132,197,167,29,105,203,78,36,78,81,57,244,4,92,157,181,9,43,172,6,97,55,117,133,66,242,32,141,178,177,42,114,236,180,225,173,220,189,46,124,194,15,19,158,9,243,44,60,169,213,8,176,193,60,55,236,95,156,144,11,128,6,72,209,66,179,129,182,21,54,129,140,156,250,107,214,212,54,96,197,15,138,24,75,228,0,87,76,98,11,16,221,180,164,205,156,200,232,207,14,94,13,176,50,45,43,203,146,7,2,224,192,213,181,83,12,165,78,73,9,138,76,166,237,164,74,17,243,120,53,20,54,149,238,182,127,55,61,240,6,16,151,42,161,75,28,215,161,48,24,170,100,41,133,27,206,69,77,231,19,96,34,76,44,136,145,197,255,130,180,37,29,18,195,168,18,155,171,178,163,178,109,101,115,228,33,32,39,59,57,138,99,28,121,10,1,16,71,130,108,214,14,229,48,89,113,110,20,145,3,215,211,170,52,181,3,8,198,205,44,88,16,5,44,56,42,109,94,183,203,180,63,148,52,81,129,100,103,57,198,130,105,3,46,235,128,139,182,226,126,36,150,116,177,246,48,163,7,136,188,45,129,93,201,60,145,45,147,137,24,39,32,48,9,176,199,18,228,166,65,209,37,2,104,25,1,190,245,39,164,20,10,51,8,27,98,237,23,147,106,88,132,7,206,37,203,189,28,253,90,122,233,88,75,45,0,112,157,9,191,227,225,160,139,77,111,58,195,237,57,9,62,105,0,178,193,118,180,101,234,131,164,113,197,187,137,162,63,208,191,217,45,168,191,30,58,85,34,165,83,40,144,183,135,68,239,204,6,18,63,35,178,13,213,43,198,118,155,112,112,54,108,144,255,4,85,103,152,82,129,101,6,229,82,33,128,156,33,61,210,109,9,59,125,225,109,13,69,58,146,55,112,130,109,162,40,138,152,109,147,79,54,116,8,39,66,93,140,32,27,76,236,12,144,99,224,31,110,86,5,40,162,154,183,146,53,237,106,212,72,103,46,62,224,117,99,24,68,252,85,150,73,10,146,182,241,170,169,239,175,15,239,249,68,153,169,154,178,17,234,236,180,92,3,174,246,201,116,6,120,134,203,210,215,26,4,153,195,160,51,128,54,32,166,23,168,3,137,250,17,117,148,68,145,1,178,116,106,211,129,42,209,104,53,6,69,42,211,182,18,157,172,169,93,59,27,40,81,239,0,185,133,150,94,120,175,105,138,179,176,109,97,104,64,32,76,47,204,183,11,212,145,77,91,13,20,98,197,106,19,246,176,0,4,118,118,3,34,194,189,92,237,154,216,108,237,139,175,121,199,161,227,116,58,221,115,116,154,49,218,67,125,184,198,215,78,137,88,83,38,126,106,41,22,125,166,146,152,38,145,168,41,153,58,147,104,61,153,114,148,232,80,198,176,142,8,2,67,47,216,126,137,133,120,160,239,231,146,213,102,28,121,98,150,157,50,244,200,242,81,32,12,2,35,227,194,2,35,80,75,64,3,130,188,217,27,209,173,142,143,211,32,34,10,64,5,72,212,9,14,114,68,227,117,139,160,216,84,34,77,163,200,69,185,140,135,30,114,52,109,73,59,208,5,22,85,128,76,81,200,212,9,217,30,37,180,214,188,247,142,199,14,51,12,182,254,83,250,17,40,81,235,176,96,90,4,19,36,200,130,69,67,127,113,166,117,88,159,220,135,18,28,38,202,100,102,131,160,34,122,161,170,50,158,81,145,110,4,178,160,130,25,47,221,137,138,237,210,22,112,88,61,166,65,228,179,178,25,32,220,151,149,218,132,255,44,0,98,237,17,53,26,9,39,214,211,210,93,210,176,177,112,1,50,192,12,21,24,205,44,186,66,93,97,200,200,2,88,169,193,52,100,172,131,140,137,201,124,2,10,186,244,141,135,78,116,168,9,0,242,200,129,206,196,231,160,11,148,33,53,10,112,202,1,247,232,171,22,144,225,20,166,73,108,159,39,161,180,40,103,6,48,192,99,248,86,93,107,142,160,45,66,128,179,142,90,91,106,27,70,3,146,28,173,75,128,204,6,176,89,60,74,189,36,157,126,162,235,84,53,226,11,192,132,11,171,254,3,247,148,161,24,239,67,80,109,14,96,119,236,158,226,93,212,45,115,241,95,97,186,43,49,79,26,250,190,101,7,202,254,58,149,38,59,40,58,185,163,35,60,241,150,39,62,245,196,243,158,251,231,185,195,54,14,219,123,145,18,103,83,162,75,226,42,148,41,243,208,31,138,111,154,174,160,200,2,55,9,65,28,85,202,95,122,134,162,87,88,192,95,111,82,193,251,247,61,68,252,134,238,136,192,143,79,15,196,221,51,113,204,108,248,138,252,24,203,37,23,173,28,207,148,59,37,22,164,197,206,6,168,117,225,240,55,8,142,132,156,105,131,7,46,122,242,131,123,45,56,224,14,137,8,140,94,59,128,64,71,18,107,26,206,255,188,227,41,115,77,13,222,171,75,245,113,80,51,83,85,212,41,171,194,55,184,4,28,149,226,82,81,33,92,27,102,45,5,121,22,7,102,130,90,220,191,119,232,134,255,201,179,166,155,141,38,50,79,73,255,55,170,195,179,247,118,13,254,183,204,73,167,137,174,236,198,76,179,209,221,196,188,128,11,37,106,4,85,110,83,44,11,184,106,228,215,14,35,96,188,6,145,122,169,232,63,232,204,138,138,70,162,141,96,243,174,71,84,54,82,15,27,241,126,197,9,155,247,24,77,165,87,241,153,212,8,251,59,20,32,136,205,131,235,24,218,4,80,152,132,55,219,219,160,184,90,50,223,68,163,73,212,30,167,27,37,186,147,87,174,28,166,32,175,255,133,51,104,180,99,18,99,39,59,212,74,78,190,208,105,148,185,149,188,227,169,37,67,226,163,161,168,88,231,10,120,166,168,163,123,48,115,32,58,15,35,47,65,112,67,14,67,112,195,114,14,68,111,101,100,134,72,106,170,120,47,227,50,54,59,116,85,12,189,5,149,85,142,18,43,32,103,49,37,161,88,120,232,71,218,116,192,10,90,37,97,18,216,206,74,212,92,130,211,66,5,115,37,57,135,4,215,95,116,164,237,114,15,13,29,158,36,77,23,158,197,60,240,174,93,58,7,8,165,232,61,135,86,45,245,162,22,17,212,24,234,56,42,44,168,206,163,114,61,121,87,98,147,92,95,24,40,210,239,129,224,91,21,195,113,106,60,208,228,137,239,78,175,183,177,200,113,52,224,232,90,111,190,44,99,194,53,30,212,122,63,162,3,249,151,5,131,87,50,57,226,245,237,103,145,71,176,194,55,117,124,201,241,170,156,179,202,126,36,224,194,153,201,86,249,84,82,225,124,125,117,225,91,196,180,211,77,96,140,241,39,73,136,74,8,97,241,73,2,93,252,11,179,212,44,74,70,238,192,224,75,38,99,108,81,140,63,26,35,148,212,217,14,84,38,155,192,32,133,251,194,11,68,187,192,140,236,192,201,203,58,172,56,159,42,140,230,212,237,127,194,42,33,227,16,85,139,97,115,128,105,222,243,226,182,143,150,3,194,102,125,107,180,115,229,74,12,51,164,186,194,200,28,147,58,157,75,107,230,133,68,215,23,59,101,209,46,228,255,160,55,50,4,139,133,96,150,16,238,178,107,142,181,85,33,108,38,131,253,196,236,13,244,230,158,136,77,247,150,235,167,215,238,145,12,221,62,200,227,23,42,220,190,224,70,106,129,172,106,12,224,203,190,214,47,51,192,211,58,22,153,7,101,6,72,102,70,94,152,155,50,166,150,192,244,76,36,48,209,232,196,72,61,29,130,87,131,176,108,49,146,159,89,72,176,255,112,29,240,158,43,107,19,104,115,65,219,67,125,144,25,208,98,35,19,202,119,15,95,70,17,48,74,9,196,128,46,55,39,36,40,53,95,240,38,126,82,179,175,103,1,9,151,170,139,170,91,93,196,177,127,224,132,10,163,164,79,61,250,137,227,223,119,207,199,24,200,122,184,49,189,215,6,141,49,8,206,77,198,3,137,236,216,34,61,221,192,30,89,144,36,81,4,137,61,212,1,24,229,234,140,42,225,22,46,232,53,184,178,130,155,40,122,146,70,111,83,136,104,240,227,5,167,89,193,83,86,217,50,196,202,128,208,50,247,163,119,80,10,103,156,76,22,51,136,89,53,158,171,71,159,104,230,57,13,166,72,27,1,108,53,130,249,18,117,197,168,81,38,122,167,215,78,115,253,213,148,52,80,113,138,91,92,190,186,182,15,171,89,44,52,48,143,176,169,4,114,167,26,84,76,70,163,167,33,120,62,58,28,132,36,160,120,168,146,157,188,112,197,36,150,240,24,90,247,99,76,2,131,220,236,10,172,44,172,244,16,173,148,132,186,60,29,235,177,134,182,220,145,195,58,204,249,234,232,194,157,120,36,39,63,201,249,80,114,138,116,90,111,180,80,48,70,105,100,65,10,229,2,225,216,105,9,195,1,20,130,195,187,1,98,22,52,203,51,207,249,52,120,215,47,61,240,0,24,99,29,98,60,68,22,51,113,17,87,225,45,176,230,103,17,29,249,249,81,3,139,91,152,198,228,248,108,234,249,24,37,174,23,203,153,216,70,177,126,41,251,113,124,108,15,69,3,16,140,196,212,136,68,43,147,171,68,83,244,218,130,10,16,56,239,238,67,193,83,14,24,93,31,122,167,212,131,174,70,117,12,102,135,10,201,105,65,11,144,113,207,100,186,66,42,210,179,35,255,236,48,2,71,193,34,203,251,36,167,193,99,25,124,154,137,223,51,240,232,200,200,19,95,134,183,215,193,158,111,248,59,8,135,145,40,198,133,201,78,168,162,232,79,212,3,153,74,7,61,159,182,62,213,131,216,78,139,241,49,78,173,207,180,106,167,125,39,199,65,254,188,136,215,113,60,84,202,86,59,167,138,36,94,36,6,149,192,252,250,118,160,176,161,190,34,46,119,144,203,135,20,77,189,104,16,166,118,99,102,96,102,134,40,39,220,170,232,245,172,210,5,250,130,29,81,49,76,50,217,226,217,119,180,198,153,34,66,189,19,237,8,134,128,201,46,49,70,238,22,40,99,99,156,37,35,232,241,135,198,60,155,157,144,62,162,158,33,34,90,238,222,192,207,93,0,232,36,224,134,192,147,144,185,26,6,111,4,34,192,249,44,34,38,51,124,199,117,73,150,47,95,101,135,132,78,147,221,84,234,73,236,234,145,111,212,204,93,144,123,21,50,239,67,244,82,100,36,30,215,57,167,134,132,102,8,130,222,109,206,239,162,172,117,17,53,22,252,46,217,5,178,241,154,153,120,147,247,208,212,129,234,141,96,194,121,183,39,99,155,4,225,27,131,16,4,90,199,106,30,207,198,49,200,229,113,33,19,51,207,77,186,96,161,187,56,166,108,220,203,58,128,180,37,52,243,56,146,212,0,66,183,120,96,178,49,108,51,144,24,108,168,162,208,42,44,6,9,247,3,178,187,149,201,5,204,112,73,211,163,138,105,251,137,11,75,8,34,72,102,157,32,222,177,177,190,82,150,164,165,158,23,219,43,195,186,163,41,62,251,16,53,193,151,136,247,153,0,48,26,56,140,73,28,113,89,35,44,177,250,162,113,24,87,42,89,206,116,209,51,218,24,8,40,33,178,132,20,29,230,30,63,46,36,234,59,210,58,234,83,116,103,27,118,220,214,233,222,143,247,80,227,197,135,212,104,28,22,102,88,189,39,215,215,14,178,242,232,183,44,72,142,32,209,26,29,238,16,96,107,29,254,248,129,228,94,203,189,172,137,136,26,157,243,195,21,218,10,99,185,233,45,219,120,17,119,184,171,235,111,243,62,193,179,71,206,30,185,127,34,34,50,57,146,40,40,81,139,129,201,247,145,83,92,114,215,246,182,11,114,75,119,83,220,116,201,222,140,219,247,194,28,95,162,119,192,50,237,142,118,63,184,5,26,64,102,231,153,10,113,170,89,48,171,243,244,164,190,32,115,21,37,140,229,241,103,163,148,179,93,0,117,139,33,125,221,42,184,206,50,255,90,95,4,244,13,12,78,58,23,82,144,134,28,88,68,2,242,27,111,187,7,251,30,195,22,179,192,198,232,33,73,156,13,137,67,34,28,28,135,163,101,196,202,170,168,123,50,49,121,30,175,50,53,139,103,113,241,46,164,51,38,81,49,226,26,135,135,204,228,208,1,42,114,242,97,212,147,93,247,52,232,71,145,218,215,100,193,124,40,47,75,101,54,39,121,172,36,25,38,36,252,144,195,80,151,241,131,128,95,125,206,143,121,250,150,243,227,151,228,252,96,19,79,118,163,156,25,86,253,222,149,96,233,155,41,24,31,25,224,76,59,135,53,183,25,68,18,247,184,151,0,93,31,16,156,136,7,227,18,202,50,3,76,202,193,35,97,124,24,112,184,9,220,108,52,98,229,186,241,53,207,52,62,53,143,28,15,220,239,191,55,53,108,64,234,123,242,105,228,254,5,18,238,172,223,54,223,47,204,34,199,196,234,50,192,101,73,170,54,146,65,114,154,170,186,165,220,198,32,47,223,44,238,22,9,104,90,244,128,151,143,10,176,63,54,7,88,150,97,224,155,188,146,32,234,12,108,121,46,49,243,158,146,160,66,251,2,7,190,252,46,207,187,153,70,108,47,159,202,63,209,10,199,17,245,63,121,14,184,23,38,197,138,41,199,53,81,150,75,138,53,143,91,180,143,224,171,223,163,251,151,190,71,127,49,78,133,13,189,32,233,56,61,21,38,164,243,207,128,138,228,249,6,205,160,143,61,184,253,115,160,159,45,181,234,145,110,184,237,213,59,174,189,46,27,125,43,89,191,251,175,222,237,150,78,183,228,253,238,191,242,116,175,208,44,165,63,71,199,237,159,131,231,156,172,126,125,60,167,211,253,45,240,156,63,234,240,250,125,244,226,231,21,190,9,135,47,27,250,5,8,135,207,240,236,134,92,243,155,7,53,232,217,106,124,3,96,89,95,91,241,19,251,171,100,49,188,190,63,49,53,94,93,241,19,123,188,233,171,210,123,250,144,201,111,171,96,138,21,39,46,190,45,236,251,111,37,190,149,248,86,226,201,18,159,75,25,255,92,58,196,43,117,151,127,146,9,80,95,165,19,127,198,126,95,165,35,126,198,126,115,231,255,175,223,111,238,83,249,245,77,188,243,51,245,251,66,149,152,124,227,143,191,244,246,8,157,209,21,183,139,191,212,98,117,34,13,110,44,70,33,182,90,236,241,235,158,20,235,14,201,230,138,29,223,138,125,61,197,206,231,139,245,31,74,82,174,159,38,205,90,174,195,106,82,174,159,132,47,95,67,185,103,45,152,231,213,108,9,162,232,129,13,79,106,232,229,205,121,158,251,94,107,61,234,182,148,77,78,224,74,61,214,182,212,237,60,91,61,56,17,65,6,203,106,203,153,195,35,138,226,249,206,203,58,159,235,90,246,163,106,223,203,188,220,219,95,142,163,49,48,135,37,149,37,220,184,7,134,124,242,196,231,115,105,199,94,203,57,195,204,3,240,233,169,63,215,255,47,88,179,177,170,29,29,109,207,79,122,219,235,54,151,99,229,105,116,139,172,156,91,157,203,140,147,75,129,99,101,139,233,106,207,245,123,236,229,152,151,121,45,43,118,125,95,206,189,205,195,178,166,192,164,190,197,133,237,207,78,123,111,101,158,183,179,194,66,111,231,188,149,121,173,235,198,93,4,192,88,105,213,155,226,207,227,249,122,190,229,88,206,205,112,154,128,210,185,242,9,223,75,214,119,217,143,118,255,251,88,220,18,239,155,78,108,248,76,234,172,146,14,100,254,213,104,241,194,109,242,72,0,253,186,141,195,241,215,245,241,162,15,214,124,213,222,147,59,193,47,225,88,109,109,115,61,231,25,22,246,78,55,243,177,214,185,30,10,189,0,102,245,151,73,66,43,158,237,124,111,219,177,237,219,190,34,191,220,239,132,123,204,167,44,94,6,201,106,234,53,140,79,158,243,82,202,124,22,161,163,0,200,234,73,184,234,243,211,253,244,85,10,53,37,108,165,110,207,79,245,216,142,125,95,22,100,21,101,57,106,125,240,67,227,5,23,192,164,122,229,203,53,143,240,197,103,59,95,219,177,150,121,169,251,185,29,138,231,243,206,153,206,114,108,174,247,12,152,213,151,168,193,186,190,128,77,62,134,191,183,229,46,236,148,13,210,244,203,185,238,101,54,97,60,0,178,122,18,148,240,152,248,107,87,58,172,151,232,68,111,187,147,97,84,135,254,18,29,128,84,80,45,181,247,239,62,78,173,112,185,50,205,247,230,74,157,230,63,76,235,31,127,252,95,223,255,240,254,1,253,29,254,76,255,191,23,250,253,3,176,247,130,190,250,191,191,253,248,253,155,191,188,255,240,225,167,223,245,127,254,244,246,199,239,62,252,237,119,143,242,255,229,254,103,239,21,219,31,160,163,62,145,63,254,248,241,251,31,126,126,243,211,135,15,31,223,252,245,195,199,15,255,246,227,119,255,241,241,195,223,169,243,223,115,201,94,228,231,119,31,255,251,251,15,127,122,251,254,127,188,253,233,135,183,127,122,255,238,119,247,159,30,102,226,135,255,252,241,35,253,179,207,245,49,198,249,129,134,127,149,71,194,115,31,197,244,43,155,236,115,238,146,121,117,183,47,62,196,250,44,170,62,39,38,59,95,203,18,245,121,193,252,69,241,175,47,122,102,174,191,225,242,125,150,165,171,165,240,223,217,10,124,225,241,112,171,230,169,214,139,63,150,10,14,190,138,255,145,47,81,203,165,107,173,75,105,54,86,203,14,178,186,215,52,225,199,91,172,124,115,141,223,134,158,111,126,92,183,100,228,220,195,13,250,191,193,0,252,175,67,125,169,32,127,214,71,141,23,70,188,241,200,38,140,120,51,24,132,188,173,26,189,106,49,111,29,246,181,199,188,205,223,130,194,127,217,62,212,107,179,39,220,236,176,23,215,30,95,148,57,97,133,160,208,141,83,219,200,205,37,201,37,211,164,128,166,99,63,185,4,87,179,156,126,139,93,225,230,156,144,189,47,126,73,139,149,184,89,20,64,190,176,130,159,221,229,43,10,253,202,111,201,75,27,122,165,89,178,14,203,245,113,73,237,186,193,107,131,143,170,240,248,174,166,233,225,250,124,84,141,89,139,229,89,59,129,80,26,2,123,160,226,228,188,127,85,191,123,147,187,198,214,115,94,176,13,147,229,82,198,186,101,248,182,223,79,106,2,94,175,154,105,145,44,123,49,149,161,171,197,155,228,134,214,88,124,90,53,184,179,204,183,159,78,187,123,179,81,21,75,125,71,238,70,206,224,208,27,108,147,68,223,211,141,22,248,238,109,97,92,63,99,16,18,222,81,244,61,166,40,97,4,30,35,101,232,67,28,139,204,202,110,39,233,67,36,72,146,167,26,241,77,175,92,86,124,150,71,114,70,20,151,155,99,209,245,18,0,227,36,86,211,81,31,242,224,157,123,165,20,183,81,255,147,199,50,227,37,37,95,233,170,237,100,4,188,138,181,250,33,116,127,249,144,251,119,38,24,92,161,231,20,97,152,40,149,51,68,84,72,168,49,12,174,92,163,208,161,58,91,13,191,94,141,74,80,20,122,115,243,236,227,199,11,132,124,127,191,98,74,37,218,177,21,114,187,28,138,13,185,131,235,134,89,34,25,165,148,230,137,241,130,98,41,215,70,93,241,25,67,202,225,22,222,18,224,66,210,23,32,196,15,166,139,126,219,93,97,231,193,174,140,219,22,244,161,90,229,5,36,154,254,108,187,74,184,55,221,253,227,214,23,55,209,234,167,165,251,219,150,26,198,88,166,148,159,32,203,9,28,41,50,172,83,127,230,225,203,219,146,246,244,16,244,185,203,107,56,208,225,14,100,70,18,161,225,146,186,33,150,41,114,102,199,186,171,45,245,46,52,54,219,44,184,252,200,141,100,159,28,32,82,172,147,46,74,232,174,118,39,128,189,247,252,202,171,127,172,228,192,205,163,217,238,48,88,65,146,130,78,201,35,170,252,234,181,60,86,94,191,105,121,211,39,106,121,77,50,4,97,38,21,121,120,72,41,249,141,249,251,25,212,228,70,144,236,15,214,207,36,115,18,221,123,85,150,218,80,83,227,139,62,250,252,153,136,52,185,36,72,219,24,30,151,148,103,14,42,140,75,82,236,179,153,229,114,69,14,179,234,197,232,157,51,122,250,213,61,0,251,162,189,198,215,125,221,94,107,118,163,47,41,135,119,136,246,113,167,125,249,84,193,75,161,68,49,171,210,181,3,214,93,58,2,190,227,133,15,196,105,82,1,73,11,98,73,129,48,39,50,169,6,74,108,13,26,237,172,87,147,37,80,162,46,182,36,140,20,25,80,172,130,156,167,45,80,221,222,44,4,121,221,56,101,180,104,55,37,228,32,147,235,175,213,0,188,25,132,64,139,220,116,219,13,142,175,66,89,182,46,120,214,115,21,208,138,223,168,102,25,8,182,230,140,104,108,190,9,19,70,122,20,114,26,4,246,71,179,174,110,205,37,113,194,84,77,13,118,18,14,194,64,6,169,48,18,108,202,229,225,162,27,128,160,195,113,86,101,55,168,1,217,23,151,128,185,113,124,240,100,129,85,97,80,179,182,120,128,124,77,121,153,84,133,131,17,22,121,24,97,135,185,194,70,40,68,157,43,209,190,244,83,37,163,135,221,143,230,18,170,68,233,83,11,0,145,23,180,246,17,212,66,189,134,133,98,102,94,56,43,31,33,221,198,152,158,226,126,46,177,201,184,233,19,132,32,210,82,156,2,206,175,23,38,44,31,55,133,66,72,168,58,208,203,0,59,129,74,46,72,47,161,207,140,136,3,165,39,251,33,238,154,184,181,226,246,203,54,105,186,153,243,77,143,188,33,101,31,158,195,52,195,55,240,28,199,165,28,15,187,224,114,35,35,28,89,101,99,235,223,46,46,243,115,50,184,248,124,36,176,218,200,119,173,170,164,238,222,30,1,34,124,252,161,212,50,59,5,236,97,122,12,160,220,148,31,68,182,17,153,75,202,129,34,155,202,89,217,64,116,25,109,38,52,60,18,186,31,251,37,139,25,182,120,194,7,50,102,145,112,148,132,239,68,230,52,50,176,192,227,34,139,105,148,70,143,38,150,167,249,66,2,26,205,230,32,163,189,12,247,50,158,168,111,161,159,15,131,112,5,33,54,75,101,73,84,134,11,69,21,220,129,114,74,211,56,230,222,110,215,190,142,62,166,178,61,49,77,24,135,60,90,177,200,29,21,14,129,217,244,119,89,20,86,158,57,141,230,12,3,133,161,103,83,131,30,105,49,186,50,126,30,182,36,97,152,97,183,206,152,39,152,150,128,211,13,195,182,177,7,10,120,173,22,183,121,113,63,199,253,238,216,65,224,24,29,55,100,201,247,222,207,220,57,230,134,73,141,144,150,175,62,21,14,248,97,119,8,99,117,67,142,205,62,0,72,33,194,101,84,65,99,83,101,19,70,181,67,139,249,236,29,130,2,250,220,168,123,149,238,117,232,101,93,222,172,23,153,35,60,101,103,142,24,12,236,145,45,201,250,243,152,229,87,111,248,231,215,43,166,47,199,240,255,58,35,36,230,207,148,42,226,181,33,18,249,173,134,95,103,57,7,148,125,150,251,156,204,80,218,215,120,226,46,170,43,164,55,19,201,88,80,61,22,16,166,172,213,152,87,3,145,216,134,20,145,156,121,220,142,176,180,222,238,148,51,129,41,15,46,146,83,120,131,193,220,118,244,59,75,78,97,131,72,46,40,128,112,109,123,188,70,242,207,3,132,207,249,193,170,90,12,32,2,81,4,117,17,201,2,98,142,207,6,37,54,174,142,8,5,20,191,84,66,167,163,98,136,2,194,247,80,133,116,135,5,53,26,150,83,150,38,188,47,159,28,122,200,235,53,136,174,201,29,243,22,121,7,149,95,22,108,246,193,42,237,225,91,184,85,145,200,35,66,252,35,57,12,66,133,130,53,166,6,144,39,48,11,214,30,156,2,13,139,19,86,15,150,214,45,123,164,12,82,239,52,115,159,17,209,170,221,139,207,209,102,47,89,140,80,157,62,39,59,146,232,0,198,152,107,159,142,2,105,126,155,165,43,44,242,30,25,218,46,171,29,250,20,57,67,166,150,219,228,206,147,245,215,77,1,117,208,134,124,159,29,218,111,150,52,90,171,118,169,246,134,137,239,190,239,198,7,208,114,146,207,90,236,46,166,230,57,233,227,187,48,50,199,17,78,131,8,85,237,241,41,184,77,205,9,254,4,54,54,15,212,154,146,93,32,78,71,193,76,85,135,181,125,227,3,57,72,7,73,93,108,222,177,174,88,141,120,206,215,34,44,87,88,80,57,168,218,199,111,35,174,133,151,170,242,130,140,142,194,13,60,253,64,153,57,241,250,117,238,59,169,179,143,71,39,27,30,98,33,105,4,30,68,44,104,51,128,144,218,184,29,194,136,146,49,195,172,198,9,3,46,114,100,1,54,195,230,137,123,107,216,124,113,5,179,69,78,8,193,136,37,167,165,129,91,6,142,234,152,110,228,201,142,101,131,200,131,140,196,142,233,123,153,16,196,198,227,79,151,84,91,55,89,15,100,0,47,61,62,153,194,233,9,131,192,90,217,13,38,197,246,127,1,99,101,225,30,191,92,99,229,75,215,80,217,147,138,254,84,206,67,13,230,55,231,79,183,35,124,125,191,19,184,89,165,106,118,106,185,112,59,253,163,111,191,13,78,150,24,96,110,175,240,238,10,149,59,173,10,43,23,35,191,154,213,237,85,57,212,130,197,55,107,56,154,153,180,138,66,195,50,238,240,29,168,3,11,158,42,7,236,172,186,53,249,53,144,75,39,213,226,25,8,185,104,68,228,245,206,87,199,176,131,24,96,197,71,132,121,21,31,73,179,143,29,30,140,17,136,133,112,8,132,243,45,47,246,33,158,28,75,178,206,177,23,182,218,172,8,200,111,133,133,128,152,10,101,96,203,5,57,44,99,13,60,60,12,89,13,34,222,43,86,39,24,207,195,239,141,153,189,56,242,79,195,64,115,16,116,136,17,158,69,23,229,135,33,71,165,39,83,183,233,128,221,139,23,149,46,170,127,210,194,57,10,182,7,10,84,156,131,111,17,8,161,119,249,18,15,231,72,228,162,115,231,205,94,245,60,140,205,141,60,76,12,103,30,208,226,177,214,34,106,19,220,251,197,241,235,37,100,117,147,121,232,107,167,211,168,42,50,100,104,2,200,108,96,93,217,254,133,61,30,121,64,96,17,142,129,56,246,18,57,144,211,204,163,14,7,124,107,115,164,43,223,195,106,57,85,10,183,120,224,0,142,63,68,22,194,108,125,220,130,113,155,186,173,28,118,186,227,3,180,125,86,15,224,35,201,29,87,8,122,5,126,25,254,246,36,31,240,65,253,160,198,68,16,99,136,143,42,135,88,201,139,125,240,184,56,52,25,57,251,100,252,112,82,39,243,46,41,116,55,143,154,198,215,23,208,132,30,168,209,17,108,66,208,25,193,167,44,237,146,37,174,195,10,102,107,234,23,32,44,81,88,196,129,217,15,146,0,5,69,38,71,80,206,228,178,40,208,178,91,221,199,159,139,199,150,95,168,236,138,207,253,105,109,247,136,233,134,143,127,133,116,195,203,183,171,23,191,88,221,237,90,233,234,118,213,212,245,84,11,165,86,16,123,60,251,49,50,62,167,35,145,23,135,176,202,6,95,96,235,42,40,62,201,67,28,73,124,178,242,1,58,29,191,52,131,14,133,201,121,127,171,190,2,107,113,177,196,206,240,173,88,25,234,138,102,51,224,128,120,114,223,169,148,171,229,226,9,116,9,55,115,130,109,31,32,18,44,8,202,130,220,29,135,55,109,229,173,37,56,60,95,52,48,18,218,90,16,68,138,244,225,42,106,9,151,224,29,79,215,103,121,70,202,78,52,199,167,127,210,49,11,72,168,164,217,173,26,207,216,240,105,27,9,29,193,160,22,189,106,3,47,6,201,145,53,122,251,249,225,28,120,182,181,13,88,147,224,204,213,29,28,48,4,10,213,0,26,106,73,236,4,72,55,142,214,183,160,8,142,91,16,197,128,198,50,169,36,246,120,152,3,178,148,84,34,68,52,20,137,118,52,92,81,12,98,85,33,47,154,187,188,61,123,76,170,153,1,201,44,227,66,58,53,248,180,158,168,72,181,182,8,208,134,111,62,75,222,172,0,1,76,7,220,9,224,213,57,123,194,118,182,161,192,73,133,80,44,255,71,37,172,156,216,243,213,222,21,75,17,137,91,27,134,127,56,95,225,155,16,70,133,250,20,209,172,0,196,116,1,106,112,15,118,113,104,176,114,9,242,16,2,65,218,234,48,128,7,139,143,35,70,8,143,183,1,196,3,244,92,192,0,227,27,198,242,180,173,139,28,245,101,10,135,2,152,226,179,41,226,136,33,47,74,16,170,245,219,143,78,175,151,159,193,36,230,37,54,192,58,57,39,43,133,95,24,29,209,117,88,240,160,16,129,91,72,24,233,142,112,220,198,42,189,141,159,109,186,241,106,30,63,193,37,49,18,230,188,88,148,42,89,6,156,48,11,191,226,133,22,66,159,24,180,181,17,137,2,11,88,71,144,108,102,124,175,176,194,242,219,242,220,26,250,89,57,220,3,149,114,9,41,111,214,54,187,102,206,113,76,24,182,55,171,138,189,24,72,188,198,80,74,98,5,241,41,190,146,192,132,189,66,85,196,77,7,147,203,103,161,191,251,120,99,176,92,138,191,132,143,143,204,62,19,9,65,112,36,210,37,138,160,68,78,69,97,150,74,188,40,22,71,201,9,104,110,70,75,136,183,170,235,18,206,136,241,54,151,167,149,148,158,18,178,243,200,237,28,141,30,97,44,79,251,83,228,165,52,192,17,231,27,211,239,68,179,185,150,96,86,205,137,66,39,38,157,0,77,4,108,38,131,131,156,206,68,121,20,248,170,40,226,145,112,120,211,180,202,235,146,24,198,169,67,176,181,162,97,14,231,211,55,240,209,82,129,99,196,165,93,204,29,16,78,140,112,95,141,198,30,133,54,22,187,42,37,249,8,103,17,155,23,207,129,87,184,91,75,213,56,248,107,177,18,196,125,103,253,198,14,105,107,78,114,182,41,244,53,233,129,40,163,185,159,178,241,254,225,67,49,120,32,146,198,100,138,193,141,68,2,190,141,56,76,82,246,37,50,233,89,124,119,182,162,155,113,245,230,71,218,199,246,188,203,48,177,105,162,210,31,45,131,170,76,199,202,36,6,69,48,58,4,48,20,177,109,113,185,225,224,246,118,32,164,129,210,34,41,38,244,154,81,117,74,251,201,14,25,44,160,131,14,225,41,184,54,15,142,204,48,152,224,43,34,21,171,149,28,167,215,182,94,186,16,171,14,240,233,147,136,212,208,98,49,188,40,128,163,238,171,2,152,48,203,58,66,64,166,136,15,107,75,64,186,236,140,235,22,0,58,171,137,229,129,126,64,224,183,4,84,23,60,155,170,12,114,183,104,199,98,85,110,76,156,227,138,67,33,22,158,21,61,122,2,9,66,199,95,210,25,117,148,68,145,137,234,78,148,132,137,184,28,132,106,98,244,14,102,49,175,79,4,185,149,239,21,41,254,183,55,123,228,10,140,35,14,98,169,124,1,99,3,70,118,179,171,191,146,57,176,10,251,150,9,25,175,22,72,27,135,102,75,177,200,245,137,99,186,38,193,64,165,48,212,98,131,43,80,98,52,48,131,101,20,108,167,104,94,53,244,184,27,160,34,96,246,173,234,85,204,166,221,96,88,190,72,37,244,116,48,100,155,112,254,112,117,66,0,86,0,236,24,144,137,52,123,190,184,17,182,74,220,80,227,150,147,218,52,69,46,12,62,41,190,143,84,93,121,239,77,150,234,118,123,169,14,16,25,146,133,175,220,28,174,6,54,98,145,129,139,71,71,36,152,18,217,81,9,158,159,50,174,229,173,36,28,106,18,94,125,248,86,180,74,245,141,148,224,186,179,181,8,235,223,107,121,126,107,150,246,184,214,151,244,226,27,212,133,143,156,174,98,186,21,152,177,91,26,223,169,214,193,200,154,177,21,189,122,48,130,138,211,228,229,62,85,123,182,30,50,99,55,13,182,174,36,66,64,181,167,69,110,159,25,119,94,148,200,16,198,77,34,40,26,130,153,193,152,218,149,56,14,28,90,121,51,76,104,16,45,209,94,53,194,55,200,129,61,77,206,231,50,248,100,68,129,198,103,204,193,217,225,138,212,113,252,177,107,187,138,169,87,135,64,158,17,149,206,35,192,180,161,201,177,69,116,110,77,9,31,21,183,143,197,74,14,30,157,196,235,35,68,20,32,53,208,105,132,180,209,185,218,70,138,4,231,151,174,215,179,205,2,175,112,24,147,212,44,0,168,94,78,240,165,67,211,20,35,2,171,62,165,91,251,83,204,109,49,69,47,138,111,166,74,29,161,200,107,39,72,130,148,12,146,100,20,53,65,22,73,171,2,193,126,201,222,243,100,203,129,6,138,137,104,15,142,6,92,52,241,102,9,57,88,20,64,21,79,253,30,189,191,193,65,236,92,200,209,195,140,195,102,47,233,48,76,189,38,191,3,4,252,106,153,227,205,220,114,76,88,224,183,139,126,61,231,246,107,182,50,16,163,92,49,240,54,179,31,71,19,51,49,67,221,204,52,233,222,160,8,220,6,153,7,58,220,149,106,111,76,62,145,182,81,36,235,141,84,188,122,184,122,122,108,34,254,174,5,110,148,201,65,108,91,154,13,131,4,245,102,2,229,7,240,81,166,167,212,18,48,129,162,157,116,105,75,161,234,114,169,14,143,13,23,56,166,184,196,46,39,14,155,132,183,22,216,33,146,52,125,168,243,140,174,49,153,28,11,170,45,246,97,250,92,125,66,127,30,228,194,192,244,18,126,62,74,30,121,41,217,133,52,140,95,131,7,11,152,172,212,30,194,113,43,120,198,51,221,103,75,229,59,42,58,137,86,19,85,38,215,52,171,14,65,63,178,219,20,176,135,131,238,147,106,38,137,95,60,51,96,131,157,123,105,12,23,127,188,3,67,101,151,38,233,27,232,244,26,85,161,168,111,36,74,73,162,184,64,203,197,70,4,10,226,62,54,18,180,150,40,180,163,96,15,178,63,104,7,217,33,22,1,2,110,60,40,156,152,101,26,222,128,155,160,41,218,180,83,91,98,141,159,197,185,6,166,40,205,77,133,28,141,17,111,75,212,201,109,3,205,111,48,236,77,151,231,131,0,131,26,31,183,192,51,238,154,196,169,243,132,239,7,184,250,228,121,248,104,156,194,198,75,206,29,71,98,185,98,70,168,0,36,90,106,118,128,105,125,245,159,58,35,39,175,221,156,103,94,200,204,239,40,195,82,235,212,137,198,40,61,163,132,37,86,182,143,128,211,87,65,174,31,92,30,3,219,143,108,54,50,226,160,14,15,10,179,136,95,31,183,92,188,197,225,238,30,6,247,132,195,97,209,118,161,202,152,164,162,26,133,216,168,221,239,146,147,69,54,158,66,14,152,49,16,41,116,249,248,115,17,254,134,78,56,244,178,61,106,175,106,171,106,167,154,236,21,206,145,85,95,227,73,39,118,192,200,22,70,135,46,106,2,163,178,16,169,34,144,77,164,172,81,191,139,58,96,166,237,68,141,40,241,34,162,171,49,245,69,34,26,45,46,31,99,41,48,218,34,9,198,24,99,53,92,40,7,132,121,24,54,44,10,132,226,32,135,203,13,118,42,144,157,247,219,74,18,128,150,94,213,158,105,136,40,24,2,14,198,136,4,102,66,203,168,20,207,112,82,103,248,96,151,161,231,230,129,223,7,121,16,54,104,48,122,39,191,163,7,213,45,186,21,18,17,30,196,252,160,8,68,141,35,106,37,139,108,82,112,29,205,158,52,229,252,25,53,49,112,38,37,160,161,191,91,162,6,121,133,45,81,235,46,156,99,197,133,73,140,202,103,84,80,113,233,58,176,135,40,212,253,177,131,230,60,101,76,18,242,195,228,8,73,230,54,29,32,237,73,9,94,134,243,137,219,38,73,87,184,141,115,50,85,148,143,86,87,192,146,108,204,197,185,164,66,44,74,18,149,241,68,240,70,141,107,125,229,21,124,114,185,35,77,68,186,73,104,107,202,125,110,86,100,66,165,203,99,190,51,19,90,173,167,50,49,141,167,224,171,220,100,84,238,197,71,140,18,99,202,33,242,16,93,62,115,115,124,250,109,215,185,198,211,113,231,84,136,78,7,231,147,104,134,13,244,90,12,236,45,48,192,36,52,111,244,223,68,15,207,224,2,202,2,1,96,148,83,198,149,67,240,30,178,105,44,110,214,172,63,252,89,71,136,23,42,200,100,137,249,193,141,248,24,164,54,248,60,71,167,168,27,0,105,133,35,87,79,66,209,134,96,53,95,167,211,70,15,99,170,133,222,97,92,83,122,11,154,18,234,53,153,222,131,122,209,133,234,52,168,86,163,238,53,104,74,103,39,93,122,120,241,66,73,14,235,25,194,53,179,128,206,201,71,124,14,33,161,129,50,19,218,245,68,3,99,176,51,35,12,220,138,107,22,226,9,49,228,144,216,73,26,146,88,245,103,12,103,180,80,71,19,219,179,134,2,58,18,196,193,245,222,175,114,139,189,232,62,6,177,0,119,29,99,203,222,194,56,146,92,73,71,184,126,252,133,223,29,176,196,96,182,61,55,134,160,30,200,2,18,52,185,99,88,187,85,151,224,230,72,129,89,45,64,92,82,142,74,0,151,229,207,212,115,250,102,195,204,71,118,3,191,153,148,253,19,105,214,9,156,23,29,34,83,50,158,137,211,54,102,145,93,234,250,172,151,120,230,120,101,125,254,26,243,253,74,152,32,58,161,88,113,2,45,119,102,253,10,143,182,8,230,110,98,147,238,116,224,205,192,149,65,64,23,135,30,23,240,93,231,131,47,145,146,82,42,98,157,131,160,22,230,61,70,111,204,7,153,245,40,105,176,27,96,246,163,49,61,167,140,30,20,201,16,11,180,207,98,130,179,159,146,30,59,222,61,246,94,143,153,32,112,235,155,175,229,44,30,226,253,255,192,54,77,180,223,10,48,113,185,207,28,138,128,107,184,112,25,48,114,229,104,64,1,108,137,31,1,96,117,102,160,4,240,176,90,30,141,155,59,123,12,189,222,244,136,99,8,144,131,94,36,244,204,129,24,178,140,0,184,41,46,125,77,194,169,16,215,118,198,141,36,233,45,143,221,209,128,140,17,99,11,216,199,168,44,78,78,72,196,84,128,204,75,204,143,208,63,204,55,45,111,150,221,242,38,111,13,54,205,223,202,245,32,90,158,99,14,39,51,24,240,14,148,70,210,226,174,116,59,181,76,192,48,69,150,22,29,50,254,26,182,236,140,110,203,8,225,168,109,220,234,67,84,158,84,107,120,224,62,15,32,55,186,167,25,115,184,96,126,11,254,62,79,248,151,155,99,112,105,132,125,233,118,97,190,81,111,206,99,224,210,236,66,203,8,26,6,29,150,230,2,65,41,22,35,166,147,229,136,107,54,46,172,91,252,107,210,240,75,83,207,126,193,182,93,172,204,192,112,57,99,43,100,189,4,191,84,121,99,236,157,41,94,114,98,138,0,167,79,203,61,197,98,30,223,170,137,123,207,239,77,183,119,175,182,119,96,0,35,147,240,92,196,115,153,192,132,60,143,186,96,99,129,213,69,126,24,121,102,198,89,29,251,29,88,179,231,219,87,188,61,176,255,32,32,146,78,3,133,167,251,32,217,44,211,184,161,70,233,152,136,80,39,102,51,41,12,66,250,66,140,15,130,62,168,2,142,118,31,255,218,58,148,174,102,60,109,188,161,67,86,0,134,221,125,18,219,172,42,182,87,125,32,163,247,228,98,41,30,191,203,227,129,226,230,192,13,64,63,27,224,209,254,97,159,252,0,216,26,32,147,110,143,54,217,29,126,245,115,24,37,83,234,167,117,156,95,255,87,151,95,124,203,54,15,50,199,45,223,198,54,198,14,98,247,195,240,112,244,50,95,96,10,9,219,24,185,74,245,174,112,27,92,239,151,76,199,142,190,122,113,55,161,73,164,61,236,173,76,33,14,210,216,203,236,76,166,71,145,239,149,130,168,54,12,122,69,166,120,44,74,214,18,231,93,130,210,0,33,31,122,145,7,78,17,116,232,52,54,225,22,183,5,147,219,200,141,8,137,220,6,44,245,118,94,112,237,99,120,153,5,232,21,20,150,27,95,68,58,87,131,15,87,143,161,235,116,112,201,248,195,12,29,18,174,112,213,92,174,159,150,204,193,36,229,211,23,27,114,81,182,25,27,67,179,246,166,194,56,226,43,25,82,58,112,160,132,72,40,142,142,18,73,251,248,115,62,170,245,28,126,117,195,173,255,194,156,212,29,175,147,207,73,125,78,209,205,178,78,193,203,242,47,144,245,130,253,0,95,110,214,139,175,51,35,117,15,38,253,12,120,125,101,70,234,229,183,76,48,62,160,236,51,100,164,102,45,162,63,160,247,53,166,164,102,25,112,154,61,78,44,221,210,92,62,62,15,213,185,248,60,73,30,120,60,229,94,176,185,16,236,197,12,210,196,36,222,194,20,51,126,236,147,218,164,32,135,102,181,57,191,216,66,205,203,217,146,212,165,23,42,41,73,39,31,112,169,148,217,80,223,107,147,158,34,29,49,225,215,169,55,243,168,81,21,144,59,95,236,228,12,44,162,153,43,98,248,133,219,89,46,233,245,47,151,168,110,33,124,82,124,203,65,31,170,82,176,89,120,122,9,12,207,35,222,4,95,108,68,84,250,93,180,31,26,245,166,41,188,77,114,111,146,195,187,141,181,224,161,95,108,249,165,210,53,226,153,172,255,19,50,229,110,132,83,56,184,98,128,153,8,179,7,144,217,119,218,28,229,180,67,30,41,35,138,178,36,95,183,83,142,33,23,158,204,120,242,250,20,230,4,7,14,75,45,193,37,31,74,31,180,214,91,190,69,134,101,140,203,236,168,32,161,18,79,69,9,153,57,50,12,68,234,137,216,83,121,186,17,252,26,210,202,119,12,36,73,126,94,246,36,38,239,83,167,132,240,83,207,94,11,57,85,91,49,53,164,195,190,42,199,61,60,174,229,41,248,230,253,213,182,140,4,168,147,51,181,165,116,81,93,84,220,102,66,142,246,192,20,82,219,134,157,139,67,10,223,144,162,111,176,241,37,192,1,205,126,108,196,118,127,109,93,121,109,245,181,52,192,28,221,145,128,193,254,129,5,3,5,244,209,124,237,154,232,202,61,126,185,154,232,23,190,171,22,181,193,244,192,115,113,71,153,42,186,192,5,34,14,45,187,148,48,153,13,10,223,112,175,161,64,35,228,209,144,163,4,78,219,0,131,104,113,92,28,219,78,183,131,213,115,33,0,12,15,58,149,11,160,28,81,159,50,179,135,33,139,146,135,108,6,97,185,40,91,153,17,195,28,3,111,75,178,179,102,94,199,177,137,3,225,217,135,208,61,162,179,133,72,86,42,189,13,110,191,210,160,216,99,133,95,180,4,13,126,30,216,217,44,30,73,97,139,139,160,14,162,88,113,192,229,2,15,30,91,25,62,35,194,213,188,23,53,150,29,9,214,132,70,132,218,26,218,115,106,154,198,66,100,55,173,4,132,131,113,84,41,222,21,49,79,55,116,80,4,193,56,173,142,174,174,8,60,25,31,54,238,137,100,219,196,189,21,177,28,22,2,87,170,218,44,57,168,1,58,205,247,140,159,75,58,87,197,196,21,182,18,140,122,98,191,76,109,240,34,169,182,136,39,197,132,218,146,9,181,252,1,226,227,235,23,106,243,244,77,168,253,34,147,250,100,77,235,4,255,39,43,252,7,56,27,15,137,197,48,78,222,247,0,188,203,114,99,157,30,131,62,36,15,41,38,176,217,53,25,142,193,100,20,0,96,75,8,210,160,200,241,16,198,158,72,48,138,238,208,202,15,87,114,78,229,113,126,232,70,128,155,63,60,200,195,32,203,0,177,236,56,152,191,10,248,0,177,12,250,62,129,97,224,113,6,251,95,92,35,22,83,124,0,140,147,3,217,237,121,53,170,177,20,38,62,99,118,222,8,34,239,112,30,43,124,59,207,242,42,86,221,18,86,3,240,195,186,186,60,186,137,177,19,179,97,200,100,164,100,249,17,203,85,188,206,226,137,97,163,238,16,255,60,176,120,182,63,207,55,0,192,37,36,16,155,170,139,2,52,89,45,67,216,174,19,59,149,65,11,129,102,107,72,104,105,131,182,25,164,52,126,188,65,244,61,32,148,112,26,73,124,151,148,120,122,136,178,201,241,14,197,50,74,80,154,200,21,131,136,137,60,75,198,40,10,182,155,105,20,120,193,133,70,1,74,162,16,163,15,13,213,28,84,179,30,19,233,109,57,160,76,36,122,11,216,189,169,88,27,55,198,130,39,230,142,20,138,45,173,237,149,147,221,1,176,178,236,12,57,12,210,255,9,143,182,81,218,107,200,132,206,36,146,65,218,0,177,135,123,220,88,120,175,203,6,116,89,144,88,91,130,176,241,115,4,13,53,11,173,59,47,182,177,193,77,143,152,102,3,233,149,0,224,122,101,88,145,7,57,78,202,26,90,108,190,0,237,97,64,199,162,151,22,96,199,202,240,49,169,27,159,159,85,4,113,99,75,44,182,2,8,251,228,27,135,253,180,25,47,62,18,75,113,207,117,191,225,221,134,121,48,30,16,159,0,147,116,83,151,195,163,26,196,157,118,10,187,166,117,223,161,145,54,64,112,128,157,180,186,83,169,55,120,241,178,121,224,55,226,70,6,223,88,173,226,59,235,16,78,99,124,218,145,182,236,68,226,20,149,67,79,192,213,89,155,176,194,106,16,118,83,87,40,36,207,212,40,27,171,34,199,78,27,222,202,221,235,194,39,252,48,225,153,48,207,194,147,90,141,0,27,204,115,195,254,197,9,185,0,104,128,20,45,52,27,104,91,97,19,200,200,169,191,102,77,109,3,86,252,160,136,177,68,14,112,197,36,182,0,209,77,75,218,204,137,140,254,236,224,213,0,43,211,178,178,44,121,54,0,14,92,93,59,197,80,234,148,148,160,200,100,218,78,170,20,49,143,87,67,97,83,233,110,251,119,211,3,111,0,113,169,18,186,196,113,29,10,131,161,74,238,82,184,224,92,212,116,62,1,38,194,196,130,24,89,252,47,72,91,210,33,49,140,42,177,185,42,59,42,219,86,54,71,30,2,114,178,147,163,56,198,145,167,16,0,113,36,200,102,237,80,178,146,21,231,70,17,57,112,61,173,74,83,59,128,96,220,204,130,5,81,192,130,163,210,230,117,187,76,251,67,73,19,21,72,118,150,99,44,152,54,224,46,217,187,104,43,238,71,98,73,23,107,15,83,119,128,200,219,18,216,149,204,19,217,50,153,136,113,2,2,83,3,123,44,65,18,26,20,93,34,128,150,17,224,91,127,66,74,161,48,131,176,33,214,126,49,135,132,69,120,224,92,178,140,204,209,175,165,151,142,181,212,2,0,215,153,240,59,30,14,186,216,244,166,51,220,158,147,224,147,6,32,27,108,71,91,166,62,72,114,87,188,155,40,250,3,253,155,221,130,250,235,161,83,37,82,58,133,2,121,123,72,244,206,108,32,241,51,34,219,80,189,98,108,183,9,7,103,195,6,249,79,80,117,134,41,21,88,102,80,46,21,2,200,25,242,32,221,150,176,211,23,222,214,80,164,35,121,3,39,216,38,138,162,136,217,54,249,172,66,135,112,34,212,197,8,178,193,196,206,0,57,6,254,225,102,85,128,34,170,121,43,89,211,174,70,141,116,230,226,3,94,55,134,65,196,95,101,153,164,32,105,27,175,154,250,254,250,240,158,79,159,153,170,41,27,161,206,78,203,53,224,106,159,76,103,128,199,185,44,169,173,65,144,57,12,58,3,104,3,98,122,129,58,144,168,31,81,71,73,20,25,32,75,167,54,29,168,18,141,86,99,80,164,50,109,43,209,201,154,218,181,179,129,18,245,14,144,91,104,233,133,247,154,166,56,11,219,22,134,6,4,194,244,194,124,187,64,29,217,180,213,64,33,86,172,54,97,15,11,64,96,103,55,32,34,220,203,213,174,137,205,214,190,248,154,119,28,58,78,167,211,61,71,167,25,163,61,212,135,107,124,237,148,136,53,101,226,167,150,98,209,103,42,137,105,18,137,154,146,169,51,137,214,147,41,71,137,14,101,12,235,136,32,48,244,130,237,151,88,136,7,250,126,46,89,109,198,145,39,102,217,41,67,143,44,31,5,194,32,48,50,46,44,48,2,181,4,52,32,200,155,189,17,221,234,248,56,13,34,162,0,84,128,68,157,224,32,71,52,94,183,8,138,77,37,210,52,138,92,148,203,120,232,33,71,211,150,180,3,93,96,81,5,200,20,133,76,157,144,237,81,66,107,205,123,239,120,236,48,195,96,235,63,165,31,129,18,181,14,11,166,69,48,65,130,44,88,52,244,23,103,90,135,245,201,125,40,193,97,162,76,102,54,8,42,162,23,170,42,227,25,21,233,70,32,11,42,152,241,210,157,168,216,46,109,1,135,213,99,190,67,62,43,155,1,194,125,89,169,77,248,207,2,32,214,30,81,163,145,112,98,61,45,221,37,235,24,11,23,32,3,204,80,129,209,204,162,43,212,21,134,140,44,128,149,26,204,186,197,58,200,152,135,203,39,160,160,75,223,120,232,68,135,154,0,32,143,28,232,76,124,14,186,64,25,82,163,0,167,28,112,143,190,106,1,25,78,97,154,196,246,121,18,74,139,114,102,0,3,60,134,111,213,181,230,8,218,34,4,56,235,168,181,165,182,97,52,32,201,209,186,4,200,108,0,155,197,163,212,75,146,236,39,186,78,85,35,190,0,76,184,176,234,63,112,79,25,138,241,62,4,213,230,0,118,199,238,41,222,69,221,50,23,255,21,166,174,18,243,164,161,239,91,118,160,236,175,83,105,178,131,162,147,59,58,194,19,111,121,226,83,79,60,239,185,127,158,59,108,227,176,189,23,41,113,54,37,186,36,174,66,153,50,15,253,161,248,166,233,10,138,44,112,147,16,196,81,165,252,165,103,40,122,133,5,252,245,38,21,188,127,223,67,196,111,232,142,8,252,248,244,64,220,61,30,199,204,134,175,200,143,177,92,114,209,202,241,76,185,83,98,65,90,236,108,128,90,23,14,127,131,224,72,200,153,54,120,224,162,39,63,184,215,130,3,238,144,136,192,232,181,3,8,116,36,177,166,225,252,207,59,158,50,215,212,224,189,186,84,31,7,53,51,85,69,157,178,42,124,131,75,192,81,41,46,21,21,194,181,97,214,82,144,103,113,96,38,168,197,253,123,135,110,248,159,60,107,186,217,104,34,243,148,180,125,163,58,60,123,111,215,224,127,203,156,116,154,232,202,110,204,52,27,221,77,204,11,184,80,162,70,80,229,54,197,178,128,171,70,126,237,48,2,198,107,16,169,151,138,254,131,206,172,168,104,36,218,8,54,239,122,68,101,35,245,176,17,239,87,156,176,121,143,209,84,122,21,159,73,141,176,191,67,1,130,216,60,184,142,161,77,0,133,73,120,179,189,13,138,171,101,237,77,52,154,68,237,113,186,81,162,59,121,229,202,97,10,222,54,184,112,6,141,118,76,98,236,100,135,90,201,201,23,58,141,50,183,146,119,60,181,100,72,124,52,20,21,235,92,1,207,20,117,116,15,102,14,68,231,97,228,37,8,110,200,97,8,110,88,206,129,232,173,140,204,16,73,77,21,239,101,92,198,102,135,174,138,161,183,160,178,202,81,98,5,228,44,166,36,20,11,15,253,72,155,14,88,65,171,36,76,2,219,89,137,154,75,112,90,168,96,174,36,231,144,224,250,139,142,180,93,238,161,161,195,147,164,233,194,179,152,7,222,181,75,231,0,161,140,180,231,208,170,165,94,212,34,130,26,67,29,71,133,5,213,121,84,174,39,239,74,108,146,235,11,3,69,250,61,16,124,162,98,56,78,141,7,154,60,241,221,233,245,54,22,57,142,6,28,93,235,205,151,101,76,184,198,131,90,239,71,116,32,255,222,96,240,74,38,71,188,190,253,44,242,8,86,248,166,142,47,57,94,149,115,86,217,143,4,92,56,51,217,42,159,74,42,156,175,175,46,124,139,152,118,186,9,140,49,254,36,9,81,9,33,44,62,73,160,139,127,97,150,154,69,201,200,29,24,124,192,100,140,45,138,241,71,99,132,146,58,219,129,202,100,19,24,164,112,95,120,129,104,23,152,145,29,56,121,89,135,21,231,83,133,209,156,186,253,79,88,37,100,28,162,106,49,108,14,48,77,243,93,220,246,209,114,64,216,172,111,141,118,174,92,137,97,134,84,87,24,153,99,82,167,115,105,205,188,144,232,250,98,167,44,218,133,252,31,244,70,134,96,177,16,204,18,194,93,118,205,177,182,42,132,205,100,176,159,152,189,129,222,220,19,177,233,222,114,253,244,218,61,146,161,219,7,121,252,66,133,219,23,220,72,45,144,85,141,1,124,217,215,250,101,6,120,90,199,34,243,160,204,0,201,204,200,11,115,83,198,212,18,152,158,137,4,38,26,157,24,169,167,67,240,106,16,150,45,70,242,51,11,9,246,31,174,3,222,115,101,109,2,109,46,104,123,168,15,50,3,90,108,100,66,249,238,57,204,40,2,70,41,129,24,208,229,230,132,4,165,230,11,222,196,79,106,246,245,44,32,225,82,117,81,117,171,139,56,246,15,156,80,97,148,244,169,71,63,113,252,251,238,249,24,3,89,15,55,166,247,218,160,49,6,193,185,201,120,32,145,29,91,164,167,27,216,35,11,146,36,138,32,177,135,58,0,163,92,157,81,37,220,194,5,189,6,87,86,112,19,69,79,210,232,109,10,17,13,126,188,224,52,43,120,202,42,91,134,88,25,16,90,230,126,244,14,74,225,140,147,201,98,6,49,171,198,115,245,232,19,205,60,167,193,20,105,35,128,173,70,48,95,162,174,24,53,202,68,239,244,218,105,174,191,154,146,6,42,78,113,139,203,87,215,246,97,53,139,133,6,230,17,54,149,64,238,84,131,138,201,104,244,52,4,207,71,135,131,144,4,20,15,85,178,147,23,174,152,196,18,30,67,235,126,140,73,96,144,155,93,129,149,133,149,30,162,149,146,80,151,167,99,61,214,208,150,59,114,88,135,57,95,29,93,184,19,143,228,228,39,57,31,74,78,145,78,235,141,22,10,198,40,141,44,72,161,92,32,28,59,45,97,56,128,66,112,120,55,64,204,130,102,121,230,57,159,6,239,250,165,7,30,0,99,172,67,140,135,200,98,38,46,226,42,188,5,214,252,44,162,35,63,63,106,96,113,11,211,152,28,159,77,61,31,163,196,245,98,57,19,219,40,214,47,101,63,142,143,237,161,104,0,130,145,152,26,145,104,101,114,149,104,138,94,91,80,1,2,231,221,125,40,120,202,1,163,235,67,239,148,122,208,213,168,142,193,236,80,33,57,45,104,1,50,238,153,76,87,72,69,122,118,228,159,29,70,224,40,88,100,121,159,228,52,120,44,131,79,51,241,123,6,30,29,25,121,226,203,240,246,58,216,243,13,127,7,225,48,18,197,184,48,217,9,85,20,253,137,122,32,83,233,160,231,211,214,167,122,16,219,105,49,62,198,169,245,153,86,237,180,239,228,56,200,159,23,241,58,142,135,74,217,106,231,84,145,196,139,196,160,18,152,95,223,14,20,54,212,87,196,229,14,114,249,144,162,169,23,13,194,212,110,204,12,204,204,16,229,132,91,21,189,158,85,186,64,95,176,35,42,134,73,38,91,60,251,142,214,56,83,68,168,119,162,29,193,16,48,217,37,198,200,221,2,101,108,140,179,100,4,61,254,208,152,103,179,19,210,167,213,51,68,68,203,221,27,248,185,11,0,157,4,220,16,120,18,50,87,195,224,141,64,4,56,159,69,196,100,134,239,184,46,201,242,229,171,236,144,208,105,178,155,74,61,137,93,61,242,141,154,185,11,114,175,66,230,125,136,94,138,140,196,227,58,231,212,144,208,12,65,208,187,205,249,93,148,181,46,162,198,130,223,37,187,64,54,94,51,19,111,242,30,154,58,80,189,17,76,56,239,246,100,108,147,32,124,99,16,130,64,235,88,205,227,217,56,6,185,60,46,100,98,230,185,73,23,44,116,23,199,148,141,123,89,7,144,182,132,102,30,71,146,26,64,232,22,15,76,54,134,109,6,18,131,13,85,20,90,133,197,32,225,126,64,118,183,50,185,128,25,46,105,122,84,49,109,63,113,97,9,65,4,201,172,19,196,59,54,214,87,202,146,180,212,243,98,123,13,20,196,39,29,162,20,248,18,241,246,18,0,70,115,134,241,134,227,43,107,132,37,54,94,52,5,227,186,36,139,151,46,113,70,9,3,185,36,36,149,16,94,70,157,14,115,143,63,11,9,251,142,200,142,252,231,17,126,177,177,211,221,31,111,162,198,171,15,169,217,56,44,214,176,162,79,174,185,29,101,229,241,111,89,152,28,65,162,61,58,220,34,192,214,58,252,241,3,73,190,150,251,89,19,33,53,186,231,135,75,180,21,198,114,211,123,182,241,42,238,112,91,215,223,231,125,130,107,143,188,61,242,255,68,72,100,146,36,81,81,162,30,3,147,239,35,167,200,228,174,239,109,23,228,150,238,176,184,17,147,253,26,183,244,133,65,190,68,255,128,229,218,29,45,127,112,12,52,128,204,206,55,21,34,85,179,112,86,231,235,73,189,65,230,44,74,152,205,227,207,70,73,103,187,8,234,54,67,250,190,85,112,158,101,30,182,190,8,232,29,24,220,116,46,168,32,13,58,176,152,4,228,65,222,122,15,22,62,6,46,102,161,141,209,71,146,184,27,18,151,68,56,58,14,135,203,136,149,85,81,247,100,106,242,60,98,101,106,22,209,226,34,94,72,107,76,226,98,196,57,14,79,153,201,177,3,84,228,244,195,168,41,187,238,105,208,143,34,181,175,201,130,25,81,94,150,204,108,78,50,89,117,55,191,79,249,33,199,161,46,231,7,1,191,250,172,31,60,175,47,55,235,199,111,152,84,149,200,108,254,172,248,45,159,7,191,175,76,174,186,182,127,78,183,203,63,167,219,207,148,193,246,197,169,100,19,66,249,12,41,101,37,132,117,30,118,192,179,213,58,243,237,242,230,85,21,111,250,158,216,158,166,176,253,229,59,239,120,245,214,163,215,136,186,108,103,212,126,43,241,173,196,47,40,241,185,24,249,156,242,152,238,86,249,85,121,219,146,10,144,223,160,223,84,130,252,6,253,166,34,228,55,232,55,85,132,126,131,126,207,127,78,191,61,28,234,115,244,251,82,161,217,163,59,30,155,104,85,11,163,59,142,207,170,27,185,155,92,253,208,167,95,183,94,181,220,226,203,117,235,164,95,238,232,249,172,55,45,183,250,114,221,60,239,34,210,2,192,122,185,205,151,235,86,209,227,135,190,217,122,224,16,149,219,125,185,110,113,116,14,211,143,29,79,45,119,248,114,221,134,233,81,74,143,95,187,101,79,229,78,95,142,12,150,137,253,78,253,89,136,94,238,40,190,92,55,83,31,141,246,205,209,223,212,161,114,213,151,235,118,101,63,248,238,236,111,214,114,109,192,115,247,53,244,164,30,143,86,55,93,144,99,92,144,206,86,123,56,217,163,217,77,87,228,24,86,164,91,129,115,79,40,218,163,68,117,73,142,97,73,234,163,135,238,152,238,132,191,233,154,28,195,154,116,51,172,187,70,186,10,189,233,162,28,195,162,144,125,220,93,166,143,102,55,93,149,99,88,149,254,54,77,63,177,232,218,241,174,203,114,12,203,210,253,9,20,136,214,81,168,235,114,218,186,60,171,246,61,175,125,137,79,165,251,57,94,164,184,61,162,118,202,89,150,99,217,234,89,151,178,241,171,176,231,57,159,123,219,247,99,110,101,174,154,207,140,91,111,47,111,188,30,165,172,243,94,203,57,243,69,135,243,216,143,99,89,91,189,119,58,139,207,122,167,134,95,168,167,62,26,158,75,89,150,117,93,183,13,70,125,212,245,220,207,82,230,147,97,236,118,122,93,211,203,125,200,203,220,106,59,78,107,122,95,231,117,47,216,31,251,189,200,239,244,154,113,175,247,113,222,199,206,120,165,97,31,109,91,234,86,234,250,11,198,157,227,122,59,219,214,182,115,181,101,148,163,192,246,25,136,100,221,215,138,109,111,175,36,192,95,74,187,107,59,151,253,60,143,178,108,135,76,250,92,91,57,246,165,180,217,8,108,123,125,219,117,190,211,255,118,108,171,182,243,104,187,204,109,61,239,59,3,219,254,4,124,182,214,238,139,61,31,229,88,97,181,214,251,174,155,231,227,216,246,122,236,191,96,181,230,178,214,125,221,15,163,176,251,150,104,203,186,221,9,123,59,246,129,194,94,209,240,183,173,241,85,108,13,169,186,104,60,241,246,76,205,199,144,247,118,204,231,188,26,137,220,39,183,151,59,57,238,247,217,192,162,164,192,88,93,179,122,31,207,119,221,202,185,222,55,114,219,100,145,203,155,218,218,220,206,189,58,188,166,192,88,157,39,125,62,63,233,99,127,252,175,156,231,38,164,209,195,122,239,84,177,236,5,100,212,5,48,169,175,247,210,94,210,251,54,175,199,182,52,221,170,143,206,183,101,61,183,117,221,183,42,92,224,2,24,171,115,223,207,108,140,95,3,225,112,103,247,217,190,183,251,150,86,173,226,65,78,231,114,30,237,172,186,197,115,152,175,40,39,157,221,243,255,108,151,119,110,117,182,58,3,99,125,240,155,115,223,207,109,155,145,7,167,192,164,254,162,17,87,251,175,185,37,239,236,111,118,34,168,135,89,239,247,237,119,103,241,168,250,164,192,164,62,140,251,5,221,47,117,93,239,173,238,202,237,31,100,82,238,2,119,159,183,185,169,120,73,64,73,93,229,7,47,32,145,251,42,151,109,59,140,193,60,58,190,75,153,165,217,150,240,159,73,157,215,16,229,177,215,86,61,93,222,41,239,174,167,22,20,246,23,192,80,251,235,224,1,245,206,205,230,121,179,157,221,153,192,189,237,86,202,118,204,70,255,41,48,169,255,42,46,176,46,119,214,98,36,243,32,236,187,138,242,96,168,103,59,85,153,203,96,161,174,241,130,23,136,154,227,190,141,23,84,224,250,230,217,206,121,241,170,71,10,140,213,95,183,161,238,156,101,153,11,40,74,15,85,112,189,211,108,221,86,179,90,46,128,177,250,162,239,141,188,214,193,207,207,108,189,4,95,119,117,180,150,187,104,63,0,97,203,124,220,229,2,108,191,8,73,106,118,19,255,69,180,113,28,165,162,102,118,239,224,222,238,94,234,93,215,66,234,200,128,177,58,199,73,157,47,217,142,231,93,142,111,13,232,173,115,158,90,151,59,164,222,5,31,240,159,4,24,171,211,109,128,90,158,231,3,119,154,110,203,157,143,160,34,114,39,193,182,110,235,89,119,155,95,10,140,213,37,163,202,243,61,95,77,249,206,111,214,98,70,68,2,202,166,187,189,24,211,15,190,117,55,176,170,219,13,247,102,142,117,89,0,167,9,40,169,187,240,179,112,199,75,164,234,177,151,99,113,42,223,75,41,218,87,92,94,212,229,47,217,125,123,91,231,5,23,250,174,124,239,199,186,222,215,218,13,63,66,147,218,51,231,122,121,190,223,187,208,190,155,120,200,106,238,235,191,220,57,225,114,58,35,50,133,166,245,27,191,210,247,252,238,191,155,147,123,155,29,219,109,245,206,111,209,194,186,37,176,172,106,123,197,206,95,183,59,226,238,250,238,195,188,209,142,143,135,90,113,215,68,149,12,110,25,48,173,93,229,93,194,231,187,190,147,89,153,215,13,167,60,111,247,137,45,75,245,58,80,2,205,170,211,85,131,243,37,34,105,93,231,59,227,216,84,203,110,119,129,91,207,101,86,73,127,75,96,161,30,223,102,120,9,105,237,247,81,222,181,235,138,244,210,218,227,179,236,59,56,5,83,104,90,191,189,124,235,223,21,210,187,108,216,42,250,116,30,173,31,115,219,183,25,173,131,4,154,214,111,47,95,229,243,174,79,180,243,152,77,32,62,54,238,93,69,95,209,91,115,203,128,105,237,89,50,53,189,150,1,73,48,123,125,60,143,244,60,11,186,175,62,250,215,238,211,47,107,185,171,247,224,102,77,161,177,242,141,175,190,60,231,94,233,38,102,189,115,174,230,237,140,251,126,59,118,216,98,183,4,150,214,189,217,155,160,47,81,201,219,93,169,94,156,83,241,174,255,182,109,107,243,58,175,21,76,230,8,205,170,115,148,98,191,8,243,236,246,40,109,187,227,175,84,80,242,239,140,166,108,235,130,242,121,4,165,53,57,240,187,150,151,32,252,62,234,86,218,124,54,32,186,87,206,122,168,47,97,181,148,173,247,5,11,94,235,125,82,200,23,238,139,123,23,36,203,224,48,72,160,105,125,185,120,95,94,162,114,222,237,212,165,29,232,33,124,29,157,15,213,95,74,233,191,108,107,174,71,153,239,28,161,20,100,30,199,93,48,213,213,115,205,20,152,213,231,36,154,245,37,43,118,103,143,91,29,77,131,250,56,127,41,131,190,150,2,179,250,114,175,252,37,179,223,238,36,48,123,223,68,219,142,118,148,210,208,90,204,96,89,93,65,251,115,49,79,15,121,139,194,113,190,171,93,199,32,187,35,232,68,225,201,215,1,159,243,141,151,55,199,157,233,223,149,110,103,19,44,119,173,227,78,111,200,240,18,80,168,41,113,180,245,89,39,242,99,176,199,93,194,238,131,63,100,190,155,189,119,121,120,95,50,96,201,41,48,175,47,105,135,150,231,87,246,49,230,251,62,115,92,231,206,241,230,195,187,58,46,128,121,253,227,229,116,125,151,90,119,42,69,70,250,176,126,206,249,110,134,180,226,77,162,4,152,213,231,132,125,245,69,78,191,243,174,226,157,101,111,232,156,45,243,242,80,72,80,26,38,160,172,174,222,55,29,102,254,170,3,8,73,166,82,95,192,72,215,227,78,121,72,14,119,43,96,160,225,1,146,85,211,11,23,245,185,227,230,126,218,114,39,183,125,59,86,148,29,119,29,224,174,70,213,195,29,104,36,208,180,190,220,238,169,207,157,50,145,177,179,47,110,247,221,45,16,231,187,185,69,80,82,79,15,122,94,178,71,226,193,195,195,57,121,223,10,199,58,151,134,222,173,4,154,31,124,44,146,182,228,249,222,175,16,126,110,187,243,172,5,216,21,178,215,151,34,251,190,185,131,236,47,119,203,235,174,18,12,75,157,64,211,250,182,212,47,81,75,207,54,239,94,73,185,179,153,115,65,238,123,75,96,89,85,185,191,247,60,137,255,178,29,121,23,176,251,209,188,62,112,183,161,218,185,12,171,149,64,211,250,55,73,223,250,18,89,242,192,195,121,231,209,206,234,121,136,226,163,140,102,79,132,166,245,245,50,222,203,86,236,78,227,187,119,39,212,135,99,162,150,90,118,52,235,19,104,86,29,122,127,94,128,223,13,198,187,206,115,159,216,134,14,188,229,174,43,159,219,3,217,168,213,70,104,90,223,182,233,75,186,255,231,114,137,187,248,189,91,103,231,134,199,168,119,227,168,221,119,230,178,161,169,159,64,211,250,175,154,252,185,150,213,155,250,119,68,222,247,224,221,126,217,80,180,39,208,164,182,49,169,151,16,221,190,149,123,61,103,197,221,169,171,12,97,18,25,48,173,253,74,146,191,27,97,109,174,78,231,188,43,250,119,241,179,142,94,245,8,77,235,3,171,122,117,248,130,100,3,169,98,252,250,234,191,229,157,0,31,223,253,255,131,47,9,42,252,197,177,234,255,164,24,234,245,248,76,253,186,232,202,167,46,226,32,10,155,251,154,221,215,226,190,86,247,229,47,18,236,238,235,112,95,167,95,178,226,63,135,5,245,195,169,126,60,213,15,168,250,17,213,225,110,131,31,83,61,144,86,62,61,0,149,239,44,215,126,179,249,85,76,162,189,57,150,211,254,183,46,148,15,240,68,224,254,202,67,78,73,91,247,172,199,239,162,226,252,9,179,224,138,175,84,231,180,222,43,239,105,253,226,254,62,113,130,159,140,210,103,15,232,175,59,252,180,25,126,34,94,158,81,170,191,173,251,39,175,187,48,153,183,93,30,141,252,229,47,81,170,83,65,21,21,239,223,125,156,90,249,243,135,255,252,241,241,223,105,190,55,87,62,126,255,195,207,111,254,250,238,227,127,127,255,225,79,111,223,255,143,183,63,253,240,246,79,239,223,253,110,90,73,43,120,20,237,255,252,253,52,255,225,254,175,31,127,248,203,189,210,239,230,94,255,255,144,214,126,255,248,220,251,239,220,250,31,30,255,167,26,189,135,159,159,239,161,15,89,218,163,170,29,89,229,221,251,159,223,89,7,52,9,158,44,79,162,113,249,255,245,253,15,239,31,208,223,225,207,244,255,123,33,24,165,175,254,239,111,63,126,255,230,47,239,63,124,248,233,119,253,159,63,189,253,241,187,15,127,251,221,163,252,127,185,255,217,123,197,199,148,74,133,129,201,212,126,250,240,225,227,155,191,126,248,248,225,223,126,252,238,63,62,126,248,59,117,254,251,79,154,125,117,51,111,191,134,194,55,189,68,223,251,140,218,207,154,222,168,250,39,94,105,127,118,223,213,34,254,86,250,71,166,120,255,252,143,191,253,233,195,251,56,253,103,214,231,63,190,127,251,247,119,90,248,79,63,124,252,219,219,191,11,162,10,1,255,250,211,15,12,144,137,181,246,195,143,127,232,69,9,254,151,183,125,67,60,126,248,233,221,159,63,124,247,206,230,39,169,33,86,125,35,79,211,16,217,51,20,240,85,252,143,156,192,81,18,62,106,93,74,241,187,90,102,226,21,210,132,184,31,111,177,242,205,53,126,27,122,190,249,113,221,146,145,115,15,55,232,255,6,3,240,191,14,245,165,130,252,233,151,146,94,152,143,130,71,54,97,58,10,131,65,66,10,238,122,194,124,20,29,182,127,229,123,119,171,95,216,222,253,218,246,161,166,236,59,33,167,140,62,9,213,179,168,80,214,86,201,129,243,128,108,156,86,91,114,38,73,30,235,38,5,244,41,200,147,75,112,53,123,79,100,177,244,145,7,237,6,73,245,162,217,70,53,127,224,42,169,114,240,179,223,221,19,63,41,129,14,109,67,211,41,202,139,103,146,186,82,158,149,218,52,149,12,37,255,47,182,91,53,69,56,215,231,100,9,248,98,218,70,251,248,16,8,165,64,181,199,113,79,126,115,164,234,119,111,114,215,116,58,252,38,193,134,15,117,29,29,176,12,223,246,251,73,77,172,171,111,244,128,151,211,168,12,165,53,220,32,56,128,42,208,170,65,190,68,206,187,116,90,214,159,141,170,216,179,27,11,77,143,178,199,246,6,27,23,229,134,241,187,183,133,143,109,48,6,15,131,244,246,32,29,44,231,81,170,144,0,115,193,176,130,166,73,207,224,197,178,155,62,130,140,36,73,228,91,37,207,165,124,226,243,72,235,58,160,132,159,24,57,241,197,164,133,113,18,171,233,168,137,208,228,1,19,33,48,220,70,253,207,236,254,202,210,35,249,74,87,109,39,35,224,85,172,213,15,161,159,130,14,239,142,205,4,131,244,157,252,60,1,62,210,84,53,50,0,95,106,195,193,149,107,20,58,84,103,171,225,215,171,81,9,114,38,52,55,207,62,126,76,93,198,185,67,43,166,115,167,29,91,33,175,244,161,216,144,140,128,110,152,37,146,81,74,105,158,24,47,40,150,130,239,234,106,249,180,56,252,7,83,70,110,88,72,250,2,132,248,193,116,209,111,187,43,236,60,216,149,113,219,130,62,84,171,188,190,78,211,159,109,87,9,247,166,195,48,110,125,113,19,173,126,90,186,191,109,169,97,140,221,15,22,249,9,178,156,192,145,34,195,58,245,103,30,126,227,245,176,103,207,161,207,93,94,226,134,14,37,234,65,202,111,218,4,99,2,134,216,61,114,3,103,118,172,187,218,82,239,66,99,179,205,130,203,143,220,72,246,201,1,34,197,58,233,162,132,142,232,59,1,244,203,225,175,77,58,54,79,131,146,103,48,204,58,70,82,208,41,121,68,149,95,189,150,199,147,253,166,229,77,159,168,229,53,201,78,142,89,156,37,130,68,41,89,31,35,212,45,223,228,149,67,217,31,172,159,73,214,118,202,184,167,44,181,161,166,198,41,233,169,76,111,132,182,17,203,19,222,198,246,26,156,62,177,90,97,92,242,188,39,155,89,238,157,154,97,86,189,88,79,93,209,234,98,127,191,102,175,113,162,65,183,215,40,4,216,111,53,43,247,15,40,183,143,59,237,203,167,10,94,10,37,138,89,149,174,29,176,238,18,161,242,139,70,42,193,9,68,170,186,164,36,182,132,228,248,30,27,169,6,74,108,13,26,237,172,87,211,180,118,109,76,172,109,35,69,6,20,171,32,175,190,45,80,189,105,198,77,144,215,141,159,171,19,237,166,132,247,15,40,239,58,228,47,47,242,12,144,16,104,145,231,59,119,131,223,224,69,122,123,41,64,40,94,223,8,26,30,12,184,161,154,101,32,216,154,51,162,177,249,38,76,24,177,121,5,111,26,200,37,76,151,133,157,64,160,20,186,52,241,13,118,18,14,194,64,6,169,48,18,108,202,189,1,64,207,72,128,14,199,47,186,185,65,13,200,190,21,125,75,115,70,24,253,7,31,91,94,96,85,24,212,172,45,30,32,201,251,55,252,98,39,25,120,248,208,242,176,246,126,35,20,91,124,120,213,67,223,112,5,200,204,133,246,17,212,66,189,134,133,226,147,95,154,86,185,5,200,108,16,2,44,147,35,80,30,209,211,220,207,165,84,30,55,125,130,16,68,90,138,83,192,249,245,194,132,229,227,166,80,8,9,85,7,122,25,96,39,80,201,5,233,37,244,153,17,113,160,244,100,63,196,93,19,183,86,220,126,217,38,77,55,115,190,233,145,55,164,236,195,115,152,102,248,6,158,227,184,148,227,97,23,92,110,100,132,35,171,108,108,253,235,162,113,102,94,183,248,4,49,211,74,100,255,134,187,193,189,123,12,68,248,248,67,73,173,119,122,143,7,19,243,2,229,166,252,32,178,141,200,92,82,14,20,217,84,206,202,6,162,203,104,51,161,225,145,208,253,216,115,22,19,118,120,202,4,6,70,145,112,147,140,229,36,124,41,225,94,145,197,141,44,166,209,19,30,52,177,35,93,39,36,160,209,108,14,50,218,203,112,47,227,137,250,56,63,253,97,16,174,32,196,102,207,232,16,149,225,66,81,5,9,110,90,13,52,208,52,142,185,183,219,181,175,158,181,172,149,237,137,105,194,56,228,193,220,69,178,164,206,52,170,77,127,23,140,179,242,204,183,187,103,24,40,12,61,155,26,244,72,139,209,149,241,243,176,37,9,195,12,187,117,198,55,202,104,9,248,169,51,216,54,246,56,42,175,213,226,54,47,238,231,184,223,29,59,8,28,163,227,134,44,249,222,251,153,59,199,220,48,169,17,210,242,213,167,194,23,109,217,29,194,88,221,144,99,179,15,64,199,81,164,140,42,104,108,170,108,194,168,118,104,49,159,189,67,80,64,159,27,117,175,210,189,14,189,172,203,216,255,34,115,132,167,236,204,17,131,129,61,178,37,249,198,31,179,252,234,13,255,223,50,81,243,39,25,254,191,97,182,241,207,137,215,245,243,224,181,189,46,222,111,75,115,136,254,74,203,57,160,236,19,242,109,223,213,173,109,43,205,165,73,188,203,200,243,60,143,101,199,100,12,23,192,80,123,101,102,178,124,141,39,246,162,250,194,195,12,34,89,11,170,215,238,198,221,0,195,71,213,59,8,30,183,105,146,38,114,25,235,237,78,185,19,152,242,240,34,239,161,109,48,24,121,150,23,216,62,28,250,169,13,15,154,142,222,192,51,249,193,111,103,2,132,227,4,192,112,91,12,32,2,85,4,125,17,201,4,98,146,207,22,119,86,131,234,136,80,64,241,75,37,124,58,42,134,40,32,124,15,85,72,247,88,80,35,98,57,103,79,28,246,229,147,67,19,121,121,27,209,53,185,99,98,70,41,63,80,84,248,20,25,205,251,195,183,112,171,34,209,71,132,248,7,190,25,132,10,9,107,92,13,32,79,96,22,172,69,56,69,26,22,39,172,30,44,173,91,246,72,25,164,30,234,155,35,70,68,171,118,47,62,75,155,125,19,140,130,61,208,83,222,218,113,74,21,140,185,246,233,40,145,230,183,217,67,43,76,220,171,179,125,86,59,52,42,114,6,77,45,183,201,157,71,235,175,155,2,234,160,77,249,62,59,148,242,255,210,90,181,75,181,57,76,124,247,125,55,62,192,150,72,0,214,130,119,49,85,123,198,94,212,234,42,253,12,28,225,52,136,80,213,14,175,63,49,193,108,106,142,240,39,190,207,52,80,107,74,118,129,56,29,5,51,85,29,214,54,223,20,53,70,36,68,183,121,199,188,98,53,226,57,95,139,176,92,97,65,229,160,107,31,191,141,184,22,94,170,202,11,50,58,26,55,56,41,0,202,204,137,215,175,115,223,73,150,145,26,15,193,144,52,2,15,34,22,180,25,64,72,109,220,14,97,68,201,152,97,86,227,132,1,23,57,178,0,155,97,243,196,189,53,108,190,184,130,217,34,39,132,96,196,146,211,210,192,45,3,71,117,76,55,242,100,199,178,65,228,193,91,106,142,233,123,153,16,196,198,227,79,151,84,93,109,231,199,149,95,121,252,50,133,211,23,6,129,181,179,27,76,138,237,255,10,198,206,151,22,135,250,213,105,168,236,137,69,127,44,191,160,7,230,59,191,6,105,33,0,124,152,120,32,55,171,84,205,78,61,23,110,167,127,244,237,183,193,201,20,3,204,111,23,222,140,166,114,167,85,97,229,98,228,87,179,186,205,42,135,106,176,248,102,13,71,252,102,194,82,102,145,113,135,239,64,29,96,134,12,196,206,170,91,147,95,50,190,116,114,45,158,129,144,139,71,68,94,239,124,117,12,59,136,1,86,124,68,152,87,241,177,52,251,216,225,177,107,129,88,8,136,64,72,82,17,211,6,150,213,63,253,23,240,63,86,4,228,183,194,66,64,76,133,50,176,229,130,28,150,177,6,30,34,134,172,6,17,239,23,171,19,140,231,225,247,198,204,94,14,2,78,195,64,115,16,116,168,17,158,69,23,165,168,178,160,244,100,234,54,29,208,123,241,162,210,69,245,79,90,56,71,193,246,220,170,138,115,240,77,2,33,244,46,95,226,33,29,137,92,116,238,188,217,171,158,135,177,185,145,135,137,225,204,3,90,60,214,90,68,109,130,123,191,56,126,189,132,172,110,50,15,162,43,25,50,170,138,12,25,154,0,50,27,88,87,182,127,97,143,71,30,16,88,132,99,32,142,189,68,14,228,52,243,168,195,1,223,218,28,233,202,247,176,90,78,149,194,45,30,56,128,227,15,145,133,48,91,31,183,96,220,166,110,43,135,157,238,248,0,109,159,213,3,248,72,115,199,21,130,94,129,95,134,191,61,201,7,124,80,63,168,49,17,196,24,226,163,202,33,86,242,98,31,60,46,14,109,70,206,62,25,63,156,212,73,189,75,90,226,205,163,166,241,245,7,52,161,7,106,116,4,155,16,116,70,240,41,75,187,100,137,235,176,130,217,154,250,5,8,75,20,22,113,96,246,131,36,64,65,145,201,17,148,51,185,44,10,180,236,86,247,241,103,177,119,130,62,33,214,72,188,176,79,107,187,135,133,250,217,29,143,249,235,15,234,219,185,199,111,234,238,244,201,234,110,215,74,87,183,171,166,174,167,90,40,182,130,216,227,217,143,161,241,33,112,137,220,56,132,85,54,248,2,91,87,65,241,49,113,226,72,226,147,149,15,208,233,14,26,39,58,20,38,231,253,101,118,112,3,91,191,18,59,3,99,83,135,186,162,217,12,56,32,158,220,119,106,165,139,240,121,12,140,132,171,57,193,182,15,16,9,54,4,101,65,30,105,95,12,36,153,59,224,100,93,146,105,52,108,107,65,16,41,210,135,171,168,37,44,206,226,241,13,135,241,124,160,188,194,137,232,248,104,121,58,102,1,9,149,52,187,149,227,25,27,62,202,45,161,39,24,20,163,87,117,244,182,68,211,35,111,244,246,243,147,223,122,130,204,119,123,0,107,18,220,185,186,131,3,134,64,161,26,64,67,45,137,189,0,233,198,209,254,22,49,193,65,13,162,24,208,88,38,149,196,30,15,115,64,150,146,74,132,136,134,34,209,146,134,43,58,233,169,42,228,69,115,167,213,164,203,0,115,32,153,101,92,72,167,6,159,214,19,21,169,214,22,1,218,240,205,103,209,155,21,32,128,233,128,59,1,188,58,55,235,210,205,54,20,56,169,16,138,229,255,168,132,149,19,127,126,181,124,197,82,68,226,214,134,225,31,206,87,248,38,133,81,161,62,162,62,43,0,49,93,128,26,224,24,65,22,20,222,86,159,196,255,215,140,130,33,110,75,174,199,0,177,75,200,5,66,120,188,13,32,30,160,231,2,6,224,51,36,128,84,64,27,233,53,187,47,83,56,148,192,20,159,77,17,71,12,121,81,130,80,173,223,126,116,122,189,252,12,38,49,47,177,1,214,201,57,89,41,124,195,232,136,174,211,130,7,133,8,220,66,202,72,119,132,227,54,86,233,109,252,108,211,141,87,251,232,94,144,198,88,152,243,98,81,170,100,25,112,194,44,252,138,23,90,8,201,99,164,59,124,86,137,2,11,88,71,144,108,230,5,245,107,88,126,91,158,91,67,63,43,135,139,160,82,46,33,233,205,218,102,215,204,57,142,9,195,254,102,85,177,23,3,137,215,24,74,73,172,161,49,218,69,50,47,57,152,176,87,168,138,184,233,96,114,249,44,244,119,31,111,12,182,75,241,151,240,241,145,217,103,34,33,8,142,68,186,68,17,148,200,169,40,204,82,137,23,197,226,40,57,1,205,205,104,9,241,86,117,93,194,25,49,222,6,243,180,146,210,83,66,118,30,185,157,163,245,231,37,91,121,218,159,82,81,242,52,0,37,226,42,202,180,40,193,172,154,19,133,78,76,58,1,154,8,216,76,6,7,57,157,137,242,40,240,85,81,196,35,225,61,130,182,17,84,108,8,182,86,52,204,225,124,250,6,62,90,42,112,140,184,180,139,189,3,194,137,17,238,171,209,216,163,208,198,98,87,165,36,31,225,44,98,243,226,57,240,10,119,115,169,26,7,143,45,86,130,184,239,172,223,216,33,109,205,73,206,54,133,190,38,61,16,101,52,247,83,54,222,63,124,40,102,219,129,61,213,166,24,220,72,36,216,109,64,42,59,59,54,197,3,61,1,196,190,59,91,209,205,184,122,243,35,237,99,123,222,101,152,216,52,81,233,143,150,65,85,166,99,101,18,131,34,24,29,2,24,138,216,182,184,220,112,112,251,59,16,210,64,105,145,20,19,122,205,168,58,165,253,100,135,12,22,208,65,135,240,20,156,155,7,87,102,24,76,240,21,145,138,213,74,142,211,107,91,47,93,136,85,7,248,244,73,68,106,104,177,24,94,20,192,81,251,85,1,76,152,101,29,33,32,83,196,135,181,37,32,93,118,198,117,11,0,157,213,196,242,64,63,32,112,92,162,173,11,158,77,85,6,185,91,184,99,177,42,55,46,206,113,197,161,80,147,188,153,53,66,130,208,241,151,124,70,29,37,81,100,162,186,19,37,97,34,46,7,161,154,24,189,131,89,204,235,19,65,110,229,123,69,138,31,238,205,30,185,2,227,136,131,88,42,95,224,216,128,145,221,236,234,176,60,221,87,133,125,203,132,140,87,11,164,141,67,179,165,88,228,250,197,49,93,147,96,160,82,24,106,177,193,21,40,49,26,152,193,50,10,182,83,52,175,26,122,220,13,80,17,48,251,86,245,42,103,211,110,48,172,95,164,18,122,58,24,178,77,56,127,184,122,33,0,43,0,118,12,200,68,154,61,95,252,8,91,37,110,168,113,203,73,109,154,34,23,6,159,20,223,103,170,174,188,247,38,75,117,187,253,84,7,136,12,201,194,87,110,14,87,3,27,177,200,192,197,163,35,18,76,137,236,168,4,207,79,25,215,146,189,232,129,101,17,175,62,124,43,90,165,250,70,74,112,221,217,90,72,0,220,21,57,244,70,60,251,53,195,123,92,250,75,242,209,149,143,172,174,98,190,22,152,178,91,27,223,141,214,193,208,154,177,21,189,187,48,130,138,83,229,229,66,86,123,182,30,114,99,55,13,54,175,36,68,64,213,167,69,174,175,25,123,94,148,202,16,198,77,34,40,90,130,153,197,152,26,150,56,14,28,90,121,51,76,104,144,45,209,96,53,202,55,200,129,61,77,206,233,50,56,101,68,131,126,131,179,159,212,219,225,138,212,113,252,177,107,187,203,169,119,143,64,160,17,93,206,35,192,212,161,201,241,69,244,110,77,9,35,21,191,143,5,75,14,46,157,196,237,35,68,20,32,53,208,105,132,180,209,187,218,70,138,4,239,151,174,215,179,205,2,179,112,24,147,220,46,0,168,94,80,240,173,69,83,21,35,2,169,118,175,214,122,181,197,52,189,40,191,153,42,117,132,34,176,157,36,9,98,50,136,146,81,214,4,97,36,173,10,4,251,37,131,207,147,45,71,26,40,38,162,65,56,90,112,209,198,155,37,230,96,81,0,85,60,245,123,116,255,6,15,177,243,33,71,23,51,14,155,221,164,195,48,245,158,253,14,16,112,172,101,158,55,243,203,49,97,129,227,46,58,246,156,223,175,217,202,64,144,114,197,200,219,204,128,28,109,204,196,14,117,51,211,172,125,131,38,112,27,132,30,40,113,87,186,189,49,249,68,220,70,153,172,87,90,241,238,226,234,233,177,137,192,187,150,184,81,40,7,185,109,121,58,12,18,244,155,9,180,31,192,7,200,240,68,47,1,27,40,26,74,151,198,20,234,46,151,250,240,216,112,129,115,138,75,236,114,230,49,69,75,125,66,153,29,120,244,192,128,18,222,58,74,1,121,67,201,197,23,140,95,131,59,9,24,158,212,30,98,99,43,184,169,51,61,100,75,101,45,42,29,137,134,17,213,23,215,52,139,241,160,171,216,213,6,216,79,65,15,73,181,132,196,73,157,89,147,193,232,188,180,76,139,63,107,129,161,178,127,145,100,63,122,160,70,181,36,202,254,68,65,72,148,8,104,185,216,136,64,89,219,199,70,130,6,17,5,104,20,178,65,14,7,73,157,157,40,17,32,224,198,131,194,241,85,166,109,13,184,9,90,155,77,27,152,194,51,202,57,224,41,152,134,66,185,38,196,248,8,106,52,100,138,238,234,104,77,12,93,230,2,220,180,198,209,226,72,205,83,153,34,173,59,92,113,217,61,32,26,14,193,180,184,218,120,207,120,108,18,191,206,19,238,31,224,235,147,231,226,163,125,10,219,61,57,122,28,73,244,138,5,162,10,144,232,169,217,25,166,245,213,127,234,172,156,28,119,115,158,188,33,179,192,163,20,75,13,84,39,28,163,252,140,50,150,200,112,31,1,167,175,130,132,27,188,30,131,176,137,204,61,178,255,160,16,15,42,179,8,96,31,186,92,188,205,225,174,31,6,15,133,195,97,209,118,161,202,152,231,162,26,133,216,168,221,239,146,214,69,54,138,66,14,152,49,16,41,116,249,248,115,17,1,135,126,56,116,180,61,106,175,106,173,106,167,154,47,22,142,146,85,99,227,73,39,150,192,200,37,70,159,46,50,179,145,23,69,170,8,100,19,41,107,212,240,162,22,152,233,59,81,39,74,28,137,232,109,76,221,145,136,70,11,205,199,112,10,12,184,72,226,49,198,112,13,23,205,1,145,30,134,13,11,4,161,80,200,225,126,131,29,12,100,71,254,182,146,4,160,165,87,101,107,26,130,10,134,152,131,49,40,129,153,208,50,170,197,51,28,214,25,62,216,107,232,185,121,224,247,65,30,132,13,26,204,222,201,239,232,65,97,140,142,133,68,113,8,202,197,160,126,68,61,39,234,66,139,108,82,112,30,205,158,52,245,77,167,130,234,145,186,147,18,208,208,223,45,81,190,188,154,152,40,147,23,238,177,226,34,37,70,149,55,170,197,184,116,29,216,163,20,234,254,216,65,115,158,117,38,137,250,97,114,132,60,117,155,14,144,246,164,196,47,195,17,197,109,147,188,45,220,198,57,153,2,204,167,171,43,96,73,54,230,226,156,82,33,28,37,9,204,120,34,126,163,198,181,190,242,11,62,185,220,145,38,34,221,36,180,53,229,94,55,43,50,161,14,230,49,223,153,9,173,214,83,201,156,198,131,240,85,46,51,42,247,226,83,70,9,51,229,40,121,8,48,159,185,57,62,0,183,27,93,227,1,185,115,43,68,183,131,243,74,52,195,6,250,45,6,246,22,24,96,18,157,55,122,112,162,143,103,112,2,101,177,0,48,202,73,244,18,127,128,179,142,16,47,21,144,75,18,247,130,91,237,49,208,108,112,91,142,126,77,55,0,187,239,128,114,34,68,20,162,224,192,226,150,3,203,197,158,13,209,105,145,239,187,58,157,52,122,32,83,45,157,47,16,186,99,232,140,173,34,170,69,152,124,210,171,61,168,22,93,104,78,131,102,53,170,94,131,162,116,118,202,237,23,228,235,133,142,28,144,23,2,54,179,144,206,201,199,124,14,65,161,129,48,19,210,245,43,4,99,40,3,141,4,2,26,101,112,182,90,33,220,16,35,18,137,213,164,17,139,85,127,198,104,71,139,132,108,195,224,122,7,87,217,201,94,116,35,131,56,128,187,144,177,101,175,105,28,73,182,165,35,92,64,254,194,111,15,88,106,49,219,220,27,67,80,13,100,249,8,138,220,49,44,207,170,36,112,115,171,205,156,22,32,46,45,71,37,128,203,19,104,218,57,125,179,93,230,99,187,129,91,77,202,253,137,250,234,4,30,147,14,145,41,25,131,194,105,27,179,200,174,117,125,214,107,60,115,188,180,62,127,141,25,131,37,80,16,61,95,172,55,129,146,59,179,122,133,103,91,4,115,119,177,73,117,58,240,110,224,202,32,160,139,67,207,11,248,182,243,193,215,72,73,39,21,169,206,97,80,11,179,23,163,55,230,131,204,93,148,52,216,11,48,251,209,152,154,83,70,7,138,228,152,5,218,103,49,33,89,160,38,39,51,44,57,37,56,61,102,130,192,189,111,190,152,179,120,136,63,0,0,206,104,114,244,86,128,137,203,141,230,80,4,252,209,133,203,128,141,43,103,3,10,96,67,252,8,0,171,51,3,37,128,91,215,50,105,220,220,225,99,232,245,166,103,28,67,136,28,244,34,193,103,14,196,144,101,4,192,93,113,233,107,18,78,133,184,182,67,110,36,73,111,120,236,142,6,100,140,24,92,192,30,71,101,113,114,68,34,150,2,228,94,98,126,132,78,105,190,107,121,179,252,152,55,121,66,183,105,6,88,174,7,241,242,28,117,56,153,189,128,183,160,52,150,22,119,165,219,169,38,202,111,38,203,139,14,25,127,13,91,118,70,175,101,132,112,220,54,110,245,33,46,79,170,53,60,113,159,7,144,27,221,211,140,57,92,49,191,5,119,159,39,252,203,205,49,120,52,194,190,116,187,48,223,168,55,231,48,112,137,122,161,101,4,13,131,14,75,115,129,160,20,139,17,211,201,114,196,53,27,23,214,45,254,53,105,248,165,169,103,191,98,219,46,86,102,96,184,156,243,21,242,102,130,91,170,188,49,246,206,20,47,89,53,69,128,211,167,101,159,98,49,143,175,221,196,189,231,247,166,219,187,87,219,59,48,128,145,73,120,46,226,185,76,96,66,158,71,93,176,177,192,234,34,63,140,60,51,227,172,142,253,14,172,217,243,237,43,222,30,216,127,16,16,73,167,129,194,211,125,144,108,150,105,220,80,163,116,76,68,168,19,179,153,20,6,33,125,33,198,7,65,31,84,1,71,187,143,127,109,29,74,151,51,158,54,222,208,31,43,0,195,238,62,137,109,86,21,219,171,62,177,209,123,114,193,20,143,223,229,249,65,241,114,224,6,160,159,13,240,104,255,176,79,126,66,108,13,144,73,183,71,155,236,22,191,186,57,140,146,41,249,211,58,206,175,255,171,203,47,190,103,155,135,153,227,150,111,99,27,99,7,177,251,97,120,56,122,153,47,48,133,132,109,140,92,165,122,79,184,13,174,247,75,166,99,71,95,189,184,157,208,36,214,30,246,86,166,16,7,105,236,101,118,38,211,163,200,247,74,65,84,27,6,189,34,83,60,22,37,107,137,244,46,65,105,128,152,15,189,202,3,135,8,58,116,26,155,112,139,219,130,233,109,228,78,132,196,110,3,150,122,59,47,184,248,49,188,237,2,244,10,10,203,141,175,34,157,171,193,135,203,199,208,117,58,184,100,252,97,134,14,9,87,184,106,46,219,79,75,230,96,146,242,233,171,13,185,40,219,140,141,161,89,123,83,97,28,241,149,12,41,29,56,80,66,36,20,71,71,137,164,125,252,57,31,213,122,22,191,186,225,214,127,97,86,235,142,215,201,103,181,230,228,103,206,205,178,78,193,203,242,47,144,247,130,103,245,229,230,189,248,58,115,90,239,203,231,193,235,43,115,90,247,83,142,223,106,57,7,148,125,66,78,235,135,42,215,246,90,142,125,91,182,229,88,102,81,212,218,81,247,54,151,214,150,77,50,88,63,160,251,126,182,121,61,230,83,138,222,235,215,101,59,142,187,228,159,215,186,110,114,234,116,144,50,114,124,149,169,173,89,146,156,102,213,147,96,176,116,153,143,207,67,53,55,62,148,146,135,38,79,185,95,108,142,8,123,150,131,244,57,9,218,48,245,142,31,29,165,54,41,82,162,89,109,206,83,182,80,243,114,64,37,117,233,165,76,74,246,201,167,100,42,171,54,212,26,219,164,71,81,71,76,28,118,234,13,63,106,84,197,236,206,23,68,57,147,139,232,247,138,24,126,105,119,150,203,126,253,203,37,188,91,8,159,20,36,115,208,135,42,38,108,92,158,94,142,195,51,141,55,193,23,155,34,149,126,23,29,138,70,189,105,42,112,147,255,155,228,2,111,99,45,120,112,24,91,126,169,140,142,120,38,31,194,9,25,119,55,194,41,28,158,49,96,85,200,236,1,100,60,158,54,71,57,22,145,199,210,136,162,44,89,216,237,148,179,204,133,39,51,30,223,62,133,57,193,129,195,82,75,112,201,39,219,7,173,245,150,111,145,97,25,227,50,59,42,72,168,196,83,81,66,102,142,12,3,145,122,34,246,84,158,110,4,191,134,180,242,29,3,73,178,160,151,61,205,201,251,212,169,50,252,228,180,215,101,78,213,121,76,153,233,176,175,202,253,15,143,124,121,10,190,121,175,183,45,35,1,234,228,12,118,41,93,84,163,21,231,155,144,163,61,116,133,212,182,97,231,226,214,194,183,172,232,27,60,5,18,37,129,206,3,108,196,118,127,109,93,5,110,245,181,52,192,28,221,145,128,193,254,129,5,3,5,244,209,124,245,250,236,183,180,197,191,108,87,45,106,201,233,177,233,226,14,68,85,116,129,35,69,220,98,22,156,61,153,37,11,223,16,123,93,160,17,242,139,200,129,4,167,127,128,65,180,56,46,14,203,167,91,198,234,255,16,0,198,24,157,202,5,80,142,168,103,154,217,195,144,141,201,67,54,131,176,92,148,173,204,136,97,142,129,151,46,89,61,157,215,113,108,226,134,120,246,65,118,143,232,108,33,146,149,74,111,149,219,175,52,40,246,123,225,23,45,65,131,159,7,118,54,139,95,83,216,226,34,168,131,80,88,28,112,185,192,131,199,86,134,207,136,112,117,18,136,26,203,238,8,107,66,195,74,109,13,237,89,55,77,135,33,178,155,86,2,98,202,56,52,21,175,185,152,191,28,58,40,130,96,156,86,71,87,87,4,158,12,50,27,247,68,178,109,226,222,138,88,14,11,129,43,85,109,150,28,26,1,157,230,123,198,207,37,157,171,98,226,10,91,9,70,61,177,95,166,72,120,145,84,91,196,31,99,66,109,201,132,90,254,16,242,241,213,11,181,131,123,252,38,212,166,79,52,169,79,214,180,78,240,162,178,194,127,128,203,242,144,136,14,227,228,125,15,192,251,46,55,214,233,49,116,68,242,153,98,34,156,93,147,234,24,76,70,1,0,182,132,32,157,138,28,50,97,4,139,132,180,232,14,173,252,58,38,231,102,30,231,135,110,4,184,62,196,131,60,12,178,12,16,203,178,131,121,176,128,15,16,203,160,239,19,24,6,30,138,240,89,144,107,196,2,147,15,128,113,146,33,187,132,175,70,53,150,194,4,106,204,206,27,65,228,249,209,99,133,111,231,159,94,197,170,91,194,106,0,126,88,87,151,199,63,49,2,99,54,12,153,140,148,108,65,98,185,138,239,90,60,49,135,56,160,216,203,15,44,158,237,207,243,13,0,112,9,9,196,166,234,162,0,77,122,203,16,182,235,196,78,101,208,66,160,217,26,18,90,218,160,109,6,41,141,31,111,16,125,15,8,37,174,70,18,223,37,181,158,30,197,108,114,72,68,65,143,18,218,38,114,197,32,98,34,207,146,121,138,66,246,102,26,5,222,146,161,81,128,146,40,196,232,3,76,53,151,213,172,135,77,122,3,15,40,19,137,222,130,134,111,42,214,198,141,177,224,185,187,35,133,98,75,107,123,229,100,119,0,172,44,59,67,14,131,244,127,194,227,111,148,62,27,50,170,51,137,100,144,54,64,236,1,32,55,22,222,235,178,1,93,54,37,214,150,32,246,252,28,65,67,205,66,235,206,139,109,108,80,30,167,130,76,123,155,221,43,0,174,87,134,21,121,144,227,164,172,161,197,230,11,208,30,134,133,44,122,243,1,118,172,12,31,147,195,241,41,92,69,16,55,182,196,98,43,128,176,79,190,182,216,207,172,241,246,36,177,20,247,108,248,27,222,109,152,78,227,1,241,137,52,73,55,117,169,64,170,65,220,153,169,176,107,90,247,29,26,105,3,4,7,216,73,171,59,149,122,131,23,47,172,7,126,35,110,100,240,141,213,42,190,179,14,225,116,200,167,29,140,203,78,36,78,81,57,128,5,92,157,181,9,43,172,6,97,55,117,133,66,242,220,141,178,177,42,114,236,180,225,173,220,189,46,124,194,15,19,158,9,243,44,60,169,213,8,176,193,60,55,236,95,156,144,11,128,6,72,209,66,179,129,182,21,54,129,140,156,250,107,214,212,54,96,197,15,138,24,75,228,0,87,76,98,11,16,221,180,164,205,156,200,232,207,14,94,13,176,50,45,43,203,146,231,7,224,216,214,181,67,155,162,74,20,171,242,199,202,246,131,41,252,188,34,184,91,79,142,119,80,192,33,134,103,2,1,16,199,76,108,214,14,229,245,128,248,133,194,177,43,112,143,171,74,83,59,128,96,220,222,145,143,15,153,20,149,34,22,3,201,114,127,65,162,114,106,90,80,229,50,125,47,85,11,89,202,41,230,54,213,111,140,131,109,26,56,0,32,46,85,66,151,56,174,67,97,48,84,201,2,91,16,131,136,8,230,193,82,14,120,112,212,218,188,114,151,169,127,40,106,162,6,201,222,114,12,41,211,6,92,130,0,23,180,197,253,72,72,234,98,237,97,10,16,144,121,91,2,187,18,122,34,92,38,147,49,78,66,96,142,97,143,37,72,102,131,178,75,36,208,50,2,124,235,79,136,41,148,102,16,125,196,234,47,230,191,176,64,17,156,75,150,218,57,58,182,244,234,178,150,90,0,224,58,19,134,199,195,65,31,155,222,151,134,59,120,18,195,210,0,100,131,45,83,203,245,7,201,18,139,55,28,69,129,160,127,179,95,80,127,61,116,170,68,74,167,80,32,211,190,4,1,205,6,18,71,35,238,26,85,44,198,118,155,176,112,182,108,112,251,5,93,103,152,82,129,101,6,237,82,33,128,156,33,159,210,109,9,108,112,97,158,7,69,58,146,55,240,130,109,162,41,138,156,109,147,207,78,116,8,155,70,101,140,32,27,76,236,12,144,99,96,174,110,86,5,40,162,154,187,146,85,237,106,212,72,135,46,62,110,118,99,24,4,14,86,22,74,10,146,182,241,194,170,239,175,15,239,249,60,156,169,158,178,17,234,236,184,92,227,182,246,201,148,6,120,229,203,178,227,26,4,153,195,160,52,128,58,32,182,23,232,3,137,254,17,149,148,68,147,1,178,116,122,211,129,58,209,104,54,6,77,42,83,183,18,165,172,169,97,59,27,40,209,239,0,185,133,150,94,120,175,169,138,179,176,109,97,104,64,32,76,47,204,183,11,212,145,77,91,13,20,66,206,106,19,246,176,0,4,118,118,3,34,194,189,92,237,182,217,108,237,139,179,121,199,161,227,116,58,221,115,144,155,49,218,67,157,184,198,215,78,9,124,83,38,126,106,41,22,125,38,145,77,205,74,212,149,76,154,39,66,63,211,13,18,21,194,24,214,17,65,96,233,5,227,47,49,17,15,116,254,92,178,218,140,35,79,204,178,83,134,30,89,62,10,132,65,96,100,92,88,96,4,106,9,104,64,144,183,123,35,186,213,243,113,26,68,68,1,168,0,137,58,193,177,146,104,189,110,17,20,155,74,164,105,20,185,40,151,241,212,67,206,166,45,245,7,250,192,162,10,144,41,10,153,58,33,219,163,132,214,154,119,223,241,216,97,134,193,216,127,74,63,2,37,106,29,22,76,139,96,154,5,89,176,104,233,47,206,182,14,235,147,59,81,130,199,68,153,204,108,16,84,68,47,84,85,198,51,42,210,141,64,22,85,48,227,221,61,81,177,93,242,3,142,206,199,188,137,124,88,54,3,132,251,178,82,155,240,159,5,64,172,61,162,70,35,81,201,122,92,186,75,198,52,22,46,64,6,196,253,130,66,145,218,116,209,240,35,39,224,242,255,177,247,102,59,115,29,201,185,232,211,44,64,109,160,136,156,214,116,105,27,7,190,242,149,129,125,175,62,238,118,55,32,139,134,90,134,207,126,251,179,42,51,134,47,50,162,254,42,82,164,72,182,9,136,20,87,84,206,25,25,115,70,58,72,85,192,240,232,21,5,140,145,2,38,29,211,183,8,51,213,131,54,15,129,206,97,22,152,191,3,131,189,89,6,202,43,108,5,146,54,18,214,48,19,26,245,52,231,70,179,233,57,198,157,120,244,166,13,111,45,0,134,169,17,100,65,114,240,54,40,51,196,67,192,21,186,143,128,70,120,6,41,174,192,52,239,255,122,37,93,127,32,236,100,81,98,19,192,152,12,139,0,4,247,157,161,24,29,68,144,109,14,160,119,100,160,162,99,212,85,116,182,96,97,6,44,214,79,10,90,191,249,8,242,1,59,101,243,58,200,155,185,189,41,60,176,151,7,86,245,192,246,30,91,232,169,195,50,15,219,218,145,2,115,83,32,76,226,46,164,37,178,209,31,178,222,99,186,188,68,26,186,57,22,136,226,74,233,75,188,40,114,21,6,44,246,202,22,172,133,223,66,216,114,104,156,4,118,124,226,18,55,207,208,17,181,161,171,246,115,52,23,95,216,50,68,147,239,166,104,152,22,89,27,160,214,3,147,191,66,112,36,195,156,54,217,224,188,45,223,25,216,156,9,238,224,152,64,111,183,3,8,116,132,49,19,150,229,132,102,141,165,88,254,27,113,166,128,125,97,243,166,71,228,78,161,73,102,208,55,145,79,73,31,196,248,27,185,2,190,40,3,131,206,153,98,193,60,168,142,222,255,96,64,66,58,171,151,0,249,58,141,110,166,103,129,1,159,52,204,52,96,182,150,27,155,149,130,172,250,15,172,7,179,224,27,72,199,145,27,36,240,149,160,149,33,178,67,88,75,69,9,134,68,206,4,47,137,197,18,91,36,217,161,61,41,178,56,25,147,20,202,163,213,242,53,28,130,25,150,177,56,89,177,52,146,92,67,217,214,154,165,218,220,236,212,85,210,229,77,40,221,80,92,81,2,186,140,153,240,88,37,64,195,195,38,3,22,208,202,137,122,64,217,18,164,166,18,148,204,200,201,183,129,231,10,108,69,222,242,178,243,253,39,180,144,13,234,219,104,22,36,204,64,35,212,57,64,70,250,213,115,106,85,51,254,73,17,94,26,93,58,138,35,114,50,201,44,181,44,214,246,84,56,197,20,134,22,244,155,3,248,54,194,228,128,243,46,48,154,248,110,4,38,29,11,59,48,105,141,116,126,222,166,21,25,190,180,26,25,181,156,103,207,218,157,12,200,62,116,231,172,88,129,79,208,182,31,133,170,192,6,223,196,80,194,254,56,118,204,241,113,28,192,70,233,180,86,254,20,76,161,44,113,185,209,229,213,113,208,149,95,204,1,11,65,76,131,139,121,176,169,233,76,192,4,81,212,40,172,130,47,77,224,195,25,115,48,138,15,88,153,67,90,196,56,11,72,198,103,64,33,137,250,194,27,39,59,195,20,235,192,40,72,34,15,27,43,50,140,230,148,211,127,194,46,33,221,96,239,17,193,170,131,73,74,235,100,78,143,148,3,188,38,83,209,172,63,240,29,10,162,71,121,133,145,25,26,117,26,19,72,165,141,68,83,9,25,241,80,89,163,255,161,245,202,69,23,185,232,7,23,31,177,75,106,175,85,32,164,126,128,184,77,212,13,196,172,158,255,75,206,150,233,39,17,206,39,229,219,153,48,152,86,175,255,165,94,37,184,75,28,132,85,89,183,94,228,248,155,124,131,220,82,228,67,68,227,93,104,224,51,38,64,150,27,168,4,68,160,65,21,226,255,132,110,124,10,71,104,38,168,219,116,223,5,182,171,127,239,208,205,2,66,217,73,105,39,14,216,94,18,211,102,35,99,181,14,214,201,229,27,249,133,37,9,169,94,103,46,58,186,105,239,58,50,244,72,134,174,29,196,241,11,25,110,95,80,55,57,65,250,53,2,208,149,97,69,35,98,103,167,0,140,15,130,202,76,144,72,137,124,160,108,242,152,74,0,19,151,136,99,137,94,215,15,13,2,124,76,20,66,11,173,136,90,137,229,147,249,112,157,142,81,44,122,35,26,56,217,29,165,123,226,39,77,71,198,56,105,158,213,244,12,125,230,249,184,2,178,221,148,214,32,229,120,195,11,155,73,85,187,174,12,226,35,159,155,8,207,93,96,33,235,192,9,21,104,35,209,239,224,13,250,129,221,223,118,79,94,12,228,36,212,152,220,107,131,198,8,4,110,147,217,31,17,121,45,66,231,6,246,72,114,65,16,97,17,28,220,197,30,238,233,244,51,241,55,65,175,206,208,230,76,113,222,90,55,91,244,92,180,135,29,111,210,158,18,58,89,45,113,3,68,139,172,143,214,62,201,140,110,236,22,154,231,137,208,162,91,221,155,68,35,195,169,83,44,203,12,32,242,6,202,168,151,252,189,126,16,104,17,86,215,136,181,17,21,185,65,134,77,102,115,233,234,218,62,237,102,82,75,102,28,95,146,7,200,56,53,70,49,30,141,56,67,208,61,58,249,65,2,144,247,169,68,142,23,170,24,196,18,30,83,235,118,140,65,88,140,153,93,130,157,133,157,158,98,117,130,72,151,183,67,61,86,215,150,241,56,172,211,156,31,121,46,140,195,35,112,252,4,238,161,192,137,116,106,111,99,163,96,140,220,72,67,12,165,2,206,235,212,220,112,96,9,193,46,92,96,97,26,26,89,34,3,243,50,25,161,31,26,170,1,48,135,58,248,112,136,40,100,226,65,88,133,213,167,139,157,133,153,87,130,229,110,222,114,97,98,81,39,203,126,104,199,154,57,174,101,203,17,219,70,182,254,144,247,227,248,72,187,245,234,60,168,252,161,73,0,109,6,84,197,27,22,30,171,200,14,2,238,238,62,20,244,193,192,232,250,208,59,166,30,227,106,84,95,193,200,165,16,248,10,138,131,204,103,38,146,21,66,150,30,121,252,35,87,4,142,130,88,150,21,158,151,73,180,118,194,119,32,160,59,26,237,9,121,96,153,178,214,23,176,206,20,252,29,152,195,140,20,243,198,68,254,51,207,250,3,241,128,167,210,65,207,115,223,135,114,16,169,221,62,60,198,136,245,145,84,109,164,239,192,25,100,189,69,180,143,179,75,41,218,237,24,43,130,112,17,31,83,2,243,235,199,97,68,13,245,29,49,25,136,76,86,37,175,185,123,253,62,52,3,68,246,130,200,174,64,105,187,50,218,176,51,119,129,150,125,131,84,4,227,124,184,232,250,246,198,21,194,8,87,239,68,61,130,32,96,129,225,16,35,115,11,148,86,99,158,37,45,208,253,207,24,115,85,61,33,124,162,61,90,8,111,136,177,246,154,216,162,131,54,31,106,8,12,67,145,229,104,50,46,225,2,24,19,148,95,201,104,189,253,190,4,219,23,239,178,89,132,142,147,93,85,234,169,240,242,17,31,212,200,250,19,27,137,34,99,146,55,58,69,40,238,247,57,198,134,0,103,6,4,125,21,148,223,69,72,107,99,49,22,204,104,209,5,178,249,154,25,251,6,118,215,212,129,226,13,175,132,241,85,44,74,54,7,132,110,12,66,12,104,158,171,217,117,86,138,49,76,30,15,120,98,100,136,11,55,204,117,231,199,20,141,187,173,19,72,90,66,53,143,2,73,21,192,120,139,238,175,141,96,155,130,88,97,67,17,101,236,66,83,136,139,142,143,238,86,6,23,48,221,37,77,187,84,132,219,111,92,88,66,208,128,68,218,9,174,59,54,214,119,74,147,180,228,243,193,241,154,48,136,252,86,44,20,216,18,254,246,18,0,102,117,134,214,13,199,151,86,15,11,116,60,175,10,250,125,9,54,47,220,226,8,19,38,116,9,80,42,64,188,8,59,205,202,221,255,180,193,236,251,66,246,197,15,31,221,153,150,110,90,223,55,119,192,177,101,160,5,33,193,240,151,87,253,101,137,80,211,212,65,154,81,71,55,15,108,136,220,128,120,101,116,186,65,128,173,117,248,253,135,193,246,74,108,100,13,56,212,236,106,153,110,208,102,24,203,77,46,217,250,123,184,211,85,93,123,153,247,13,146,61,19,118,79,252,3,14,17,177,145,64,62,241,66,12,76,190,143,124,68,37,119,97,111,123,128,107,225,241,242,167,48,56,172,254,60,63,208,198,155,55,14,104,186,222,89,237,7,171,64,1,72,53,134,41,23,165,26,133,178,26,67,79,104,10,82,75,81,64,105,238,127,182,145,183,182,243,159,174,48,132,135,213,89,206,34,243,90,223,4,52,13,76,54,58,19,31,18,198,143,104,120,9,18,32,171,186,59,245,30,131,251,162,240,63,111,32,9,108,13,129,61,194,69,1,184,56,1,92,149,85,150,238,205,236,230,177,79,108,1,191,139,241,203,12,145,49,240,222,176,101,28,30,67,99,159,3,84,164,12,198,40,38,59,183,206,32,0,185,239,73,195,116,40,175,101,50,171,65,26,171,76,25,53,33,223,7,187,182,77,194,143,1,252,230,83,126,212,229,43,79,249,241,59,230,101,29,104,86,63,105,158,176,227,211,172,239,7,230,103,61,210,151,233,182,124,153,110,63,81,18,220,151,179,209,6,136,242,17,89,105,217,127,203,109,114,244,106,157,78,192,211,106,157,248,118,126,243,65,21,111,242,234,216,30,230,175,253,205,39,239,248,224,147,55,222,51,234,172,157,86,246,127,81,137,79,69,115,182,240,56,156,159,251,20,110,33,169,251,236,221,238,33,169,251,252,221,134,164,238,243,119,27,242,235,207,223,237,254,69,186,229,244,177,191,181,219,23,9,123,23,35,187,0,122,63,65,93,47,235,239,125,180,44,7,248,222,73,119,158,12,97,83,138,53,91,172,11,197,253,176,119,21,99,147,114,171,45,55,140,13,247,191,186,78,176,75,185,205,150,27,105,90,239,69,186,154,120,72,185,221,150,235,226,112,215,74,59,149,57,165,220,97,203,117,23,66,87,6,250,175,73,202,157,182,92,151,192,187,160,125,111,180,91,19,123,185,150,164,220,83,6,248,156,15,177,118,217,53,190,55,89,88,122,119,158,103,217,246,117,63,50,61,156,153,234,90,215,182,229,86,4,120,15,109,168,237,204,37,115,82,247,171,222,177,157,245,104,251,198,201,219,27,95,127,126,194,110,239,93,238,229,60,47,205,168,214,85,218,75,123,109,45,173,107,222,77,183,123,222,74,219,215,245,208,146,87,237,109,207,107,58,246,227,76,27,63,156,66,26,237,246,202,124,215,82,243,105,58,191,230,124,172,185,230,67,128,52,231,178,215,237,200,91,163,142,198,188,75,189,116,228,253,26,112,221,237,212,219,7,10,12,223,55,234,205,249,166,107,169,115,61,174,70,14,238,188,213,107,114,181,66,139,17,48,172,45,134,190,158,109,225,89,239,199,185,173,109,109,57,241,235,4,233,93,110,215,142,151,45,75,131,30,20,85,108,236,246,124,38,79,166,119,71,61,75,42,199,145,96,21,239,77,93,155,156,114,221,160,227,0,26,85,215,123,34,199,211,206,175,205,43,103,219,207,243,72,109,227,38,183,117,189,16,106,175,185,181,181,202,110,7,208,176,62,187,101,187,247,237,217,138,167,227,154,78,59,206,2,56,222,238,232,211,142,122,28,56,249,0,26,214,231,123,109,119,143,239,87,185,223,231,158,218,222,202,133,191,66,97,238,74,68,221,207,182,174,235,6,100,39,130,5,181,87,190,173,244,2,61,169,229,106,46,95,180,80,159,239,168,91,58,247,61,239,229,88,117,25,66,160,171,173,246,235,250,161,164,172,83,173,227,162,168,237,76,210,94,12,155,106,54,246,241,31,31,70,120,43,191,178,240,164,222,189,195,139,160,230,124,108,102,157,242,69,120,143,178,219,131,26,2,131,250,141,159,251,56,159,47,212,86,202,117,206,128,170,246,215,84,74,185,144,173,154,126,66,160,175,46,111,129,188,208,247,53,242,178,94,12,112,159,38,110,232,131,3,248,106,141,158,184,120,214,229,199,111,210,177,29,235,190,37,59,144,59,239,46,121,189,126,192,3,28,64,227,250,11,5,163,63,233,122,205,87,123,235,81,83,82,162,117,92,235,93,175,6,183,45,153,167,109,28,52,170,222,211,99,236,47,32,102,75,245,58,32,85,25,251,117,82,47,2,120,145,9,96,215,183,8,24,85,198,103,70,62,76,134,161,184,128,124,207,52,253,108,204,23,58,26,114,117,141,238,184,152,200,129,210,216,45,2,6,117,229,254,71,122,202,216,210,37,34,221,121,70,85,249,96,79,231,89,83,203,23,61,81,228,240,192,168,50,123,149,247,223,123,194,116,114,63,227,254,28,233,204,23,26,182,227,40,74,155,243,37,79,174,117,219,80,168,140,96,81,109,114,100,244,180,71,79,215,106,61,114,222,45,95,168,251,126,209,175,182,25,33,48,4,250,234,137,227,204,158,72,229,119,154,149,215,188,229,92,113,214,151,228,123,177,246,210,144,253,132,64,95,155,174,209,228,153,126,124,144,102,192,215,55,242,11,72,86,44,123,30,24,181,94,210,217,133,188,167,80,196,8,22,84,150,103,110,159,203,108,199,86,215,99,179,10,200,122,29,160,11,19,210,81,146,136,134,17,204,215,149,247,148,247,231,124,241,162,227,233,146,251,79,148,74,47,182,211,114,219,172,160,18,2,163,250,21,194,201,62,84,139,123,125,175,214,243,146,216,47,12,2,85,165,92,34,115,186,216,247,166,187,55,131,162,138,55,125,116,96,123,129,16,93,27,125,9,236,155,32,233,93,174,59,215,75,104,184,68,118,236,58,128,70,213,245,110,247,43,146,68,201,5,31,138,187,31,164,245,218,152,122,222,247,70,5,223,0,26,212,190,53,120,13,249,195,118,138,227,114,51,83,163,47,102,160,183,6,236,207,244,245,201,12,224,95,198,54,123,132,143,34,126,54,107,165,93,192,98,190,170,249,106,230,107,53,95,214,55,177,155,175,227,211,216,247,40,56,38,247,16,154,231,170,86,189,56,22,28,189,192,170,245,208,214,53,85,230,144,136,87,236,39,231,113,105,231,57,153,55,31,47,130,123,28,205,106,20,14,22,214,165,144,240,23,56,195,85,165,93,26,107,5,106,159,214,114,120,29,46,128,70,213,199,221,197,250,210,148,247,115,93,107,65,178,157,174,213,92,183,122,154,71,50,61,48,170,76,234,79,125,197,116,242,121,54,249,11,237,241,11,220,236,239,120,147,153,60,252,216,73,246,76,25,254,236,120,205,40,39,212,244,167,63,253,186,148,244,255,190,255,239,159,239,255,95,234,213,90,250,245,47,127,253,219,187,255,248,211,175,255,242,211,251,63,254,248,211,255,249,241,151,191,254,248,199,159,254,244,195,178,14,94,117,47,218,255,249,135,165,254,211,245,175,159,255,250,231,171,210,15,107,175,255,255,112,107,127,184,127,238,253,119,106,253,159,238,255,141,26,189,135,191,61,239,161,15,153,219,27,85,251,106,167,63,245,167,96,184,131,49,9,154,43,77,162,82,249,255,249,203,95,127,186,67,127,192,159,199,127,87,33,24,165,173,254,175,63,254,250,151,119,127,254,233,253,251,95,126,232,255,252,229,199,159,255,253,253,127,254,112,47,255,15,215,159,189,87,188,79,41,101,24,24,79,237,151,247,239,127,125,247,31,239,127,125,255,143,63,255,251,191,253,250,254,191,70,231,127,248,168,217,103,51,243,242,197,2,116,62,101,208,83,232,205,252,130,65,79,79,89,232,73,47,128,166,244,46,22,5,191,242,135,145,86,73,159,42,33,234,154,112,10,190,146,253,145,46,247,241,101,64,169,59,174,127,175,122,107,125,53,175,188,193,143,55,95,249,102,26,191,77,61,223,236,184,110,193,200,169,135,27,244,127,131,1,216,95,167,250,92,129,255,172,247,26,47,134,43,210,200,22,140,86,84,24,196,43,82,215,11,134,43,118,216,55,31,173,120,126,101,7,247,91,59,135,114,157,235,132,144,99,125,9,232,254,53,40,13,135,72,47,133,227,174,171,132,212,115,142,131,194,5,36,75,240,137,170,246,6,153,195,224,29,106,202,60,199,145,192,114,19,85,238,150,173,28,73,141,159,247,34,28,16,78,160,67,218,144,171,118,156,11,147,175,53,114,110,156,13,94,193,186,87,133,71,33,37,125,4,213,167,88,58,204,165,201,207,45,49,100,92,143,213,188,233,39,101,23,203,242,221,155,220,37,218,154,18,240,108,152,194,113,36,198,106,211,183,254,126,142,38,224,85,149,58,54,73,115,106,142,50,227,202,219,198,25,75,37,90,122,236,26,220,165,163,176,252,19,222,138,30,85,52,195,86,91,10,167,124,39,107,36,71,153,83,195,248,221,219,194,188,90,180,130,144,87,107,132,173,224,213,121,90,192,99,198,12,201,15,223,120,86,26,54,47,249,241,17,37,7,250,102,190,3,201,159,152,8,145,159,161,193,59,227,77,246,139,1,180,38,190,26,220,74,34,68,48,175,231,225,49,234,127,170,249,43,138,158,183,149,30,181,29,140,224,20,179,180,25,66,143,87,154,146,39,213,1,131,171,157,148,186,6,211,49,210,205,229,12,23,189,167,193,165,199,75,104,150,58,218,13,187,95,20,63,49,76,0,197,204,179,143,31,111,182,208,189,210,140,169,62,198,137,205,144,115,224,80,35,253,26,12,51,121,52,10,49,205,34,227,3,140,29,119,192,243,138,207,107,141,220,66,46,197,53,21,226,190,96,65,236,96,58,235,215,211,229,78,30,156,74,127,108,65,30,202,153,31,230,24,211,175,122,170,152,122,55,210,19,219,248,192,137,102,59,45,57,223,186,213,48,198,110,40,242,244,4,73,142,163,72,158,96,157,242,51,13,191,208,126,232,139,24,208,231,206,143,52,64,135,59,160,217,224,8,5,183,212,12,113,120,68,45,101,54,164,59,235,86,239,140,99,85,103,65,229,103,106,196,231,228,0,150,162,157,116,86,50,220,56,29,1,246,222,243,7,222,73,161,16,79,184,146,34,48,188,148,50,184,160,17,242,6,86,126,235,82,222,73,61,126,151,242,150,143,148,242,10,135,244,224,13,127,118,90,9,38,75,218,97,57,242,133,243,25,243,249,40,230,161,115,186,144,37,36,181,160,164,70,233,74,228,85,30,102,105,196,79,216,74,39,121,95,37,249,118,134,113,137,3,118,41,146,48,131,115,152,77,179,234,197,198,243,59,35,146,213,60,76,248,210,89,211,119,156,255,63,243,142,243,124,212,226,247,158,247,249,164,125,253,88,65,91,33,72,81,69,232,218,97,213,205,61,89,118,175,194,187,69,114,219,117,195,112,185,33,102,79,28,70,238,245,74,22,121,149,213,229,22,239,72,32,67,154,132,162,34,1,146,86,224,4,175,13,170,235,83,90,192,175,11,101,166,101,233,38,185,220,56,35,39,7,228,182,72,156,34,142,17,52,113,162,238,93,225,248,88,137,102,145,129,215,230,86,6,173,248,141,98,150,130,224,104,86,92,198,98,155,80,102,68,234,21,228,187,225,228,32,38,67,199,0,97,114,17,76,33,82,224,36,101,147,26,163,77,67,165,29,192,132,66,153,93,237,155,133,36,148,225,40,121,171,25,212,180,216,55,206,146,138,233,103,18,55,142,105,248,27,236,10,129,138,182,69,3,164,135,234,41,55,247,80,240,48,5,255,180,247,246,32,36,173,11,25,159,146,188,209,178,207,160,130,165,240,213,21,66,163,117,2,101,185,99,95,28,164,42,100,0,218,98,208,177,186,190,8,242,54,245,51,55,238,231,67,31,44,8,46,90,184,166,176,230,143,55,198,109,31,53,133,76,136,177,218,225,203,4,59,1,75,30,160,94,128,159,17,18,59,76,15,206,131,63,53,254,104,249,227,23,29,210,240,48,199,135,30,105,67,72,62,44,133,41,186,222,64,115,12,149,50,52,236,1,149,155,9,225,76,42,11,105,255,178,105,116,113,219,108,254,128,168,106,197,188,127,91,224,124,152,23,14,0,9,239,127,70,206,131,125,228,106,195,123,219,128,185,33,61,240,100,195,19,151,144,2,121,50,21,147,178,9,233,34,220,12,112,120,70,116,59,246,71,36,102,62,226,142,10,132,132,98,34,38,1,197,137,200,82,64,187,2,10,55,147,152,50,210,59,141,137,197,233,103,16,129,102,181,217,241,104,203,195,45,143,31,216,71,217,82,14,133,80,5,70,54,77,177,54,176,12,55,106,84,224,160,182,85,65,19,78,227,152,123,187,93,250,234,215,136,75,218,222,152,38,140,67,95,141,39,207,40,69,178,111,242,59,175,47,9,207,20,250,93,97,160,48,244,104,106,208,227,216,140,46,140,159,135,110,137,27,166,59,173,21,243,87,142,45,160,52,152,112,108,52,15,58,237,85,51,135,23,207,179,63,239,134,28,56,138,209,215,102,104,242,189,247,51,54,142,153,97,142,70,134,148,47,54,21,114,61,147,57,132,86,117,67,138,77,54,0,25,71,226,50,34,160,145,170,178,49,161,218,161,197,120,246,102,129,220,242,153,81,247,42,221,234,208,203,154,132,46,47,169,35,52,101,163,142,40,12,244,145,45,72,71,113,159,229,55,175,248,255,158,247,248,63,74,241,255,237,107,186,190,180,168,229,247,10,185,251,252,95,159,12,57,194,155,207,121,251,96,236,40,31,22,213,199,25,98,126,115,191,31,21,214,247,177,95,159,38,28,240,55,125,189,114,186,202,107,129,176,149,105,251,243,24,175,237,126,151,39,99,196,123,55,112,173,219,150,83,78,123,211,155,18,33,48,168,223,248,65,154,23,238,67,222,47,203,148,117,175,165,21,188,195,179,231,109,138,233,138,96,65,237,149,248,209,243,59,106,123,218,175,153,172,83,136,249,5,77,103,49,177,228,49,104,174,187,113,38,231,23,66,54,75,61,90,173,135,189,228,90,247,107,41,235,89,19,222,0,12,129,65,125,74,103,215,62,244,242,136,195,147,111,205,108,75,201,190,68,142,102,97,54,161,70,43,55,23,86,15,195,39,139,58,8,18,7,82,18,107,245,58,75,189,221,232,83,12,131,247,213,41,61,237,6,131,185,237,232,42,226,244,180,10,33,179,25,232,27,114,30,84,100,163,84,230,0,161,208,28,176,158,52,5,176,12,203,178,117,98,97,16,36,83,114,231,239,164,121,228,121,65,97,137,95,21,170,195,81,17,68,0,238,123,170,50,196,253,134,74,8,137,150,154,113,186,111,31,251,41,249,33,20,92,174,197,68,102,36,126,80,147,158,28,44,250,65,90,232,97,91,184,101,22,162,231,5,177,239,173,16,8,117,0,82,114,10,64,222,88,89,48,208,128,227,118,218,28,183,123,176,181,102,219,61,102,12,141,76,178,192,41,18,173,210,61,187,9,116,246,133,87,20,20,238,115,81,47,98,7,208,138,153,246,135,247,126,204,111,211,212,119,137,25,3,154,27,86,245,211,38,14,251,24,45,151,197,132,128,200,175,155,0,242,164,192,216,62,59,180,39,11,41,99,175,202,67,77,213,77,124,183,125,23,138,25,225,224,27,82,60,119,182,14,157,139,188,226,10,35,51,20,225,84,8,99,213,238,31,137,219,196,2,64,159,152,49,115,194,214,16,237,28,114,26,12,38,172,58,180,109,186,203,166,132,136,145,110,51,102,200,34,171,234,215,57,222,11,183,93,110,67,217,183,188,207,223,138,92,141,182,42,211,134,204,182,253,13,156,115,128,153,49,242,218,125,238,39,169,147,143,123,39,27,250,157,17,53,28,13,26,36,104,83,0,163,218,124,28,220,136,130,49,195,172,230,9,195,90,196,139,5,171,233,14,143,63,91,211,225,243,59,24,109,114,128,8,138,44,49,46,77,212,210,81,84,67,116,61,77,54,36,27,88,30,100,183,53,68,223,242,4,199,54,238,127,58,167,218,186,149,233,64,2,240,170,199,115,113,14,79,2,129,129,97,87,24,23,219,255,30,236,11,95,91,220,247,55,39,161,146,243,3,93,32,148,211,24,44,102,148,156,91,163,110,228,77,65,160,102,121,84,211,64,131,70,237,244,143,126,252,54,112,6,19,64,13,227,238,9,143,81,238,212,42,36,92,204,244,170,138,165,58,83,116,20,177,111,146,112,36,191,111,102,129,134,120,220,97,59,16,155,51,60,207,8,171,179,202,209,164,135,37,30,218,149,155,37,32,195,170,202,44,175,119,190,26,130,237,216,0,9,62,204,204,51,155,53,139,126,236,240,246,8,67,52,234,138,33,131,83,13,162,13,36,107,225,23,236,245,11,232,31,9,2,252,91,34,38,192,170,66,154,200,114,66,10,75,171,6,70,89,130,172,10,97,131,51,137,19,180,206,211,239,133,136,61,251,222,78,93,129,98,32,104,195,30,235,204,178,40,189,49,56,11,61,145,184,61,98,98,44,123,17,238,34,242,231,216,56,131,193,154,253,94,216,57,184,3,0,17,122,151,175,56,37,102,36,103,153,59,110,246,81,207,211,216,204,200,221,196,112,230,110,89,236,170,21,191,180,193,218,219,205,177,251,197,104,117,227,121,200,195,153,203,44,42,18,100,106,2,208,108,34,93,209,249,133,51,238,105,128,35,17,134,128,24,242,226,41,144,145,204,189,12,7,116,107,51,168,203,223,211,110,25,81,10,143,184,163,0,134,62,120,18,66,100,125,62,130,254,152,154,163,236,78,186,161,3,227,248,172,22,64,81,4,59,238,16,244,10,244,210,253,109,81,222,173,199,232,7,37,166,1,81,130,120,175,114,176,150,220,244,131,198,69,183,9,144,178,47,74,15,23,241,11,237,252,30,253,102,151,166,208,141,35,84,161,39,108,52,8,27,32,116,132,240,33,73,123,72,18,215,105,7,163,61,181,27,224,182,200,109,226,68,236,39,78,128,140,34,226,35,200,103,98,94,228,112,217,236,238,253,207,131,119,123,95,20,118,217,77,246,182,180,123,104,116,173,94,171,170,127,7,113,180,223,111,75,253,102,113,183,75,165,171,57,85,75,151,83,245,246,131,128,200,226,217,35,63,240,37,24,14,150,58,152,84,22,248,2,93,87,64,254,53,153,65,145,216,38,203,31,32,211,29,99,156,104,80,88,140,245,55,203,131,162,26,202,62,200,25,62,59,202,67,93,81,109,134,53,24,52,185,159,212,145,222,246,193,107,218,28,33,106,24,219,62,65,56,190,23,132,5,126,0,7,158,71,229,135,124,32,116,165,73,44,51,180,213,16,52,4,233,195,84,148,18,26,218,116,255,134,248,155,202,111,20,105,16,194,252,140,76,56,102,6,49,150,20,189,8,103,9,27,62,147,194,209,94,24,135,38,183,227,228,130,82,145,40,19,180,246,211,35,44,240,2,104,153,86,141,227,169,87,227,56,32,8,20,202,14,52,213,226,112,39,224,110,116,193,70,67,146,40,106,136,5,131,49,150,69,56,177,93,135,234,22,75,80,197,67,88,66,225,0,101,93,171,225,25,203,194,228,89,114,231,103,76,123,138,100,135,50,109,222,72,35,6,159,218,211,40,146,181,173,1,40,211,55,133,127,108,90,96,0,84,6,36,23,162,21,231,244,53,212,170,67,1,79,5,99,44,253,79,56,44,7,217,208,59,50,43,150,26,40,174,109,232,250,131,127,133,46,47,41,22,202,179,54,85,0,184,210,9,176,193,60,254,68,209,252,250,218,205,194,246,191,162,24,12,161,146,124,35,205,188,179,231,33,52,222,2,16,11,16,191,128,2,230,231,112,249,149,84,19,236,109,203,36,138,222,81,193,103,147,133,27,4,185,9,66,136,212,175,63,26,185,158,127,6,149,152,182,88,1,235,98,140,172,137,94,171,103,60,26,55,216,193,130,50,16,92,163,56,135,236,8,238,54,18,233,117,252,164,211,205,183,105,233,57,39,14,107,82,227,69,19,172,36,30,112,194,44,236,142,167,177,17,156,203,74,78,120,21,142,2,27,152,103,16,31,102,124,250,46,195,246,235,246,192,187,244,108,86,178,97,236,124,11,164,104,219,100,154,57,231,49,97,164,173,102,213,109,10,98,171,49,148,226,240,94,124,160,45,5,48,38,175,80,21,215,166,131,135,201,167,141,191,251,120,125,124,107,184,126,1,29,159,137,125,196,18,28,227,8,184,139,103,65,1,159,242,204,44,228,120,158,45,206,156,19,150,185,40,46,225,186,101,217,23,231,35,198,11,152,22,87,66,124,10,208,206,46,110,167,104,227,53,191,244,182,61,133,95,221,130,53,26,160,128,93,121,158,230,57,152,86,51,172,208,176,73,195,64,3,6,27,241,96,199,167,35,86,238,25,190,8,138,232,18,118,207,99,102,126,115,16,35,175,101,8,186,87,99,152,147,127,90,94,163,167,190,76,44,47,47,239,225,32,194,234,9,207,192,132,181,17,219,21,46,73,46,156,198,58,47,250,129,87,184,14,63,170,81,188,102,211,18,131,250,86,249,198,14,199,209,92,216,183,201,248,181,136,67,148,150,185,123,217,48,65,59,218,204,200,82,13,79,205,15,150,128,239,236,77,147,228,115,137,68,186,178,237,78,119,116,83,170,94,236,72,251,216,158,155,12,3,157,198,11,253,94,51,200,66,116,180,76,160,80,56,165,131,1,83,17,61,22,15,15,28,36,92,112,136,52,97,154,71,197,0,95,35,172,14,113,63,56,33,147,6,116,12,39,252,136,135,143,227,153,163,21,12,214,203,47,42,86,75,241,154,62,214,245,194,141,88,101,128,111,123,34,66,69,139,216,112,19,0,93,148,201,2,32,196,76,235,12,1,158,194,54,172,45,0,201,182,211,90,23,7,144,89,45,196,15,228,3,238,106,240,117,134,132,190,169,76,32,115,241,125,46,150,249,146,211,57,239,56,20,34,230,153,209,162,199,16,199,116,236,189,186,89,70,9,4,25,47,238,120,78,24,176,203,137,169,6,74,239,164,22,211,254,120,144,217,249,94,113,132,236,247,102,143,88,128,49,200,49,72,42,221,153,218,128,144,221,244,182,126,179,215,34,155,76,72,105,53,67,202,60,52,221,138,198,55,158,142,25,224,176,43,57,69,30,130,207,10,87,243,8,247,16,73,131,102,30,13,199,156,8,119,104,96,229,146,174,85,130,18,179,190,235,20,53,167,202,121,109,175,160,3,64,1,25,1,213,182,42,151,185,97,17,24,181,228,107,62,254,170,248,53,186,41,56,45,88,66,67,141,122,58,163,230,227,226,218,34,247,144,215,7,93,54,212,218,64,2,24,139,75,55,203,28,97,240,228,99,38,48,92,123,76,152,10,131,5,142,46,76,102,83,222,218,206,185,186,94,175,204,19,132,135,52,40,255,97,145,88,48,54,219,253,76,206,16,8,115,245,164,44,99,10,36,56,3,102,52,118,77,165,14,134,206,204,173,200,117,160,25,148,140,168,206,119,28,203,211,122,72,109,205,52,72,125,226,16,0,17,143,26,223,8,85,242,219,100,93,17,70,77,34,200,107,122,145,70,24,42,142,56,14,28,90,122,55,77,104,226,29,94,33,213,99,167,144,3,123,90,140,81,101,50,186,176,132,140,111,94,131,53,195,20,201,243,248,125,215,122,61,90,174,243,1,195,26,216,86,103,128,138,59,139,33,52,217,212,231,228,65,0,200,150,14,209,181,88,21,140,124,115,5,163,214,38,66,199,102,34,141,173,156,44,64,129,149,136,113,210,65,178,67,123,15,41,179,49,182,204,8,14,198,50,217,254,167,205,142,21,234,75,211,95,96,43,77,101,55,207,145,9,15,165,17,102,193,134,90,58,78,227,200,229,76,79,29,193,229,86,25,130,253,14,21,206,34,42,197,14,200,138,120,21,111,214,201,188,214,198,239,204,203,42,86,178,146,157,242,61,27,116,157,205,215,88,133,189,209,24,135,77,134,207,105,152,146,172,98,7,8,152,202,34,91,154,90,218,104,239,193,20,231,77,117,198,146,87,116,103,32,236,56,99,44,109,164,18,206,90,99,160,89,154,153,241,237,137,153,219,221,38,198,3,98,217,35,105,93,201,122,32,42,121,177,76,238,133,227,5,224,213,226,99,97,9,224,49,215,243,140,209,241,78,77,118,163,16,199,195,23,224,240,176,30,105,121,75,22,4,173,198,171,62,15,213,163,4,78,132,135,11,69,153,248,100,134,249,13,209,110,162,136,51,189,156,201,41,203,151,83,156,105,6,147,111,196,243,183,144,175,33,131,15,184,185,23,21,76,211,196,50,157,92,160,215,4,0,147,29,207,15,57,114,96,240,141,52,51,167,192,61,212,242,146,245,91,192,80,201,86,55,248,44,90,115,102,17,192,243,217,128,25,7,12,27,90,78,58,34,16,140,246,185,17,199,173,61,119,241,28,200,49,41,199,198,34,239,204,0,184,181,177,32,231,10,138,36,155,105,109,156,132,164,211,78,186,248,25,124,36,251,36,81,4,95,104,30,154,25,59,54,136,214,144,64,241,156,207,59,234,126,88,9,232,198,19,141,8,54,212,235,71,83,241,152,63,171,24,56,171,104,182,121,167,223,241,9,86,54,74,110,173,89,155,78,66,140,6,70,194,69,150,221,2,188,250,224,20,140,71,36,225,137,93,38,176,222,188,97,228,1,90,191,88,202,62,235,101,64,136,2,185,48,114,49,58,47,228,124,194,30,97,152,109,24,251,234,255,236,152,52,12,116,53,206,139,18,112,63,207,32,61,19,29,187,188,207,128,211,86,65,188,112,150,129,137,5,121,30,226,185,140,147,234,39,185,159,57,172,141,54,78,86,141,48,55,6,157,154,29,168,226,158,213,135,154,116,82,31,119,153,187,153,51,200,100,69,17,160,19,248,59,39,76,226,211,43,144,3,86,9,176,20,186,188,255,121,16,232,134,230,54,180,167,221,107,175,162,180,74,167,146,137,25,60,198,34,198,209,170,4,234,193,76,91,102,211,45,146,175,153,60,120,76,114,168,230,177,113,22,251,188,104,24,81,91,79,145,3,123,33,26,21,67,171,35,46,163,70,224,99,212,4,198,85,4,97,23,115,84,134,9,218,128,128,14,93,13,141,247,24,17,143,211,53,6,181,255,71,158,125,221,201,1,24,91,47,140,111,153,98,7,166,208,130,57,246,32,243,213,234,73,86,174,224,147,211,245,0,94,155,80,153,94,130,67,10,12,193,29,106,167,239,47,150,10,76,204,219,219,23,2,153,198,201,61,147,100,228,69,48,47,166,53,62,164,96,67,170,22,53,217,211,140,162,41,88,149,2,208,212,223,45,144,11,173,4,27,200,185,15,172,100,201,4,68,204,210,184,151,216,113,235,58,176,7,35,228,253,126,130,106,156,207,41,8,238,33,116,132,12,144,155,12,112,156,73,14,83,6,79,196,109,227,140,72,212,198,185,168,108,78,78,212,21,86,137,15,102,51,182,41,23,117,18,196,95,188,17,166,145,253,94,63,50,15,190,185,221,30,39,60,222,4,184,181,196,198,55,45,178,24,3,158,89,249,78,76,198,110,189,149,38,109,246,119,175,124,103,81,168,23,57,19,57,154,148,130,225,33,142,188,82,115,228,231,214,139,91,179,31,220,216,26,188,45,194,152,42,138,174,6,26,51,38,242,230,8,96,16,132,55,155,117,188,225,103,178,12,69,46,127,24,229,18,81,101,23,166,135,100,26,139,171,8,102,253,42,235,12,177,76,5,137,236,32,126,112,247,221,135,163,77,214,202,217,156,105,6,48,124,5,51,85,15,130,206,166,176,52,91,167,227,70,15,88,202,169,19,134,177,222,94,252,212,109,68,185,8,243,186,90,185,7,229,162,7,162,211,36,90,205,178,215,36,41,157,29,117,251,69,248,252,80,70,158,246,211,5,102,70,161,155,139,141,237,156,130,63,29,102,6,184,107,145,6,198,160,254,28,12,209,242,123,230,34,7,49,184,112,144,147,48,248,48,203,207,24,184,168,65,141,202,182,171,4,253,25,20,196,193,245,222,31,37,254,123,233,230,197,32,1,230,226,197,54,230,48,223,188,240,137,204,14,119,209,248,43,191,37,160,89,251,244,120,110,4,65,57,144,24,36,72,114,199,180,119,171,108,193,205,160,2,145,90,128,152,244,27,121,0,76,10,78,21,207,199,55,41,115,54,134,27,232,205,34,228,127,160,38,135,221,41,178,243,148,148,102,226,180,149,88,68,215,183,62,233,117,157,234,47,167,215,111,49,25,55,7,4,162,85,142,4,39,144,114,43,201,87,232,148,26,48,115,231,122,200,78,7,222,1,92,9,4,120,113,136,23,129,110,53,31,116,93,116,8,165,204,214,41,220,169,17,237,81,124,35,58,72,164,71,80,131,76,7,213,142,70,229,156,52,91,71,56,125,51,224,62,177,9,78,143,181,24,158,161,121,95,65,203,175,3,2,247,187,233,2,78,179,16,235,22,0,178,169,172,253,150,128,136,243,205,101,87,4,108,229,137,202,128,146,203,30,3,1,144,38,126,56,128,214,169,128,9,96,114,214,140,25,55,227,53,116,189,222,196,243,49,133,194,65,47,28,100,102,64,4,105,51,0,238,132,115,95,11,83,42,92,107,117,118,35,74,90,205,99,55,56,192,99,196,32,3,50,84,10,137,99,199,9,171,10,144,99,137,232,17,26,204,233,78,229,77,83,207,222,248,189,228,34,201,149,169,30,196,197,83,116,225,162,10,3,222,118,146,152,89,60,149,230,164,166,5,8,38,243,210,36,67,198,95,221,145,173,104,183,244,16,138,207,198,163,62,197,223,113,181,130,158,247,58,129,204,232,222,38,204,238,42,249,205,217,8,45,226,63,60,28,147,73,195,157,75,115,10,227,131,122,51,22,3,147,3,27,90,70,208,52,104,183,53,15,22,40,92,69,191,210,193,118,248,61,155,55,214,108,254,99,212,176,91,147,123,230,211,189,60,216,153,137,224,82,58,101,72,73,11,118,169,244,78,201,59,97,60,39,172,101,6,62,62,53,203,84,229,92,127,24,166,51,159,61,123,54,205,217,125,116,188,29,1,152,137,132,165,34,150,202,56,34,100,105,212,3,50,230,72,157,167,135,158,102,70,148,213,144,223,137,52,91,186,253,136,182,59,242,239,24,68,208,169,195,240,240,28,4,135,101,153,15,212,204,29,3,22,106,216,108,196,133,129,73,63,96,227,19,163,119,162,128,193,221,251,191,250,211,236,116,9,227,109,229,13,13,178,12,208,213,221,23,214,205,178,172,246,42,175,215,244,158,76,136,197,253,119,126,217,147,205,28,120,0,198,207,10,184,183,127,232,39,189,206,183,58,200,34,199,163,44,122,91,95,236,28,138,201,35,201,211,58,207,175,255,171,243,47,186,79,27,135,147,227,145,47,115,27,115,7,190,251,105,120,56,122,158,47,16,133,128,108,204,84,37,91,83,184,14,174,247,59,84,199,190,124,249,193,45,132,194,49,245,112,182,34,129,216,113,99,203,179,35,158,238,89,190,21,10,188,216,48,201,21,145,224,209,4,173,57,162,59,57,161,1,34,65,228,202,14,120,17,100,232,99,108,76,45,110,13,211,216,240,221,7,142,209,134,85,234,237,188,112,193,99,122,54,9,240,21,4,150,27,93,57,58,87,133,79,151,140,161,235,112,112,193,248,221,12,205,34,60,90,171,98,178,250,148,96,14,202,41,223,190,194,16,179,178,77,201,24,170,181,55,97,198,126,189,130,33,133,3,7,76,240,136,98,240,40,224,180,247,63,253,173,179,158,173,47,111,120,244,95,76,24,223,215,117,177,9,227,41,235,131,49,179,172,139,179,178,124,251,249,45,114,162,188,29,95,111,130,139,239,249,226,63,248,235,211,97,71,137,176,227,243,39,140,207,169,125,162,142,191,103,140,255,232,140,241,36,211,245,183,70,159,229,47,223,247,122,108,109,111,91,58,57,21,123,73,71,169,219,118,182,90,215,83,211,200,123,104,84,253,54,98,170,251,171,207,207,250,206,151,234,151,215,114,212,146,40,243,250,197,77,210,94,219,177,213,114,72,30,247,25,20,214,228,123,168,247,135,117,159,37,170,79,219,182,231,220,202,186,75,139,235,153,83,170,45,239,231,38,169,235,29,44,170,122,79,31,190,140,76,83,207,166,219,206,99,111,199,190,159,69,27,172,233,2,183,148,143,117,109,218,115,0,13,235,243,123,228,119,233,253,131,114,197,123,12,249,182,114,19,145,204,118,170,253,108,136,96,154,128,246,254,121,136,142,68,254,95,126,45,249,228,27,251,106,242,211,151,164,134,230,196,241,81,170,72,209,203,217,163,205,17,148,84,180,54,101,254,107,163,121,246,5,115,221,241,220,243,72,159,75,14,105,145,10,55,212,207,238,0,146,201,14,159,138,239,148,59,179,163,81,17,104,119,186,114,77,185,145,88,147,150,133,161,231,226,43,95,159,45,227,196,128,236,221,198,122,142,24,182,99,124,136,10,64,102,156,211,74,204,240,214,240,141,215,139,148,254,60,126,103,109,197,156,208,27,164,171,187,109,156,93,191,204,181,26,199,54,219,150,95,149,134,253,58,15,107,221,9,57,172,183,177,166,224,104,38,192,42,144,106,1,195,76,115,234,28,217,59,201,47,126,14,140,210,244,123,183,147,195,6,26,77,102,142,148,120,107,229,120,13,204,42,149,96,45,41,136,228,24,123,189,197,71,100,218,70,191,205,6,11,2,44,177,88,20,160,153,65,67,135,164,22,137,45,150,135,7,193,238,225,216,249,190,2,65,250,173,215,222,151,166,115,106,148,134,60,12,52,86,107,56,69,187,80,181,161,195,190,41,71,27,188,84,105,49,248,102,253,75,186,141,3,144,181,110,134,210,73,116,71,54,115,51,58,234,107,141,136,109,27,118,206,6,100,124,144,113,124,131,77,142,3,146,208,76,135,141,232,233,207,165,43,155,37,127,40,14,16,69,55,40,160,176,255,139,5,29,6,244,209,124,251,154,227,247,76,224,191,237,88,53,49,154,72,132,66,51,177,7,194,187,192,102,201,22,104,189,250,176,168,209,8,190,225,234,65,130,70,134,9,146,125,127,148,81,5,6,81,252,184,232,118,206,184,41,47,166,70,6,96,60,223,41,100,0,25,137,56,129,136,62,76,9,206,44,100,83,8,49,70,62,203,180,48,68,50,240,158,51,203,192,235,60,54,182,248,245,252,34,250,87,20,23,126,76,107,52,111,68,176,83,97,162,6,253,117,12,138,76,204,248,53,182,160,192,207,19,61,171,236,66,96,186,216,120,233,32,236,28,7,156,30,172,131,93,173,104,61,253,130,139,61,142,229,88,178,252,105,19,18,194,173,123,168,143,147,74,134,25,102,222,99,39,32,126,147,194,192,241,182,155,186,166,160,131,196,11,140,211,234,203,213,37,129,55,3,58,231,51,17,28,27,127,182,252,42,187,141,192,157,202,58,75,138,66,130,78,227,51,99,231,18,206,85,86,226,209,106,5,43,106,145,253,97,214,145,151,216,90,99,211,167,114,181,22,113,53,154,138,97,107,247,213,248,246,185,26,205,255,59,87,91,62,82,169,62,73,214,58,193,99,65,34,255,1,238,129,131,163,167,148,148,247,67,0,111,38,221,72,170,199,48,45,206,17,140,201,165,118,73,84,165,48,30,5,0,72,23,130,20,69,236,208,197,104,49,14,31,147,35,154,233,73,103,202,119,62,207,15,13,9,112,89,143,6,121,40,164,77,16,205,92,133,185,229,128,16,12,154,49,190,79,160,24,232,128,36,11,140,105,68,111,1,28,0,163,196,93,154,248,66,212,106,44,133,73,9,137,158,151,1,41,220,235,10,223,198,23,180,178,94,215,220,110,192,250,144,180,206,111,88,99,180,83,213,21,82,38,201,25,184,88,119,101,63,17,219,98,72,173,59,216,163,6,52,158,52,208,243,29,0,112,11,7,136,148,213,38,0,73,36,77,16,210,236,88,83,37,80,27,160,170,13,49,46,109,208,54,129,4,199,143,119,184,124,119,200,72,6,143,40,190,115,186,74,113,123,110,236,144,29,209,199,28,70,202,140,69,33,172,36,87,206,230,54,194,99,235,24,5,94,73,27,163,0,41,145,145,209,6,115,75,126,184,42,142,93,185,36,11,152,137,72,175,33,246,55,225,107,243,193,104,24,227,98,80,33,233,214,234,89,57,201,32,0,59,75,230,144,67,33,253,159,240,160,226,72,73,15,175,20,16,138,68,144,50,65,244,81,45,51,22,58,235,124,0,77,134,50,18,151,224,162,199,57,131,166,154,105,236,59,109,182,146,65,126,240,13,178,87,110,122,137,7,168,94,154,118,132,140,200,55,141,143,159,154,79,128,123,24,130,213,228,154,17,156,88,30,62,38,92,36,143,119,70,16,53,214,124,177,21,64,216,39,93,18,238,241,33,120,87,121,144,20,176,41,80,114,140,12,42,2,249,160,109,114,218,33,156,154,244,59,89,33,38,62,129,201,245,216,247,29,26,41,19,4,7,216,81,171,155,149,122,131,57,190,94,234,232,13,27,146,193,58,150,51,91,207,58,132,82,140,159,26,132,194,39,113,80,138,76,193,98,96,236,204,133,73,97,86,8,25,170,51,20,226,39,164,132,140,101,230,99,167,14,111,165,238,101,227,3,122,24,208,76,152,103,162,73,173,138,128,5,230,185,97,255,108,134,108,0,154,32,73,10,85,5,109,43,28,2,30,249,232,175,104,83,219,180,42,118,80,131,176,120,10,240,136,72,108,14,34,135,118,72,51,39,18,250,225,172,90,21,176,18,46,11,201,226,39,61,32,68,194,180,51,14,69,230,136,113,161,143,153,20,8,149,248,105,71,240,180,158,20,91,36,128,131,53,207,0,2,32,138,79,218,180,157,145,89,7,98,133,18,197,137,193,165,201,204,77,237,0,130,113,91,83,62,62,14,148,132,139,104,188,49,241,253,134,72,101,196,52,39,202,69,242,94,40,22,18,151,147,149,219,68,190,81,10,182,73,144,14,128,168,84,114,93,226,184,14,129,193,80,57,179,114,194,21,196,133,32,26,204,229,128,6,123,169,205,10,119,145,248,135,172,198,75,144,100,47,199,240,77,105,192,36,10,49,1,146,212,15,135,127,55,109,15,147,240,0,207,219,2,216,35,166,199,204,101,81,30,99,56,4,230,237,182,171,68,11,55,243,46,230,64,109,6,216,214,223,96,83,200,205,32,210,143,196,95,204,131,163,65,89,56,151,40,93,186,183,108,73,158,0,41,213,0,96,58,99,130,71,195,65,35,155,36,39,128,11,175,28,47,86,0,164,131,77,75,137,229,7,206,188,140,215,137,89,128,24,255,38,195,160,252,122,200,84,7,42,157,140,129,132,251,28,112,87,21,196,150,70,60,53,34,88,204,237,22,38,225,164,217,224,241,115,178,206,52,165,4,219,12,210,165,64,96,113,166,140,102,183,230,200,96,35,154,7,69,250,34,111,96,6,219,88,82,100,62,91,22,155,31,236,96,50,141,194,216,128,108,48,177,211,65,142,137,184,154,89,37,192,136,172,246,74,18,181,179,98,227,112,187,216,24,245,141,96,16,164,155,137,41,9,136,219,198,219,225,182,191,62,188,231,185,109,67,57,101,27,75,167,14,115,137,145,220,23,21,26,224,229,60,205,56,173,16,36,14,147,208,0,226,0,235,94,32,15,4,242,135,23,82,2,73,6,208,210,200,77,7,202,68,179,218,232,36,169,72,220,10,132,178,34,138,109,85,80,32,223,193,226,166,177,245,76,123,85,84,172,76,182,153,160,1,130,16,190,16,221,78,80,135,15,109,86,144,11,239,204,133,201,67,3,8,156,236,2,72,132,103,57,235,205,206,170,237,179,181,121,199,161,227,116,58,222,83,64,169,18,218,67,172,184,74,215,78,14,50,21,34,126,74,41,98,125,202,145,85,204,10,196,149,136,155,7,76,63,146,13,2,17,66,9,214,225,65,160,233,57,229,47,80,17,15,52,254,60,36,181,17,69,94,136,100,135,4,221,147,124,100,8,19,195,136,168,48,195,6,168,4,160,105,129,172,222,235,151,91,44,31,167,66,152,21,128,8,16,136,19,20,151,140,218,235,230,65,190,169,128,155,122,150,139,124,25,221,30,236,157,214,60,59,104,3,243,34,64,36,40,68,226,4,31,143,228,90,43,214,124,71,99,135,25,58,101,255,45,249,8,132,168,117,218,48,41,130,57,77,120,195,188,166,223,140,110,237,246,39,54,162,56,139,137,16,153,170,16,20,68,31,136,170,180,206,40,72,151,1,210,184,130,138,247,100,89,196,54,153,70,232,38,12,102,46,37,111,89,5,8,245,165,165,54,166,63,13,64,36,61,162,68,195,55,0,196,95,186,115,230,68,98,46,128,6,131,250,57,129,34,212,233,188,226,55,140,128,205,65,170,2,134,75,175,40,96,140,20,48,233,152,190,69,152,169,30,180,121,8,116,14,179,192,100,57,120,177,130,101,160,188,194,86,32,105,35,97,13,51,34,82,79,0,161,220,18,120,133,99,228,159,64,119,218,112,215,2,96,152,26,65,22,36,15,111,131,50,67,60,4,92,161,187,63,104,132,103,144,226,10,76,243,254,175,87,158,192,8,132,157,44,74,108,2,24,147,97,17,128,32,183,0,20,163,131,8,178,205,1,244,142,12,84,116,140,186,138,206,22,44,76,81,199,250,73,65,235,55,31,65,62,96,167,108,94,7,121,51,183,55,133,7,246,242,192,170,30,216,222,99,11,61,117,88,230,97,91,59,82,96,110,10,132,73,220,133,180,68,54,250,67,214,123,76,151,151,72,131,55,199,2,81,100,41,125,137,23,69,174,157,129,197,94,217,130,181,240,91,8,91,14,141,147,192,142,79,124,226,230,105,71,162,54,148,214,98,142,231,226,203,145,134,104,242,61,48,13,212,34,107,3,212,122,96,242,87,8,142,100,152,211,38,27,156,183,229,59,3,155,51,193,29,28,21,232,237,118,0,129,142,48,104,194,178,156,208,172,177,20,203,127,35,206,20,176,47,108,222,244,136,220,41,52,201,12,250,38,242,41,233,131,24,128,35,233,22,22,101,96,208,57,83,44,152,7,213,209,187,86,12,72,72,103,245,194,45,95,93,211,205,244,44,48,224,147,134,153,6,204,214,114,99,179,82,240,118,195,3,235,193,44,248,6,210,113,228,6,9,124,37,104,101,136,236,16,214,82,81,130,33,145,51,193,75,98,177,196,22,73,118,104,79,138,44,78,198,36,133,242,104,181,124,13,135,96,134,101,44,78,86,44,141,36,215,80,182,181,102,169,54,55,59,117,149,116,121,19,74,55,20,88,148,128,46,99,218,73,86,9,208,240,176,201,128,5,180,114,82,44,80,182,4,169,169,4,165,254,114,242,109,224,185,2,91,145,183,188,236,124,215,16,45,100,131,250,54,154,5,9,51,208,8,117,14,144,145,134,249,156,90,213,244,154,82,132,151,70,151,142,2,137,156,76,50,75,45,139,181,61,21,206,231,134,161,5,253,238,0,190,71,50,57,224,188,11,140,38,190,27,129,73,199,194,14,76,90,35,157,159,183,105,69,134,47,173,70,70,45,231,217,179,118,39,3,178,143,71,58,43,86,224,19,180,237,71,161,42,176,193,55,49,148,176,63,142,29,115,124,28,7,176,81,242,185,149,63,5,83,40,37,99,110,116,81,124,28,116,229,23,115,192,66,16,211,224,98,30,108,30,72,19,48,65,20,53,10,171,224,107,19,248,88,205,28,140,226,3,86,230,144,22,49,206,2,146,241,25,80,72,162,190,240,206,201,206,48,197,58,48,10,146,200,195,198,138,12,163,57,229,244,159,176,75,72,55,216,123,68,176,234,96,146,218,62,153,211,35,229,0,175,201,84,52,235,15,124,139,130,232,81,94,97,100,134,70,157,198,4,82,105,35,209,84,66,70,60,84,214,232,127,104,189,114,209,69,46,250,193,197,71,236,146,70,111,21,8,169,31,32,110,19,117,3,49,171,231,218,147,179,101,250,73,132,243,73,249,118,38,12,166,213,235,127,169,87,9,238,237,7,97,85,214,173,23,57,254,38,223,32,183,20,249,16,209,120,23,26,248,140,9,144,229,6,42,1,17,104,80,133,248,63,161,27,159,194,17,155,9,234,54,221,120,129,237,234,223,59,116,179,128,80,118,82,138,151,3,182,151,196,180,217,200,88,173,131,117,114,249,70,126,97,201,248,171,169,3,138,142,110,218,187,142,12,61,146,161,107,7,113,252,66,134,251,23,212,77,78,144,7,145,0,116,61,95,209,136,216,217,41,0,227,131,160,50,19,36,82,34,31,40,155,60,166,18,192,196,37,226,88,162,215,245,67,131,0,31,19,133,208,66,43,162,86,98,249,100,62,92,167,99,20,139,222,136,6,78,118,71,233,158,248,73,211,145,49,78,154,167,106,61,67,159,121,62,174,128,108,55,165,16,73,57,222,240,194,102,82,213,174,43,131,248,200,231,38,194,115,23,88,200,58,112,66,5,218,72,244,59,120,131,126,96,247,183,221,147,23,3,57,9,53,38,55,219,160,49,2,129,219,100,246,71,68,94,139,208,185,129,61,146,92,16,68,88,4,7,119,177,135,123,58,253,76,252,77,208,171,51,180,57,83,156,183,214,205,22,61,23,237,97,199,155,180,167,132,78,86,75,220,0,209,34,235,163,181,79,50,163,27,187,133,230,121,34,180,232,86,247,38,209,200,112,234,20,203,50,3,136,188,129,50,234,37,127,175,31,4,90,132,213,53,98,109,68,69,110,144,97,147,217,92,186,188,182,79,187,153,212,146,25,199,151,228,1,50,78,141,81,140,71,35,206,16,116,143,78,126,144,0,228,125,42,145,227,133,42,6,177,132,199,212,186,29,99,16,22,99,102,151,96,103,97,167,167,88,157,32,210,229,237,80,143,213,181,101,60,14,235,52,231,71,158,11,227,240,8,28,63,129,123,40,112,34,157,218,219,216,40,24,35,55,210,16,67,169,128,243,58,53,55,28,88,66,176,11,23,88,152,134,70,150,200,192,188,76,70,232,135,134,106,0,204,161,14,62,28,34,10,153,120,16,86,97,245,233,98,103,97,230,149,96,185,155,183,92,152,88,212,201,178,31,218,177,102,142,107,217,114,196,182,145,173,63,228,253,56,62,210,110,189,58,15,42,127,104,18,64,155,1,85,241,134,133,199,42,178,131,128,187,187,15,5,125,48,48,186,62,244,142,169,199,184,27,213,87,48,114,41,4,190,130,226,32,243,153,137,100,133,144,165,71,30,255,200,21,129,163,32,150,101,133,231,101,18,173,157,240,29,8,232,142,70,123,66,30,88,166,172,245,5,172,51,5,127,7,230,48,35,197,188,49,145,255,204,179,254,64,60,224,169,116,208,243,135,38,66,57,136,212,110,31,30,99,196,250,72,170,54,210,119,224,12,178,222,34,218,199,217,165,20,237,118,140,21,65,184,136,143,41,129,249,245,227,48,162,134,250,142,152,108,95,38,131,153,215,220,189,126,31,154,1,34,123,65,100,87,160,20,121,25,109,216,153,187,64,203,190,65,42,130,113,238,105,116,125,123,227,10,97,132,171,119,162,30,65,16,176,192,112,136,145,185,6,74,171,49,207,146,22,232,254,103,140,185,170,158,16,172,107,188,16,222,16,99,237,53,177,69,7,109,62,212,16,24,134,34,203,209,100,92,194,5,48,38,40,191,146,209,122,251,125,9,182,47,222,101,179,8,29,39,187,170,212,211,78,230,35,62,168,145,245,39,54,18,69,198,36,111,116,138,80,220,239,115,140,13,1,206,12,8,250,42,40,195,139,144,214,198,98,44,152,209,162,11,100,243,53,51,246,13,236,174,169,3,197,27,94,9,227,171,88,148,108,14,8,221,24,132,24,208,60,87,179,235,172,20,99,152,60,30,240,196,200,16,23,110,152,235,206,143,41,26,119,91,39,144,180,132,106,30,5,146,42,128,241,22,221,95,27,193,54,5,177,194,134,34,202,216,133,166,16,23,29,31,221,173,12,46,96,186,75,154,118,169,8,183,223,184,176,132,160,1,137,180,19,92,119,108,172,239,148,166,105,201,231,131,227,229,167,28,172,75,184,122,209,34,79,59,17,236,86,176,167,209,198,27,180,38,103,26,75,42,182,132,191,82,5,128,89,199,162,205,196,69,75,171,135,5,138,167,215,79,205,202,221,161,109,176,250,62,226,190,244,225,251,86,211,24,167,137,188,57,85,199,148,129,18,132,228,194,95,93,245,87,37,66,61,83,7,105,70,29,221,59,176,1,114,3,226,85,209,233,254,0,182,214,225,247,31,6,211,43,177,137,53,224,79,179,163,101,186,63,155,97,44,55,185,98,235,111,225,78,23,117,237,85,222,55,8,246,76,214,61,233,15,248,67,196,68,2,233,196,139,48,48,249,62,242,17,147,220,69,189,237,1,174,133,120,236,209,61,56,21,254,224,60,208,197,155,55,13,104,98,236,89,233,7,155,64,1,72,53,102,41,23,163,26,5,178,26,51,79,104,8,82,59,81,112,164,239,127,182,190,75,35,13,70,87,23,194,195,234,236,102,145,113,173,111,2,26,6,38,11,157,137,14,9,163,71,52,184,4,105,164,85,220,157,114,143,161,125,81,240,159,55,143,4,150,134,192,26,225,98,0,92,148,0,174,202,42,75,247,230,59,2,177,71,108,1,175,139,241,202,12,129,49,240,221,176,93,28,222,29,100,143,3,84,164,92,225,40,36,59,167,206,32,0,185,239,73,195,108,40,175,101,50,171,65,26,171,76,185,87,33,221,7,59,182,77,190,143,1,252,230,51,126,100,234,242,123,198,143,229,227,50,126,72,6,41,142,103,97,254,92,68,132,195,120,162,149,81,184,72,221,36,22,86,190,237,49,14,55,187,36,164,174,62,1,86,231,142,73,243,167,115,37,161,53,250,41,206,103,213,48,37,229,143,228,54,88,225,155,60,115,27,22,225,199,57,209,117,183,66,31,102,0,74,84,162,36,147,175,230,227,113,231,83,14,34,100,227,169,243,225,188,131,190,253,163,89,191,31,205,223,116,52,201,246,194,156,146,157,249,89,190,119,97,38,227,155,142,38,190,215,67,57,176,14,109,110,83,8,167,212,50,143,234,154,62,32,102,24,3,144,56,98,176,2,140,203,193,123,155,228,165,59,204,4,110,58,26,54,63,153,241,21,115,246,62,58,197,35,13,220,242,198,119,217,157,190,209,247,98,51,60,254,29,164,194,226,28,167,95,239,233,251,61,159,6,24,79,250,49,234,188,2,93,63,224,151,18,182,244,251,66,43,65,183,135,191,124,34,232,167,75,214,182,69,24,250,123,60,79,112,68,29,175,159,189,223,28,79,56,199,29,175,159,123,194,15,87,250,83,78,57,125,161,61,102,53,232,165,61,174,159,187,223,252,136,238,126,202,25,151,79,180,212,47,63,186,241,157,168,126,114,162,250,9,30,254,224,43,100,245,195,94,131,144,219,2,237,201,155,29,159,172,191,206,190,219,71,244,71,241,115,191,83,189,155,188,49,190,135,207,100,252,190,98,76,1,204,233,38,68,119,154,190,151,248,187,42,241,169,196,173,243,83,177,135,15,228,75,231,23,146,242,206,15,147,121,62,89,191,57,125,41,145,39,133,166,208,223,163,227,80,213,252,61,132,188,253,19,117,252,170,200,211,77,49,221,120,217,229,133,46,188,116,123,133,190,22,54,124,98,247,114,247,99,220,95,54,29,229,186,77,81,223,17,235,54,211,225,102,92,40,8,101,148,235,167,127,253,224,114,221,102,218,237,38,247,233,119,195,204,40,215,29,36,74,108,186,57,165,91,50,123,58,218,77,202,221,255,181,170,136,210,141,47,221,37,209,67,218,119,41,215,147,72,29,82,174,199,114,117,11,143,68,186,141,114,247,127,173,167,148,235,206,144,94,164,11,63,167,148,187,255,107,75,82,110,220,120,88,40,242,163,37,46,183,222,255,181,233,139,109,221,9,149,131,114,247,191,54,125,203,173,107,32,29,133,230,130,119,216,6,27,151,223,44,216,62,79,193,167,130,223,115,249,132,157,155,221,225,248,236,253,177,243,44,219,14,111,158,165,186,182,188,110,237,108,185,165,141,205,113,1,212,213,101,251,123,79,165,246,180,219,189,108,199,182,219,174,247,122,172,101,173,39,244,59,129,194,154,55,121,148,232,201,131,103,99,200,117,79,91,130,39,212,174,185,157,231,218,142,90,207,163,201,203,118,1,52,170,174,147,126,38,182,246,218,87,139,165,84,124,181,46,165,171,245,179,236,5,94,203,11,161,97,125,245,45,63,147,98,123,245,185,246,125,154,41,159,123,110,117,53,43,18,0,195,206,249,50,234,75,189,199,147,63,219,90,117,56,6,240,104,202,220,233,43,187,189,150,154,79,124,157,240,190,177,71,42,211,122,59,96,88,155,226,8,94,220,237,47,134,226,235,186,183,115,189,184,97,150,29,45,219,182,207,91,63,195,194,186,58,229,87,78,245,117,86,246,150,75,198,165,205,123,91,237,129,115,144,160,34,197,95,221,99,36,62,76,59,123,157,250,205,85,27,230,10,249,184,221,77,251,177,174,51,110,121,104,88,95,30,169,121,222,249,113,166,189,93,205,234,11,153,185,237,245,90,197,84,170,146,48,7,11,106,114,228,91,15,248,121,218,237,158,215,146,206,19,103,119,113,133,117,191,78,109,91,113,52,17,208,87,95,49,255,198,147,206,143,235,24,94,245,15,125,219,51,189,107,109,171,107,74,231,190,173,124,118,2,144,171,41,55,136,246,103,157,202,33,72,239,182,243,58,164,185,109,77,185,65,0,226,10,171,132,66,62,125,1,244,26,94,62,46,236,231,1,143,121,149,92,246,205,188,244,25,2,231,202,154,240,110,255,248,237,92,215,140,88,29,128,162,173,76,47,111,229,151,66,223,207,114,100,215,151,206,236,199,147,154,7,102,185,243,217,139,182,15,235,125,184,121,141,42,166,23,86,120,43,41,173,219,133,27,186,103,233,168,199,89,142,82,10,96,184,7,134,181,201,38,120,62,199,168,182,31,219,133,149,53,233,217,200,23,5,42,119,177,53,33,187,13,160,97,253,194,143,232,190,240,100,241,182,158,57,31,27,206,186,172,199,145,207,245,72,105,87,142,235,129,81,229,194,111,96,62,125,179,248,60,107,218,203,106,168,93,206,245,44,37,231,19,197,119,15,140,42,83,120,221,115,20,25,130,66,217,206,125,71,185,229,18,40,206,188,217,229,118,176,176,46,63,60,252,140,104,125,170,195,32,129,63,249,67,15,46,212,252,80,241,66,170,166,87,136,243,37,123,158,103,155,48,58,31,185,29,71,186,216,25,146,108,15,13,235,115,18,128,244,138,120,179,167,139,190,95,90,128,138,226,151,226,115,29,218,75,114,3,217,48,132,6,181,89,83,24,175,129,60,235,251,82,59,246,139,244,227,75,220,245,106,233,98,116,167,242,218,91,4,140,42,115,124,109,127,101,247,57,75,188,116,159,84,240,49,238,188,94,90,88,62,46,222,123,32,25,241,208,168,186,100,233,126,222,245,197,233,46,14,83,115,3,245,231,58,54,151,88,108,119,49,132,134,245,57,41,123,254,224,135,192,31,29,143,15,18,195,57,251,197,11,83,223,175,177,175,109,61,140,2,190,93,83,113,154,105,4,140,234,243,205,131,23,58,47,185,229,89,55,186,254,145,211,118,100,195,201,66,96,84,95,35,15,95,16,134,46,140,221,210,126,230,148,149,134,167,243,168,151,168,87,55,56,105,30,24,85,102,189,41,63,115,191,221,143,202,221,184,81,170,177,112,212,251,43,246,235,165,147,150,86,180,239,0,26,214,151,187,28,247,27,158,207,228,222,122,177,158,163,158,102,43,215,107,26,215,129,222,203,177,102,149,22,2,104,88,159,239,122,188,162,66,93,131,79,135,81,11,250,52,243,118,129,87,37,174,51,40,172,121,163,57,191,194,176,63,245,102,83,215,175,40,231,95,26,209,63,227,41,255,8,43,193,139,228,201,213,228,0,200,252,84,179,187,27,53,178,193,157,180,94,170,232,90,154,181,173,58,160,175,122,147,156,116,235,243,147,117,33,202,165,42,30,101,3,150,156,239,170,99,153,152,183,7,198,149,19,119,253,130,44,124,73,241,251,121,105,140,13,88,104,42,229,226,198,117,47,170,184,221,66,104,88,95,210,211,190,54,247,171,246,90,39,109,99,187,102,88,218,177,86,160,31,33,48,168,158,57,131,231,75,211,191,196,145,75,184,181,103,185,29,165,158,185,174,59,16,207,16,232,107,23,62,224,235,115,99,197,125,236,45,165,173,26,91,194,135,205,125,174,143,147,127,101,235,183,86,211,245,23,168,4,23,134,93,157,89,187,227,4,139,170,242,157,242,215,58,254,146,248,126,105,50,87,61,84,193,210,37,156,165,12,118,154,91,0,139,170,114,14,200,215,16,253,174,209,29,41,79,206,155,245,168,237,156,76,219,22,22,214,229,43,253,247,174,63,84,175,113,20,241,203,197,195,216,8,138,111,246,235,147,197,120,124,177,104,203,79,21,108,241,170,35,222,172,97,49,95,245,141,175,102,190,86,243,101,227,113,108,172,222,97,190,78,187,131,233,183,126,254,118,31,48,221,223,205,207,173,118,190,38,93,128,122,133,222,31,91,217,246,116,128,254,144,238,66,204,177,165,138,242,123,202,245,88,219,121,160,186,122,180,139,44,101,117,2,21,205,148,247,188,223,86,82,222,54,16,162,83,109,169,149,122,17,58,235,195,189,180,241,139,155,37,195,100,183,227,162,246,229,4,63,163,132,30,190,162,165,71,115,174,215,36,242,37,197,161,133,224,130,182,178,239,104,188,78,107,185,40,190,172,76,225,59,171,229,249,22,117,223,232,164,128,221,1,23,215,154,212,147,51,31,231,126,45,132,26,25,229,226,221,11,34,196,185,239,249,110,80,66,70,156,202,221,124,104,141,181,23,172,109,103,206,155,186,236,46,54,128,166,15,206,44,219,94,242,211,70,142,195,104,190,86,3,141,230,250,170,254,233,251,124,107,39,47,113,244,172,25,36,155,251,110,230,102,164,53,122,23,224,37,239,225,103,66,225,250,161,81,183,238,184,51,237,249,177,115,158,153,236,252,217,115,229,81,80,152,194,79,127,250,117,41,137,202,165,165,94,205,165,182,212,127,90,214,127,254,249,127,254,242,215,159,238,208,31,240,231,241,223,85,232,15,119,192,222,11,218,234,255,250,227,175,127,121,247,231,159,222,191,255,229,135,254,207,95,126,252,249,223,223,255,231,15,247,242,255,112,253,217,123,197,114,13,47,101,234,168,79,228,159,127,254,245,47,127,253,219,187,95,222,191,255,245,221,127,188,255,245,253,63,254,252,239,255,246,235,251,255,26,157,255,129,74,246,34,127,251,211,175,255,242,211,251,63,254,248,211,255,249,241,151,191,254,248,199,159,254,244,195,245,83,23,56,254,251,231,95,199,63,251,92,83,238,213,174,175,207,32,228,44,175,200,56,159,80,54,200,61,248,202,241,232,47,120,33,236,41,178,230,148,216,150,155,148,177,217,141,248,202,175,112,174,242,234,154,36,145,209,119,42,224,43,217,31,41,39,32,231,16,148,186,195,113,194,119,176,245,159,153,250,80,200,205,87,190,153,198,111,83,207,55,59,174,91,48,114,234,225,6,253,223,96,0,246,215,169,62,87,224,63,61,76,239,197,171,156,52,178,5,175,114,42,12,238,114,174,114,231,83,47,115,118,216,55,127,155,179,132,177,189,95,211,109,206,175,252,32,74,26,184,19,146,149,200,35,67,61,216,106,100,2,229,228,42,119,200,70,87,70,56,25,15,231,70,46,92,64,94,23,60,169,4,85,211,23,71,154,166,36,60,198,113,24,215,170,139,102,176,148,156,116,43,231,96,193,207,30,206,202,214,203,1,58,164,13,73,209,199,111,104,113,58,68,206,169,191,73,142,146,241,62,64,210,227,42,105,167,169,62,201,196,248,6,215,54,14,50,223,223,206,35,173,166,190,183,122,210,171,36,89,190,123,147,187,92,73,167,196,253,27,62,253,116,116,64,155,190,245,247,115,52,1,175,177,215,177,73,250,22,23,59,174,71,219,244,210,153,92,97,31,187,6,57,248,40,161,207,169,233,100,182,81,69,95,230,104,99,122,35,35,105,111,176,44,124,105,125,184,50,225,123,161,240,8,189,100,63,154,59,20,50,46,173,99,202,93,90,192,99,198,12,121,87,182,241,172,52,225,142,188,171,139,40,57,208,55,115,238,68,254,196,7,148,216,239,92,0,214,100,191,24,64,107,226,171,201,168,7,162,241,139,16,140,96,120,140,250,159,106,254,138,242,238,216,74,143,218,14,70,64,187,152,179,29,66,247,115,78,143,46,212,1,131,148,144,148,242,30,159,113,162,140,167,25,18,196,78,131,75,143,151,208,44,117,180,27,118,191,40,130,115,104,230,197,204,179,143,31,115,98,81,62,202,140,41,194,199,137,205,144,171,248,144,213,224,84,120,102,152,201,163,81,136,105,22,25,31,96,236,200,29,155,87,77,212,52,178,95,101,76,67,184,97,33,238,11,22,196,14,166,243,126,61,93,238,228,193,169,244,199,22,4,162,156,249,65,239,49,253,170,167,138,169,247,112,139,82,235,205,76,52,219,105,201,249,214,173,134,49,118,195,144,167,39,72,114,28,69,242,4,235,148,159,105,248,28,29,161,47,105,67,159,59,63,238,12,29,238,128,102,131,35,20,220,82,51,196,110,162,154,40,179,33,221,89,183,122,103,28,171,58,11,42,63,83,35,62,39,7,176,20,237,164,179,146,145,123,176,35,192,222,123,254,192,108,86,116,15,27,18,118,84,205,141,163,5,7,23,52,82,222,192,202,111,95,204,251,158,50,231,55,138,121,69,66,2,148,182,202,67,218,130,202,226,199,150,51,95,56,47,14,31,16,18,208,56,21,248,200,229,38,52,181,160,168,70,121,206,71,153,222,200,56,71,156,92,103,156,99,205,106,37,175,118,102,24,23,63,110,68,138,150,121,252,100,154,85,47,118,244,81,143,155,97,25,211,85,190,116,216,40,133,157,57,108,69,51,225,4,229,48,57,213,62,31,181,175,31,43,104,43,4,41,170,72,93,59,172,186,73,177,73,207,228,8,11,31,160,33,171,115,158,91,205,114,141,111,182,13,217,64,144,173,64,163,157,246,74,2,208,46,142,177,190,173,168,72,128,164,21,248,101,184,6,213,139,100,77,2,134,93,232,73,59,22,111,146,75,170,207,105,163,178,2,232,48,48,130,38,126,225,115,87,248,13,94,57,215,244,243,140,241,242,240,204,148,133,254,134,114,150,130,224,104,86,92,198,98,155,80,110,4,97,70,2,129,243,81,180,171,91,49,89,201,49,247,120,129,147,132,131,80,144,66,50,140,4,155,50,137,229,71,58,46,16,226,232,213,55,51,168,105,177,31,36,207,162,198,241,253,222,6,187,66,160,162,109,209,0,41,189,87,91,68,134,131,17,38,126,183,117,135,185,194,65,72,90,23,158,138,72,242,184,251,62,131,10,150,34,138,4,133,252,171,81,146,158,183,56,72,85,200,0,104,26,179,213,141,8,199,248,54,245,51,201,122,231,67,31,44,8,46,90,184,166,176,230,143,55,198,109,31,53,133,76,136,177,218,225,203,4,59,1,75,30,160,94,128,159,17,18,59,76,15,206,131,63,53,254,104,249,227,23,29,210,240,48,199,135,30,105,67,72,62,44,133,41,186,222,64,115,12,149,50,52,236,1,149,155,9,225,76,42,11,169,255,178,105,148,243,213,108,254,128,168,110,197,188,159,238,114,13,156,53,79,35,3,18,222,255,140,116,201,251,120,228,5,83,190,2,230,134,244,192,147,13,79,92,66,10,228,201,84,76,202,38,164,139,112,51,192,225,25,209,237,216,31,145,152,249,136,59,42,16,18,138,137,152,4,20,39,34,75,1,237,10,40,220,76,98,202,120,23,98,76,236,8,247,9,17,104,214,155,29,143,182,60,220,242,248,129,125,148,104,253,80,8,85,96,100,211,183,89,6,150,225,70,141,10,28,197,181,42,104,194,105,28,115,111,183,75,95,71,31,147,73,112,58,79,19,198,193,143,234,54,78,140,67,201,83,55,249,157,215,151,132,231,99,44,69,133,129,194,208,163,169,65,143,99,51,186,48,126,30,186,37,110,152,238,180,86,124,248,106,108,1,189,159,5,199,70,31,80,165,189,106,230,240,226,121,246,231,221,144,3,71,49,250,218,12,85,190,247,126,198,214,49,51,204,209,200,144,242,197,168,66,151,10,200,30,66,171,186,33,197,38,35,0,164,222,164,50,34,160,145,170,178,49,161,218,161,197,120,246,102,129,220,242,153,81,247,42,221,236,208,203,154,92,240,47,169,35,52,101,163,142,40,12,244,145,45,200,100,125,159,229,183,175,249,135,105,114,168,248,87,161,249,255,78,139,90,62,109,72,220,8,151,248,4,11,91,62,48,36,174,132,185,105,62,211,134,78,139,246,73,178,200,17,77,41,223,162,219,157,165,87,200,218,207,204,49,161,132,172,55,78,60,12,223,78,239,32,120,195,132,94,211,83,55,150,212,219,141,124,198,48,33,195,137,223,201,218,96,48,252,92,43,80,110,112,220,105,26,101,128,80,109,125,144,153,223,84,4,8,57,251,65,27,107,10,96,158,200,188,58,49,115,1,78,71,254,65,14,77,207,243,130,194,18,191,202,164,195,81,17,68,0,238,123,170,50,196,135,134,66,13,177,42,125,250,174,111,31,59,62,248,69,102,92,174,197,184,122,105,73,233,29,26,74,66,109,52,244,195,182,192,161,242,155,91,16,251,240,51,129,80,166,32,161,169,0,228,141,149,5,133,15,60,65,211,230,184,221,131,173,53,219,238,49,99,72,120,242,32,133,34,209,42,221,179,217,81,103,95,120,69,65,128,239,121,156,212,37,146,121,197,76,251,195,29,56,230,183,233,43,28,132,220,171,81,95,86,117,252,36,246,35,143,150,203,98,124,202,242,235,38,128,60,9,68,182,207,14,165,236,76,253,223,229,161,228,235,38,190,219,190,11,57,161,217,155,79,130,236,206,218,230,217,63,64,48,203,227,103,160,8,167,66,24,171,118,120,26,136,16,102,19,141,130,62,129,140,213,9,91,67,180,115,200,105,48,152,176,234,208,182,111,228,148,131,87,78,70,23,155,181,173,203,170,250,117,142,247,194,109,151,219,80,118,86,237,243,183,34,87,163,173,202,180,33,179,173,112,3,99,63,96,102,140,188,118,159,251,73,234,228,163,167,126,69,71,22,162,134,163,65,131,4,109,10,96,84,155,143,131,27,81,48,102,152,213,60,97,88,139,120,177,96,53,221,225,241,103,107,58,124,126,7,163,77,14,16,65,145,37,198,165,137,90,58,138,106,136,174,167,201,134,100,3,203,131,135,182,12,209,183,60,193,177,141,251,159,206,169,182,145,192,238,131,223,246,24,148,96,114,160,16,8,20,150,93,97,92,108,255,187,208,87,190,182,104,210,111,78,68,37,107,42,218,84,233,125,53,80,193,233,45,67,245,227,147,67,240,64,114,150,71,53,245,92,54,106,167,127,244,243,183,129,119,137,0,106,105,115,143,9,143,114,167,86,33,233,98,38,88,85,76,95,153,226,45,136,127,147,136,195,182,47,166,41,149,153,220,97,59,16,35,150,46,6,174,206,42,103,51,122,137,7,105,114,179,20,100,152,105,152,231,245,206,87,67,177,29,31,32,201,135,185,121,102,59,73,209,143,29,94,65,102,136,198,113,48,132,174,72,52,253,96,107,142,62,30,72,1,24,186,219,36,9,240,111,137,184,0,235,10,105,162,203,9,73,44,173,26,88,121,8,178,42,132,45,88,36,79,208,58,79,191,23,162,246,108,204,63,117,5,138,129,160,81,108,172,51,220,14,239,105,183,38,169,39,146,183,135,147,221,242,23,97,47,34,128,142,141,51,24,172,143,133,10,63,7,251,34,32,66,239,242,21,43,231,140,228,44,116,199,205,62,234,121,26,155,25,185,155,24,206,220,45,139,93,181,226,151,54,88,123,187,57,118,191,24,173,110,60,15,124,141,203,202,138,4,153,154,0,52,155,72,87,116,126,225,140,123,26,224,72,132,33,32,134,188,120,10,100,68,115,47,196,1,221,218,12,234,242,247,180,91,70,150,194,35,238,40,128,161,15,158,132,16,89,159,143,160,63,166,230,40,187,147,110,232,192,56,62,171,5,144,91,114,199,29,130,94,129,94,186,191,45,202,187,245,24,253,160,200,52,32,74,16,239,85,14,86,147,155,126,208,184,40,62,25,41,251,162,244,112,17,67,243,24,251,77,134,160,184,55,22,20,117,232,9,27,13,194,6,8,29,33,124,72,210,30,146,196,117,218,193,104,79,237,6,184,45,114,155,56,17,251,137,19,32,163,136,248,8,242,153,152,23,57,92,54,187,123,255,211,51,45,175,253,177,134,143,136,23,98,187,251,219,226,238,225,223,178,235,248,241,205,203,187,149,186,252,46,239,46,31,45,239,118,177,116,53,199,106,233,130,170,6,84,11,136,108,158,221,151,140,207,82,115,248,197,193,180,178,192,23,104,187,2,242,79,91,15,146,196,86,89,254,0,161,238,24,227,68,147,194,98,236,191,68,15,110,160,237,143,167,229,110,160,110,202,80,87,84,156,97,13,6,81,238,71,181,39,41,207,230,88,34,153,230,251,39,192,217,246,9,194,17,131,32,45,112,182,156,166,32,205,159,121,40,136,163,35,161,173,134,160,33,73,31,166,162,148,208,96,137,251,55,120,244,43,191,76,174,110,205,249,77,235,112,204,12,98,44,41,122,183,198,82,54,124,179,153,227,71,48,178,69,46,220,200,157,135,34,126,107,180,247,211,139,208,226,6,166,27,58,176,106,28,161,185,26,215,1,65,160,80,118,160,169,22,7,80,0,123,163,152,125,13,114,160,56,4,150,12,198,88,22,97,197,118,29,170,91,44,65,21,15,97,17,133,67,30,117,173,70,32,98,22,46,207,162,251,216,205,70,87,245,103,148,105,243,70,26,57,248,212,158,70,145,172,109,13,64,153,190,201,161,188,105,129,1,80,33,112,31,0,43,207,85,217,186,170,67,1,95,5,99,44,253,79,88,44,187,237,233,81,235,21,75,13,20,215,54,116,253,193,195,66,247,33,20,11,229,141,237,42,0,92,233,4,216,96,94,162,167,248,96,161,18,195,70,8,8,169,187,67,0,26,172,34,59,199,77,32,132,198,91,0,98,1,226,25,80,0,121,145,0,146,97,217,134,96,179,219,50,137,226,1,84,242,217,100,225,6,65,110,130,16,34,246,235,143,70,176,231,159,65,39,166,45,86,192,186,24,51,235,136,193,80,60,26,183,98,193,132,50,16,92,227,194,134,240,8,14,55,146,233,117,252,164,212,205,23,244,232,109,121,14,148,80,235,69,19,172,36,30,112,194,44,236,142,167,177,17,59,209,33,57,225,85,56,10,108,96,158,65,124,152,219,244,94,43,111,191,110,207,173,160,165,149,98,62,80,42,231,184,242,162,109,147,109,230,156,199,132,177,123,85,100,236,166,32,182,27,67,41,14,24,84,66,219,56,107,144,129,49,121,133,170,184,54,29,60,108,62,109,252,221,199,235,35,230,194,245,11,232,248,76,236,35,150,224,24,71,192,93,60,11,10,248,148,103,102,33,199,243,108,113,230,156,176,204,69,113,9,215,77,18,119,121,47,49,222,233,178,184,18,226,83,128,118,118,113,59,69,219,187,96,146,222,54,168,100,228,60,5,64,1,187,242,60,205,115,48,173,102,88,161,97,147,134,129,6,12,54,226,193,142,79,71,172,220,51,124,17,20,209,41,188,123,208,54,131,146,14,65,247,106,12,115,242,80,223,192,72,59,10,28,243,90,234,245,220,105,193,7,33,220,87,197,177,123,161,141,216,174,112,73,114,226,52,86,122,209,19,188,194,13,219,81,141,34,192,154,150,24,212,183,202,55,118,56,142,230,194,222,77,198,175,69,92,162,180,204,221,207,70,231,135,220,98,122,28,200,84,173,130,193,109,176,4,189,211,55,202,86,67,166,104,160,39,128,200,120,167,59,186,41,85,47,118,164,125,108,207,109,134,129,78,227,133,126,175,25,100,33,58,90,38,80,40,156,210,193,128,169,136,30,139,135,7,14,238,112,59,68,154,48,205,163,98,128,175,17,86,135,184,31,156,144,73,3,58,134,27,126,68,216,198,17,146,209,10,6,235,229,23,21,171,165,120,77,31,235,122,225,70,172,50,192,183,93,17,161,162,69,108,184,9,128,66,239,179,0,8,49,211,58,67,128,167,176,17,107,11,64,178,237,180,214,197,1,100,86,11,241,3,249,128,232,111,14,144,78,232,156,202,4,50,119,105,231,98,153,175,77,156,243,142,67,33,73,80,149,61,196,49,29,123,83,103,150,81,2,65,198,139,59,158,19,6,236,114,98,170,129,210,59,169,197,180,63,30,100,118,190,87,28,65,192,189,217,35,22,96,12,114,12,146,74,183,48,54,32,100,55,189,0,204,47,74,100,38,223,60,33,165,213,12,41,243,208,116,43,26,223,161,56,150,199,40,232,176,20,134,154,116,112,9,74,204,10,166,211,140,156,238,228,213,171,130,38,119,5,100,4,84,219,170,220,199,44,210,13,198,230,51,87,66,75,7,65,182,5,231,15,247,39,24,160,5,64,143,1,158,56,102,79,183,55,220,81,241,7,106,62,114,92,123,76,145,10,131,77,138,46,37,101,83,222,154,147,185,186,94,97,202,19,132,135,164,1,44,55,179,86,19,25,209,216,192,102,151,195,35,76,242,228,40,57,203,79,154,247,146,204,232,142,100,13,90,125,216,86,164,74,182,141,36,103,186,211,189,112,251,223,107,89,122,171,154,246,188,215,15,241,197,54,40,27,239,41,93,198,164,43,48,99,179,53,182,83,169,131,177,53,115,43,114,255,96,6,37,35,201,243,165,170,242,180,30,18,99,51,13,210,174,56,68,64,164,167,198,87,208,148,58,55,65,50,132,81,147,8,242,138,96,164,48,134,122,37,142,3,135,150,222,77,19,154,88,139,215,87,21,241,21,114,96,79,139,177,185,76,54,25,22,160,223,225,236,23,49,118,152,34,121,30,191,239,90,239,99,202,253,33,224,103,3,75,235,12,80,105,104,49,100,17,141,91,75,64,71,217,236,163,209,146,147,69,39,176,250,48,18,57,72,118,120,234,33,101,54,174,150,25,35,193,248,37,251,245,180,89,160,21,102,197,56,65,11,0,178,229,19,116,243,80,37,69,191,128,163,118,175,214,147,50,148,166,130,158,103,223,132,149,50,66,230,215,134,145,56,46,233,56,201,204,106,28,47,226,86,25,130,253,14,125,207,162,45,69,26,200,74,120,125,112,86,224,188,138,87,57,230,160,9,96,84,60,229,123,182,254,58,3,177,49,33,123,11,51,14,155,172,164,211,48,229,174,252,14,16,176,171,69,134,55,53,203,17,98,129,221,206,219,245,140,217,175,232,206,64,148,114,198,208,219,72,127,156,85,204,64,13,53,51,147,220,123,147,32,112,155,120,30,200,112,143,68,123,37,242,1,183,245,44,89,174,165,226,253,195,213,226,99,97,246,247,152,225,122,158,236,216,182,230,218,80,136,19,111,22,16,126,96,61,210,242,150,88,2,42,144,215,147,30,234,82,40,186,60,20,135,231,134,19,184,41,30,174,46,165,15,91,152,182,38,56,33,100,222,158,133,164,39,178,198,162,124,204,137,182,216,135,202,115,249,13,249,121,226,11,19,209,11,232,249,204,121,18,203,245,197,52,81,226,6,29,145,229,218,83,64,110,6,203,120,36,251,108,33,127,71,65,39,144,106,188,200,100,154,38,209,193,201,71,122,159,2,206,176,147,125,66,201,36,176,139,71,10,172,211,115,31,42,195,201,186,119,96,168,100,210,28,242,6,26,189,102,81,200,203,27,129,80,18,8,46,208,114,210,17,129,128,184,207,141,56,169,197,51,109,207,216,29,239,119,210,65,228,196,26,0,183,54,22,228,60,102,145,132,55,173,141,147,20,117,218,161,46,177,250,207,100,76,3,139,231,230,42,66,206,202,136,213,37,242,98,142,129,36,57,152,206,166,73,246,49,0,147,24,239,143,192,19,115,77,96,212,121,195,246,3,84,125,177,52,124,86,78,225,224,5,126,199,25,89,30,17,35,20,0,2,41,53,114,96,106,95,253,167,78,200,135,213,174,198,233,23,34,245,219,243,176,80,59,53,172,209,115,79,207,97,7,41,219,103,192,105,171,32,213,119,38,143,137,236,123,50,235,9,177,19,135,39,129,153,217,175,13,92,78,86,227,48,183,15,157,121,194,172,97,146,118,161,202,156,169,34,43,134,232,168,205,239,156,152,133,15,158,64,14,152,49,32,41,116,121,255,243,32,254,13,141,112,104,101,187,215,94,69,87,149,78,37,229,43,248,145,69,94,163,73,7,122,192,76,22,102,131,46,74,2,179,176,224,177,194,161,141,199,172,89,190,243,50,96,36,237,120,137,40,176,34,162,169,49,180,69,226,50,106,96,62,198,82,96,180,69,16,140,49,199,106,152,80,14,8,243,208,213,208,40,144,17,8,57,221,110,80,175,64,228,239,215,157,28,128,177,245,34,246,44,83,68,193,20,112,48,71,36,16,17,106,179,80,92,193,83,167,235,65,38,67,75,205,29,189,119,252,192,29,80,167,244,46,246,68,79,162,155,55,43,4,44,220,177,249,73,16,240,18,135,151,74,26,31,82,48,29,85,139,154,236,127,70,73,12,140,73,1,104,234,239,22,136,65,86,96,11,196,186,7,198,177,100,194,36,102,225,211,11,168,184,117,29,216,67,20,242,126,63,65,53,206,27,19,132,252,16,58,66,166,185,77,6,56,206,36,71,47,131,127,226,182,113,230,21,106,227,92,84,20,37,215,234,10,171,196,7,179,25,147,148,139,69,9,162,50,222,8,222,200,126,175,31,89,5,223,220,110,143,19,30,111,2,220,90,98,155,155,22,89,80,232,178,43,223,137,201,216,173,183,210,49,205,94,240,149,239,50,10,245,34,23,35,199,152,82,140,60,132,151,87,106,142,188,223,122,159,107,246,142,27,163,130,55,58,24,155,68,209,213,64,171,197,68,222,28,1,12,66,243,102,251,141,183,240,76,38,160,40,16,0,70,185,68,84,217,5,239,33,153,198,226,170,205,90,231,207,58,67,44,83,65,34,59,136,31,220,137,247,65,106,147,205,115,54,138,154,1,12,169,112,166,234,65,40,218,20,172,102,235,116,220,232,97,76,57,117,194,48,214,219,7,206,232,54,162,92,132,249,35,173,220,131,114,209,3,209,105,18,173,102,217,107,146,148,206,142,186,253,130,124,126,32,36,187,253,116,225,154,81,64,231,98,35,62,167,144,80,135,153,1,238,90,164,129,49,168,207,8,3,183,252,158,185,120,66,12,57,28,228,36,12,73,204,242,51,134,51,106,168,163,178,237,42,161,128,6,5,113,112,189,247,71,9,198,94,186,144,49,72,128,185,143,177,69,79,98,28,65,194,164,195,93,64,254,202,239,14,104,118,48,61,158,27,65,80,14,36,6,9,146,220,49,237,221,42,91,112,51,168,64,164,22,32,38,45,71,30,0,147,234,79,197,243,241,77,138,153,141,236,6,122,179,8,249,31,168,153,23,48,94,116,8,79,73,105,38,78,91,137,69,116,171,235,147,222,226,169,254,210,122,253,22,147,254,114,152,32,26,161,72,112,2,41,183,146,124,133,174,173,1,51,87,177,135,236,116,224,213,192,149,64,128,23,135,184,11,232,178,243,65,183,72,135,80,202,108,157,130,160,26,209,30,197,55,162,131,68,122,4,53,200,12,80,237,104,84,206,73,179,5,133,211,196,2,238,19,155,160,20,168,67,142,157,47,31,91,171,71,29,16,184,246,77,215,114,154,133,88,251,63,144,77,101,237,183,4,68,156,47,52,187,34,96,26,78,84,6,148,92,118,13,8,128,52,241,195,1,180,78,5,76,0,11,171,102,210,184,25,223,163,235,245,38,46,142,41,64,14,122,225,208,51,3,34,72,155,1,112,85,156,251,90,152,82,225,90,171,143,27,81,210,106,30,187,193,1,30,35,198,22,144,141,81,72,28,123,72,88,85,128,220,75,68,143,208,62,76,87,45,111,154,226,242,198,143,191,22,73,226,74,245,32,90,158,98,14,23,85,24,240,14,148,68,210,226,169,52,39,53,45,64,48,153,151,38,25,50,254,234,142,108,69,179,165,135,80,212,54,30,245,41,42,143,171,21,116,184,215,9,100,70,247,54,97,118,55,204,111,206,222,103,17,255,225,225,152,76,26,238,92,154,83,24,31,212,155,177,24,152,92,187,208,50,130,166,65,187,173,121,176,64,225,42,250,149,14,182,195,239,217,188,177,102,243,31,163,134,221,154,124,246,27,182,229,193,206,76,4,151,210,182,66,234,75,176,75,165,119,74,222,9,227,57,49,38,51,240,241,169,217,167,136,205,227,139,53,254,236,217,179,105,206,238,163,227,237,8,192,76,36,44,21,177,84,198,17,33,75,163,30,144,49,71,234,60,61,244,52,51,162,172,134,252,78,164,217,210,237,71,180,221,145,127,199,32,130,78,29,134,135,231,32,56,44,203,124,160,102,238,24,176,80,195,102,35,46,12,76,250,1,27,159,24,189,19,5,12,238,222,255,181,117,232,184,154,241,182,242,134,6,89,6,232,234,238,11,235,102,89,86,123,149,87,50,122,79,38,150,226,254,59,191,33,200,102,14,60,0,227,103,5,220,219,63,244,147,158,1,91,29,100,145,227,81,22,189,196,47,118,14,197,228,145,252,105,157,231,215,255,213,249,23,221,178,141,131,204,241,200,151,185,141,185,3,223,253,52,60,28,61,207,23,136,66,64,54,102,170,146,173,41,92,7,215,251,29,170,99,95,190,252,224,110,66,225,72,123,56,91,145,64,236,184,177,229,217,17,79,247,44,223,10,5,94,108,152,228,138,72,240,104,130,214,28,231,157,156,208,0,33,31,114,145,7,188,8,50,244,49,54,166,22,183,134,217,109,248,70,4,71,110,195,42,245,118,94,184,246,49,61,207,2,248,10,2,203,141,46,34,157,171,194,167,171,199,208,117,56,184,96,252,110,134,102,17,30,173,85,49,201,126,74,48,7,229,148,111,95,108,136,89,217,166,100,12,213,218,155,48,99,191,94,193,144,194,129,3,38,120,68,49,120,20,112,218,251,159,243,94,173,103,241,203,27,30,253,23,19,83,247,117,93,108,98,106,202,125,102,204,44,235,226,172,44,127,15,105,47,104,90,95,111,218,139,111,52,45,117,109,159,102,97,63,52,45,117,79,108,249,123,109,232,180,104,159,32,45,53,9,18,253,37,189,111,49,47,53,177,129,83,85,242,65,213,53,215,229,253,243,16,177,139,92,74,252,210,227,201,87,131,213,138,160,143,96,12,97,140,67,46,84,54,163,87,63,71,155,35,206,161,104,109,202,49,214,70,243,236,94,226,186,227,169,202,145,169,147,124,92,194,104,54,20,249,202,34,142,164,195,39,253,58,229,114,222,104,84,120,228,78,119,59,41,9,11,11,231,178,48,244,212,109,229,123,122,253,203,36,171,107,99,61,71,136,203,49,62,68,170,32,205,240,180,76,24,222,73,188,241,122,145,30,145,199,239,44,0,141,81,111,146,199,91,153,247,198,137,188,203,92,11,94,252,197,150,95,101,176,126,157,135,1,224,132,116,185,219,88,83,240,93,17,64,181,132,106,1,67,243,59,117,142,236,240,224,199,202,6,70,105,162,175,219,201,158,200,70,147,153,157,175,111,173,28,175,129,89,165,18,172,37,249,165,143,177,215,91,124,68,166,109,244,219,108,176,32,192,18,139,69,1,154,25,52,116,72,106,145,216,98,121,120,16,236,30,142,157,239,43,16,228,249,121,237,109,76,58,167,70,14,161,55,159,173,32,114,138,192,162,146,72,135,125,83,182,123,120,100,203,98,240,205,154,172,117,27,7,32,47,70,219,230,210,73,196,81,182,156,49,58,234,67,83,136,109,27,118,206,54,41,124,75,106,124,131,154,207,49,14,168,249,99,35,122,250,115,233,242,107,127,208,253,131,112,128,40,186,65,1,133,253,95,44,232,48,160,143,230,219,23,70,191,231,28,254,109,199,170,137,30,38,78,207,102,220,153,194,187,192,12,194,70,45,189,152,176,168,30,10,223,112,183,33,65,35,195,170,193,238,4,74,221,0,131,40,126,92,20,223,62,110,8,139,245,130,1,24,34,116,10,25,64,70,34,118,101,162,15,83,38,37,11,217,20,66,140,145,207,50,45,12,145,12,188,49,73,6,155,186,206,99,99,35,194,211,39,209,237,66,71,27,17,236,84,120,35,92,127,29,131,34,171,21,126,141,45,40,240,243,68,207,42,91,37,153,46,54,94,58,136,100,197,1,167,7,235,96,87,43,90,79,191,224,162,226,179,28,75,198,4,109,66,162,66,117,15,245,93,53,73,101,193,204,123,236,4,132,132,81,100,41,222,23,81,107,55,116,144,120,129,113,90,125,185,186,36,240,102,140,216,124,38,130,99,227,207,150,95,101,183,17,184,83,89,103,73,129,13,208,105,124,102,236,92,194,185,202,74,60,90,173,96,69,45,178,63,76,111,240,18,91,107,108,77,81,174,214,34,174,22,191,68,124,124,251,92,173,81,151,223,185,218,242,145,74,245,73,178,214,9,70,80,18,249,15,176,56,30,28,144,161,164,188,31,2,120,158,229,70,82,61,70,126,112,50,82,204,98,179,75,70,28,133,241,40,0,64,186,16,228,66,97,31,17,6,160,112,68,138,28,209,76,175,81,82,102,229,121,126,104,72,128,235,63,52,200,67,33,109,130,104,138,28,76,98,5,132,96,208,140,241,125,2,197,64,159,6,89,96,76,35,26,88,124,0,140,50,4,233,21,122,81,171,177,20,102,63,35,122,94,6,132,159,251,60,86,248,54,230,229,149,245,186,230,118,3,214,135,164,117,126,126,19,3,40,170,174,144,50,73,78,245,195,186,43,155,158,217,22,67,106,221,193,70,122,160,241,164,129,158,239,0,128,91,56,64,164,172,54,1,72,198,90,130,144,102,199,154,42,129,218,0,85,109,136,113,105,131,182,9,36,56,126,188,195,229,187,67,70,218,105,68,241,157,243,226,137,39,101,99,31,207,8,104,228,200,52,102,44,10,97,37,185,114,218,168,17,113,87,199,40,240,150,203,24,5,72,137,140,140,54,62,84,18,81,85,241,21,201,149,57,192,76,68,122,141,218,189,9,95,155,15,70,67,183,185,65,133,164,91,171,103,229,36,131,0,236,44,153,67,14,133,244,127,194,219,109,35,249,53,228,67,39,20,137,32,101,130,232,251,61,102,44,116,214,249,0,154,84,72,36,46,65,236,248,57,131,166,154,105,236,59,109,182,146,193,77,252,76,85,65,114,47,0,168,94,154,118,228,142,142,139,144,134,226,155,79,128,123,24,213,209,228,230,2,156,88,30,62,102,118,35,39,90,70,16,53,214,124,177,21,64,216,39,93,59,236,46,103,188,253,56,72,138,121,184,251,29,157,54,76,134,113,135,216,44,152,67,56,53,137,60,178,66,140,203,147,201,245,216,247,29,26,41,19,4,7,216,81,171,155,149,122,131,15,222,56,119,244,134,13,201,96,29,203,153,173,103,29,66,185,140,79,245,107,243,73,28,148,34,83,252,9,24,59,115,97,82,152,21,66,134,234,12,133,248,177,26,33,99,153,249,216,169,195,91,169,123,217,248,128,30,6,52,19,230,153,104,82,171,34,96,129,121,110,216,63,155,33,27,128,38,72,146,66,85,65,219,10,135,128,71,62,250,43,218,212,54,173,138,29,212,32,44,158,2,60,34,18,155,131,200,161,29,210,204,137,132,254,236,224,85,1,43,225,178,144,44,126,60,0,188,174,166,157,164,75,106,132,20,39,200,68,210,78,40,20,17,141,23,77,97,19,238,174,231,119,19,175,55,128,168,84,114,93,226,184,14,129,193,80,57,129,41,220,114,78,162,59,159,0,99,102,162,145,140,196,254,27,226,22,119,56,8,70,230,0,93,225,29,153,148,43,157,35,13,1,41,217,73,161,28,243,200,67,8,128,40,28,100,211,118,70,198,146,21,231,54,194,114,224,142,90,230,166,118,0,193,184,137,4,243,66,1,9,246,66,155,149,237,34,233,15,57,141,23,32,201,92,142,1,97,210,128,185,105,111,66,174,168,31,14,40,109,218,30,230,239,0,150,183,5,176,71,60,143,121,203,162,44,198,48,8,204,15,108,87,9,50,209,32,235,98,6,212,102,128,109,253,13,46,133,204,12,98,135,72,250,197,68,18,26,230,129,115,137,210,50,123,195,150,220,60,150,82,13,0,166,51,166,119,52,28,180,177,201,117,103,184,66,199,17,40,5,64,58,216,190,108,145,248,192,25,94,241,130,34,203,15,227,223,100,23,148,95,15,153,234,64,165,147,49,144,142,7,135,240,84,5,177,161,17,201,134,200,21,115,187,133,41,56,41,54,72,127,156,168,51,77,41,193,54,131,112,41,16,88,156,41,25,210,173,185,147,222,232,88,67,145,190,200,27,88,193,54,22,20,153,205,150,197,166,22,58,152,18,161,44,54,32,27,76,236,116,144,99,162,31,102,86,9,48,34,171,185,146,36,237,172,216,56,188,46,54,234,117,35,24,132,253,101,226,73,2,226,182,241,190,169,237,175,15,239,121,14,205,80,76,217,198,210,169,191,92,162,174,246,69,101,6,120,162,75,51,219,42,4,137,195,36,51,128,52,192,170,23,136,3,129,248,225,101,148,64,144,1,180,52,98,211,129,34,209,172,53,58,65,42,146,182,2,153,172,136,94,91,21,20,136,119,176,184,105,108,61,211,94,149,20,43,147,109,38,104,128,32,132,47,68,183,19,212,225,67,155,21,228,2,198,114,97,242,208,0,2,39,187,0,18,225,89,206,122,87,172,106,251,108,108,222,113,232,56,157,142,247,20,162,166,132,246,16,35,174,210,181,147,195,214,132,136,159,82,138,88,159,138,36,42,73,4,98,74,36,206,4,82,79,36,28,5,50,148,18,172,195,131,64,209,115,186,95,160,33,30,104,251,121,72,106,35,138,188,16,201,14,9,186,39,249,200,16,38,134,17,81,97,134,13,80,9,64,211,2,89,181,215,47,183,24,62,78,133,48,43,0,17,32,16,39,40,210,17,149,215,205,131,124,83,1,55,245,44,23,249,50,122,61,216,57,173,153,59,208,4,230,69,128,72,80,136,196,9,62,30,201,181,86,172,245,142,198,14,51,116,186,254,91,242,17,8,81,235,180,97,82,4,179,36,240,134,121,69,191,25,213,218,237,79,108,67,113,6,19,33,50,85,33,40,136,62,16,85,105,157,81,144,46,3,164,97,5,21,111,222,177,136,109,114,23,80,108,61,38,61,36,103,89,5,8,245,165,165,54,166,63,13,64,36,61,162,68,195,49,197,226,46,221,57,245,24,49,23,64,3,76,83,129,33,205,44,43,228,21,134,140,36,128,132,26,76,189,69,50,200,156,140,203,102,161,24,55,191,209,235,52,188,154,0,24,22,57,144,153,200,17,218,160,204,16,163,96,77,41,234,30,109,213,12,210,53,133,105,14,178,79,147,16,92,100,159,1,12,240,152,190,69,214,170,30,180,121,8,80,214,89,106,11,117,67,175,64,14,67,107,115,144,170,0,157,197,189,212,43,153,246,3,89,39,139,18,159,0,198,84,88,228,31,184,172,12,197,232,28,130,104,115,0,185,35,243,20,157,162,174,153,179,253,10,243,87,177,122,82,208,246,205,39,144,207,215,41,56,217,65,222,200,237,13,225,129,181,60,176,169,7,150,247,216,62,79,29,150,121,216,214,138,20,24,155,2,89,18,119,33,45,145,133,254,144,245,30,211,229,37,210,208,205,177,64,20,87,74,95,226,67,145,123,44,96,175,87,174,96,237,251,22,194,118,67,227,34,176,227,19,143,184,121,65,142,136,13,221,147,159,163,185,248,182,149,161,153,124,177,68,195,180,200,216,0,181,30,24,252,21,130,35,25,198,180,201,2,231,45,249,206,188,230,12,112,7,199,4,122,171,29,64,160,35,142,54,117,254,63,107,120,138,76,83,147,245,234,161,248,56,137,153,161,40,106,132,85,166,27,84,2,92,165,184,85,163,16,238,13,145,150,132,52,139,66,51,65,44,238,223,59,116,67,255,164,89,143,235,141,202,50,79,206,221,55,139,195,213,90,187,38,251,91,100,164,147,108,87,122,109,166,232,232,110,172,94,192,173,18,81,130,50,181,201,154,5,220,55,178,123,135,33,48,86,130,8,173,84,227,127,104,204,242,130,70,32,141,96,243,166,71,20,54,66,11,219,160,253,178,38,164,222,99,56,149,220,199,39,84,27,171,191,67,129,1,209,121,80,29,93,54,6,36,66,225,77,207,54,8,174,154,186,55,144,104,2,177,199,200,70,129,236,100,133,43,179,82,240,192,193,3,99,208,172,199,4,202,78,228,212,10,60,95,104,52,138,204,74,214,240,84,130,33,145,107,200,11,214,177,0,30,9,234,104,30,140,12,136,198,194,72,91,224,204,144,211,16,204,176,140,1,209,106,25,145,34,18,170,42,214,202,216,230,102,167,174,146,46,111,66,97,149,194,196,18,240,89,204,75,200,26,30,218,145,54,25,176,128,86,206,154,4,186,179,32,53,149,160,220,80,78,93,9,252,144,96,250,243,134,180,157,47,163,161,193,115,112,211,70,179,168,19,237,218,185,115,128,140,180,180,231,212,170,230,95,148,34,188,52,186,116,20,22,230,68,231,89,184,94,172,41,177,112,194,47,12,20,233,55,65,240,157,138,201,157,234,29,154,52,241,221,200,245,58,22,118,71,195,26,61,150,155,31,150,81,230,234,29,181,214,142,104,64,246,209,65,103,149,12,92,188,182,253,40,242,8,118,248,38,134,47,118,175,178,159,149,207,227,0,54,74,79,182,242,167,160,10,37,237,203,141,174,18,143,147,174,12,99,142,63,9,66,84,92,8,139,205,20,104,226,95,136,164,70,81,50,124,11,6,95,49,153,99,139,124,252,209,28,161,36,198,118,192,50,62,4,10,73,212,23,94,33,218,25,166,104,7,70,94,146,97,217,248,148,97,52,167,28,255,19,118,9,9,7,139,90,4,171,14,38,185,190,147,57,62,82,14,16,155,228,173,89,207,229,75,49,68,144,242,10,35,51,68,234,52,38,173,74,27,137,166,47,50,202,162,94,72,255,67,107,164,11,22,115,193,44,46,220,101,151,68,107,171,64,72,77,6,253,137,200,27,200,205,61,27,155,156,45,211,79,175,221,35,25,186,126,16,199,47,100,184,127,65,141,228,4,169,213,8,64,55,126,181,95,34,128,167,118,204,60,15,202,76,144,72,141,124,160,110,242,152,74,0,19,159,136,35,162,222,136,17,90,58,120,93,21,66,188,69,81,190,18,147,32,251,225,58,173,123,44,172,45,32,205,57,105,15,229,65,34,64,77,71,198,152,111,222,196,244,44,96,230,18,184,2,178,221,148,149,32,229,120,195,11,219,73,85,191,174,12,98,42,149,155,136,91,157,197,145,125,224,132,10,51,167,15,45,250,129,225,223,118,79,110,12,36,61,212,152,220,108,131,198,8,4,126,147,217,33,17,185,45,66,239,6,246,72,140,36,136,34,8,244,161,14,192,40,87,163,84,49,181,48,65,175,206,148,229,204,68,222,146,52,91,155,92,68,131,29,47,24,205,18,122,89,249,200,12,82,6,136,22,153,31,173,129,146,41,227,162,188,152,64,68,170,209,175,238,109,162,145,229,212,169,34,101,6,144,214,8,234,139,151,21,189,68,25,200,157,86,58,141,229,87,21,210,64,196,73,102,115,233,242,218,62,237,102,210,208,192,56,194,38,15,144,241,106,140,98,60,26,241,134,160,127,116,114,132,4,32,239,84,137,60,47,84,49,136,37,60,166,214,237,24,131,192,32,51,187,4,59,11,59,61,69,43,5,161,46,111,199,122,172,174,45,227,114,88,167,57,63,114,93,24,143,71,224,249,9,252,67,129,23,233,212,222,198,70,193,24,185,145,134,24,74,5,156,219,169,185,225,192,18,130,193,187,192,194,52,84,203,35,203,249,50,89,215,31,90,224,1,48,199,58,248,120,136,40,102,226,65,92,133,213,192,138,157,133,55,228,199,174,6,98,183,48,141,197,208,217,208,242,49,115,92,203,150,35,182,141,108,253,33,239,199,241,145,62,228,21,64,80,18,67,37,18,181,76,170,226,85,209,199,26,148,131,128,191,187,15,5,189,28,48,186,62,244,142,169,199,184,27,213,87,48,114,42,4,222,130,226,32,243,153,137,100,133,144,165,71,46,255,200,25,129,163,32,150,101,109,146,203,100,177,116,54,205,192,238,233,104,180,39,228,129,45,195,234,235,160,207,23,252,29,152,195,140,20,243,198,68,30,42,207,250,3,241,128,167,210,65,207,115,215,135,114,16,233,105,62,62,198,136,245,145,84,109,164,239,192,29,100,253,69,180,143,179,83,41,218,237,24,43,130,120,17,31,84,2,243,235,199,97,132,13,245,29,49,9,132,76,82,36,175,234,121,133,48,212,27,35,5,51,82,68,41,235,86,70,171,103,230,46,208,22,108,144,138,96,156,206,22,125,223,94,27,39,140,112,245,78,212,35,8,2,42,59,199,24,153,107,160,180,26,243,44,105,129,238,127,198,152,171,234,9,225,251,234,209,66,120,205,221,42,248,177,9,0,141,4,212,16,88,18,34,83,195,100,141,192,5,48,54,11,191,146,209,122,251,125,9,182,47,222,101,179,8,29,39,187,170,212,51,217,229,35,62,168,145,185,32,182,42,68,214,7,111,165,136,80,220,239,115,140,13,1,206,12,8,90,183,41,195,139,144,214,198,98,44,216,93,162,11,100,243,53,51,182,38,239,174,169,3,197,27,94,9,99,221,94,148,108,14,8,221,24,132,32,208,60,87,179,235,172,20,99,152,60,30,240,196,200,114,19,110,152,235,206,143,41,26,119,91,39,144,180,132,106,30,69,146,42,128,241,22,29,38,27,193,54,5,177,194,134,34,202,216,133,166,16,119,63,32,186,91,25,92,192,116,151,52,237,82,17,110,191,113,97,9,65,3,18,105,39,184,238,216,88,223,41,77,211,146,207,7,199,43,90,117,131,83,228,251,96,49,193,150,240,247,153,0,48,43,56,180,146,56,226,180,122,88,160,245,121,229,208,239,84,176,157,225,166,71,184,49,33,80,128,100,1,42,154,149,187,255,216,6,171,239,139,214,151,62,92,238,232,192,206,199,58,60,251,254,30,170,191,248,16,42,141,211,198,76,187,247,230,254,170,35,43,142,126,139,130,228,6,196,107,163,211,29,2,108,173,195,239,63,12,190,87,98,43,107,192,162,102,227,252,116,133,54,195,88,110,114,203,214,95,196,157,238,234,218,219,188,111,208,236,153,178,123,234,31,176,136,136,143,4,2,138,151,98,96,242,125,228,35,46,185,75,123,219,3,116,11,79,147,63,116,193,217,244,199,247,129,58,222,188,117,64,211,237,206,122,63,152,5,10,64,170,177,76,185,56,213,40,152,213,88,122,66,91,144,154,138,2,194,114,255,179,141,188,179,157,1,117,141,33,124,226,202,153,206,34,251,90,223,4,180,13,76,70,58,19,82,16,134,28,104,68,2,210,27,171,187,59,253,30,195,22,163,192,70,111,33,9,140,13,129,65,194,57,142,157,107,25,87,101,149,165,123,51,59,121,28,175,178,20,141,103,49,241,46,67,102,12,162,98,216,52,14,175,153,177,211,1,42,82,6,98,148,147,77,247,99,208,247,34,185,239,73,195,132,40,175,37,51,171,65,38,171,76,249,48,33,227,7,59,67,77,202,143,1,252,246,147,126,212,229,123,210,143,223,146,244,67,146,72,113,16,4,115,245,34,82,28,6,161,172,140,194,69,234,38,49,178,242,141,143,113,184,217,43,33,117,245,97,161,58,119,76,202,63,157,43,137,199,208,79,9,235,83,37,83,178,254,72,122,131,21,190,201,57,183,97,17,126,242,15,189,119,43,244,97,6,160,68,37,202,51,249,106,74,30,119,62,229,32,66,66,158,58,31,206,59,232,219,63,154,235,247,163,249,219,242,241,64,16,30,155,98,240,60,38,182,23,78,57,112,249,193,181,113,56,229,248,37,50,134,82,136,242,96,124,69,106,45,106,72,133,126,129,181,126,124,190,69,159,250,91,97,200,167,36,55,39,176,169,107,132,223,254,73,216,191,246,147,240,155,23,181,165,151,86,149,88,12,32,207,199,67,215,143,248,229,67,160,219,71,252,242,245,65,203,119,232,27,208,250,191,5,250,233,114,199,30,75,64,203,56,247,222,103,76,184,207,20,198,118,156,247,207,223,113,56,227,154,30,116,188,127,238,41,63,90,107,30,209,39,233,185,124,169,93,14,159,85,216,226,126,219,231,238,55,63,216,228,227,19,118,220,62,209,74,191,252,144,196,119,254,251,157,255,126,45,208,175,142,79,126,110,254,251,9,158,110,225,139,162,117,146,225,95,172,182,126,92,181,15,238,173,235,114,221,138,252,161,21,23,186,179,253,187,212,187,201,195,228,123,248,16,206,239,171,25,21,192,155,238,33,112,20,230,123,137,239,37,190,151,248,94,226,123,137,7,37,62,153,166,91,62,149,100,254,161,42,65,249,82,42,54,107,144,191,127,199,95,74,221,172,161,251,240,247,232,56,52,9,255,30,10,246,249,137,58,126,85,223,236,194,85,151,205,238,99,90,239,176,245,254,185,77,218,211,247,114,255,91,202,213,23,203,181,23,203,173,143,202,221,63,251,171,206,163,220,38,229,238,35,221,14,41,215,157,96,187,148,219,165,220,125,164,219,41,229,70,152,176,148,59,164,92,179,229,186,163,236,148,114,167,148,91,109,185,238,92,75,92,174,43,10,163,220,102,203,141,75,33,82,46,75,185,221,150,235,17,36,69,202,233,126,28,182,92,143,27,170,82,78,247,227,180,229,122,160,79,147,114,178,31,61,216,11,202,117,51,89,145,13,105,178,33,253,181,96,44,216,185,182,236,72,147,29,233,111,173,99,193,251,119,145,45,105,178,37,253,226,192,158,180,96,143,97,147,61,105,178,39,91,87,189,179,22,188,127,23,217,148,38,155,50,50,43,20,91,176,166,160,224,246,189,224,151,42,248,212,124,242,92,207,231,24,192,30,151,247,166,137,32,189,59,207,115,219,207,117,91,91,57,183,131,227,74,82,41,199,186,111,219,150,242,186,145,143,61,130,69,181,57,162,243,30,4,248,180,243,99,91,247,82,54,106,176,95,117,205,87,123,121,223,246,117,63,50,119,29,1,93,229,38,119,47,210,43,211,190,198,92,234,86,11,53,216,103,189,231,182,214,107,150,173,228,99,231,105,7,192,160,122,147,7,76,94,232,251,220,206,118,20,105,240,222,119,90,203,214,202,81,116,66,15,128,65,117,142,152,126,113,195,143,179,230,227,104,59,116,148,91,110,237,56,247,182,165,179,202,152,60,52,172,207,23,12,122,186,233,143,157,124,59,83,169,141,123,241,144,112,218,52,235,242,209,219,93,83,46,219,185,86,193,180,0,22,111,246,7,44,248,119,36,255,95,136,228,233,104,109,55,211,60,142,115,61,246,166,72,125,11,161,81,117,237,252,137,113,122,84,158,182,237,222,77,107,235,186,110,91,75,138,132,51,44,172,171,49,222,207,166,253,27,216,208,92,181,97,66,188,103,243,109,215,38,229,180,157,181,174,186,171,245,82,59,175,153,237,103,59,21,161,67,96,80,127,229,24,201,250,180,247,253,60,243,126,166,253,58,62,135,238,234,122,30,109,107,231,182,30,37,9,25,9,129,65,125,137,245,127,74,213,214,61,29,103,169,181,158,208,247,81,242,133,210,45,41,71,142,97,190,50,223,76,120,214,237,177,167,237,184,232,20,16,201,123,118,167,11,145,235,94,247,253,132,78,66,96,80,95,239,168,236,175,208,211,92,143,86,246,29,207,209,117,120,47,194,125,172,114,132,61,196,87,148,247,81,143,231,88,214,210,125,167,84,68,170,215,225,92,107,181,135,60,4,78,117,249,222,208,43,232,117,228,51,31,87,123,39,82,172,117,175,107,222,142,118,237,160,34,87,0,243,149,5,181,94,224,29,229,76,247,243,82,146,180,120,159,244,118,237,217,177,229,35,3,213,8,129,65,125,185,175,244,204,81,118,213,190,232,113,186,234,237,245,0,214,149,91,205,215,246,165,148,129,59,135,192,160,254,170,201,79,191,242,201,127,185,77,63,46,28,93,211,122,0,33,109,245,34,140,57,173,77,207,180,131,204,213,36,187,201,254,116,161,215,186,167,118,88,10,86,206,253,146,131,182,139,57,37,21,132,66,160,175,46,164,251,5,38,125,28,181,221,117,154,172,130,89,190,19,172,75,28,169,219,46,12,34,130,185,186,140,90,159,139,207,121,31,112,87,230,207,103,148,203,49,101,190,24,144,159,121,199,239,244,114,43,151,112,182,229,21,5,243,163,94,108,3,133,181,91,4,12,107,75,210,196,252,130,196,126,180,227,210,56,81,40,203,215,94,151,181,229,53,213,83,197,152,0,26,212,166,235,130,35,165,196,179,174,183,245,188,228,225,98,100,178,178,30,71,106,181,228,114,64,231,1,52,172,79,151,206,198,179,129,79,137,207,37,19,94,164,235,184,164,18,153,123,61,238,122,246,213,213,217,128,231,6,208,176,62,223,182,60,95,152,253,69,203,202,118,151,13,14,153,251,154,46,198,89,206,10,132,230,22,66,131,218,116,23,240,124,65,99,40,166,211,107,110,71,78,245,210,76,128,205,123,224,84,239,54,8,192,249,2,233,249,190,203,223,119,249,251,46,127,182,93,70,155,224,125,118,251,213,126,78,192,107,103,144,171,197,55,236,159,50,185,251,54,213,227,40,173,109,184,119,23,203,206,165,172,70,156,113,176,176,46,219,26,94,219,227,243,218,154,173,24,21,39,215,124,33,176,145,44,44,36,170,70,41,198,243,147,213,125,153,165,127,144,170,206,73,61,159,111,237,190,213,11,71,82,194,53,44,215,244,46,49,56,137,108,118,11,96,97,93,182,108,188,34,143,164,173,94,124,126,69,178,208,174,46,246,116,78,98,92,0,141,170,115,154,130,242,130,104,188,95,155,181,79,72,189,93,114,207,37,24,110,57,163,129,45,128,70,213,229,25,167,242,138,206,91,215,75,210,175,198,60,87,215,84,210,133,182,187,81,132,3,104,84,157,175,171,223,94,48,157,94,180,120,55,231,52,93,66,221,121,238,151,222,133,4,44,128,6,181,57,149,71,126,69,66,223,235,118,201,113,187,161,200,151,84,119,169,2,246,80,79,160,176,38,101,74,24,137,195,158,146,175,150,118,20,102,47,53,178,228,221,0,111,33,212,213,149,133,206,175,232,157,23,183,217,47,221,17,69,217,139,88,173,151,116,141,198,155,91,8,141,170,243,205,225,251,109,253,167,251,156,47,28,49,72,155,235,117,82,47,164,181,134,143,0,26,212,22,235,95,126,193,204,241,104,222,151,88,127,158,96,63,118,176,7,115,230,215,73,94,176,30,126,169,157,94,183,245,146,42,214,156,85,169,44,199,113,157,209,178,162,118,227,96,81,85,221,229,231,242,208,145,46,33,167,53,53,118,94,27,26,152,27,28,44,170,170,180,251,21,46,121,17,166,245,162,192,104,144,191,88,239,110,38,18,192,162,170,226,11,120,78,69,62,158,213,185,154,124,103,56,191,112,150,142,227,18,156,236,146,58,170,236,201,180,175,198,79,132,230,245,153,109,161,175,147,247,246,156,235,133,46,151,96,137,50,96,8,244,181,11,117,252,92,250,58,247,139,20,21,20,82,59,59,216,175,99,154,178,241,113,69,192,160,122,230,23,73,94,154,246,85,57,101,240,75,223,123,175,119,193,121,7,190,225,33,65,69,202,36,249,108,135,159,163,134,173,254,123,70,214,219,200,209,239,95,223,191,130,47,14,50,249,237,145,195,95,42,156,117,77,159,168,99,19,111,243,214,101,194,47,190,105,31,241,85,204,87,53,95,205,124,173,230,203,6,160,219,112,196,195,124,157,182,247,100,63,167,177,217,225,100,59,158,108,7,148,237,136,242,20,19,191,127,51,159,6,193,62,42,160,139,94,79,123,106,119,241,245,70,46,177,23,76,222,206,53,122,143,71,217,183,173,220,173,35,27,202,103,30,26,85,175,31,208,245,37,219,29,231,118,162,203,52,95,210,231,89,78,35,108,134,208,176,190,36,107,123,161,247,75,202,77,155,141,19,201,251,177,93,146,174,85,61,60,48,170,188,74,154,184,231,186,237,165,157,30,213,74,36,151,66,145,215,75,204,6,239,218,45,132,134,245,55,126,131,227,5,239,238,209,46,109,173,238,24,230,116,119,150,30,103,54,98,148,131,69,85,87,78,150,247,194,94,183,171,74,189,16,8,204,161,249,154,217,209,14,107,76,240,192,176,182,164,238,123,46,163,94,226,101,221,142,150,48,250,226,154,213,181,140,59,184,246,110,17,48,172,205,15,223,188,130,100,251,117,54,38,229,113,50,117,206,128,168,18,165,89,124,30,1,116,15,176,64,92,201,235,158,243,185,175,233,220,65,167,13,160,174,46,229,124,125,105,107,175,29,57,39,235,92,206,249,210,228,74,77,128,205,14,22,214,165,23,162,94,217,215,118,15,49,185,52,39,176,91,108,246,232,110,246,208,206,21,214,215,105,213,126,233,227,107,174,215,193,3,219,231,133,16,53,95,36,8,241,215,3,195,218,27,191,195,240,218,145,189,72,175,181,1,94,231,115,95,175,246,44,193,8,160,97,253,21,146,90,62,223,222,116,92,135,226,88,17,175,242,69,153,236,217,177,144,176,30,189,226,241,138,98,119,228,235,184,31,155,241,63,223,13,187,23,221,155,153,210,4,12,107,115,166,220,167,59,253,148,145,50,79,255,177,139,207,51,59,255,179,87,220,70,65,17,108,127,250,211,175,75,73,84,46,45,245,106,238,194,128,250,79,203,250,207,63,255,207,95,254,250,211,29,250,3,254,60,254,187,10,253,225,14,216,123,65,91,253,95,127,252,245,47,239,254,252,211,251,247,191,252,208,255,249,203,143,63,255,251,251,255,252,225,94,254,31,174,63,123,175,88,174,225,165,76,29,245,137,252,243,207,191,254,229,175,127,123,247,203,251,247,191,190,251,143,247,191,190,255,199,159,255,253,223,126,125,255,95,163,243,63,80,201,94,228,111,127,250,245,95,126,122,255,199,31,127,250,63,63,254,242,215,31,255,248,211,159,126,184,126,234,58,233,127,255,252,235,248,103,159,107,202,189,90,41,159,65,15,102,57,254,247,75,104,182,82,151,95,77,66,179,167,200,154,83,162,191,35,83,196,87,158,8,112,165,148,156,85,19,162,235,19,185,240,149,236,143,244,184,12,63,70,35,117,135,71,141,51,121,234,63,243,34,238,54,142,11,243,149,111,166,241,219,212,243,205,142,235,22,140,156,122,184,65,255,55,24,128,253,117,170,207,21,248,79,199,195,23,211,16,210,200,22,76,67,168,48,72,67,72,93,47,152,134,176,195,246,111,254,216,126,79,150,251,219,14,162,188,39,114,66,202,107,121,175,190,155,134,199,147,82,156,162,123,145,248,128,42,41,221,249,145,189,194,5,86,118,254,157,84,130,170,233,99,199,77,223,182,57,198,113,24,102,232,162,79,33,201,227,38,44,157,54,252,236,247,240,216,198,63,64,135,180,33,111,189,228,68,176,36,49,6,235,24,74,63,241,11,191,76,10,73,69,229,253,66,170,79,89,95,244,237,41,122,44,84,51,210,231,145,129,116,147,84,217,39,61,136,156,229,187,55,185,75,182,111,122,48,117,211,148,254,7,61,229,219,166,111,253,253,28,77,172,171,109,244,208,180,252,244,0,195,120,115,101,60,25,146,225,77,37,137,234,80,64,130,157,239,144,81,133,215,151,222,221,204,244,180,85,111,176,80,81,106,24,191,123,91,248,18,48,173,224,161,144,222,30,188,85,69,105,222,51,188,206,67,75,157,249,225,227,198,179,210,180,237,35,130,157,159,237,34,220,26,232,155,249,17,30,254,196,183,219,215,117,90,18,122,255,248,196,231,220,27,173,137,175,38,163,30,136,198,175,43,51,130,225,49,234,127,170,249,43,202,222,110,43,61,106,59,24,193,41,17,150,102,8,61,246,17,95,10,37,212,204,248,120,68,166,183,83,241,5,121,122,58,43,195,75,99,211,224,210,227,37,52,75,29,237,134,221,175,50,74,140,199,241,138,153,103,31,63,190,172,64,15,27,101,124,107,114,156,216,12,143,222,29,178,26,252,56,137,25,102,242,104,20,98,154,69,198,7,24,59,92,71,121,213,116,255,227,13,133,140,239,217,108,88,136,251,130,5,177,131,233,188,95,79,151,59,121,112,42,253,177,5,129,40,211,99,105,68,86,114,213,83,197,212,123,68,101,80,235,205,76,52,219,105,201,249,214,173,134,49,118,227,177,167,39,72,114,28,69,242,4,235,148,159,105,248,133,246,67,30,78,204,208,231,120,61,47,87,236,112,7,52,27,28,161,224,150,154,33,118,51,246,68,153,13,233,206,186,213,59,227,88,213,89,80,249,153,26,241,57,57,128,165,104,39,157,149,244,41,140,55,17,246,222,243,7,190,137,64,66,14,60,137,80,53,195,186,22,28,92,208,72,121,3,43,191,125,49,143,196,215,239,98,222,242,145,98,94,225,183,19,241,141,57,242,255,11,226,102,121,112,64,206,60,189,112,144,228,128,144,128,198,111,74,142,23,65,132,166,22,20,213,232,193,204,81,102,25,49,45,75,225,71,80,248,29,59,125,27,129,95,128,214,183,13,6,84,95,63,152,94,209,158,102,213,139,29,125,212,35,55,194,248,251,67,14,27,61,132,98,14,219,120,202,110,153,94,56,224,114,248,196,193,62,31,181,175,31,43,104,43,4,41,170,72,93,59,172,186,121,168,137,222,91,23,22,62,64,124,81,154,99,178,56,146,88,241,141,146,251,179,144,156,249,129,40,21,214,229,25,169,46,142,177,190,173,168,72,128,164,21,54,26,108,131,234,69,94,4,2,134,61,144,73,223,133,76,238,117,214,241,42,36,188,174,152,248,145,114,70,80,210,37,18,63,215,93,245,139,126,224,119,76,25,227,229,5,243,233,57,211,27,202,89,24,64,39,176,138,203,88,108,19,202,141,72,191,130,23,87,249,166,163,121,35,114,128,64,42,52,143,88,22,56,73,56,8,5,41,36,195,72,176,41,243,66,233,120,228,22,132,56,122,124,193,12,106,90,236,27,17,7,243,84,123,226,198,27,128,26,236,10,129,138,182,69,3,28,12,127,76,32,145,134,183,45,118,37,113,26,230,32,36,173,11,111,14,39,185,207,185,207,160,130,165,136,34,65,33,136,255,21,212,167,166,138,131,84,133,12,64,91,12,58,86,215,23,65,222,166,126,230,201,183,249,208,7,11,130,139,22,174,41,172,249,227,141,113,219,71,77,33,19,98,172,118,248,50,193,78,192,146,7,168,23,224,103,132,196,14,211,131,243,224,79,141,63,90,254,248,69,135,52,60,204,241,161,71,218,16,146,15,75,97,138,174,55,208,28,67,165,12,13,123,64,229,102,66,56,147,202,66,234,191,108,26,189,28,102,54,159,220,39,171,142,124,151,170,114,62,160,134,65,194,251,159,241,232,222,62,18,67,225,195,97,128,185,33,61,240,100,195,19,151,144,2,121,50,21,147,178,9,233,34,220,12,112,120,70,116,59,246,71,36,102,62,226,142,10,132,132,98,34,38,1,197,137,200,82,64,187,2,10,55,147,152,50,30,24,30,19,59,194,125,66,4,154,245,102,199,163,45,15,183,60,126,96,95,27,63,31,10,161,10,140,108,250,200,247,192,50,220,168,81,129,163,62,87,5,77,56,141,99,238,237,118,233,235,232,99,50,207,100,205,211,132,113,84,121,235,178,255,191,242,29,229,77,126,231,245,37,225,249,24,75,81,97,160,48,244,104,106,208,227,216,140,46,140,159,135,110,137,27,166,59,173,244,160,103,19,251,9,17,171,134,199,166,41,133,25,227,108,230,240,226,121,246,231,221,144,3,71,49,250,218,12,85,190,247,126,198,214,49,51,204,209,200,144,242,197,168,66,151,163,201,30,66,171,186,33,197,38,35,128,140,35,113,25,17,208,72,85,217,152,80,237,208,98,60,123,179,64,110,249,204,168,123,149,110,118,232,101,205,139,162,47,169,35,52,101,163,142,40,12,244,145,45,120,15,241,62,203,111,95,243,39,221,235,235,213,252,127,167,69,45,159,56,162,119,253,68,47,120,149,15,13,232,13,179,181,126,166,13,157,22,237,147,60,85,64,52,165,124,139,110,119,150,94,225,237,87,102,142,9,37,100,185,47,188,122,24,72,219,131,115,195,251,217,133,211,87,181,185,222,110,228,51,134,9,25,38,157,122,23,87,98,29,159,101,162,220,224,184,19,53,28,228,23,150,146,155,178,128,209,45,66,200,217,15,218,88,83,0,243,68,230,213,137,153,11,112,58,242,15,238,36,201,228,121,65,97,137,95,101,210,225,168,8,34,0,247,61,85,25,226,67,67,161,134,88,149,132,42,12,135,2,59,62,198,76,86,179,92,139,113,245,210,146,210,13,237,68,158,96,212,208,15,219,2,95,233,217,220,130,172,96,128,16,16,202,20,36,52,21,128,188,177,178,160,240,129,39,104,218,28,183,123,176,181,102,219,61,102,12,9,143,243,176,23,69,162,85,186,103,179,163,206,190,240,138,130,0,223,51,208,170,75,36,243,138,153,246,135,59,112,204,111,211,183,156,9,185,87,163,190,172,234,248,73,236,71,30,45,151,197,248,148,229,215,77,0,121,18,136,108,159,29,58,50,218,142,189,42,15,37,95,55,241,221,246,93,200,9,205,222,124,18,100,119,214,54,207,254,1,130,89,30,63,3,69,56,21,194,88,181,195,3,243,132,48,155,104,20,244,9,100,172,78,216,26,162,157,67,78,131,193,132,85,135,182,125,35,167,28,188,149,61,186,216,172,109,93,86,213,175,115,188,23,110,187,220,134,178,179,106,159,191,21,185,26,109,85,166,13,153,109,133,27,24,251,1,51,99,228,181,251,220,79,82,39,31,61,57,52,58,178,16,53,28,13,26,36,104,83,0,163,218,124,28,220,136,130,49,195,172,230,9,195,90,196,139,5,171,233,14,143,63,91,211,225,243,59,24,109,114,128,8,138,44,49,46,77,212,210,81,84,67,116,61,77,54,36,27,88,222,170,110,86,67,244,45,79,112,108,227,254,167,115,170,158,170,56,31,31,252,66,244,160,4,147,3,133,64,160,176,236,10,227,98,251,223,131,190,178,81,151,95,175,190,242,181,139,168,100,77,69,155,106,215,205,119,84,193,135,48,8,126,124,114,8,30,72,206,242,168,166,158,203,70,237,244,15,202,112,11,212,111,49,162,107,22,91,171,54,57,6,166,85,72,186,152,9,86,21,211,87,166,120,11,226,223,36,226,176,237,139,105,74,101,38,119,216,14,196,136,165,139,129,171,179,202,217,140,222,115,71,154,220,44,5,25,102,26,185,217,210,83,209,27,138,237,248,0,73,62,204,205,51,219,73,138,126,236,106,52,17,136,198,113,48,100,176,170,65,181,129,102,45,227,29,55,252,2,2,72,146,0,255,150,136,11,176,174,144,38,186,156,144,196,210,170,129,149,135,32,171,66,216,130,69,242,4,173,243,244,123,33,106,207,198,252,83,87,160,24,8,26,197,198,58,179,48,58,66,195,156,212,19,201,219,195,201,110,249,139,176,23,17,64,23,78,194,168,24,188,74,113,225,231,96,95,4,68,232,93,190,98,229,156,145,156,133,238,184,217,71,61,79,99,51,35,119,19,195,153,187,101,177,171,86,252,210,6,107,111,55,199,238,23,163,213,141,231,49,240,138,135,140,178,34,65,166,38,0,205,38,210,21,157,95,56,227,158,6,56,18,97,8,136,33,47,158,2,25,209,220,11,113,64,183,54,131,186,252,61,237,150,145,165,240,136,59,10,96,232,131,39,33,68,214,231,35,232,143,169,57,202,238,164,27,58,48,142,207,106,1,228,150,220,77,180,158,246,10,244,210,253,109,81,222,173,199,232,7,69,166,1,81,130,120,175,114,176,154,220,244,131,198,69,241,201,72,217,23,165,135,139,24,154,199,216,111,50,4,197,189,177,160,168,67,79,216,104,16,54,64,232,8,225,67,146,246,144,36,174,211,14,70,123,106,55,192,109,145,219,196,137,216,79,156,0,25,69,196,71,144,207,196,188,200,225,178,217,221,251,159,241,60,71,127,19,244,35,226,133,216,238,254,182,184,123,104,188,158,222,212,168,127,7,145,121,219,247,11,24,191,89,222,237,98,233,106,142,213,210,5,85,13,168,22,16,217,60,187,47,249,128,163,206,225,23,7,211,202,2,95,160,237,10,136,14,61,180,49,72,18,91,101,249,3,132,186,99,140,19,77,10,139,177,255,114,22,35,208,246,243,160,103,160,110,202,80,87,84,156,97,13,6,81,238,71,53,143,244,10,113,32,11,199,156,25,206,182,79,16,142,24,4,105,161,82,200,64,83,16,231,153,2,103,120,147,232,72,104,171,33,104,72,210,135,169,40,37,52,88,226,254,13,30,125,242,10,175,224,214,228,105,188,57,102,6,49,150,20,189,91,99,41,219,173,226,14,113,36,0,94,203,160,11,55,114,231,161,136,223,26,237,253,39,173,17,67,232,134,14,172,26,71,104,174,198,117,64,16,40,148,29,104,170,197,1,20,192,222,40,102,95,131,28,56,173,58,47,124,255,125,17,86,108,215,161,186,197,18,84,241,16,22,81,56,228,81,215,106,4,34,102,225,242,114,145,186,239,230,8,233,175,14,101,218,188,145,70,14,62,181,167,81,36,107,91,3,80,166,111,114,40,111,90,96,0,84,8,164,251,214,86,158,171,178,117,85,135,2,190,10,198,88,250,159,176,88,118,219,211,93,232,21,75,13,20,215,54,116,253,193,195,66,247,33,20,11,155,144,28,1,224,74,39,192,6,112,36,240,134,42,149,24,54,66,64,72,221,29,2,208,96,21,217,57,110,2,33,52,222,2,16,11,16,207,128,2,200,139,4,144,12,203,54,4,155,221,150,73,20,15,160,146,207,38,11,55,8,114,19,132,16,177,95,127,52,130,61,255,12,58,49,109,177,2,214,197,152,89,71,12,134,226,209,184,21,11,38,148,129,224,26,23,54,132,71,112,184,145,76,175,227,39,165,110,190,160,71,239,137,112,160,132,90,47,154,96,37,241,128,19,102,97,119,60,141,141,216,137,14,201,9,175,194,81,96,3,243,12,226,195,220,80,192,134,237,215,237,185,21,180,180,82,204,7,74,229,28,87,94,180,109,178,205,156,243,152,48,118,175,138,140,221,20,196,118,99,40,197,1,131,74,104,249,161,39,11,99,242,10,85,113,109,58,120,216,124,218,248,187,143,215,71,204,133,235,23,208,241,153,216,71,44,193,49,142,128,187,120,22,20,240,41,207,204,66,142,231,217,226,204,57,97,153,139,226,18,174,155,36,24,244,94,98,188,211,101,113,37,196,167,0,237,236,226,118,138,182,119,193,36,189,109,80,201,200,121,10,128,2,118,229,121,154,231,96,90,205,176,66,195,38,13,3,13,24,108,196,131,29,159,142,88,185,103,248,34,40,162,83,120,247,160,109,6,37,29,130,238,213,24,230,228,161,190,129,145,118,20,56,230,181,212,235,185,211,130,15,66,72,137,66,100,212,27,177,93,225,146,228,196,105,172,244,162,39,120,133,27,182,163,26,69,128,53,45,49,168,111,149,111,236,112,28,205,133,189,155,140,95,139,184,68,105,153,187,159,141,206,15,185,197,244,56,144,169,90,5,131,219,96,9,122,167,111,148,173,134,76,209,64,79,0,145,241,78,119,116,83,170,94,236,72,251,216,158,219,12,3,157,198,11,253,94,51,200,66,116,180,76,160,80,56,165,131,1,83,17,61,22,15,15,28,220,225,118,136,52,97,154,71,197,0,95,35,172,14,113,63,56,33,147,6,116,12,55,252,136,176,141,35,36,163,21,12,214,203,47,42,86,75,241,154,62,214,245,194,141,88,101,128,111,187,34,66,69,139,216,112,19,0,133,222,103,1,16,98,166,117,134,0,79,97,35,214,22,128,100,219,105,173,139,3,200,172,22,226,7,242,1,209,223,28,32,157,208,57,149,9,100,238,210,206,197,50,95,155,56,231,29,135,66,196,60,51,154,244,24,226,152,142,189,169,51,203,40,129,32,227,197,29,207,9,3,118,57,49,213,64,233,157,212,98,218,31,15,50,59,223,43,142,32,224,222,236,17,11,48,6,57,6,73,165,91,24,27,16,178,155,94,0,230,167,150,50,147,111,158,144,210,106,134,148,121,104,186,21,141,239,80,28,51,192,97,87,114,138,60,132,159,21,174,230,17,238,33,146,6,205,60,26,142,57,17,238,208,192,202,37,93,171,4,37,102,125,215,41,106,78,149,243,218,94,65,15,128,2,50,2,170,109,85,174,135,194,34,48,106,201,215,124,252,85,241,107,116,247,104,90,176,132,134,26,117,117,70,205,199,197,181,69,238,33,175,15,186,108,168,181,129,4,48,22,151,238,170,56,194,224,201,199,76,96,184,246,152,48,21,6,11,28,93,193,202,166,188,53,158,115,117,189,176,149,39,8,15,105,80,254,195,34,177,96,108,182,251,153,156,33,16,230,234,73,89,198,172,42,112,6,204,104,236,154,74,29,12,158,153,91,145,11,6,51,40,25,81,157,111,77,149,167,245,144,218,154,105,144,250,196,49,0,34,30,53,190,99,166,228,183,201,186,34,140,154,68,144,215,244,34,141,48,84,28,113,28,56,180,244,110,154,208,196,59,188,66,170,199,78,33,7,246,180,24,163,202,100,116,97,9,249,29,206,126,17,107,134,41,146,231,241,251,174,245,194,165,92,16,2,134,53,176,173,206,0,21,119,22,67,104,178,169,207,249,72,0,144,45,29,162,139,118,42,24,249,230,10,198,173,77,132,142,205,68,26,93,57,89,128,2,43,17,227,164,131,100,135,246,30,82,102,99,108,153,17,28,140,101,178,253,79,155,29,43,212,151,166,244,165,105,42,187,121,142,76,120,40,141,48,11,54,212,210,113,26,71,46,103,122,234,8,46,183,202,16,236,119,168,112,22,81,41,120,64,86,196,171,120,179,78,230,181,182,202,97,4,77,0,255,127,123,223,214,107,71,110,156,251,107,26,24,7,88,2,201,102,223,30,227,224,32,79,121,10,144,247,241,177,29,27,152,140,130,177,130,224,252,251,211,139,172,98,125,117,233,189,214,150,53,218,91,99,25,150,70,93,139,119,22,235,206,98,175,120,140,111,107,208,117,54,95,101,21,246,70,99,28,54,25,62,205,48,199,245,247,13,32,96,42,139,108,105,98,105,163,189,7,83,156,55,213,41,75,94,145,157,129,192,227,140,209,180,145,74,104,181,198,64,179,84,51,27,233,244,12,183,187,25,198,3,98,217,149,180,46,100,61,16,149,188,88,54,110,154,226,149,194,69,227,99,97,9,224,154,235,121,198,232,120,167,164,207,16,136,227,225,19,112,120,88,143,52,189,36,11,130,86,227,85,159,75,245,40,129,19,225,114,161,40,185,215,152,97,126,65,180,51,20,209,210,75,75,78,89,190,52,145,166,25,76,190,17,207,95,67,190,134,12,62,224,230,94,84,80,77,19,203,116,114,129,92,20,0,76,118,60,63,228,200,129,193,55,210,204,156,2,119,169,229,37,237,183,128,161,146,173,174,243,89,180,230,88,17,192,243,217,128,25,7,12,27,90,78,50,34,16,140,54,219,136,227,214,158,187,120,14,228,152,148,99,99,145,119,166,3,220,218,104,144,115,5,69,146,141,89,27,39,33,201,180,147,44,126,6,31,201,102,36,138,224,11,205,67,150,177,99,131,104,13,9,20,79,123,222,81,247,195,74,64,55,30,104,68,176,161,94,63,50,197,99,254,44,98,160,85,209,116,243,78,191,227,19,44,108,148,220,90,86,155,78,131,24,117,140,132,171,44,155,6,120,245,193,41,24,87,36,225,129,93,38,176,222,188,96,228,1,90,63,105,202,110,245,50,32,68,129,92,24,185,24,157,23,210,158,176,43,12,211,13,99,95,237,159,13,147,186,129,110,142,51,45,68,186,167,231,109,161,234,168,88,166,231,170,158,243,118,212,216,44,224,208,85,16,153,156,57,193,240,45,207,120,60,107,114,170,128,81,22,152,45,235,24,229,164,117,15,117,209,208,233,230,106,13,73,217,246,101,248,71,160,12,248,59,39,93,225,243,58,32,59,76,17,240,178,216,97,169,155,99,211,101,180,27,154,220,208,166,118,111,100,25,138,235,24,198,72,240,10,94,227,33,202,209,188,3,21,193,210,23,107,190,69,18,102,73,132,71,12,135,57,30,185,172,232,231,197,195,136,226,122,170,28,216,12,209,176,24,90,30,113,25,37,12,31,35,39,48,182,34,8,189,176,145,25,42,112,3,130,58,100,53,36,230,163,135,61,154,187,12,226,3,136,188,251,178,147,29,208,183,126,48,191,201,196,15,152,240,2,27,127,64,4,173,90,121,121,6,191,156,172,7,240,219,132,10,245,20,156,57,96,10,238,140,58,157,127,210,135,218,48,112,111,99,8,228,26,39,251,24,233,200,139,97,94,84,171,124,108,193,142,52,107,212,100,111,51,138,167,96,89,10,64,166,191,91,32,27,106,41,54,144,117,47,44,101,73,5,69,88,137,220,75,237,184,117,13,216,2,18,242,118,63,65,115,156,37,38,8,240,33,116,132,188,114,235,24,96,63,147,28,171,12,222,136,219,202,121,86,168,141,99,18,249,156,28,169,11,172,18,31,76,76,104,18,68,158,4,49,24,47,132,106,100,191,215,87,38,194,23,183,219,227,132,199,155,0,183,166,216,0,39,69,38,101,196,83,43,223,136,73,223,173,151,146,47,89,159,247,194,55,23,7,245,34,135,34,71,148,82,68,60,4,147,207,212,28,249,186,229,246,150,245,133,43,123,131,183,71,40,115,69,145,213,64,131,134,33,111,142,0,6,129,120,214,180,227,141,63,198,58,20,185,253,97,148,83,68,149,93,168,30,146,105,44,46,26,185,246,173,44,22,162,153,10,18,217,78,252,224,6,188,15,73,51,22,75,107,210,84,3,232,34,140,165,234,65,224,153,9,77,211,117,26,110,180,160,165,156,26,97,232,235,29,136,160,86,88,114,162,13,202,62,145,108,132,178,211,133,120,101,196,47,43,44,29,13,123,219,141,248,124,33,42,187,45,117,241,153,81,4,231,164,67,60,77,12,168,67,206,0,125,53,222,192,24,196,173,131,145,90,126,219,92,0,33,198,24,118,138,18,198,32,230,241,51,198,47,74,108,163,112,238,121,196,254,41,44,196,193,181,222,175,50,138,61,117,3,163,83,1,117,1,99,141,222,192,216,131,12,73,187,187,113,252,206,47,11,72,58,48,57,161,43,65,80,20,36,30,9,194,220,110,246,110,25,91,112,83,168,64,212,22,32,42,15,71,238,0,149,219,79,36,244,254,77,234,153,14,229,6,146,51,13,14,208,81,147,163,239,4,217,121,74,66,54,113,218,66,47,162,107,92,95,244,218,206,236,111,169,207,223,98,150,95,142,11,68,227,28,201,78,32,232,206,36,98,161,111,170,195,212,221,235,46,62,237,120,23,112,33,16,224,197,62,156,9,116,187,121,167,107,163,93,46,101,206,78,81,79,149,104,143,224,27,209,65,34,61,3,53,200,24,48,235,209,136,168,147,172,145,132,243,194,2,238,19,95,160,156,167,93,148,181,183,141,181,237,99,238,16,184,231,77,247,112,170,134,104,239,0,144,77,225,238,183,4,68,156,111,48,187,34,96,50,79,84,6,244,92,118,28,12,0,41,227,187,3,72,157,25,48,1,44,207,146,58,227,166,156,135,174,215,219,112,128,152,136,56,232,133,99,205,20,136,32,213,2,224,110,56,247,53,49,165,194,181,22,159,55,162,164,86,62,54,133,3,60,70,140,53,32,123,229,32,113,236,63,97,109,1,146,45,17,61,66,187,57,221,173,188,73,78,203,27,63,5,94,70,214,86,170,7,225,241,20,100,56,137,206,128,151,158,70,232,44,158,74,117,82,211,4,4,147,121,105,26,67,198,95,221,145,157,209,124,233,33,20,166,141,71,221,132,225,113,181,130,14,248,217,128,212,232,94,38,204,238,74,249,205,89,253,52,226,95,30,14,99,213,112,231,82,157,194,248,160,222,148,209,64,37,215,133,150,17,100,6,237,182,230,98,129,194,85,244,43,29,108,135,223,51,187,177,106,243,175,81,67,111,77,62,218,149,218,114,177,51,134,224,82,158,86,200,117,9,166,169,244,65,200,59,97,60,103,194,100,6,222,63,37,221,20,177,121,124,162,198,159,61,125,54,213,217,189,58,222,142,0,88,34,161,169,136,166,50,142,8,105,26,117,65,198,28,169,243,244,208,211,204,136,178,42,242,107,72,179,166,219,87,180,221,145,127,199,32,130,78,29,134,135,231,32,56,44,147,61,80,150,59,6,44,84,177,217,136,11,3,147,190,96,227,134,209,59,81,64,225,238,253,95,107,131,246,187,24,47,43,111,104,147,101,128,172,238,54,177,110,150,199,106,47,227,89,140,214,147,138,180,184,255,206,143,6,178,165,3,15,64,255,89,0,247,246,119,249,164,119,191,22,7,153,198,241,40,147,220,218,31,166,14,193,228,158,237,105,177,243,107,255,106,252,139,174,213,198,81,229,120,228,139,109,195,118,224,187,55,195,195,209,243,124,129,40,4,100,195,82,149,172,173,225,50,184,214,111,87,29,219,242,229,139,203,8,133,67,235,225,108,69,2,177,227,198,154,103,71,60,221,179,124,45,20,120,177,193,200,21,145,224,81,7,90,115,96,119,114,66,3,4,132,140,155,59,224,72,24,67,239,99,99,106,113,171,152,206,134,175,64,112,168,54,172,82,107,231,137,123,30,230,61,22,192,87,16,88,110,116,243,232,88,4,110,238,26,67,215,225,224,130,241,187,25,170,69,184,90,171,162,178,251,148,96,14,194,41,95,190,201,16,179,178,85,200,24,170,181,183,193,140,253,122,5,67,10,7,14,152,224,17,69,225,81,192,105,239,127,142,123,181,150,159,172,103,109,120,101,38,234,182,174,147,206,68,125,76,222,204,178,76,206,202,242,91,200,115,65,134,128,247,155,231,226,27,205,67,221,242,12,126,129,133,125,109,30,234,245,107,38,22,55,139,246,5,242,80,147,32,209,158,206,251,22,19,81,19,27,56,68,37,239,84,93,146,91,222,63,247,33,118,145,87,137,159,118,60,248,46,176,88,17,228,213,139,46,140,113,224,133,200,102,244,204,103,111,179,135,58,20,169,77,73,197,106,111,158,61,76,92,183,191,77,217,83,115,146,155,107,48,154,21,69,190,50,13,95,210,238,179,124,29,227,54,94,111,116,240,200,141,46,115,82,214,21,22,206,199,194,208,219,182,51,95,204,107,95,42,59,93,237,235,217,3,93,246,254,49,164,10,210,12,15,205,132,225,97,196,27,175,23,233,17,185,255,206,2,80,31,245,58,18,119,11,243,94,57,115,119,177,181,224,137,95,108,249,89,6,235,215,185,27,0,14,200,143,187,246,53,5,247,21,1,68,75,152,53,160,107,126,135,204,145,29,30,252,58,89,199,40,201,236,117,59,216,25,89,105,50,214,255,250,210,202,241,26,168,85,42,193,90,146,107,122,239,123,189,198,71,196,108,163,223,102,133,5,1,150,104,44,10,208,76,161,161,67,82,141,196,26,203,195,131,160,247,176,239,124,91,129,32,177,207,115,143,97,210,57,85,114,8,61,242,172,5,145,99,8,44,34,137,52,216,55,101,187,135,87,181,52,6,223,180,201,90,182,177,3,242,164,180,109,46,157,134,56,202,150,51,70,71,121,89,10,177,109,197,206,217,38,133,143,71,245,111,80,243,57,204,1,53,127,108,68,78,127,46,77,126,45,249,181,56,64,20,93,161,128,192,254,31,22,116,24,208,70,243,205,11,163,27,117,249,126,133,209,119,126,172,234,208,195,134,211,179,42,119,230,224,93,96,6,97,163,150,4,85,79,162,135,194,55,4,53,39,104,164,91,53,216,157,64,185,26,96,16,197,143,139,226,254,251,29,220,97,189,96,0,70,9,29,131,12,32,35,25,118,101,162,15,38,117,146,134,172,2,33,198,200,103,153,22,134,72,6,222,160,36,131,205,188,216,177,177,17,225,225,27,232,122,161,163,141,8,118,42,188,2,46,191,246,65,145,213,10,191,250,22,20,248,217,208,179,153,173,146,76,23,43,47,29,4,179,226,128,211,197,58,232,213,138,214,211,47,248,80,241,89,142,37,99,130,52,49,2,67,101,15,229,33,181,145,187,130,153,119,223,9,136,10,163,224,82,188,71,35,214,110,232,32,241,2,227,180,218,114,53,73,224,197,48,49,123,38,130,99,227,207,150,95,101,183,17,184,83,89,102,73,129,13,208,105,124,102,244,92,194,185,142,149,184,90,173,96,69,53,178,95,230,51,120,138,173,85,182,166,8,87,171,17,87,139,159,30,222,127,3,92,109,158,190,115,181,191,75,169,62,72,214,58,192,8,74,34,255,14,22,199,157,3,50,132,148,183,67,0,239,177,220,72,170,199,200,15,206,62,138,105,107,182,145,2,71,96,60,10,0,144,46,4,201,79,216,71,132,1,40,28,145,50,142,104,166,231,39,41,149,178,157,31,26,18,224,26,16,13,114,23,72,53,16,201,137,131,89,171,128,16,116,154,209,191,15,160,24,232,211,32,11,140,106,68,98,139,119,128,81,74,32,185,82,63,212,106,44,133,233,206,136,158,151,14,225,247,61,247,5,190,149,121,121,97,189,174,186,221,128,245,33,105,157,223,219,196,0,138,89,86,72,152,36,231,246,97,221,149,77,207,108,139,33,181,110,103,35,61,208,120,210,64,143,15,0,192,45,236,32,82,86,235,0,140,20,181,4,33,205,142,53,85,2,213,14,154,165,33,198,165,21,218,38,208,192,241,253,3,46,223,29,210,243,76,35,138,111,156,8,111,120,82,86,246,241,244,128,70,142,76,99,198,34,16,86,146,103,206,19,213,35,238,230,62,10,188,232,210,71,1,82,34,35,163,142,15,29,153,167,230,225,43,26,215,239,0,51,17,233,37,112,247,54,248,154,61,24,21,221,230,10,21,146,108,173,156,149,131,12,2,176,179,100,14,217,5,210,254,9,143,181,245,108,215,144,0,157,80,36,130,20,3,145,7,123,212,88,232,172,243,1,84,185,143,72,92,130,240,241,195,130,76,205,212,247,157,54,91,200,224,58,252,76,179,128,198,213,0,160,122,201,236,200,29,29,167,65,26,138,111,62,1,238,97,84,71,29,151,23,224,196,242,240,49,149,27,57,209,50,130,168,177,234,139,45,0,194,62,233,250,97,115,57,227,45,200,78,82,212,75,221,31,232,180,97,54,139,59,68,167,189,236,194,169,74,236,145,5,162,92,158,76,174,251,190,111,208,72,49,16,28,96,67,173,102,86,106,13,94,60,106,238,232,13,27,146,193,58,150,51,91,207,26,132,146,23,31,226,215,230,147,216,41,69,166,248,19,48,118,230,194,164,48,11,132,12,213,25,10,241,235,52,131,140,101,230,99,135,12,111,161,238,199,198,7,244,48,160,153,48,207,68,147,90,4,1,11,204,115,197,254,217,12,89,1,100,32,105,20,154,5,180,46,112,8,120,228,189,191,34,77,173,102,85,244,160,58,97,241,20,224,138,72,172,14,50,14,109,151,102,14,36,244,71,3,47,2,88,8,151,7,201,226,215,2,192,235,170,218,73,178,164,74,72,113,130,76,36,237,132,66,17,209,248,161,41,172,131,187,203,249,93,135,215,27,64,84,42,185,46,113,92,251,128,193,80,57,99,41,220,118,78,67,119,62,0,198,204,68,34,25,137,253,87,196,45,238,176,19,140,204,1,186,131,119,100,82,174,100,142,52,4,164,100,7,133,114,216,145,135,16,0,81,56,200,42,237,244,124,38,11,206,173,135,229,192,53,181,204,77,109,0,130,113,19,9,230,133,2,18,236,133,54,45,219,69,210,31,114,26,47,64,146,185,28,3,194,70,3,42,3,129,10,185,162,126,56,160,180,74,123,152,221,3,88,222,26,192,174,120,30,243,150,73,88,140,98,16,152,16,88,175,18,228,169,65,214,197,12,168,90,128,110,253,5,46,133,204,12,98,135,72,250,197,4,27,18,230,129,115,137,242,48,123,195,214,184,124,60,74,85,0,168,206,152,222,209,112,208,198,54,110,60,195,45,58,142,64,41,0,146,193,182,101,139,196,7,78,233,138,119,20,89,126,232,255,38,187,224,248,117,31,83,237,168,116,48,6,210,241,224,16,158,89,64,108,104,68,178,49,228,10,219,110,97,10,78,138,13,210,31,39,234,152,41,37,216,102,16,46,7,4,22,199,164,74,186,85,119,210,43,29,107,40,210,22,121,5,43,216,202,130,34,179,217,50,233,196,67,59,83,34,148,197,58,100,133,137,29,14,178,27,250,161,102,149,0,35,178,152,43,73,210,206,130,141,221,235,162,163,94,87,130,65,216,95,38,158,52,64,220,54,94,57,213,253,181,225,61,78,154,25,138,41,107,95,58,241,151,143,168,171,109,18,153,1,222,228,146,84,182,2,65,226,96,100,6,144,6,88,245,2,113,32,16,63,188,140,18,8,50,128,150,74,108,218,81,36,178,90,163,19,164,34,105,43,144,201,202,208,107,103,1,5,226,29,44,110,234,91,207,180,87,36,197,153,201,54,19,52,64,16,194,23,162,219,9,234,240,161,205,2,114,1,99,185,48,121,168,0,129,147,93,0,137,240,44,103,185,43,54,75,251,108,108,222,112,232,56,157,134,247,20,162,38,132,118,31,70,92,161,107,7,135,173,13,34,126,140,82,196,250,68,36,17,73,34,16,83,34,113,38,144,122,34,225,40,144,161,132,96,237,30,4,138,158,211,253,2,13,113,71,219,207,37,169,141,40,242,68,36,59,36,232,158,228,35,67,48,12,35,162,194,12,235,160,18,128,204,2,105,181,215,47,247,48,124,28,2,97,86,0,34,64,32,78,80,164,35,42,175,171,7,249,166,2,110,234,89,46,242,101,244,122,176,115,90,146,119,160,9,204,139,0,145,160,16,137,19,124,60,146,107,173,104,235,29,141,29,102,232,116,253,151,228,35,16,162,22,179,97,163,8,38,74,224,13,243,138,126,85,170,181,219,159,216,134,226,12,38,131,200,204,2,65,65,244,66,84,165,117,70,65,186,116,144,132,21,204,120,243,142,69,108,149,190,128,98,235,49,37,34,57,203,102,128,80,95,82,106,101,250,83,1,68,210,35,74,52,28,83,60,220,165,27,167,100,35,230,2,104,128,153,42,48,164,153,101,133,188,192,144,145,4,144,80,131,41,201,72,6,177,73,202,116,34,138,126,243,27,189,78,221,171,9,128,110,145,3,153,137,28,161,21,202,116,49,10,214,148,162,238,209,86,205,32,89,83,152,102,39,251,52,137,129,139,236,51,128,1,238,230,123,200,90,179,7,173,30,2,148,213,74,109,161,110,232,21,200,110,104,173,14,50,11,64,102,113,47,245,76,106,253,64,214,201,67,137,79,0,99,42,60,228,31,184,172,12,197,232,28,130,104,179,3,185,35,243,20,157,162,166,153,179,253,10,179,88,177,122,82,208,246,205,39,144,207,215,49,112,178,129,188,145,219,27,194,3,107,121,96,83,15,44,239,177,125,158,58,44,118,216,218,138,20,24,155,2,89,18,119,33,77,145,133,126,31,235,221,167,203,75,36,161,155,125,129,40,174,148,190,134,15,101,220,99,1,123,189,112,5,109,223,215,16,182,27,42,23,129,30,223,240,136,171,39,227,136,216,208,61,121,27,205,197,183,173,20,205,228,139,37,18,166,69,198,6,168,117,97,240,23,8,142,164,27,211,140,5,206,91,242,157,121,205,25,224,118,142,9,244,86,59,128,64,71,28,109,234,252,127,218,240,20,153,166,140,245,234,82,124,52,98,102,40,138,42,97,149,233,6,149,0,87,41,110,85,47,132,123,67,164,37,33,205,162,208,76,16,139,219,247,6,221,208,63,105,214,253,122,163,176,204,131,83,1,90,113,120,214,214,46,99,127,139,140,116,35,225,149,92,155,41,50,186,27,171,23,112,171,100,40,65,153,218,100,205,2,238,27,233,189,195,16,24,45,65,132,86,170,254,31,52,102,121,65,35,144,70,176,121,213,35,10,27,161,133,173,211,254,177,38,164,222,99,56,213,184,143,79,168,214,87,127,131,2,29,34,243,160,58,178,108,12,72,132,194,171,156,109,16,92,37,177,111,32,209,4,98,143,146,141,2,217,73,11,87,106,165,32,199,255,133,49,200,234,49,129,178,19,57,181,2,207,23,26,141,34,179,146,54,60,149,96,72,228,26,242,130,117,44,128,71,130,58,154,7,35,3,162,178,48,210,22,56,51,164,25,130,26,150,50,32,106,45,35,82,68,66,85,69,91,25,171,109,214,116,149,100,121,19,10,171,20,38,150,128,207,98,106,66,214,240,208,142,180,142,1,15,208,194,105,146,64,119,30,72,77,37,40,61,148,83,87,2,63,36,152,254,188,33,109,227,203,104,104,240,236,220,180,210,44,102,67,187,54,238,28,32,61,93,239,97,90,149,20,140,163,8,47,141,44,29,133,133,57,209,217,10,215,147,54,37,22,206,249,133,129,34,237,38,8,190,91,97,220,169,222,161,73,19,223,148,92,47,99,97,119,52,172,209,181,220,124,89,70,152,171,119,212,106,59,162,2,233,87,6,157,85,50,112,241,234,246,163,200,35,216,225,219,48,124,177,123,149,253,172,124,30,59,176,82,134,178,133,63,7,170,80,222,190,92,233,42,113,63,233,194,48,108,252,73,16,162,226,66,88,116,178,64,21,255,66,36,53,138,146,225,91,48,248,170,137,141,45,242,241,71,54,66,105,24,219,1,203,248,16,8,36,81,95,120,133,104,99,152,160,29,24,121,73,134,101,227,83,134,209,28,227,248,31,176,75,72,56,88,212,34,216,236,96,35,7,122,82,199,103,148,3,196,38,121,203,234,185,124,41,134,8,82,94,96,100,138,72,29,202,164,53,211,70,162,233,139,140,178,168,23,210,127,208,26,233,130,197,92,48,139,11,119,217,70,162,181,101,64,72,77,6,253,137,200,27,200,205,45,27,219,56,91,170,159,86,187,69,50,52,253,32,142,95,200,112,255,130,26,201,9,82,171,17,128,110,252,74,191,68,0,15,233,152,121,30,148,49,144,72,141,188,80,55,121,76,37,128,13,159,136,35,162,222,136,17,90,58,120,93,5,66,188,69,80,126,38,38,65,246,195,197,172,123,44,172,77,32,205,57,105,15,229,65,34,64,85,70,198,152,175,30,193,244,44,192,114,9,92,129,177,221,148,149,32,229,120,195,11,219,73,69,191,158,25,196,84,42,215,33,110,53,22,71,246,129,3,42,88,78,31,90,244,3,195,191,238,158,220,24,72,122,168,177,113,179,13,26,35,16,248,77,172,67,34,114,91,132,222,13,236,145,24,73,16,69,16,232,67,13,128,81,174,74,169,98,106,161,130,94,157,41,203,153,137,188,37,201,90,155,92,68,131,30,47,24,205,18,122,89,249,200,116,82,6,136,22,153,31,181,129,146,41,227,36,188,152,64,68,170,209,175,238,109,162,145,229,212,169,34,197,2,72,107,4,245,197,203,138,94,162,12,228,78,45,157,198,242,171,8,105,32,226,36,181,185,116,121,109,51,187,153,36,52,48,142,176,201,29,164,188,26,189,24,143,102,120,67,208,63,106,28,33,1,200,59,85,34,207,11,85,12,98,9,119,211,186,30,99,16,24,164,102,151,96,103,97,167,77,180,82,16,234,242,114,172,199,226,218,82,46,135,197,204,249,202,117,161,60,30,129,231,39,240,15,5,94,164,67,122,235,27,5,99,228,70,42,98,40,21,112,110,167,234,134,3,75,8,6,239,2,11,83,81,45,143,44,231,147,177,174,95,90,224,1,96,99,29,124,60,68,20,51,113,17,87,161,53,176,162,103,225,13,249,177,171,129,216,45,76,99,82,116,54,180,124,88,142,171,217,114,196,182,145,173,95,242,126,28,31,233,67,94,1,4,37,49,84,34,81,203,164,42,94,21,189,214,160,28,4,252,221,109,40,232,229,128,209,181,161,55,76,221,251,221,168,182,130,145,83,33,240,22,20,7,177,103,38,146,21,66,150,30,185,252,35,103,4,142,130,88,150,182,73,78,198,98,233,108,154,129,221,211,209,104,79,200,3,91,134,214,215,65,159,47,248,59,48,7,139,20,118,99,34,15,149,103,253,129,120,192,83,105,160,199,233,235,67,57,136,244,52,31,31,163,196,250,72,170,86,210,119,224,14,210,254,34,218,71,235,84,138,118,59,198,138,32,94,196,7,149,192,252,218,113,232,97,67,109,71,84,2,33,149,20,201,171,122,94,33,12,245,198,72,193,140,20,81,202,186,149,209,234,153,185,11,180,5,43,164,34,24,167,179,69,223,183,215,198,9,35,92,189,3,245,8,130,128,202,206,49,70,234,26,40,173,134,157,37,45,208,253,79,31,243,44,122,66,248,160,122,180,16,94,115,215,10,126,108,2,64,35,1,53,4,150,132,200,212,96,172,17,184,0,202,102,225,87,50,90,111,191,47,193,246,197,187,172,22,161,225,100,83,149,218,205,193,188,199,7,53,50,23,196,86,133,200,250,224,173,20,17,138,251,125,142,177,33,192,153,14,65,235,54,101,120,25,164,181,178,24,11,118,151,232,2,153,189,102,198,214,228,205,53,181,163,120,195,43,161,172,219,147,144,205,14,161,27,131,16,4,154,109,53,189,206,66,49,186,201,227,130,39,70,150,155,112,195,92,119,126,76,209,184,235,98,64,163,37,84,243,40,146,84,0,140,183,232,48,89,9,182,10,136,21,54,20,81,250,46,84,129,184,251,1,209,221,202,224,2,166,187,164,169,151,138,112,251,133,11,75,8,234,144,72,59,193,117,199,198,218,78,73,154,150,124,92,28,47,63,229,96,93,194,213,139,22,217,236,68,176,91,193,158,70,27,175,208,154,220,47,44,169,232,18,254,74,21,0,172,142,69,155,137,139,150,22,15,11,20,79,175,159,170,149,187,67,107,103,245,109,196,109,233,131,229,142,15,172,61,214,225,217,247,247,80,253,197,135,80,105,52,171,98,150,238,197,197,21,71,86,28,253,22,5,201,117,136,215,70,205,29,2,108,173,193,239,63,116,190,87,98,43,107,192,162,172,113,222,92,161,205,48,150,219,184,101,235,47,226,154,187,186,250,54,239,11,52,219,82,118,79,253,3,22,17,241,145,64,64,241,82,12,76,190,141,188,199,37,55,105,111,189,64,183,16,149,61,198,7,7,195,159,157,11,117,188,122,235,128,164,219,181,122,63,152,5,10,64,102,101,153,114,113,170,81,48,171,178,244,132,182,32,49,21,5,167,250,254,103,237,121,103,27,3,106,26,67,248,202,149,51,157,69,246,181,182,9,104,27,48,70,58,21,82,16,134,28,72,68,2,146,73,173,187,59,253,30,195,22,163,192,70,111,33,9,140,13,129,65,194,57,142,157,107,25,87,101,25,75,247,98,118,242,56,94,101,42,18,207,162,226,93,186,204,24,68,197,176,105,28,30,52,99,167,3,84,164,12,196,40,39,171,238,251,160,239,69,114,219,147,138,9,81,158,75,102,54,7,153,172,154,145,95,103,252,96,103,168,74,249,209,129,223,126,210,15,154,216,247,164,31,211,231,37,253,24,73,164,56,8,130,185,122,25,82,28,6,161,44,140,194,101,212,77,195,200,202,55,62,250,225,102,175,196,168,43,15,11,205,182,99,82,254,233,92,141,120,12,249,28,97,125,162,100,142,172,63,35,189,193,2,223,228,156,91,177,8,191,250,135,222,187,5,250,80,3,16,162,18,229,153,124,54,37,143,59,159,227,32,66,66,158,217,30,206,59,232,219,63,154,219,123,63,154,127,247,162,214,229,169,85,37,244,191,31,46,26,229,119,104,4,157,191,255,242,213,126,249,14,125,51,232,151,163,176,36,8,104,10,91,41,35,250,175,152,252,124,43,111,213,113,125,171,142,247,168,227,178,95,116,92,191,96,207,97,130,251,207,152,242,211,153,230,223,217,113,121,151,208,183,39,224,255,56,191,124,135,190,57,171,250,2,47,78,240,253,182,217,8,225,15,171,53,221,173,153,163,94,91,113,162,203,159,175,170,119,27,47,21,111,225,203,24,95,87,105,232,167,130,188,41,211,253,5,9,187,87,223,75,124,237,18,248,235,250,189,196,55,84,162,76,143,246,246,123,137,239,37,222,172,196,23,83,12,151,47,165,51,188,86,89,89,67,141,52,207,111,212,241,213,140,203,250,5,123,126,43,93,120,125,43,93,152,157,73,239,4,187,202,85,199,243,23,236,249,120,163,41,111,95,170,227,39,181,255,230,179,108,113,1,141,82,53,159,100,139,98,93,21,9,147,98,249,185,98,229,97,177,230,219,157,31,22,91,158,43,182,126,211,197,118,95,108,110,18,206,54,138,221,215,253,8,138,53,241,85,248,77,9,58,108,215,148,26,19,58,70,185,249,123,185,223,126,185,20,224,75,19,68,146,46,151,131,114,237,206,98,30,229,90,0,69,128,92,45,42,166,150,81,110,121,178,220,250,219,44,87,159,44,183,60,89,110,125,92,110,123,178,220,254,100,185,227,183,94,238,161,141,235,177,201,136,227,203,90,204,215,139,214,166,244,225,56,142,117,173,115,58,255,74,107,191,245,249,33,149,178,148,124,108,101,93,58,232,22,192,162,170,28,197,220,114,218,62,236,120,95,247,109,171,53,67,199,117,47,199,249,185,205,123,217,243,232,218,67,163,234,55,121,157,178,62,238,252,156,200,190,110,235,182,108,163,201,116,118,176,148,101,62,146,204,218,128,194,154,55,234,117,125,147,41,211,140,223,106,163,231,215,218,51,159,71,78,91,181,98,10,166,135,179,93,234,82,246,61,237,203,49,83,146,161,116,228,99,173,91,201,235,118,156,11,201,243,245,208,168,58,15,187,60,179,212,123,89,206,109,90,203,46,120,147,247,229,196,154,57,29,203,150,230,177,207,1,52,170,78,9,195,202,195,213,126,227,190,207,85,155,183,181,148,4,45,222,215,183,30,216,226,45,2,134,181,159,95,244,207,199,21,111,168,167,103,120,247,39,142,115,173,243,154,230,37,143,163,146,150,101,91,150,53,47,101,174,243,64,49,7,140,42,207,244,184,239,19,100,100,62,21,177,185,100,181,199,121,174,231,25,93,150,42,168,237,96,97,221,30,65,219,114,31,62,196,173,37,213,117,62,177,38,115,123,121,43,101,95,143,253,196,35,236,216,67,131,218,252,36,96,11,115,125,183,107,125,30,143,178,33,7,72,39,101,60,214,180,30,243,204,196,225,22,66,131,218,252,204,249,163,9,127,46,82,58,106,203,49,134,247,183,0,31,78,117,61,242,182,149,186,38,152,214,182,207,39,24,88,134,5,4,213,40,23,237,61,176,241,97,159,101,205,117,83,93,230,19,65,243,249,131,224,152,5,248,90,148,18,48,63,69,156,183,147,212,207,203,62,159,88,33,157,250,205,11,64,81,221,126,177,181,37,119,127,151,11,124,148,115,225,82,6,113,229,236,227,156,211,73,109,247,89,230,113,1,140,234,143,59,188,175,244,157,94,34,227,117,19,247,140,84,165,158,194,200,50,215,12,252,249,220,128,188,108,57,213,10,104,177,28,57,157,92,101,67,238,179,175,105,217,207,98,85,182,145,174,169,180,244,90,175,21,93,56,173,206,19,235,190,174,101,219,211,182,102,38,119,125,179,143,163,110,75,58,54,145,174,66,96,84,95,242,233,61,26,121,195,212,116,30,145,45,45,9,246,61,159,8,93,142,130,184,116,1,140,234,207,156,234,228,120,185,247,123,144,117,153,183,125,63,69,168,92,225,144,205,233,196,173,179,197,179,55,16,192,202,94,115,222,87,69,176,151,125,59,119,46,167,173,242,246,142,75,188,105,56,194,223,229,228,175,183,254,56,231,147,204,206,123,88,84,187,231,141,255,181,144,213,213,228,4,6,249,9,138,118,206,224,46,42,239,72,71,78,218,156,242,188,226,228,13,40,172,201,233,39,159,234,183,164,117,169,69,8,66,62,181,150,101,7,126,172,1,97,149,103,59,219,203,93,27,203,73,36,143,19,93,231,122,34,115,81,226,180,129,133,53,247,247,56,193,227,164,64,181,156,188,77,142,192,125,199,242,137,137,139,224,230,45,132,70,213,159,222,201,199,168,167,171,127,205,96,23,29,132,241,253,235,251,215,175,246,197,38,191,191,223,209,254,86,62,216,253,85,254,238,47,17,21,252,230,155,54,190,138,250,154,213,87,253,38,191,22,245,101,93,134,255,112,95,10,39,63,203,34,79,23,218,115,187,246,254,42,142,56,110,4,62,97,141,58,106,170,71,218,10,88,110,239,178,72,170,165,204,235,140,214,101,15,13,235,115,146,165,103,58,223,78,233,103,223,183,245,88,196,242,119,182,115,234,93,57,161,77,202,3,195,218,156,243,233,41,211,208,146,106,218,15,101,231,74,231,108,150,117,211,66,137,7,134,181,235,135,237,174,10,143,255,245,109,184,155,32,248,127,219,3,205,247,133,5,57,69,54,107,57,242,208,151,151,228,25,84,152,247,99,173,168,219,191,6,15,84,229,103,145,224,33,230,242,49,250,177,49,57,123,130,254,236,133,180,94,112,176,159,159,254,244,105,42,137,202,165,105,62,155,75,235,52,255,126,90,254,229,231,255,253,203,95,127,186,67,127,192,159,251,255,207,66,191,187,3,182,86,80,87,255,183,31,63,253,229,195,159,127,250,248,241,151,31,218,63,127,249,241,231,63,126,252,175,31,238,229,255,233,252,179,181,138,229,28,94,202,212,81,155,200,191,252,252,233,47,127,253,219,135,95,62,126,252,244,225,63,63,126,250,248,207,63,255,241,223,63,125,252,239,222,249,239,168,100,43,242,183,63,125,250,215,159,62,254,225,199,159,254,227,199,95,254,250,227,31,126,250,211,15,231,79,77,254,252,159,159,63,245,127,182,185,166,220,170,157,95,95,94,230,101,110,251,245,174,218,238,212,229,187,185,106,251,16,89,143,141,109,209,89,34,244,245,62,188,243,139,243,203,120,84,111,164,8,146,119,43,224,43,233,31,41,227,35,103,136,28,117,187,161,154,175,215,203,63,51,245,33,144,155,175,124,83,141,223,76,207,55,61,174,91,48,114,234,225,6,253,223,96,0,250,87,83,159,43,240,159,37,3,87,127,112,67,158,70,54,225,13,121,129,193,37,121,234,122,194,91,242,13,246,205,95,147,223,231,119,118,118,191,181,131,56,146,252,29,144,135,102,60,34,117,239,158,242,188,114,222,156,169,112,50,158,121,228,89,226,204,215,133,11,140,199,35,15,42,65,213,228,5,146,42,9,39,247,126,28,90,95,185,72,126,210,145,113,112,225,244,58,248,121,47,194,89,130,8,180,143,54,70,2,70,126,35,141,147,93,30,35,232,162,157,248,137,159,11,72,114,92,71,82,113,170,79,55,168,240,141,181,181,31,228,145,191,179,39,77,149,231,116,15,122,165,36,143,239,214,228,54,82,240,208,43,6,43,62,237,181,55,64,53,223,242,251,209,155,88,22,221,232,14,111,173,245,50,61,17,226,202,47,217,141,20,58,125,215,32,195,34,229,106,58,36,83,208,218,171,200,67,29,195,89,116,95,162,214,96,161,162,212,48,126,183,182,240,121,14,90,193,93,32,61,242,13,19,42,211,2,238,22,51,198,179,193,149,103,37,185,148,198,179,201,136,146,29,125,51,103,198,228,79,124,80,105,89,204,146,208,163,36,7,190,177,84,105,77,124,181,49,234,142,104,252,228,9,35,24,30,163,246,103,86,127,69,41,149,116,165,171,182,131,17,208,46,230,172,135,208,66,95,205,75,101,115,135,65,194,79,122,208,0,159,117,202,195,71,55,95,204,40,93,47,161,90,234,104,55,244,126,149,94,162,235,152,69,205,179,141,31,211,157,81,182,209,140,9,224,251,137,205,144,137,122,31,171,193,137,14,213,48,147,71,163,16,211,52,50,94,96,44,57,80,23,201,193,213,19,155,101,76,50,185,98,33,238,11,22,68,15,166,241,126,57,93,238,228,193,169,244,199,22,4,162,156,249,189,246,62,253,89,78,21,83,239,158,169,140,90,175,106,162,89,79,107,156,111,217,106,24,99,179,180,120,122,130,36,199,81,36,79,176,142,241,51,13,191,208,126,200,67,233,208,231,198,111,119,67,135,27,160,89,231,8,5,183,84,13,49,77,158,50,43,210,157,101,171,55,198,177,89,102,65,229,45,53,226,115,178,3,75,145,78,26,43,233,14,232,134,0,91,235,249,149,137,202,72,200,129,60,101,179,164,61,146,130,157,11,42,41,175,99,229,183,47,230,145,248,250,93,204,155,62,83,204,43,156,208,28,19,63,115,128,196,64,229,225,180,30,103,190,240,195,136,124,64,72,64,99,51,75,79,211,55,104,106,65,81,141,178,216,247,50,83,247,148,247,22,122,147,253,28,75,194,178,241,42,107,134,113,241,139,160,164,104,169,167,109,204,172,90,177,189,141,186,95,136,201,152,137,244,169,195,70,217,9,213,97,235,249,165,39,147,118,140,203,97,222,177,205,30,181,247,143,21,180,21,3,41,230,33,117,109,176,234,42,123,42,61,130,52,88,120,7,117,89,157,179,24,75,14,115,124,194,173,203,6,3,217,10,52,218,104,239,200,237,218,223,21,32,85,66,80,145,0,73,42,240,67,113,21,170,151,145,166,19,24,118,161,23,238,88,188,73,238,201,132,158,170,29,82,158,39,126,57,136,17,52,241,139,159,155,192,241,17,123,121,92,128,49,126,60,43,100,222,24,184,161,156,37,32,56,154,51,46,99,209,77,8,55,34,253,10,158,65,224,156,241,42,113,123,7,97,206,121,204,44,95,224,36,101,149,49,189,154,161,22,142,69,218,108,83,234,217,128,254,242,4,8,113,244,8,156,26,148,89,236,27,191,107,139,175,18,36,110,28,223,103,174,176,43,4,42,210,22,13,176,51,252,62,129,68,26,222,58,233,149,196,105,168,131,144,100,243,225,33,144,241,236,43,64,102,42,180,89,80,113,245,10,22,242,175,132,141,92,204,197,65,102,129,116,64,157,20,130,210,136,94,166,126,42,15,179,61,244,193,130,224,162,133,107,10,107,126,189,49,110,251,168,41,100,66,140,213,14,95,12,236,0,44,185,64,189,0,63,35,36,118,152,30,156,7,127,106,252,209,242,199,47,58,164,225,97,142,15,61,210,134,144,124,104,10,83,100,189,129,230,40,42,165,104,216,5,149,179,132,208,146,202,66,234,255,216,52,74,231,171,54,191,67,68,183,98,222,191,226,105,80,79,37,3,18,222,255,244,76,216,45,95,23,37,117,246,152,27,210,3,79,54,60,113,9,41,144,39,83,49,41,51,72,23,225,102,128,195,22,209,245,216,99,18,227,78,120,72,4,12,161,8,168,73,68,114,2,186,20,80,47,79,226,44,137,41,253,213,143,62,177,248,85,2,68,32,171,55,59,30,173,121,184,230,241,29,251,40,169,253,46,16,170,192,200,38,47,239,116,44,195,141,234,21,248,77,191,69,64,6,167,113,204,173,221,38,125,237,109,76,42,119,173,157,38,140,99,30,9,232,33,106,255,54,15,26,58,143,21,31,62,202,162,30,2,213,67,143,166,6,61,246,205,104,194,248,177,203,150,184,97,186,211,58,227,179,102,125,11,232,117,52,56,54,242,158,42,237,85,85,135,23,207,179,63,239,138,28,56,138,209,214,166,171,242,173,247,35,182,142,169,97,246,70,186,148,63,140,42,228,98,38,123,8,173,234,138,20,155,140,0,99,28,137,203,12,1,141,84,149,149,9,213,6,45,198,179,87,11,228,150,79,141,186,85,105,102,135,126,117,61,193,68,159,82,71,104,202,74,29,17,24,232,35,107,144,164,252,62,203,111,95,243,143,83,71,78,239,71,243,255,187,23,181,164,167,86,181,188,171,48,178,119,240,245,229,112,108,11,113,44,191,26,201,202,107,227,16,195,252,36,159,209,241,87,141,67,124,62,130,240,249,200,60,157,227,233,248,58,95,207,156,245,242,92,248,208,204,172,230,241,173,196,163,30,199,146,213,101,139,99,93,246,61,207,21,47,91,4,48,91,181,142,136,130,135,157,238,41,45,235,182,22,137,207,186,51,233,251,253,169,52,215,21,239,18,135,192,160,62,9,33,79,220,35,91,150,185,20,188,179,93,142,82,207,14,142,130,215,197,67,160,169,219,31,45,88,158,88,228,179,206,249,255,29,239,128,159,178,221,190,172,123,86,119,45,3,80,80,119,161,39,230,247,199,209,125,111,49,217,115,115,106,94,18,102,2,120,221,214,170,218,99,99,159,8,101,172,199,118,236,230,110,226,107,176,217,212,174,19,249,178,94,21,186,231,206,222,183,102,153,167,87,126,134,170,196,250,74,66,163,5,131,240,221,67,134,129,1,164,43,83,240,206,88,225,212,7,213,214,219,148,202,204,176,33,25,39,126,152,114,133,193,240,251,232,32,76,67,44,197,176,140,130,254,168,174,216,116,169,156,30,49,6,8,197,95,129,57,172,10,128,213,20,86,159,18,203,251,160,124,80,200,6,223,162,207,118,65,97,137,159,213,155,194,81,17,100,0,220,183,169,210,53,186,138,122,38,105,15,242,214,108,219,62,246,69,247,153,44,106,185,38,21,125,67,75,74,111,197,37,10,206,65,163,233,174,91,184,101,214,147,236,130,44,96,19,30,32,84,243,72,143,45,0,121,97,101,193,6,7,206,121,179,57,110,247,96,107,213,182,123,204,232,74,247,120,254,73,144,104,25,221,179,39,72,102,95,120,69,193,202,114,76,226,41,110,0,90,49,213,126,143,208,232,243,91,229,205,43,66,238,69,89,148,22,241,197,39,14,237,233,45,151,73,133,249,140,95,215,1,200,70,71,213,125,54,104,203,41,85,250,94,149,75,99,132,155,248,166,251,46,20,23,196,1,86,100,91,216,216,0,120,180,15,208,149,115,255,25,40,194,33,16,198,170,13,30,226,35,132,89,135,145,135,62,129,140,205,6,91,67,180,115,200,169,48,152,176,106,151,182,233,66,189,16,34,70,186,85,187,59,199,170,250,117,142,247,194,109,151,219,80,142,31,216,236,183,32,87,165,173,202,180,33,214,125,35,195,86,152,25,35,175,222,231,118,146,26,249,184,119,178,98,108,1,162,134,163,65,157,4,173,2,96,84,179,199,193,141,40,24,51,204,202,78,24,214,34,94,44,88,77,119,120,252,217,50,135,207,239,96,180,201,1,34,8,178,196,184,100,168,165,163,168,138,232,122,154,172,72,54,176,60,120,214,82,17,125,205,19,28,219,184,255,105,156,106,109,134,196,253,213,47,105,117,74,48,105,159,54,129,192,134,180,9,140,139,109,191,5,19,210,65,93,190,95,19,210,123,23,81,201,193,133,110,174,102,46,221,208,42,74,143,7,75,104,21,197,104,236,72,206,114,175,38,193,36,149,218,105,31,237,252,9,105,25,0,113,135,176,251,75,154,236,3,147,42,36,93,88,130,53,15,111,68,166,16,56,226,223,36,226,176,59,130,105,202,204,76,110,215,29,12,191,130,44,6,174,206,50,206,102,244,238,29,210,228,170,41,72,183,156,51,207,107,157,47,138,98,59,62,64,146,15,115,243,204,166,235,34,31,155,216,177,7,68,66,235,24,210,89,85,167,218,64,179,218,167,254,2,2,72,146,0,255,150,136,11,176,174,144,12,93,78,72,98,105,213,192,240,78,144,69,32,236,84,32,121,130,214,217,252,94,136,218,179,127,245,144,21,40,10,130,126,138,190,206,44,140,246,104,93,39,245,68,242,118,143,123,210,252,101,176,151,33,128,246,141,83,24,44,175,115,15,126,14,46,31,64,132,214,229,51,142,39,139,228,44,116,199,205,94,245,108,198,166,70,238,38,134,51,119,203,162,87,173,248,165,13,214,94,111,142,222,47,70,171,27,207,3,223,190,212,178,34,65,76,19,128,102,134,116,69,231,23,206,184,167,1,142,68,40,2,162,200,139,167,64,74,52,247,66,28,208,173,85,161,46,127,155,221,82,178,20,30,113,71,1,20,125,240,36,132,200,186,61,130,254,152,170,163,236,78,186,162,3,253,248,44,26,64,145,34,27,238,16,244,10,244,210,253,173,81,222,173,71,239,7,69,166,14,17,130,120,175,178,179,154,92,229,131,198,69,87,70,144,178,79,66,15,167,225,251,235,99,191,141,33,8,238,245,5,69,29,218,96,163,66,216,0,161,35,132,15,73,218,37,73,92,204,14,70,123,170,55,192,109,145,219,68,67,236,13,39,64,70,17,241,17,228,51,49,47,114,184,172,118,247,254,167,54,94,122,71,128,237,51,66,56,217,21,250,178,184,187,251,151,99,27,126,124,251,242,238,247,59,113,127,183,188,219,196,210,69,29,171,169,9,170,114,199,101,128,70,166,173,34,55,81,38,177,121,158,48,162,149,5,190,64,219,29,32,58,244,208,70,39,73,108,149,229,15,16,234,246,62,78,52,41,76,202,254,75,244,224,6,218,126,127,193,249,6,234,230,24,234,130,138,51,172,65,39,202,237,168,246,60,232,234,88,34,153,230,43,129,192,217,54,3,225,32,110,144,22,56,87,92,21,80,29,215,110,119,1,113,192,58,180,85,17,212,37,233,93,85,28,37,36,126,237,254,13,65,78,20,168,179,64,164,9,79,227,197,49,51,136,177,164,200,117,71,77,217,56,23,94,95,125,14,215,194,155,114,116,7,114,92,67,43,35,148,8,237,253,7,173,17,67,232,210,36,172,26,7,205,47,202,117,64,16,40,148,29,200,212,226,152,54,96,111,116,141,74,34,209,40,88,140,37,131,62,150,105,176,98,189,14,179,91,172,129,42,30,194,34,10,71,161,203,90,245,216,240,60,184,60,139,238,125,55,251,45,171,217,161,76,181,27,169,228,224,67,122,234,69,178,180,213,1,197,124,83,140,207,42,5,58,64,132,64,114,208,106,121,110,30,91,55,203,80,192,87,193,24,75,255,25,44,150,35,169,122,135,35,83,133,204,160,74,27,178,254,224,97,161,43,106,130,133,117,144,156,1,192,149,78,128,13,224,72,224,13,21,42,209,109,132,128,144,178,59,4,160,193,10,178,115,40,27,66,104,188,5,32,26,48,60,3,2,32,47,18,64,50,44,91,23,108,54,93,38,81,136,150,72,62,235,88,184,78,144,235,64,136,33,246,203,143,74,176,231,159,65,39,166,45,22,192,50,41,51,107,15,139,19,60,234,137,10,192,132,210,17,92,66,117,187,240,8,14,55,146,233,101,252,164,212,217,59,211,253,194,229,136,93,19,235,69,29,88,73,60,224,128,89,232,29,79,125,35,40,167,163,200,180,243,224,40,176,129,217,130,248,48,87,20,176,97,251,101,123,110,5,45,173,20,134,135,82,57,95,245,41,210,54,217,102,14,59,38,12,167,158,135,140,93,5,196,118,99,40,197,49,220,66,104,43,167,245,83,48,38,175,80,21,215,166,129,187,205,167,246,191,219,120,125,16,115,184,126,1,29,183,196,62,98,9,142,113,4,220,197,179,160,128,79,121,102,22,114,60,207,22,45,231,132,101,46,130,75,184,110,121,236,139,243,18,227,53,91,141,43,33,62,5,104,167,23,183,81,180,246,206,119,73,47,27,84,50,114,158,2,160,128,93,121,158,230,57,152,84,83,172,80,177,73,197,64,3,6,27,241,96,199,167,35,86,238,25,254,16,20,209,41,188,121,208,106,65,73,134,32,123,213,135,105,60,212,55,48,210,246,2,187,93,75,201,152,96,22,188,19,66,202,223,52,70,189,18,219,29,92,146,156,56,149,149,94,244,4,47,144,244,160,87,163,160,220,42,37,58,245,157,199,55,118,216,143,230,196,222,77,198,175,105,184,68,105,153,155,159,141,206,15,185,197,228,56,144,169,90,4,131,91,103,9,114,205,186,151,157,21,153,162,129,30,0,34,227,157,236,232,42,84,189,232,145,182,177,61,182,25,6,58,141,23,250,189,102,144,7,209,145,50,129,66,225,148,14,6,152,34,114,44,46,15,28,164,213,112,136,100,48,205,163,98,128,175,17,86,135,184,31,156,16,163,1,237,221,13,223,47,61,196,65,235,209,10,6,235,229,23,21,171,165,120,77,175,117,189,112,35,150,49,192,151,93,17,161,162,69,108,184,14,0,221,134,202,3,64,136,153,22,11,1,158,194,70,172,53,0,141,109,167,181,46,14,48,102,53,17,63,24,31,112,33,135,111,177,36,116,78,101,2,169,244,6,182,88,230,155,108,135,221,113,40,68,204,51,163,73,143,33,142,233,232,203,147,86,70,9,4,25,47,238,120,78,24,176,75,195,84,3,165,215,168,197,180,63,30,164,118,190,85,236,247,50,90,179,123,44,192,40,228,232,36,149,46,198,173,64,200,110,146,147,129,31,55,201,76,190,121,66,66,171,25,82,236,208,100,43,42,95,107,219,167,107,20,116,88,10,67,77,50,184,4,37,172,130,233,52,35,167,59,121,245,170,160,201,93,0,25,1,179,110,117,92,145,47,163,27,188,46,197,92,9,45,29,4,89,39,156,63,92,105,99,128,20,0,61,6,120,98,159,61,93,168,115,71,197,31,40,123,228,184,118,159,34,21,6,155,20,221,19,205,170,188,54,39,115,117,185,85,154,13,132,135,36,1,44,55,181,86,134,140,72,108,96,213,203,225,17,38,121,114,148,156,229,39,217,189,36,51,186,35,89,157,86,239,186,149,81,37,235,70,146,51,221,201,94,184,253,111,181,52,189,21,77,219,238,245,37,190,232,6,199,198,123,74,151,49,15,22,204,88,109,141,238,116,212,193,216,26,219,202,184,18,102,65,73,73,242,124,207,181,60,172,135,196,88,77,131,180,43,14,17,24,210,211,120,65,67,168,115,29,72,134,48,106,18,65,94,17,140,20,198,80,175,196,113,224,208,210,7,51,33,195,90,188,190,42,136,47,144,29,123,154,148,205,197,216,100,88,128,254,128,179,159,134,177,67,21,201,118,252,190,107,185,34,63,174,116,2,63,235,88,58,91,128,72,67,147,34,139,104,220,154,2,58,202,102,31,137,150,52,22,157,192,234,195,72,228,32,217,225,169,135,20,107,92,45,22,35,193,248,53,246,235,97,179,64,43,212,138,113,206,44,0,100,205,39,232,50,184,72,138,126,1,123,237,86,173,63,173,89,69,208,243,236,155,176,114,140,144,249,181,98,36,142,75,58,78,98,89,141,227,69,220,42,67,176,223,174,239,105,180,165,72,131,177,18,94,31,180,10,156,87,241,102,142,57,168,3,208,43,30,227,219,90,127,157,129,88,153,144,189,133,25,135,77,86,82,51,204,145,190,100,3,8,216,213,34,195,155,152,229,8,177,192,110,231,237,122,202,236,87,100,103,32,74,57,99,232,109,164,63,90,21,51,80,67,213,204,24,119,173,32,112,51,60,15,100,184,43,209,94,136,124,192,109,61,75,30,153,2,240,74,248,162,241,177,48,251,187,102,184,158,39,59,182,45,233,143,4,226,196,155,9,132,31,88,143,52,189,36,150,128,10,228,245,164,75,93,10,69,151,75,113,216,54,156,192,77,113,185,186,148,209,113,98,218,154,224,132,144,121,219,10,73,15,100,141,73,248,152,19,109,177,15,145,231,242,11,242,179,225,11,134,232,5,244,220,114,158,196,114,125,81,77,148,184,65,71,100,185,182,9,200,205,96,25,143,100,159,53,228,239,40,232,4,82,141,23,153,84,211,36,58,56,249,72,238,83,192,25,118,178,79,40,153,4,118,241,72,129,117,122,238,165,50,156,180,123,7,134,74,38,205,46,111,160,209,203,138,66,94,222,8,132,146,64,112,129,150,147,140,8,4,196,205,54,226,164,22,207,180,61,99,119,188,223,73,7,145,19,171,3,220,218,104,144,243,152,69,18,158,89,27,39,41,202,180,67,93,98,241,159,73,153,6,38,207,205,69,132,180,202,136,214,37,242,164,142,193,200,59,99,206,166,202,191,212,1,70,140,247,71,224,129,185,38,48,234,188,96,251,1,170,62,105,26,110,149,83,56,120,129,223,209,34,203,21,49,66,1,32,144,82,35,7,166,244,213,126,106,132,188,91,237,230,56,35,78,164,126,123,30,22,106,167,138,53,122,238,233,57,108,39,101,155,5,28,186,10,82,125,103,242,48,100,223,147,89,79,136,157,56,108,4,102,102,191,58,112,57,105,141,67,221,62,116,230,9,181,134,105,180,11,85,108,242,160,44,24,34,163,86,191,115,174,44,62,120,3,178,195,140,1,73,161,203,251,159,139,248,55,52,194,161,149,237,94,123,25,186,234,232,116,100,225,6,63,242,144,215,104,210,129,30,96,201,130,53,232,162,36,96,133,5,143,21,14,109,60,102,89,249,206,203,128,145,180,227,37,162,192,138,136,166,198,208,22,137,203,40,129,249,24,75,129,209,22,65,48,134,141,213,80,161,28,16,230,33,171,33,81,32,61,16,210,220,110,16,175,64,228,239,151,157,236,128,190,245,67,236,153,76,68,129,9,56,176,17,9,68,132,170,21,138,103,240,212,201,122,144,201,80,83,115,71,239,29,63,112,7,212,41,189,147,62,209,70,116,243,102,133,128,133,59,54,111,4,1,47,113,120,169,164,242,33,5,211,209,172,81,147,253,207,40,137,129,49,41,0,153,254,110,129,24,164,5,182,64,172,187,48,142,37,21,38,97,133,79,47,160,226,214,53,96,11,81,200,219,253,4,205,113,42,175,32,228,135,208,17,146,127,174,99,128,253,76,114,244,50,248,39,110,43,39,195,162,54,142,73,68,81,114,173,46,176,74,124,48,171,50,73,185,88,148,32,42,227,133,224,141,236,247,250,202,42,248,226,118,123,156,240,120,19,224,214,20,219,220,164,200,132,66,151,94,249,70,76,250,110,189,148,33,207,122,193,23,190,203,56,168,23,185,24,57,198,148,98,228,33,188,124,166,230,200,251,45,247,185,172,119,92,25,21,188,209,65,217,36,138,172,6,90,45,12,121,115,4,48,8,205,179,246,27,111,225,49,38,160,40,16,0,70,57,69,84,217,5,239,33,153,198,226,162,205,106,231,207,98,33,154,169,32,145,237,196,15,238,196,251,32,53,99,243,180,70,81,53,128,46,21,90,170,30,132,162,153,96,53,93,167,225,70,11,99,202,169,17,134,190,222,62,112,70,182,17,229,34,76,233,171,229,30,148,139,46,68,39,35,90,89,217,203,72,74,71,67,221,118,65,62,95,8,201,110,63,93,184,102,20,208,57,233,136,79,19,18,234,48,51,192,93,141,52,48,6,241,25,97,224,150,223,51,23,79,136,33,135,157,156,132,33,137,121,252,140,225,140,18,234,40,108,123,30,161,128,10,5,113,112,173,247,171,156,143,79,93,200,232,36,64,221,199,88,163,87,138,246,32,135,221,238,46,32,191,243,187,3,146,176,81,142,231,74,16,148,3,137,65,130,36,183,155,189,91,198,22,220,20,42,16,169,5,136,74,203,145,59,64,101,95,21,241,188,127,147,98,166,35,187,129,222,76,131,252,119,212,204,19,24,47,26,132,167,36,52,19,167,45,196,34,186,213,245,69,111,241,204,254,210,250,252,45,230,97,231,48,65,52,66,145,224,4,82,238,76,242,21,186,182,58,76,93,197,238,178,211,142,87,3,23,2,1,94,236,195,93,64,151,157,119,186,69,218,133,82,102,235,20,4,85,137,246,8,190,17,29,36,210,51,80,131,204,0,179,30,141,200,57,201,90,80,56,115,55,224,62,177,9,74,81,213,229,88,123,249,88,91,61,230,14,129,107,223,116,45,167,106,136,182,255,3,217,20,214,126,75,64,196,249,66,179,43,2,166,225,68,101,64,201,101,215,192,0,144,38,190,59,128,212,153,1,19,192,194,42,153,52,110,202,247,232,122,189,13,23,135,9,144,131,94,56,244,76,129,8,82,45,0,174,138,115,95,19,83,42,92,107,241,113,35,74,106,205,99,83,56,192,99,196,216,2,178,49,14,18,199,30,18,86,21,32,247,18,209,35,180,15,211,85,203,155,100,29,190,241,235,236,101,228,213,166,122,16,45,79,49,135,147,40,12,120,7,106,68,210,226,169,84,39,53,77,64,48,153,151,166,49,100,252,213,29,217,25,205,150,30,66,81,219,120,212,77,84,30,87,43,232,112,159,13,72,141,238,101,194,236,110,152,223,156,189,79,35,254,229,225,48,38,13,119,46,213,41,140,15,234,77,89,12,84,250,115,104,25,65,102,208,110,107,46,22,40,92,69,191,210,193,118,248,61,179,27,171,54,255,26,53,244,214,228,163,221,176,45,23,59,99,8,46,101,210,134,108,196,96,151,74,31,132,188,19,198,115,174,98,102,224,253,83,178,79,17,155,199,71,196,252,217,211,103,83,157,221,171,227,237,8,128,37,18,154,138,104,42,227,136,144,166,81,23,100,204,145,58,79,15,61,205,140,40,171,34,191,134,52,107,186,125,69,219,29,249,119,12,34,232,212,97,120,120,14,130,195,50,217,3,101,185,99,192,66,21,155,141,184,48,48,233,11,54,110,24,189,19,5,20,238,222,255,181,54,104,191,154,241,178,242,134,6,89,6,200,234,110,19,235,102,121,172,246,50,30,46,106,61,169,88,138,251,239,252,172,43,155,57,240,0,244,159,5,112,111,127,151,79,122,153,113,113,144,105,28,143,50,201,37,254,97,231,16,76,238,201,159,22,59,191,246,175,198,191,232,150,109,28,100,142,71,190,216,54,108,7,190,123,51,60,28,61,207,23,136,66,64,54,44,85,201,218,20,46,131,107,253,118,213,177,45,95,190,184,155,80,56,210,30,206,86,36,16,59,110,172,121,118,196,211,61,203,215,66,129,23,27,140,92,17,9,30,117,160,53,199,121,39,39,52,64,200,199,184,200,3,94,132,49,244,62,54,166,22,183,138,217,109,248,70,4,71,110,195,42,181,118,158,184,246,97,94,204,2,124,5,129,229,70,23,145,142,69,224,230,234,49,116,29,14,46,24,191,155,161,90,132,171,181,42,42,217,79,9,230,32,156,242,229,139,13,49,43,91,133,140,161,90,123,27,204,216,175,87,48,164,112,224,128,9,30,81,20,30,5,156,246,254,167,101,42,107,89,252,242,138,71,255,201,183,2,218,186,78,250,173,128,99,242,102,150,101,114,86,150,223,66,218,11,50,4,188,223,180,23,223,95,10,120,163,175,47,135,99,107,136,99,249,213,72,86,94,249,82,192,17,63,131,241,250,142,191,191,20,240,198,47,5,144,124,217,222,188,125,152,95,61,215,249,216,243,49,207,203,193,233,233,115,217,202,54,47,203,177,108,73,82,249,167,125,94,246,109,173,107,229,92,234,167,160,147,210,89,42,29,101,219,56,187,61,241,226,246,18,239,163,206,215,229,172,153,75,77,144,27,255,100,72,235,154,83,78,91,45,242,126,65,94,183,115,36,107,41,105,12,169,165,119,47,41,175,107,202,156,11,159,124,169,199,135,252,56,125,255,188,47,251,90,203,178,141,236,248,243,118,142,104,62,102,157,210,191,44,39,252,168,243,174,50,203,159,32,147,93,159,228,146,187,253,243,65,223,251,125,200,103,199,115,25,83,60,89,250,113,28,103,23,53,151,156,142,145,233,126,158,183,53,157,115,222,207,191,32,139,255,177,173,186,62,123,179,247,103,150,253,28,116,157,231,125,222,118,78,200,255,234,185,231,19,56,48,134,47,158,238,79,188,212,112,110,121,206,251,186,152,29,175,203,182,100,245,112,196,185,225,101,219,247,180,11,94,158,35,201,91,206,176,103,119,79,121,223,240,244,249,168,190,239,123,222,101,50,175,194,244,222,121,121,229,115,2,254,128,126,91,201,171,72,124,63,196,148,218,165,113,201,81,124,255,220,135,186,76,161,0,252,104,250,193,41,29,196,250,43,47,204,117,37,154,67,229,68,167,62,232,202,67,107,179,199,167,21,169,77,185,33,235,216,143,22,22,192,117,251,171,239,61,195,50,197,38,12,5,97,69,85,253,14,32,241,124,247,201,26,143,113,169,186,55,58,116,155,141,238,228,83,242,44,54,170,140,133,217,63,160,82,212,163,17,110,42,201,104,237,235,217,67,19,247,254,49,180,65,178,232,29,90,121,130,39,199,111,188,94,100,255,201,253,119,86,92,251,168,215,241,254,130,40,93,43,63,192,80,108,173,202,81,221,186,229,103,21,35,191,206,221,112,123,64,154,243,181,175,41,196,28,16,96,25,144,89,3,186,197,238,144,57,178,163,154,223,253,237,24,37,9,26,111,7,71,144,84,154,140,13,154,121,105,229,120,13,212,42,149,96,45,41,158,104,239,123,189,198,71,196,108,163,223,102,133,5,1,150,104,44,10,208,76,161,161,67,82,141,196,26,203,195,131,160,247,176,239,124,91,129,32,63,219,83,234,35,159,83,165,63,230,110,171,211,10,228,49,20,77,209,32,27,236,155,242,185,210,174,51,214,36,206,99,59,190,187,159,66,92,105,68,243,208,1,192,177,45,210,220,42,144,113,51,200,100,64,82,113,239,108,245,197,91,183,209,59,200,92,14,2,120,200,218,176,171,9,220,100,52,108,255,86,227,51,158,134,210,12,20,77,141,120,29,178,244,1,105,92,249,144,29,170,36,121,58,157,139,221,65,223,186,173,225,20,108,167,119,110,107,120,231,167,175,14,51,219,136,105,169,42,90,101,176,56,176,114,243,193,144,123,103,147,152,25,225,27,174,174,37,104,164,27,173,217,91,76,153,121,96,16,197,143,139,174,47,245,4,16,227,216,50,0,35,64,143,113,4,145,223,12,183,33,157,77,147,40,79,67,86,129,16,255,228,112,84,90,24,114,233,225,133,120,146,148,231,197,142,141,109,196,45,79,141,252,21,221,36,216,205,26,217,141,8,118,42,76,248,33,191,2,165,156,213,87,223,130,2,63,79,66,72,139,236,143,208,229,202,75,7,23,21,112,192,233,98,29,244,106,69,235,233,23,124,88,112,89,220,37,91,177,52,49,130,254,101,15,229,37,227,145,169,136,121,124,223,9,136,248,165,139,3,120,29,80,156,153,208,65,226,5,198,105,181,229,106,2,195,139,33,192,246,76,4,199,198,159,45,191,202,110,35,112,167,178,204,146,226,214,160,211,248,204,232,185,132,115,29,43,113,181,90,193,138,106,100,191,204,94,243,20,83,171,108,44,23,158,70,184,172,153,26,77,69,113,181,242,155,224,106,243,244,157,171,253,93,186,247,65,78,229,3,124,92,164,25,236,224,80,218,57,222,78,72,121,59,4,240,250,214,141,132,127,12,236,227,92,211,152,164,108,27,9,207,4,198,163,0,0,169,76,144,234,138,229,76,140,47,36,61,77,30,244,202,244,34,60,37,206,183,243,67,123,3,220,238,164,65,238,2,169,6,34,25,208,48,71,33,16,130,78,51,250,247,1,20,3,93,214,100,168,81,141,200,189,145,29,96,148,0,78,50,164,12,237,27,75,97,114,75,162,231,165,67,10,247,186,192,183,242,30,46,172,254,85,183,27,176,62,116,129,138,31,188,199,248,184,89,86,72,152,36,103,114,99,21,151,61,139,108,178,33,237,111,103,31,44,208,120,82,84,143,15,0,192,45,236,32,210,105,235,0,140,132,228,4,33,5,144,21,90,2,213,14,154,165,33,198,165,21,218,38,208,192,241,253,3,46,223,29,210,95,21,64,20,223,56,237,233,112,148,175,236,194,239,241,234,28,120,204,140,69,32,172,75,207,156,21,176,7,84,207,125,20,120,137,177,143,2,164,68,52,17,23,89,125,201,34,194,161,0,227,70,52,96,38,34,189,92,202,184,13,190,102,15,6,92,95,50,168,144,100,107,229,172,28,100,55,128,157,37,171,201,46,144,246,79,120,154,179,191,109,0,207,93,16,138,68,144,98,32,242,60,155,26,11,157,117,62,128,42,211,29,137,75,112,53,232,176,32,83,51,245,125,167,205,22,50,184,142,48,130,89,64,227,218,23,80,189,100,118,228,142,142,211,32,13,197,55,159,0,247,48,104,175,142,139,105,112,98,121,248,152,184,147,98,36,50,130,168,177,234,139,45,0,194,62,233,86,121,139,40,194,203,237,157,164,64,208,22,229,77,201,160,34,80,212,130,78,114,220,133,83,149,167,41,11,68,69,180,48,185,238,251,190,65,35,197,64,112,128,13,181,154,245,169,53,152,227,11,201,142,222,176,189,25,140,104,57,179,145,173,65,40,85,253,33,97,75,124,18,59,165,200,20,94,8,54,209,92,152,20,102,129,144,61,59,67,33,126,139,108,144,177,204,124,236,144,225,45,212,253,216,248,128,30,6,52,19,230,153,104,82,139,32,96,129,121,174,216,63,91,43,43,128,12,36,141,66,179,128,214,5,14,1,143,188,247,87,164,169,213,172,138,30,84,39,44,158,2,92,17,137,213,65,198,161,237,210,204,129,132,254,104,224,69,0,11,225,242,32,89,252,54,12,4,213,168,118,250,161,200,124,199,64,236,99,164,64,136,196,79,59,130,167,245,160,104,180,1,216,89,243,12,32,0,162,136,182,85,218,233,73,151,32,186,44,81,100,33,24,240,50,55,181,1,8,198,173,45,254,248,202,84,26,92,68,34,212,137,239,87,68,42,37,166,57,81,46,146,247,66,177,144,184,220,88,185,117,200,55,66,193,214,17,214,5,32,42,149,92,151,56,174,125,192,96,168,156,161,59,225,10,226,66,16,13,230,114,64,131,189,212,166,133,187,72,252,67,86,227,37,72,50,171,99,192,239,104,64,101,82,81,33,181,212,15,95,24,168,210,30,230,103,2,158,183,6,176,43,166,199,204,101,18,30,163,56,4,230,127,215,171,68,11,103,121,23,115,160,106,1,186,245,23,216,20,114,51,136,13,37,241,23,19,5,73,24,31,206,37,74,187,239,45,91,35,179,196,40,85,1,160,58,99,130,71,195,65,35,219,72,103,1,87,164,57,194,176,0,72,6,155,166,18,203,15,156,193,27,47,160,179,0,209,255,77,134,193,241,235,62,166,218,81,233,96,12,36,220,231,16,205,89,64,108,105,196,83,51,4,11,219,110,97,18,78,154,13,30,63,39,235,152,41,37,216,102,144,46,7,4,22,199,36,187,187,85,71,6,43,209,60,40,210,22,121,5,51,216,202,146,34,243,217,50,233,212,113,59,147,105,20,198,58,100,133,137,29,14,178,27,226,170,102,149,0,35,178,216,43,73,212,206,130,141,221,239,168,111,53,172,4,131,176,238,76,76,105,128,184,109,204,39,160,251,107,195,123,156,35,57,148,83,214,190,116,226,87,31,81,181,219,36,66,3,60,193,40,153,203,5,130,196,193,8,13,32,14,176,238,5,242,64,32,127,120,33,37,144,100,0,45,149,220,180,163,76,100,213,70,39,73,69,226,86,32,148,149,161,216,206,2,10,228,59,88,220,212,183,158,105,175,136,138,51,147,109,38,104,128,32,132,47,68,183,19,212,225,67,155,5,228,2,130,115,97,242,80,1,2,39,187,0,18,225,89,206,114,23,120,150,246,217,218,188,225,208,113,58,13,239,41,4,89,8,237,62,172,184,66,215,14,14,75,30,68,252,24,165,136,245,9,71,22,49,43,16,87,34,110,30,48,253,72,54,8,68,8,33,88,187,7,129,166,231,148,191,64,69,220,209,248,115,73,106,35,138,60,17,201,14,9,186,39,249,200,16,12,195,136,168,48,195,58,168,4,32,179,64,90,239,245,203,61,44,31,135,64,152,21,128,8,16,136,19,20,201,142,218,235,234,65,190,169,128,155,122,150,139,124,25,221,30,124,33,78,50,51,161,13,204,139,0,145,160,16,137,19,124,60,146,107,173,104,243,29,141,29,102,232,148,253,151,228,35,16,162,22,179,97,163,8,102,193,225,13,243,154,126,85,186,181,219,159,216,136,226,44,38,131,200,204,2,65,65,244,66,84,165,117,70,65,186,116,144,4,187,204,120,179,154,69,108,149,155,134,226,24,48,169,45,121,203,102,128,80,95,82,106,101,250,83,1,68,210,35,74,52,124,103,100,248,75,55,78,45,73,204,5,208,160,83,63,39,80,132,58,157,87,252,186,17,176,58,200,44,128,238,210,43,2,232,35,5,76,218,205,247,16,102,102,15,90,61,4,58,135,89,144,212,150,59,100,208,165,202,50,80,94,96,43,144,180,145,176,134,41,35,169,39,155,68,82,103,79,234,25,75,208,157,214,221,181,0,232,166,70,144,5,201,195,91,161,76,23,15,1,87,232,182,24,26,225,25,36,184,2,211,188,255,235,153,167,84,2,97,39,15,37,54,1,140,201,240,16,128,32,27,5,20,163,131,8,178,205,14,244,142,12,84,116,140,154,138,206,22,44,76,80,200,250,73,65,235,55,31,65,62,96,199,216,188,6,242,102,110,111,10,15,236,229,129,85,61,176,189,199,22,122,234,176,216,97,107,59,82,96,110,10,132,73,220,133,22,143,239,108,244,251,88,239,62,93,94,34,137,241,236,11,68,1,168,244,53,188,40,227,162,34,88,236,133,45,104,11,191,134,176,229,80,57,9,244,248,134,79,92,61,17,74,212,134,18,161,16,35,194,4,195,35,182,125,16,77,9,214,98,118,71,214,6,168,117,97,242,23,8,142,164,155,211,140,13,206,219,242,157,129,205,153,224,118,14,30,244,118,59,128,64,71,24,52,161,89,78,104,214,152,138,230,191,17,103,10,216,23,54,175,122,68,238,20,154,100,58,125,27,242,41,233,131,24,128,51,18,116,76,194,192,160,115,166,88,48,15,170,35,183,243,24,144,144,206,202,21,109,190,236,40,155,233,89,96,192,39,21,51,13,152,173,230,198,106,165,224,197,147,11,235,129,21,124,3,233,56,114,131,4,190,18,180,50,68,118,8,109,169,40,193,144,200,153,224,37,177,88,98,139,36,59,180,39,69,22,39,101,146,66,121,116,214,124,13,135,160,134,165,44,78,90,44,141,36,215,80,182,213,102,169,106,155,53,93,37,89,222,132,210,13,5,22,37,160,203,152,168,148,85,2,52,60,172,99,192,3,180,112,26,53,80,182,6,82,83,9,74,22,231,228,219,192,115,5,182,34,111,121,217,248,118,42,90,200,58,245,173,52,11,18,102,160,17,234,28,32,61,79,245,97,90,149,132,172,163,8,47,141,44,29,5,18,57,153,196,74,45,147,182,61,21,206,0,136,161,5,237,138,1,62,92,99,28,112,222,5,70,19,223,148,192,36,99,97,7,38,173,145,204,207,219,180,34,195,151,84,35,163,150,243,236,105,187,147,2,233,71,72,157,21,43,240,9,234,246,163,80,21,216,224,219,48,148,176,63,142,29,115,124,28,59,176,82,186,194,133,63,7,166,80,18,207,92,41,181,64,63,232,194,47,108,192,66,16,211,224,98,30,116,230,80,21,48,65,20,53,10,171,224,219,21,24,95,109,131,81,124,192,138,13,105,25,198,89,64,50,62,3,2,73,212,23,94,77,217,24,38,88,7,70,65,18,121,216,88,145,97,52,199,56,253,7,236,18,210,13,246,30,17,108,118,176,145,251,63,169,211,51,202,1,94,147,169,200,234,15,124,217,130,232,81,94,96,100,138,70,29,202,4,50,211,70,162,169,132,140,120,168,172,209,127,208,122,229,162,139,92,244,131,139,143,216,70,226,197,101,64,72,253,0,113,155,168,27,136,89,45,59,227,56,91,170,159,68,56,159,132,111,103,194,96,90,189,246,151,120,149,32,211,67,16,86,165,221,122,145,227,207,248,6,185,165,200,135,136,198,187,208,192,167,76,128,44,55,80,9,136,64,131,42,196,255,9,221,248,20,246,216,76,80,183,233,98,12,108,87,251,222,160,155,9,132,178,131,146,2,237,176,189,36,166,89,35,227,172,29,172,198,229,27,249,133,71,142,104,73,54,81,100,116,102,239,26,50,180,72,134,166,29,196,241,11,89,196,250,97,250,229,59,33,16,12,69,9,29,4,141,136,157,29,3,160,124,16,84,198,64,34,37,242,66,217,228,49,149,0,54,92,34,142,37,122,93,63,52,8,240,49,17,8,45,180,32,234,76,44,159,204,135,139,57,70,177,232,141,104,224,100,119,148,238,137,159,84,25,25,227,164,122,242,216,51,116,203,243,113,5,198,118,83,210,153,118,87,227,218,69,131,54,130,153,65,124,228,115,29,194,115,19,88,200,58,112,64,5,218,72,244,59,120,131,126,96,247,215,221,147,23,3,57,9,53,54,46,192,65,99,4,2,183,137,245,71,68,94,139,208,185,129,61,146,92,16,68,88,4,7,119,210,135,219,156,126,38,254,42,232,213,25,218,156,41,206,91,235,172,69,207,69,123,232,241,38,233,9,238,61,89,226,6,136,22,89,31,181,125,146,25,93,223,45,52,207,19,161,69,183,186,55,137,70,134,83,167,88,22,11,32,242,6,202,168,151,252,189,126,16,104,17,90,215,136,181,17,17,185,65,134,77,106,115,233,209,134,205,236,102,18,75,102,28,95,146,59,72,57,53,122,49,30,205,112,134,160,123,212,248,65,2,144,247,169,68,142,23,170,24,196,18,238,166,117,61,198,32,44,70,205,46,193,206,194,78,155,88,157,32,210,229,229,80,143,197,181,165,60,14,139,153,243,149,231,66,57,60,2,199,79,224,30,10,156,72,135,244,214,55,10,198,200,141,84,196,80,42,224,188,78,213,13,7,150,16,236,194,5,22,166,162,145,37,50,48,79,198,8,125,105,168,6,128,13,117,240,225,16,81,200,196,69,88,133,214,167,139,158,133,154,87,130,229,174,222,114,161,98,81,141,101,63,180,99,89,142,171,217,114,196,182,145,173,95,242,126,28,31,105,183,94,157,7,149,63,52,9,160,205,128,170,120,195,194,181,138,236,32,224,238,110,67,65,31,12,140,174,13,189,97,234,222,239,70,181,21,140,92,10,129,175,160,56,136,61,51,145,172,16,178,244,200,227,31,185,34,112,20,196,178,180,240,60,25,209,218,9,223,129,128,238,104,180,39,228,129,101,74,91,95,192,58,83,240,119,96,14,22,41,236,198,68,254,51,207,250,3,241,128,167,210,64,143,159,38,9,229,32,82,187,125,120,140,18,235,35,169,90,73,223,129,51,72,123,139,104,31,173,75,41,218,237,24,43,130,112,17,31,83,2,243,107,199,161,71,13,181,29,81,249,225,84,206,59,175,185,123,253,62,52,3,68,246,130,200,174,64,73,21,51,218,176,51,119,129,150,125,133,84,4,227,108,229,232,250,246,198,21,194,8,87,239,64,61,130,32,96,129,225,16,35,117,13,148,86,195,206,146,22,232,254,167,143,121,22,61,33,88,215,120,33,188,33,70,219,107,98,139,14,218,124,168,33,48,12,69,150,35,99,92,194,5,80,38,40,191,146,209,122,251,125,9,182,47,222,101,181,8,13,39,155,170,212,18,149,230,61,62,168,145,245,39,54,18,69,198,36,111,116,138,80,220,239,115,140,13,1,206,116,8,250,42,40,17,204,32,173,149,197,88,48,163,69,23,200,236,53,51,246,13,108,174,169,29,197,27,94,9,229,171,152,132,108,118,8,221,24,132,24,208,108,171,233,117,22,138,209,77,30,23,60,49,50,196,133,27,230,186,243,99,138,198,93,23,3,26,45,161,154,71,129,164,2,96,188,69,247,215,74,176,85,64,172,176,161,136,210,119,161,10,196,69,199,71,119,43,131,11,152,238,146,166,94,42,194,237,23,46,44,33,168,67,34,237,4,215,29,27,107,59,37,217,92,122,14,192,96,3,163,85,87,56,69,158,44,22,19,116,9,127,159,9,0,86,193,161,149,196,17,167,197,195,2,173,207,43,135,126,167,130,237,12,55,61,194,13,131,64,1,146,5,168,168,86,238,254,99,237,172,190,45,90,91,250,240,69,52,179,76,102,45,95,92,109,199,148,129,18,132,228,194,95,93,245,87,37,66,61,83,6,169,70,29,221,59,208,1,114,29,226,85,81,115,127,0,91,107,240,251,15,157,233,149,216,196,26,240,39,235,104,49,247,103,51,140,229,54,174,216,250,91,184,230,162,174,190,202,251,2,193,182,100,221,147,254,128,63,68,76,36,144,78,188,8,3,147,111,35,239,49,201,77,212,91,47,112,45,60,74,254,196,5,7,211,159,221,11,93,188,122,211,128,164,82,183,74,63,216,4,10,64,102,101,150,114,49,170,81,32,171,50,243,132,134,32,177,19,5,84,229,254,103,109,187,212,211,96,52,117,33,60,172,206,110,22,25,215,218,38,160,97,192,88,232,84,116,72,24,61,34,193,37,72,108,180,226,238,148,123,12,237,139,130,255,188,121,36,176,52,4,214,8,23,3,224,162,4,112,85,150,177,116,47,190,60,17,123,196,38,240,186,40,175,76,23,24,3,223,13,219,197,225,165,74,246,56,64,69,202,46,143,66,178,115,234,116,2,144,219,158,84,204,134,242,92,14,171,121,36,247,128,36,86,117,178,233,62,216,177,173,242,125,116,224,183,159,241,131,38,246,61,227,199,244,121,25,63,70,6,41,142,103,97,254,92,134,8,135,241,68,11,163,112,25,117,211,176,176,242,109,143,126,184,217,37,49,234,202,163,113,179,237,152,52,127,58,87,35,180,70,62,135,243,89,52,204,145,242,103,228,54,88,224,155,60,115,43,22,225,231,92,209,117,183,64,31,106,0,66,84,162,92,148,207,230,227,113,231,115,28,68,200,198,51,219,195,121,7,125,251,71,115,123,239,71,243,107,166,179,239,60,64,231,12,255,199,133,206,159,241,203,27,64,191,220,89,72,225,89,200,175,62,12,229,117,105,247,75,42,111,213,113,125,171,142,247,168,99,206,12,235,58,158,191,96,207,95,234,109,133,167,159,56,120,63,7,250,61,64,191,49,162,242,5,158,98,24,33,190,245,149,41,226,199,115,208,159,81,113,162,59,107,175,203,73,63,222,118,230,247,11,222,154,21,119,156,32,69,252,5,172,249,94,226,123,137,175,88,226,75,137,28,61,142,224,13,24,112,62,222,72,214,201,199,27,201,58,221,232,244,38,29,199,214,143,175,208,241,241,54,29,151,244,165,58,126,86,198,106,7,181,113,174,22,178,219,254,106,54,71,253,200,82,179,35,182,192,134,102,23,238,229,238,159,107,210,229,154,205,189,101,130,92,71,185,251,231,106,158,161,170,163,220,54,202,181,187,40,242,36,85,179,98,44,65,185,251,26,173,242,88,85,121,177,156,72,42,179,46,183,235,114,242,192,85,213,229,14,93,78,232,220,162,202,213,164,203,109,191,110,185,102,172,217,85,185,229,254,175,117,215,229,154,213,181,77,33,143,114,247,127,173,135,46,215,2,123,91,83,101,148,187,255,107,147,253,109,97,45,71,80,238,190,176,155,236,111,235,50,5,229,200,118,205,229,186,119,96,34,39,56,148,107,50,159,236,111,179,199,55,102,82,116,185,251,128,54,217,223,150,62,177,52,219,219,172,11,182,107,5,139,41,88,71,193,121,20,220,71,193,135,82,236,99,145,144,189,50,205,83,242,240,121,165,99,91,150,29,159,81,202,251,82,106,94,143,67,94,185,138,96,182,38,251,214,214,39,94,241,58,142,180,204,199,178,140,215,177,238,253,214,84,142,189,174,249,200,117,188,111,21,2,131,234,149,159,93,121,230,65,169,109,95,231,109,197,103,171,206,166,211,178,213,99,201,121,147,73,71,64,95,187,185,69,31,191,160,117,156,173,165,101,205,242,132,86,127,178,106,79,185,72,107,33,40,170,59,28,146,199,19,19,174,217,191,204,118,246,179,110,71,198,29,141,96,65,229,153,227,162,143,39,38,125,34,206,156,202,102,230,156,215,165,236,115,73,106,214,14,24,84,103,99,244,19,235,253,101,119,153,93,240,79,116,124,164,121,95,207,45,27,207,180,17,114,235,9,91,64,84,143,131,241,158,67,235,99,219,114,206,231,50,194,75,112,247,131,59,31,181,236,219,120,158,238,2,24,213,175,35,71,242,43,149,210,231,41,144,173,90,199,189,153,245,153,135,8,211,86,214,89,63,3,87,150,125,63,5,56,245,244,94,4,11,106,75,216,67,121,212,247,190,158,40,121,236,242,140,96,226,59,175,237,111,251,243,50,98,130,247,71,45,111,169,110,103,69,124,59,240,30,40,152,206,205,218,150,122,238,155,16,134,11,160,171,191,72,122,174,135,139,74,253,133,143,29,134,64,156,222,253,9,185,207,157,94,58,74,217,151,60,222,43,188,154,220,158,230,186,158,100,106,221,49,105,200,51,83,11,246,44,120,190,241,241,22,62,166,123,175,66,204,185,158,196,111,95,129,250,188,136,153,191,230,129,114,140,181,19,170,115,181,43,62,28,25,66,163,234,117,120,38,31,239,206,157,203,229,101,215,76,97,131,71,70,111,14,226,43,49,225,185,199,16,60,236,239,196,181,188,239,135,188,23,121,127,88,242,108,112,174,121,78,40,18,5,208,176,62,7,146,149,135,230,191,128,197,116,86,84,75,153,215,25,48,212,3,131,186,242,48,207,175,133,28,23,22,210,227,49,61,59,15,216,190,165,189,30,43,112,160,90,79,244,86,103,225,22,66,163,234,116,247,163,133,36,63,236,123,169,167,80,161,158,35,77,199,41,202,46,243,154,213,42,59,96,84,153,226,76,158,234,249,60,204,231,217,88,245,179,165,203,169,103,203,68,110,14,18,214,43,252,194,226,227,165,222,182,249,20,214,118,120,13,246,36,49,105,95,79,33,58,45,74,10,11,160,97,253,76,111,55,110,143,103,92,143,173,148,179,201,52,195,251,180,231,153,241,175,196,6,208,176,62,221,226,78,79,205,252,164,1,243,138,106,194,57,197,186,46,203,182,14,193,238,22,1,163,202,35,205,215,51,114,87,133,62,243,201,159,182,121,93,206,153,240,203,187,183,16,170,43,206,211,51,143,225,126,238,25,116,226,25,199,107,228,103,168,228,185,73,39,135,202,181,162,36,125,210,62,133,57,14,16,213,163,172,126,233,9,6,186,23,197,248,239,107,120,50,226,186,38,115,160,34,160,171,60,222,75,120,40,213,157,10,71,205,231,153,40,21,15,105,217,150,228,38,24,2,227,250,180,214,79,240,132,253,100,37,123,50,213,79,181,123,222,79,130,184,201,163,213,23,192,168,126,102,84,126,70,81,220,206,234,139,209,20,239,12,104,119,90,106,4,140,234,211,69,174,150,32,225,87,68,210,163,206,75,45,231,220,235,42,3,159,211,73,89,79,145,1,217,73,8,140,234,83,232,110,206,79,137,46,219,97,59,191,75,143,235,126,146,211,133,161,23,64,87,153,179,120,62,215,243,81,150,50,227,235,216,109,230,39,113,175,155,146,25,34,88,84,155,110,231,249,222,95,165,254,113,202,134,199,166,160,83,208,205,118,92,39,23,40,230,25,241,91,8,13,235,243,189,224,219,19,152,179,159,52,106,46,200,12,78,25,228,20,202,151,90,15,56,3,30,232,171,114,24,122,121,60,233,109,61,255,87,238,207,193,15,110,176,206,119,11,196,221,2,115,236,194,165,3,104,80,155,3,182,203,99,62,121,234,111,39,81,222,149,216,121,42,57,167,198,81,151,147,114,101,225,89,1,52,170,206,49,197,61,64,255,171,207,27,18,106,188,197,78,63,33,30,252,58,248,221,209,251,181,36,245,53,231,242,36,137,169,30,73,11,50,119,53,107,182,234,114,8,140,234,115,242,175,231,140,180,171,197,180,59,253,92,182,124,146,111,181,59,33,48,170,207,38,188,39,230,94,15,180,7,54,129,231,84,247,170,86,140,61,200,85,156,199,133,226,103,184,239,110,229,198,83,108,60,39,85,231,188,162,69,220,195,92,213,250,196,60,63,31,59,92,77,190,37,158,159,177,142,158,186,197,172,20,148,83,94,217,79,222,107,81,205,67,163,234,35,233,234,51,125,239,70,4,63,215,242,88,146,82,77,44,40,220,23,202,107,247,148,167,99,61,234,142,230,178,116,202,141,101,59,117,16,49,90,220,66,168,175,204,185,237,242,115,142,157,122,106,179,235,121,46,65,187,204,105,182,70,113,11,10,107,142,148,48,79,118,29,77,186,150,77,203,181,30,24,79,249,53,29,239,107,61,105,193,182,161,106,242,236,38,155,154,55,122,13,56,63,105,125,95,79,106,87,55,180,96,190,18,177,77,125,192,236,87,107,134,175,59,145,139,241,127,180,65,174,181,236,69,29,22,15,138,234,102,194,209,167,220,67,231,66,236,115,173,155,90,159,165,236,203,90,193,232,235,33,81,77,206,209,148,151,167,12,67,235,41,72,40,99,67,195,200,195,88,218,60,36,170,73,121,162,243,242,140,153,228,228,139,219,177,236,40,238,156,130,206,185,182,139,48,18,7,240,181,56,163,197,115,125,58,114,115,20,103,75,13,129,166,42,231,186,184,47,242,187,222,222,99,241,150,212,167,113,218,84,29,201,13,30,123,91,31,31,196,183,11,207,212,97,114,255,224,95,95,46,28,240,173,226,241,243,151,10,7,124,54,98,75,45,98,81,95,243,87,254,210,81,224,139,250,90,191,206,215,223,31,167,195,22,166,215,27,126,199,237,186,39,104,240,41,216,148,117,75,59,40,210,167,18,191,204,167,102,175,153,80,0,13,235,83,134,197,167,92,92,78,60,184,147,220,99,155,15,235,135,13,160,97,253,145,9,239,149,110,46,74,60,245,148,32,103,39,124,181,54,207,47,88,79,137,249,208,53,126,37,138,5,75,243,236,122,21,190,109,206,19,103,180,253,177,145,61,139,177,127,246,140,165,23,28,4,233,167,63,125,154,74,250,191,31,255,231,231,251,127,167,249,108,46,125,250,203,95,255,246,225,63,255,244,233,95,127,250,248,135,31,127,250,143,31,127,249,235,143,127,248,233,79,63,76,75,103,76,247,162,237,159,191,155,230,223,159,255,250,249,175,127,62,43,253,176,180,250,255,135,91,251,221,253,115,107,191,83,235,191,191,255,191,215,104,61,252,237,113,15,109,200,220,94,175,218,86,60,253,169,221,215,229,14,250,36,104,178,52,137,141,202,255,239,95,254,250,211,29,250,3,254,220,255,127,22,130,81,234,234,255,246,227,167,191,124,248,243,79,31,63,254,242,67,251,231,47,63,254,252,199,143,255,245,195,189,252,63,141,138,247,41,165,12,3,227,169,253,242,241,227,167,15,255,249,241,211,199,127,254,249,143,255,254,233,227,127,247,206,127,247,89,179,207,106,230,229,87,144,57,152,151,124,189,43,175,57,135,188,238,215,97,117,95,132,184,231,148,248,109,109,240,34,234,51,216,111,176,67,195,237,231,255,15,126,12,50,41],"type":"zlib"} \ No newline at end of file diff --git a/public/assets/js/next2d.js b/public/assets/js/next2d.js index 3a3a3de6..72cdca9d 100644 --- a/public/assets/js/next2d.js +++ b/public/assets/js/next2d.js @@ -1 +1,2364 @@ -(()=>{"use strict";let t=0;const e=()=>t++;let i=0,s=null;const r=(t=null)=>{s=t};let n="";const a=()=>n,h=t=>{n=t};let o=null;const l=()=>o,c=(t=null)=>{o=t};let _=1;const $=()=>_,u=window,d=u.document;class g{constructor(t="",e=""){this._$name=`${t}`,this._$value=`${e}`}static toString(){return"[class URLRequestHeader]"}static get namespace(){return"next2d.net.URLRequestHeader"}toString(){return"[object URLRequestHeader]"}get namespace(){return"next2d.net.URLRequestHeader"}get name(){return this._$name}get value(){return this._$value}}let f=1,p=0,m=!1;const x=(t=!0)=>{m=t},b=1/0,v=Math,T=Array,y=Map,E=Number,A=Float32Array,M=Int32Array,w=Int16Array,S=OffscreenCanvas,C=isNaN,I=requestAnimationFrame,F=cancelAnimationFrame,R=performance,B=setTimeout,L=clearTimeout,P=new A([1,0,0,1,0,0]),k=new A([1,1,1,1,0,0,0,0]),N=-32768,O=32767,D=v.PI/180,U=180/v.PI,V=[],G=[],z=[],X=[],q=[],Y=[],H=[],j=[],W=[],K=new S(1,1).getContext("2d"),Q=(t=0,e=0,i=0,s=0)=>{const r=W.pop()||{xMin:0,xMax:0,yMin:0,yMax:0};return r.xMin=t,r.xMax=e,r.yMin=i,r.yMax=s,r},J=t=>{W.push(t)},Z=(t=0,e=0,i=0,s=0)=>{const r=z.pop()||new A(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},tt=t=>{z.push(t)},et=(t=0,e=0,i=0,s=0)=>{const r=G.pop()||new M(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},it=(t=0,e=0,i=0,s=0,r=0,n=0)=>{const a=X.pop()||new A(6);return a[0]=t,a[1]=e,a[2]=i,a[3]=s,a[4]=r,a[5]=n,a},st=t=>{X.push(t)},rt=(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0)=>{const o=q.pop()||new A(8);return o[0]=t,o[1]=e,o[2]=i,o[3]=s,o[4]=r,o[5]=n,o[6]=a,o[7]=h,o},nt=t=>{q.push(t)},at=(t=0,e=0,i=0,s=0,r=0,n=0,a=0,h=0,o=0)=>{const l=Y.pop()||new A(9);return l[0]=t,l[1]=e,l[2]=i,l[3]=s,l[4]=r,l[5]=n,l[6]=a,l[7]=h,l[8]=o,l},ht=(...t)=>{const e=H.pop()||[];return t.length&&e.push(...t),e},ot=(t=null)=>{t&&(t.length&&(t.length=0),H.push(t))},lt=t=>{t.size&&t.clear(),j.push(t)},ct=()=>j.pop()||new y,_t=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t),$t=t=>{const e=-819.2*t[0]-819.2*t[2]+t[4],i=819.2*t[0]-819.2*t[2]+t[4],s=-819.2*t[0]+819.2*t[2]+t[4],r=-819.2*t[1]-819.2*t[3]+t[5],n=819.2*t[1]-819.2*t[3]+t[5];let a=s-e,h=-819.2*t[1]+819.2*t[3]+t[5]-r;const o=v.sqrt(a*a+h*h);o?(a/=o,h/=o):(a=0,h=0);const l=(i-e)*a+(n-r)*h;return Z(e+l*a,r+l*h,i,n)},ut=t=>{const e=1/(t[0]*t[4]-t[3]*t[1]),i=t[3]*t[7]-t[4]*t[6],s=t[1]*t[6]-t[0]*t[7];return at(t[4]*e,0-t[1]*e,0,0-t[3]*e,t[0]*e,0,i*e,s*e,1)},dt=(t,e,i,s=null)=>{const r=+t;return C(r)&&null!==s?s:v.min(v.max(e,C(r)?0:r),i)},gt=(t,e)=>it(t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],t[0]*e[4]+t[2]*e[5]+t[4],t[1]*e[4]+t[3]*e[5]+t[5]),ft=(t,e)=>rt(t[0]*e[0],t[1]*e[1],t[2]*e[2],t[3]*e[3],t[0]*e[4]+t[4],t[1]*e[5]+t[5],t[2]*e[6]+t[6],t[3]*e[7]+t[7]),pt=(t,e)=>{const i=t.xMax*e[0]+t.yMax*e[2]+e[4],s=t.xMax*e[0]+t.yMin*e[2]+e[4],r=t.xMin*e[0]+t.yMax*e[2]+e[4],n=t.xMin*e[0]+t.yMin*e[2]+e[4],a=t.xMax*e[1]+t.yMax*e[3]+e[5],h=t.xMax*e[1]+t.yMin*e[3]+e[5],o=t.xMin*e[1]+t.yMax*e[3]+e[5],l=t.xMin*e[1]+t.yMin*e[3]+e[5],c=v.min(E.MAX_VALUE,i,s,r,n),_=v.max(0-E.MAX_VALUE,i,s,r,n),$=v.min(E.MAX_VALUE,a,h,o,l),u=v.max(0-E.MAX_VALUE,a,h,o,l);return Q(c,_,$,u)},mt=t=>{if(!K)return 0;K.fillStyle=t;const e=+`0x${K.fillStyle.slice(1)}`;return K.fillStyle="rgba(0, 0, 0, 1)",e},xt=t=>C(+t)?mt(`${t}`):+t,bt=t=>({A:t>>>24,R:(16711680&t)>>16,G:(65280&t)>>8,B:255&t}),vt=(t,e,i)=>(t>>16)*(i?e:1)/255,Tt=(t,e,i)=>(t>>8&255)*(i?e:1)/255,yt=(t,e,i)=>(255&t)*(i?e:1)/255,Et=(t,e=1)=>({R:(16711680&t)>>16,G:(65280&t)>>8,B:255&t,A:255*e}),At=(t,e,i=!1,s=!1)=>{let r="";return i&&(r="italic "),s&&(r+="bold "),`${r}${e}px '${t}','sans-serif'`},Mt=t=>{t.color&&nt(t.color),t.isLayer=!1,t.isUpdated=null,t.canApply=null,t.matrix=null,t.color=null,t.filters=null,t.blendMode="normal",t.sw=0,t.sh=0,V.push(t)};new Map([[1,"normal"],[2,"layer"],[3,"multiply"],[4,"screen"],[5,"lighten"],[6,"darken"],[7,"difference"],[8,"add"],[9,"subtract"],[10,"invert"],[11,"alpha"],[12,"erase"],[13,"overlay"],[14,"hardlight"]]);const wt=new class{constructor(){this._$pool=[],this._$store=new Map,this._$timerMap=new Map,this._$context=null}set context(t){this._$context=t}reset(){for(const t of this._$store.values()){for(const e of t.values())this.destroy(e);lt(t)}this._$store.clear(),this._$context&&this._$context.frameBuffer.clearCache()}destroy(t=null){if(t&&"object"==typeof t)if(t instanceof WebGLTexture)I((()=>{this._$context&&this._$context.frameBuffer.releaseTexture(t)}));else{if("canvas"in t&&t instanceof CanvasRenderingContext2D){const e=t.canvas,i=e.width,s=e.height;t.clearRect(0,0,i+1,s+1),e.width=e.height=1,this._$pool.push(e)}this._$context&&"index"in t&&this._$context.frameBuffer.textureManager.releasePosition(t)}}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(t,e){if(!this._$store.has(t))return;const i=this._$store.get(t);i.has(e)&&(i.delete(e),i.size||(lt(i),this._$store.delete(t)))}stopTimer(t){t=`${t}`,this._$timerMap.has(t)&&(L(this._$timerMap.get(t)),this._$timerMap.delete(t))}removeCache(t){if(t=`${t}`,this._$store.has(t)){const e=this._$store.get(t);for(const t of e.values())this.destroy(t);e.clear(),lt(e),this._$store.delete(t)}this._$timerMap.delete(t)}setRemoveTimer(t){if(t=`${t}`,this.stopTimer(t),this._$store.has(t)){const e=B((()=>{this.removeCache(t)}),5e3);this._$timerMap.set(t,e)}}get(t){const e=`${t[0]}`,i=`${t[1]}`;if(this._$store.has(e)){this.stopTimer(e);const t=this._$store.get(e);if(t.has(i))return t.get(i)}return null}set(t,e=null){const i=`${t[0]}`,s=`${t[1]}`;this._$store.has(i)||this._$store.set(i,ct());const r=this._$store.get(i);if(null===e){if(!r.has(s))return;return this.destroy(r.get(s)),r.delete(s),void(r.size||(lt(r),this._$store.delete(i)))}r.set(s,e)}has(t){const e=`${t[0]}`;return!!this._$store.has(e)&&this._$store.get(e).has(`${t[1]}`)}generateKeys(t,e=null,i=null){let s="";e&&e.length&&(s+=`${e[0]}_${e[1]}`),i&&i.length&&(s+=0===i[7]?"":`_${i[7]}`);const r=ht();if(s){let t=0;const e=s.length;for(let i=0;i1&&n.sort((function(t,e){switch(!0){case t.priority>e.priority:return-1;case t.priority1&&r.sort((function(t,e){switch(!0){case t.priority>e.priority:return-1;case t.priority1&&n.sort((function(t,e){switch(!0){case t.priority>e.priority:return-1;case t.priority{if(e in t)return t[e];const i=l();return i&&e in i?i[e]:void 0}})}static toString(){return"[class MouseEvent]"}static get namespace(){return"next2d.events.MouseEvent"}toString(){return this.formatToString("MouseEvent","type","bubbles","cancelable","eventPhase","localX","localY","stageX","stageY","ctrlKey","altKey","shiftKey","buttonDown","delta","commandKey","controlKey","clickCount")}get namespace(){return"next2d.events.MouseEvent"}static get CLICK(){return"click"}static get DOUBLE_CLICK(){return"dblclick"}static get MOUSE_DOWN(){return"mouseDown"}static get MOUSE_MOVE(){return"mouseMove"}static get MOUSE_OUT(){return"mouseOut"}static get MOUSE_OVER(){return"mouseOver"}static get MOUSE_UP(){return"mouseUp"}static get MOUSE_WHEEL(){return"mouseWheel"}static get ROLL_OUT(){return"rollOut"}static get ROLL_OVER(){return"rollOver"}}class kt extends It{constructor(t,e=!1,i=!1,s=0,r=0){super(t,e,i),this._$bytesLoaded=0|s,this._$bytesTotal=0|r}static toString(){return"[class ProgressEvent]"}static get namespace(){return"next2d.events.ProgressEvent"}toString(){return this.formatToString("ProgressEvent","type","bubbles","cancelable","eventPhase","bytesLoaded","bytesTotal")}get namespace(){return"next2d.events.ProgressEvent"}static get PROGRESS(){return"progress"}get bytesLoaded(){return this._$bytesLoaded}get bytesTotal(){return this._$bytesTotal}}class Nt extends It{constructor(t,e=!1,i=!1,s=0,r=0){super(t,e,i),this._$bytesLoaded=0|s,this._$bytesTotal=0|r}static toString(){return"[class VideoEvent]"}static get namespace(){return"next2d.events.VideoEvent"}toString(){return this.formatToString("VideoEvent","type","bubbles","cancelable","eventPhase","bytesLoaded","bytesTotal")}get namespace(){return"next2d.events.VideoEvent"}static get PROGRESS(){return"progress"}static get PLAY(){return"play"}static get PLAY_START(){return"playStart"}static get PLAY_END(){return"playEnd"}static get PAUSE(){return"pause"}static get SEEK(){return"seek"}get bytesLoaded(){return this._$bytesLoaded}get bytesTotal(){return this._$bytesTotal}}class Ot{constructor(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0){this._$colorTransform=rt(),this.redMultiplier=t,this.greenMultiplier=e,this.blueMultiplier=i,this.alphaMultiplier=s,this.redOffset=r,this.greenOffset=n,this.blueOffset=a,this.alphaOffset=h}static toString(){return"[class ColorTransform]"}static get namespace(){return"next2d.geom.ColorTransform"}toString(){return"(redMultiplier="+this._$colorTransform[0]+", greenMultiplier="+this._$colorTransform[1]+", blueMultiplier="+this._$colorTransform[2]+", alphaMultiplier="+this._$colorTransform[3]+", redOffset="+this._$colorTransform[4]+", greenOffset="+this._$colorTransform[5]+", blueOffset="+this._$colorTransform[6]+", alphaOffset="+this._$colorTransform[7]+")"}get namespace(){return"next2d.geom.ColorTransform"}get alphaMultiplier(){return this._$colorTransform[3]}set alphaMultiplier(t){this._$colorTransform[3]=dt(+t,0,1,0)}get alphaOffset(){return this._$colorTransform[7]}set alphaOffset(t){this._$colorTransform[7]=dt(0|t,-255,255,0)}get blueMultiplier(){return this._$colorTransform[2]}set blueMultiplier(t){this._$colorTransform[2]=dt(+t,0,1,0)}get blueOffset(){return this._$colorTransform[6]}set blueOffset(t){this._$colorTransform[6]=dt(0|t,-255,255,0)}get greenMultiplier(){return this._$colorTransform[1]}set greenMultiplier(t){this._$colorTransform[1]=dt(+t,0,1,0)}get greenOffset(){return this._$colorTransform[5]}set greenOffset(t){this._$colorTransform[5]=dt(0|t,-255,255,0)}get redMultiplier(){return this._$colorTransform[0]}set redMultiplier(t){this._$colorTransform[0]=dt(+t,0,1,0)}get redOffset(){return this._$colorTransform[4]}set redOffset(t){this._$colorTransform[4]=dt(0|t,-255,255,0)}concat(t){const e=ft(this._$colorTransform,t._$colorTransform);this.redMultiplier=e[0],this.greenMultiplier=e[1],this.blueMultiplier=e[2],this.alphaMultiplier=e[3],this.redOffset=e[4],this.greenOffset=e[5],this.blueOffset=e[6],this.alphaOffset=e[7],nt(e)}_$clone(){return dr(this._$colorTransform[0],this._$colorTransform[1],this._$colorTransform[2],this._$colorTransform[3],this._$colorTransform[4],this._$colorTransform[5],this._$colorTransform[6],this._$colorTransform[7])}}class Dt{constructor(t=0,e=0){this._$x=0,this._$y=0,this.x=t,this.y=e}static toString(){return"[class Point]"}static get namespace(){return"next2d.geom.Point"}toString(){return`(x=${this.x}, y=${this.y})`}get namespace(){return"next2d.geom.Point"}get length(){return v.sqrt(v.pow(this.x,2)+v.pow(this.y,2))}get x(){return this._$x}set x(t){this._$x=dt(+t,N,O,0)}get y(){return this._$y}set y(t){this._$y=dt(+t,N,O,0)}add(t){return new Dt(this.x+t.x,this.y+t.y)}clone(){return new Dt(this.x,this.y)}copyFrom(t){this._$x=t._$x,this._$y=t._$y}static distance(t,e){return v.sqrt(v.pow(t._$x-e._$x,2)+v.pow(t._$y-e._$y,2))}equals(t){return this._$x===t._$x&&this._$y===t._$y}static interpolate(t,e,i){return new Dt(t.x+(e.x-t.x)*(1-i),t.y+(e.y-t.y)*(1-i))}normalize(t){const e=this.length;this.x=this.x*t/e,this.y=this.y*t/e}offset(t,e){this.x+=t,this.y+=e}static polar(t,e){return new Dt(t*v.cos(e),t*v.sin(e))}setTo(t,e){this.x=t,this.y=e}subtract(t){return new Dt(this.x-t.x,this.y-t.y)}}class Ut{constructor(t=1,e=0,i=0,s=1,r=0,n=0){this._$matrix=it(1,0,0,1,0,0),this.a=t,this.b=e,this.c=i,this.d=s,this.tx=r,this.ty=n}static toString(){return"[class Matrix]"}static get namespace(){return"next2d.geom.Matrix"}toString(){return`(a=${this.a}, b=${this.b}, c=${this.c}, d=${this.d}, tx=${this.tx}, ty=${this.ty})`}get namespace(){return"next2d.geom.Matrix"}get a(){return this._$matrix[0]}set a(t){this._$matrix[0]=dt(+t,N,O,0)}get b(){return this._$matrix[1]}set b(t){this._$matrix[1]=dt(+t,N,O,0)}get c(){return this._$matrix[2]}set c(t){this._$matrix[2]=dt(+t,N,O,0)}get d(){return this._$matrix[3]}set d(t){this._$matrix[3]=dt(+t,N,O,0)}get tx(){return this._$matrix[4]}set tx(t){this._$matrix[4]=dt(+t,N,O,0)}get ty(){return this._$matrix[5]}set ty(t){this._$matrix[5]=dt(+t,N,O,0)}_$clone(){return this.clone()}clone(){return $r(this._$matrix[0],this._$matrix[1],this._$matrix[2],this._$matrix[3],this._$matrix[4],this._$matrix[5])}concat(t){const e=this._$matrix,i=t._$matrix;let s=e[0]*i[0],r=0,n=0,a=e[3]*i[3],h=e[4]*i[0]+i[4],o=e[5]*i[3]+i[5];(e[1]||e[2]||i[1]||i[2])&&(s+=e[1]*i[2],a+=e[2]*i[1],r+=e[0]*i[1]+e[1]*i[3],n+=e[2]*i[0]+e[3]*i[2],h+=e[5]*i[2],o+=e[4]*i[1]),this.a=s,this.b=r,this.c=n,this.d=a,this.tx=h,this.ty=o}copyFrom(t){this.a=t.a,this.b=t.b,this.c=t.c,this.d=t.d,this.tx=t.tx,this.ty=t.ty}createBox(t,e,i=0,s=0,r=0){this.identity(),this.rotate(i),this.scale(t,e),this.translate(s,r)}createGradientBox(t,e,i=0,s=0,r=0){this.createBox(t/1638.4,e/1638.4,i,s+t/2,r+e/2)}deltaTransformPoint(t){return new Dt(t.x*this._$matrix[0]+t.y*this._$matrix[2],t.x*this._$matrix[1]+t.y*this._$matrix[3])}identity(){this._$matrix[0]=1,this._$matrix[1]=0,this._$matrix[2]=0,this._$matrix[3]=1,this._$matrix[4]=0,this._$matrix[5]=0}invert(){const t=this._$matrix[0],e=this._$matrix[1],i=this._$matrix[2],s=this._$matrix[3],r=this._$matrix[4],n=this._$matrix[5];if(0===e&&0===i)this.a=1/t,this.b=0,this.c=0,this.d=1/s,this.tx=-this.a*r,this.ty=-this.d*n;else{const a=t*s-e*i;if(a){const h=1/a;this.a=s*h,this.b=-e*h,this.c=-i*h,this.d=t*h,this.tx=-(this.a*r+this.c*n),this.ty=-(this.b*r+this.d*n)}}}rotate(t){const e=this._$matrix[0],i=this._$matrix[1],s=this._$matrix[2],r=this._$matrix[3],n=this._$matrix[4],a=this._$matrix[5];this.a=e*v.cos(t)-i*v.sin(t),this.b=e*v.sin(t)+i*v.cos(t),this.c=s*v.cos(t)-r*v.sin(t),this.d=s*v.sin(t)+r*v.cos(t),this.tx=n*v.cos(t)-a*v.sin(t),this.ty=n*v.sin(t)+a*v.cos(t)}scale(t,e){this.a*=t,this.c*=t,this.tx*=t,this.b*=e,this.d*=e,this.ty*=e}setTo(t,e,i,s,r,n){this.a=t,this.b=e,this.c=i,this.d=s,this.tx=r,this.ty=n}transformPoint(t){return new Dt(t.x*this._$matrix[0]+t.y*this._$matrix[2]+this._$matrix[4],t.x*this._$matrix[1]+t.y*this._$matrix[3]+this._$matrix[5])}translate(t,e){this.tx+=t,this.ty+=e}}class Vt{constructor(t=0,e=0,i=0,s=0){this._$x=0,this._$y=0,this._$width=0,this._$height=0,this.setTo(t,e,i,s)}static toString(){return"[class Rectangle]"}static get namespace(){return"next2d.geom.Rectangle"}toString(){return`(x=${this.x}, y=${this.y}, w=${this.width}, h=${this.height})`}get namespace(){return"next2d.geom.Rectangle"}get bottom(){return this.y+this.height}set bottom(t){this.height=+t-this.y}get bottomRight(){return new Dt(this.right,this.bottom)}set bottomRight(t){this.right=t.x,this.bottom=t.y}get height(){return this._$height}set height(t){this._$height=dt(+t,N,O,0)}get left(){return this.x}set left(t){this.width=this.right-+t,this.x=t}get right(){return this.x+this.width}set right(t){this.width=+t-this.x}get size(){return new Dt(this.width,this.height)}set size(t){this.width=t.x,this.height=t.y}get top(){return this.y}set top(t){this.height=+(this.bottom-+t),this.y=t}get topLeft(){return new Dt(this.x,this.y)}set topLeft(t){this.left=t.x,this.top=t.y}get width(){return this._$width}set width(t){this._$width=dt(+t,N,O,0)}get x(){return this._$x}set x(t){this._$x=dt(+t,N,O,0)}get y(){return this._$y}set y(t){this._$y=dt(+t,N,O,0)}clone(){return new Vt(this.x,this.y,this.width,this.height)}contains(t,e){return this.x<=t&&this.y<=e&&this.right>t&&this.bottom>e}containsPoint(t){return this.x<=t.x&&this.y<=t.y&&this.right>t.x&&this.bottom>t.y}containsRect(t){return this.x<=t.x&&this.y<=t.y&&this.right>=t.right&&this.bottom>=t.bottom}copyFrom(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height}equals(t){return this.x===t.x&&this.y===t.y&&this.width===t.width&&this.height===t.height}inflate(t,e){this.x=this.x-+t,this.width=this.width+2*+t,this.y=this.y-+e,this.height=this.height+2*+e}inflatePoint(t){this.x=this.x-t.x,this.width=this.width+2*t.x,this.y=this.y-t.y,this.height=this.height+2*t.y}intersection(t){const e=v.max(this.x,t.x),i=v.max(this.y,t.y),s=v.min(this.right,t.right)-e,r=v.min(this.bottom,t.bottom)-i;return s>0&&r>0?new Vt(e,i,s,r):new Vt(0,0,0,0)}intersects(t){const e=v.max(this.x,t.x),i=v.max(this.y,t.y),s=v.min(this.right,t.right),r=v.min(this.bottom,t.bottom);return s-e>0&&r-i>0}isEmpty(){return this.width<=0||this.height<=0}offset(t,e){this.x+=t,this.y+=e}offsetPoint(t){this.x+=t.x,this.y+=t.y}setEmpty(){this._$x=0,this._$y=0,this._$width=0,this._$height=0}setTo(t,e,i,s){this.x=t,this.y=e,this.width=i,this.height=s}union(t){return this.isEmpty()?t.clone():t.isEmpty()?this.clone():new Vt(v.min(this.x,t.x),v.min(this.y,t.y),v.max(this.right-t.left,t.right-this.left),v.max(this.bottom-t.top,t.bottom-this.top))}}class Gt{constructor(){this._$updated=!0}static toString(){return"[class BitmapFilter]"}static get namespace(){return"next2d.filters.BitmapFilter"}toString(){return"[object BitmapFilter]"}get namespace(){return"next2d.filters.BitmapFilter"}_$isUpdated(){return this._$updated}_$doChanged(){this._$updated=!0,x()}}class zt extends Gt{constructor(t=4,e=4,i=1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this.blurX=t,this.blurY=e,this.quality=i}static toString(){return"[class BlurFilter]"}static get namespace(){return"next2d.filters.BlurFilter"}toString(){return"[object BlurFilter]"}get namespace(){return"next2d.filters.BlurFilter"}static get STEP(){return[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5]}get blurX(){return this._$blurX}set blurX(t){(t=dt(+t,0,255,0))!==this._$blurX&&(this._$blurX=t,this._$doChanged())}get blurY(){return this._$blurY}set blurY(t){(t=dt(+t,0,255,0))!==this._$blurY&&(this._$blurY=t,this._$doChanged())}get quality(){return this._$quality}set quality(t){(t=dt(0|t,0,15,1))!==this._$quality&&(this._$quality=t,this._$doChanged())}clone(){return new zt(this._$blurX,this._$blurY,this._$quality)}_$toArray(){return ht(1,this._$blurX,this._$blurY,this._$quality)}_$generateFilterRect(t,e=0,i=0){const s=Q(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$quality)return s;const r=zt.STEP[this._$quality-1];let n=0>=this._$blurX?1:this._$blurX*r,a=0>=this._$blurY?1:this._$blurY*r;return e?n*=e:n=v.round(n),i?a*=i:a=v.round(a),s.xMin-=n,s.xMax+=2*n,s.yMin-=a,s.yMax+=2*a,s}_$canApply(){return 0!==this._$blurX&&0!==this._$blurY}_$applyFilter(t,e,i=!0){this._$updated=!1;const s=t.frameBuffer,r=s.currentAttachment,n=s.getTextureFromCurrentAttachment();if(!this._$canApply())return i?n:s.createTextureFromCurrentAttachment();let a=v.sqrt(e[0]*e[0]+e[1]*e[1]),h=v.sqrt(e[2]*e[2]+e[3]*e[3]);a/=f,h/=f,a*=2,h*=2;const o=Q(0,n.width,0,n.height),l=this._$generateFilterRect(o,a,h);J(o);const c=0|v.ceil(l.xMax),_=0|v.ceil(l.yMax),$=v.ceil(v.abs(l.xMin)+.5*v.abs(c-l.xMax)),u=v.ceil(v.abs(l.yMin)+.5*v.abs(_-l.yMax));t._$offsetX=$+t._$offsetX,t._$offsetY=u+t._$offsetY;const d=this._$blurX*a,g=this._$blurY*h;let p=1,m=1;d>128?p=.0625:d>64?p=.125:d>32?p=.25:d>16&&(p=.5),g>128?m=.0625:g>64?m=.125:g>32?m=.25:g>16&&(m=.5);const x=d*p,b=g*m,T=v.ceil(c*p),y=v.ceil(_*m),E=s.createTextureAttachment(T,y),A=[E,s.createTextureAttachment(T,y)];let M=0;t._$bind(E),t.reset(),t.setTransform(p,0,0,m,0,0),t.drawImage(n,$,u,n.width,n.height),t.blend.toOneZero();let w=s.getTextureFromCurrentAttachment();for(let e=0;e0){M=(M+1)%2;const e=A[M];t._$bind(e),t._$applyBlurFilter(w,!0,x),w=s.getTextureFromCurrentAttachment()}if(this._$blurY>0){M=(M+1)%2;const e=A[M];t._$bind(e),t._$applyBlurFilter(w,!1,b),w=s.getTextureFromCurrentAttachment()}}if(t.blend.reset(),1!==p||1!==m){const e=s.createTextureAttachment(c,_);t._$bind(e),t.reset(),t.imageSmoothingEnabled=!0,t.setTransform(1/p,0,0,1/m,0,0),t.drawImage(w,0,0,T,y),w=s.getTextureFromCurrentAttachment(),t.reset(),t.setTransform(1,0,0,1,0,0),s.releaseAttachment(A[0],!0),s.releaseAttachment(A[1],!0),i?s.releaseAttachment(r,!0):s.releaseAttachment(e,!1)}else s.releaseAttachment(A[(M+1)%2],!0),i?s.releaseAttachment(r,!0):s.releaseAttachment(A[M],!1);return w}}class Xt extends Gt{constructor(t=4,e=45,i=16777215,s=1,r=0,n=1,a=4,h=4,o=1,l=1,c="inner",_=!1){super(),this._$blurFilter=new zt(a,h,l),this._$distance=4,this._$angle=45,this._$highlightColor=16777215,this._$highlightAlpha=1,this._$shadowColor=0,this._$shadowAlpha=1,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.highlightColor=i,this.highlightAlpha=s,this.shadowColor=r,this.shadowAlpha=n,this.strength=o,this.type=c,this.knockout=_}static toString(){return"[class BevelFilter]"}static get namespace(){return"next2d.filters.BevelFilter"}toString(){return"[object BevelFilter]"}get namespace(){return"next2d.filters.BevelFilter"}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=dt(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get distance(){return this._$distance}set distance(t){(t=dt(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get highlightAlpha(){return this._$highlightAlpha}set highlightAlpha(t){(t=dt(+t,0,1,0))!==this._$highlightAlpha&&(this._$highlightAlpha=t,this._$doChanged())}get highlightColor(){return this._$highlightColor}set highlightColor(t){(t=dt(xt(t),0,16777215,16777215))!==this._$highlightColor&&(this._$highlightColor=t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get shadowAlpha(){return this._$shadowAlpha}set shadowAlpha(t){(t=dt(+t,0,1,0))!==this._$shadowAlpha&&(this._$shadowAlpha=t,this._$doChanged())}get shadowColor(){return this._$shadowColor}set shadowColor(t){(t=dt(xt(t),0,16777215,0))!==this._$shadowColor&&(this._$shadowColor=t,this._$doChanged())}get strength(){return this._$strength}set strength(t){(t=dt(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}get type(){return this._$type}set type(t){(t=`${t}`)!==this._$type&&(this._$type=t,this._$doChanged())}clone(){return new Xt(this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$toArray(){return ht(0,this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=Q(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const r=this._$angle*D;let n=v.abs(v.cos(r)*this._$distance),a=v.abs(v.sin(r)*this._$distance);return e&&(n*=e),i&&(a*=i),s.xMin=v.min(s.xMin,n),n>0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$strength>0&&0!==this._$distance&&this._$blurFilter._$canApply()}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");t.setTransform(1,0,0,1,0,0);const r=i.getTextureFromCurrentAttachment();if(!this._$canApply())return r;const n=s.width,a=s.height,h=t._$offsetX,o=t._$offsetY;let l=v.sqrt(e[0]*e[0]+e[1]*e[1]),c=v.sqrt(e[2]*e[2]+e[3]*e[3]);l/=f,c/=f,l*=2,c*=2;const _=this._$angle*D,$=v.cos(_)*this._$distance*l,u=v.sin(_)*this._$distance*c,d=i.createTextureAttachment(n,a);t._$bind(d),t.reset(),t.drawImage(r,0,0,n,a),t.globalCompositeOperation="erase",t.drawImage(r,2*$,2*u,n,a);const g=this._$blurFilter._$applyFilter(t,e,!1),p=g.width,m=g.height,x=v.ceil(p+2*v.abs($)),b=v.ceil(m+2*v.abs(u)),T="inner"===this._$type,y=T?n:x,E=T?a:b,A=v.abs($),M=v.abs(u),w=(p-n)/2,S=(m-a)/2,C=T?0:A+w,I=T?0:M+S,F=T?-w-$:A-$,R=T?-S-u:M-u;return t._$bind(s),i.releaseAttachment(d,!0),t._$applyBitmapFilter(g,y,E,n,a,C,I,p,m,F,R,!1,this._$type,this._$knockout,this._$strength,null,null,null,vt(this._$highlightColor,this._$highlightAlpha,!0),Tt(this._$highlightColor,this._$highlightAlpha,!0),yt(this._$highlightColor,this._$highlightAlpha,!0),this._$highlightAlpha,vt(this._$shadowColor,this._$shadowAlpha,!0),Tt(this._$shadowColor,this._$shadowAlpha,!0),yt(this._$shadowColor,this._$shadowAlpha,!0),this._$shadowAlpha),t._$offsetX=h+C,t._$offsetY=o+I,i.releaseTexture(g),i.getTextureFromCurrentAttachment()}}class qt extends Gt{constructor(t=null){super(),this._$matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix=t}static toString(){return"[class ColorMatrixFilter]"}static get namespace(){return"next2d.filters.ColorMatrixFilter"}toString(){return"[object ColorMatrixFilter]"}get namespace(){return"next2d.filters.ColorMatrixFilter"}get matrix(){return this._$matrix}set matrix(t){if(t&&T.isArray(t)&&20===t.length){for(let e=0;e<20;++e)if(t[e]!==this._$matrix[e]){this._$doChanged();break}this._$matrix=t}}clone(){return new qt(this._$matrix)}_$toArray(){return ht(2,this._$matrix)}_$generateFilterRect(t){return t}_$canApply(){return!0}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment(),r=s.width,n=s.height,a=e.createTextureAttachment(r,n);return t._$bind(a),t.reset(),t._$applyColorMatrixFilter(s,this._$matrix),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()}}class Yt extends Gt{constructor(t=0,e=0,i=null,s=1,r=0,n=!0,a=!0,h=0,o=0){super(),this._$matrixX=0,this._$matrixY=0,this._$matrix=null,this._$divisor=1,this._$bias=0,this._$preserveAlpha=!0,this._$clamp=!0,this._$color=0,this._$alpha=0,this.matrixX=t,this.matrixY=e,this.matrix=i,this.divisor=s,this.bias=r,this.preserveAlpha=n,this.clamp=a,this.color=h,this.alpha=o}static toString(){return"[class ConvolutionFilter]"}static get namespace(){return"next2d.filters.ConvolutionFilter"}toString(){return"[object ConvolutionFilter]"}get namespace(){return"next2d.filters.ConvolutionFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get bias(){return this._$bias}set bias(t){t!==this._$bias&&(this._$bias=0|t,this._$doChanged())}get clamp(){return this._$clamp}set clamp(t){t!==this._$clamp&&(this._$clamp=!!t,this._$doChanged())}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get divisor(){return this._$divisor}set divisor(t){t!==this._$divisor&&(this._$divisor=0|t,this._$doChanged())}get matrix(){return this._$matrix}set matrix(t){T.isArray(this._$matrix)&&ot(this._$matrix),this._$matrix=T.isArray(t)?t:null,this._$doChanged()}get matrixX(){return this._$matrixX}set matrixX(t){(t=0|dt(0|t,0,15,0))!==this._$matrixX&&(this._$matrixX=t,this._$doChanged())}get matrixY(){return this._$matrixY}set matrixY(t){(t=0|dt(0|t,0,15,0))!==this._$matrixY&&(this._$matrixY=t,this._$doChanged())}get preserveAlpha(){return this._$preserveAlpha}set preserveAlpha(t){t!==this._$preserveAlpha&&(this._$preserveAlpha=!!t,this._$doChanged())}clone(){return new Yt(this._$matrixX,this._$matrixY,this._$matrix?this._$matrix.slice():null,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$toArray(){return ht(3,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$matrix&&this._$matrixX*this._$matrixY===this._$matrix.length}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment();return this._$canApply()&&this._$matrix?(t._$applyConvolutionFilter(s,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,vt(this._$color,this._$alpha,!1),Tt(this._$color,this._$alpha,!1),yt(this._$color,this._$alpha,!1),this._$alpha),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()):s}}class Ht extends Gt{constructor(t=null,e=null,i=0,s=0,r=0,n=0,a="wrap",h=0,o=0){super(),this._$mapBitmap=null,this._$mapPoint=null,this._$componentX=0,this._$componentY=0,this._$scaleX=0,this._$scaleY=0,this._$mode="wrap",this._$color=0,this._$alpha=0,this.mapBitmap=t,this.mapPoint=e,this.componentX=i,this.componentY=s,this.scaleX=r,this.scaleY=n,this.mode=a,this.color=h,this.alpha=o}static toString(){return"[class DisplacementMapFilter]"}static get namespace(){return"next2d.filters.DisplacementMapFilter"}toString(){return"[object DisplacementMapFilter]"}get namespace(){return"next2d.filters.DisplacementMapFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get componentX(){return this._$componentX}set componentX(t){t!==this._$componentX&&(this._$componentX=t,this._$doChanged())}get componentY(){return this._$componentY}set componentY(t){t!==this._$componentY&&(this._$componentY=t,this._$doChanged())}get mapBitmap(){return this._$mapBitmap}set mapBitmap(t){t!==this._$mapBitmap&&(this._$mapBitmap=t,this._$doChanged())}get mapPoint(){return this._$mapPoint}set mapPoint(t){t!==this._$mapPoint&&(this._$mapPoint=t,this._$doChanged())}get mode(){return this._$mode}set mode(t){t!==this._$mode&&(this._$mode=t,this._$doChanged())}get scaleX(){return this._$scaleX}set scaleX(t){(t=dt(+t,-65535,65535,0))!==this._$scaleX&&(this._$scaleX=t,this._$doChanged())}get scaleY(){return this._$scaleY}set scaleY(t){(t=dt(+t,-65535,65535,0))!==this._$scaleY&&(this._$scaleY=t,this._$doChanged())}clone(){return new Ht(this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$toArray(){return ht(4,this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$mapBitmap&&this._$componentX>0&&this._$componentY>0&&0!==this._$scaleX&&0!==this._$scaleY}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;t.setTransform(1,0,0,1,0,0);const r=i.getTextureFromCurrentAttachment();if(!this._$canApply()||!s||!this._$mapBitmap)return r;const n=v.sqrt(e[0]*e[0]+e[1]*e[1]),a=v.sqrt(e[2]*e[2]+e[3]*e[3]);return t._$applyDisplacementMapFilter(r,this._$mapBitmap,r.width/n,r.height/a,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,vt(this._$color,this._$alpha,!0),Tt(this._$color,this._$alpha,!0),yt(this._$color,this._$alpha,!0),this._$alpha),i.releaseAttachment(s,!0),i.getTextureFromCurrentAttachment()}}class jt extends Gt{constructor(t=4,e=45,i=0,s=1,r=4,n=4,a=1,h=1,o=!1,l=!1,c=!1){super(),this._$blurFilter=new zt(r,n,h),this._$distance=4,this._$angle=45,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this._$hideObject=!1,this.distance=t,this.angle=e,this.color=i,this.alpha=s,this.strength=a,this.inner=o,this.knockout=l,this.hideObject=c}static toString(){return"[class DropShadowFilter]"}static get namespace(){return"next2d.filters.DropShadowFilter"}toString(){return"[object DropShadowFilter]"}get namespace(){return"next2d.filters.DropShadowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=dt(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get distance(){return this._$distance}set distance(t){(t=dt(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get hideObject(){return this._$hideObject}set hideObject(t){t!==this._$hideObject&&(this._$hideObject=!!t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=dt(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new jt(this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$toArray(){return ht(5,this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=Q(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const r=this._$angle*D;let n=v.cos(r)*this._$distance,a=v.sin(r)*this._$distance;return e&&(n*=e),i&&(a*=i),s.xMin=v.min(s.xMin,n),n>0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(t,e){const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");if(t.setTransform(1,0,0,1,0,0),!this._$canApply())return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),l=o.width,c=o.height,_=t._$offsetX,$=t._$offsetY,u=_-a,d=$-h;let g=v.sqrt(e[0]*e[0]+e[1]*e[1]),p=v.sqrt(e[2]*e[2]+e[3]*e[3]);g/=f,p/=f,g*=2,p*=2;const m=this._$angle*D,x=v.cos(m)*this._$distance*g,b=v.sin(m)*this._$distance*p,T=this._$inner?r:l+v.max(0,v.abs(x)-u),y=this._$inner?n:c+v.max(0,v.abs(b)-d),E=v.ceil(T),A=v.ceil(y),M=(E-T)/2,w=(A-y)/2,S=this._$inner?0:v.max(0,u-x)+M,C=this._$inner?0:v.max(0,d-b)+w,I=this._$inner?x-_:(x>0?v.max(0,x-u):0)+M,F=this._$inner?b-$:(b>0?v.max(0,b-d):0)+w;let R,B;return this._$inner?(R="inner",B=this._$knockout||this._$hideObject):!this._$knockout&&this._$hideObject?(R="full",B=!0):(R="outer",B=this._$knockout),t._$bind(s),t._$applyBitmapFilter(o,E,A,r,n,S,C,l,c,I,F,!0,R,B,this._$strength,null,null,null,vt(this._$color,this._$alpha,!0),Tt(this._$color,this._$alpha,!0),yt(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),t._$offsetX=a+S,t._$offsetY=h+C,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class Wt extends Gt{constructor(t=0,e=1,i=4,s=4,r=1,n=1,a=!1,h=!1){super(),this._$blurFilter=new zt(i,s,n),this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this.color=t,this.alpha=e,this.strength=r,this.inner=a,this.knockout=h}static toString(){return"[class GlowFilter]"}static get namespace(){return"next2d.filters.GlowFilter"}toString(){return"[object GlowFilter]"}get namespace(){return"next2d.filters.GlowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=dt(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=dt(xt(t),0,16777215,4))!==this._$color&&(this._$color=t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=dt(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new Wt(this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$toArray(){return ht(6,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){const s=Q(t.xMin,t.xMax,t.yMin,t.yMax);return this._$canApply()?this._$blurFilter._$generateFilterRect(s,e,i):s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(t,e){const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");if(this._$updated=!1,t.setTransform(1,0,0,1,0,0),!this._$canApply())return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),l=o.width,c=o.height,_=t._$offsetX,$=t._$offsetY,u=this._$inner?r:l,d=this._$inner?n:c,g=this._$inner?0:_-a,f=this._$inner?0:$-h,p=this._$inner?-_:0,m=this._$inner?-$:0,x=this._$inner?"inner":"outer";return t._$bind(s),t._$applyBitmapFilter(o,u,d,r,n,g,f,l,c,p,m,!0,x,this._$knockout,this._$strength,null,null,null,vt(this._$color,this._$alpha,!0),Tt(this._$color,this._$alpha,!0),yt(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),t._$offsetX=a+g,t._$offsetY=h+f,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class Kt extends Gt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,l="inner",c=!1){super(),this._$blurFilter=new zt(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=l,this.knockout=c}static toString(){return"[class GradientBevelFilter]"}static get namespace(){return"next2d.filters.GradientBevelFilter"}toString(){return"[object GradientBevelFilter]"}get namespace(){return"next2d.filters.GradientBevelFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,T.isArray(t)){for(let e=0;e0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;t.setTransform(1,0,0,1,0,0);const r=i.getTextureFromCurrentAttachment();if(!this._$canApply()||!s)return r;const n=s.width,a=s.height,h=t._$offsetX,o=t._$offsetY;let l=v.sqrt(e[0]*e[0]+e[1]*e[1]),c=v.sqrt(e[2]*e[2]+e[3]*e[3]);l/=f,c/=f,l*=2,c*=2;const _=+this._$angle*D,$=+v.cos(_)*this._$distance*l,u=+v.sin(_)*this._$distance*c,d=i.createTextureAttachment(n,a);t._$bind(d),t.reset(),t.drawImage(r,0,0,n,a),t.globalCompositeOperation="erase",t.drawImage(r,2*$,2*u,n,a);const g=this._$blurFilter._$applyFilter(t,e,!1),p=g.width,m=g.height,x=v.ceil(p+2*v.abs($)),b=v.ceil(m+2*v.abs(u)),T="inner"===this._$type,y=T?n:x,E=T?a:b,A=v.abs($),M=v.abs(u),w=(p-n)/2,S=(m-a)/2,C=T?0:A+w,I=T?0:M+S,F=T?-w-$:A-$,R=T?-S-u:M-u;return t._$bind(s),t._$applyBitmapFilter(g,y,E,n,a,C,I,p,m,F,R,!1,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),t._$offsetX=h+C,t._$offsetY=o+I,i.releaseAttachment(d,!0),i.getTextureFromCurrentAttachment()}}class Qt extends Gt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,l="inner",c=!1){super(),this._$blurFilter=new zt(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=l,this.knockout=c}static toString(){return"[class GradientGlowFilter]"}static get namespace(){return"next2d.filters.GradientGlowFilter"}toString(){return"[object GradientGlowFilter]"}get namespace(){return"next2d.filters.GradientGlowFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,T.isArray(t)){for(let e=0;e0&&(s.xMax+=n),s.yMin=v.min(s.yMin,a),a>0&&(s.yMax+=a),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;if(t.setTransform(1,0,0,1,0,0),!this._$canApply()||!s)return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),l=o.width,c=o.height,_=t._$offsetX,$=t._$offsetY,u=_-a,d=$-h;let g=v.sqrt(e[0]*e[0]+e[1]*e[1]),p=v.sqrt(e[2]*e[2]+e[3]*e[3]);g/=f,p/=f,g*=2,p*=2;const m=+this._$angle*D,x=+v.cos(m)*this._$distance*g,b=+v.sin(m)*this._$distance*p,T="inner"===this.type,y=T?r:l+v.max(0,v.abs(x)-u),E=T?n:c+v.max(0,v.abs(b)-d),A=v.ceil(y),M=v.ceil(E),w=(A-y)/2,S=(M-E)/2,C=T?0:v.max(0,u-x)+w,I=T?0:v.max(0,d-b)+S,F=T?x-_:(x>0?v.max(0,x-u):0)+w,R=T?b-$:(b>0?v.max(0,b-d):0)+S;return t._$bind(s),t._$applyBitmapFilter(o,A,M,r,n,C,I,l,c,F,R,!0,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),t._$offsetX=a+C,t._$offsetY=h+I,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class Jt{constructor(t){this._$displayObject=t,this._$matrix=null,this._$colorTransform=null,this._$blendMode=null,this._$filters=null}static toString(){return"[class Transform]"}static get namespace(){return"next2d.geom.Transform"}toString(){return"[object Transform]"}get namespace(){return"next2d.geom.Transform"}get colorTransform(){if(this._$colorTransform)return this._$colorTransform._$clone();const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.colorTransform){const t=e.colorTransform;return dr(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7])}return this._$transform(),this._$colorTransform||(this._$colorTransform=dr()),this._$colorTransform._$clone()}set colorTransform(t){this._$transform(null,t._$colorTransform)}get concatenatedColorTransform(){let t=this._$rawColorTransform(),e=this._$displayObject._$parent;for(;e;)t=ft(e._$transform._$rawColorTransform(),t),e=e._$parent;return dr(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7])}get matrix(){if(this._$matrix)return this._$matrix._$clone();const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.matrix){const t=e.matrix;return $r(t[0],t[1],t[2],t[3],t[4],t[5])}return this._$transform(),this._$matrix||(this._$matrix=$r()),this._$matrix._$clone()}set matrix(t){this._$transform(t._$matrix,null)}get concatenatedMatrix(){let t=this._$rawMatrix(),e=this._$displayObject._$parent;for(;e;)t=gt(e._$transform._$rawMatrix(),t),e=e._$parent;return $r(t[0],t[1],t[2],t[3],t[4],t[5])}pixelBounds(){if(!this._$displayObject)return new Vt(0,0,0,0);const t=this._$displayObject._$getBounds(null),e=new Vt(t.xMin,t.yMin,+v.abs(t.xMax-t.xMin),+v.abs(t.yMax-t.yMin));return J(t),e}_$rawMatrix(){if(null!==this._$matrix)return this._$matrix._$matrix;const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.matrix){if(T.isArray(e.matrix)){const t=e.matrix;e.matrix=it(t[0],t[1],t[2],t[3],t[4],t[5]),ot(t)}return e.matrix}return P}_$rawColorTransform(){if(null!==this._$colorTransform)return this._$colorTransform._$colorTransform;const t=this._$displayObject,e=t._$placeObject||t._$getPlaceObject();if(e&&e.colorTransform){if(T.isArray(e.colorTransform)){const t=e.colorTransform;e.colorTransform=rt(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]),ot(t)}return e.colorTransform}return k}_$transform(t=null,e=null,i=null,s=""){const r=this._$displayObject,n=r._$placeObject||r._$getPlaceObject();this._$setMatrix(t,n),this._$setColorTransform(e,n),this._$setFilters(i,n),this._$setBlendMode(s,n)}_$setMatrix(t=null,e=null){if((t||e)&&(this._$displayObject._$doChanged(),x()),this._$matrix||(this._$matrix=$r(1,0,0,1,0,0),!t&&e&&e.matrix&&(t=e.matrix)),t){const e=this._$matrix._$matrix;e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]}}_$setColorTransform(t=null,e=null){if((t||e)&&(this._$displayObject._$doChanged(),x()),this._$colorTransform||(this._$colorTransform=dr(1,1,1,1,0,0,0,0),!t&&e&&e.colorTransform&&(t=e.colorTransform)),t){const e=this._$colorTransform._$colorTransform;e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]}}_$setFilters(t=null,e=null){if(T.isArray(t))return this._$filters&&ot(this._$filters),this._$filters=t.slice(0),this._$displayObject._$doChanged(),void x();if(!this._$filters)if(e){if(e.filters){this._$filters=e.filters.slice(0);for(let t=0;t-1){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this.rotation,s=i?pt(e,this._$transform._$rawMatrix()):e;i&&J(e);const r=v.abs(s.yMax-s.yMin);switch(J(s),r){case 0:case b:case-1/0:this.scaleY=0;break;default:this.scaleY=t/r}}}get loaderInfo(){return this._$loaderInfo}get mask(){return this._$mask}set mask(t){t!==this._$mask&&(this._$mask&&(Mr&&this._$mask.stage&&this._$mask._$removeWorkerInstance(),this._$mask._$isMask=!1,this._$mask=null),t&&(Mr&&"_$createWorkerInstance"in t&&"function"==typeof t._$createWorkerInstance&&t._$createWorkerInstance(),t._$isMask=!0,this._$mask=t),this._$doChanged())}get mouseX(){return l()?this.globalToLocal(_r()).x:0}get mouseY(){return l()?this.globalToLocal(_r()).y:0}get name(){return this._$name?this._$name:`instance${this._$instanceId}`}set name(t){this._$name=`${t}`;const e=this._$parent;if(e&&e._$names){e._$names.clear();const t=e._$getChildren();for(let i=0;it[0]?-1*e:e}set scaleX(t){if(t=dt(+t,N,O),!E.isInteger(t)){const e=t.toString(),i=e.indexOf("e");-1!==i&&(t=+e.slice(0,i)),t=+t.toFixed(4)}if(this._$scaleX===t)return;const e=this._$transform,i=null!==e._$matrix,s=i?e._$matrix:e.matrix;if(0===s.b||C(s.b))s.a=t;else{let e=v.atan2(s.b,s.a);e===-v.PI&&(e=0),s.b=t*v.sin(e),s.a=t*v.cos(e)}i?(this._$doChanged(),x()):(e.matrix=s,ur(s)),this._$scaleX=t}get scaleY(){if(null!==this._$scaleY)return this._$scaleY;const t=this._$transform._$rawMatrix();let e=v.sqrt(t[2]*t[2]+t[3]*t[3]);if(!E.isInteger(e)){const t=e.toString(),i=t.indexOf("e");-1!==i&&(e=+t.slice(0,i)),e=+e.toFixed(4)}return 0>t[3]?-1*e:e}set scaleY(t){if(t=dt(+t,N,O),!E.isInteger(t)){const e=t.toString(),i=e.indexOf("e");-1!==i&&(t=+e.slice(0,i)),t=+t.toFixed(4)}if(this._$scaleY===t)return;const e=this._$transform,i=null!==e._$matrix,s=i?e._$matrix:e.matrix;if(0===s.c||C(s.c))s.d=t;else{let e=v.atan2(-s.c,s.d);e===-v.PI&&(e=0),s.c=-t*v.sin(e),s.d=t*v.cos(e)}i?(this._$doChanged(),x()):(e.matrix=s,ur(s)),this._$scaleY=t}get stage(){if(this._$stage)return this._$stage;const t=this._$parent;return t?t._$stage:null}get transform(){return this._$transform}set transform(t){this._$transform=t}get visible(){return this._$visible}set visible(t){this._$visible!==t&&(this._$visible=!!t,this._$doChanged(),x())}get width(){const t="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),e=pt(t,this._$transform._$rawMatrix());J(t);const i=v.abs(e.xMax-e.xMin);switch(J(e),!0){case 0===i:case i===b:case i===-1/0:return 0;default:return+i.toFixed(2)}}set width(t){if(!C(t=+t)&&t>-1){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this.rotation,s=i?pt(e,this._$transform._$rawMatrix()):e;i&&J(e);const r=v.abs(s.xMax-s.xMin);switch(J(s),!0){case 0===r:case r===b:case r===-1/0:this.scaleX=0;break;default:this.scaleX=t/r}}}get x(){return this._$transform._$rawMatrix()[4]}set x(t){const e=this._$transform;if(e._$matrix)e._$matrix.tx=t,this._$doChanged(),x();else{const i=e.matrix;i.tx=t,e.matrix=i,ur(i)}}get y(){return this._$transform._$rawMatrix()[5]}set y(t){const e=this._$transform;if(e._$matrix)e._$matrix.ty=t,this._$doChanged(),x();else{const i=e.matrix;i.ty=t,e.matrix=i,ur(i)}}getBounds(t=null){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this._$transform.concatenatedMatrix,s=pt(e,i._$matrix);ur(i),J(e);const r=Q(s.xMin,s.xMax,s.yMin,s.yMax);J(s),t||(t=this);const n=t._$transform.concatenatedMatrix;n.invert();const a=pt(r,n._$matrix);J(r),ur(n);const h=a.xMin,o=a.yMin,l=a.xMax,c=a.yMax;return J(a),new Vt(h,o,v.abs(l-h),v.abs(c-o))}globalToLocal(t){const e=this._$transform.concatenatedMatrix;e.invert();const i=new Dt(t.x*e.a+t.y*e.c+e.tx,t.x*e.b+t.y*e.d+e.ty);return ur(e),i}hitTestObject(t){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=this._$transform.concatenatedMatrix,s=pt(e,i._$matrix);ur(i),J(e);const r=t._$getBounds(null),n=t._$transform.concatenatedMatrix,a=pt(r,n._$matrix);ur(n),J(r);const h=v.max(s.xMin,a.xMin),o=v.max(s.yMin,a.yMin),l=v.min(s.xMax,a.xMax),c=v.min(s.yMax,a.yMax);return J(s),J(a),l-h>=0&&c-o>=0}hitTestPoint(t,e,i=!1){if(i){let i=P,s=this._$parent;for(;s;)i=gt(s._$transform._$rawMatrix(),i),s=s._$parent;rr.setTransform(1,0,0,1,0,0),rr.beginPath();let r=!1;return"_$hit"in this&&"function"==typeof this._$hit&&(r=this._$hit(rr,i,{x:t,y:e},!0)),i!==P&&st(i),r}const s="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),r=pt(s,this._$transform._$rawMatrix());J(s);const n=new Vt(r.xMin,r.yMin,r.xMax-r.xMin,r.yMax-r.yMin);J(r);const a=this._$parent?this._$parent.globalToLocal(new Dt(t,e)):new Dt(t,e);return n.containsPoint(a)}localToGlobal(t){const e=this._$transform.concatenatedMatrix,i=new Dt(t.x*e.a+t.y*e.c+e.tx,t.x*e.b+t.y*e.d+e.ty);return ur(e),i}getLocalVariable(t){return this._$variables?this._$variables.has(t)?this._$variables.get(t):void 0:null}setLocalVariable(t,e){this._$variables||(this._$variables=ct()),this._$variables.set(t,e)}hasLocalVariable(t){return!!this._$variables&&this._$variables.has(t)}deleteLocalVariable(t){this._$variables&&this._$variables.has(t)&&(this._$variables.delete(t),this._$variables.size||(lt(this._$variables),this._$variables=null))}getGlobalVariable(t){return Os.has(t)?Os.get(t):null}setGlobalVariable(t,e){Os.set(t,e)}hasGlobalVariable(t){return Os.has(t)}deleteGlobalVariable(t){Os.has(t)&&Os.delete(t)}clearGlobalVariable(){return Os.clear()}_$getPlaceObject(){if(!this._$placeObject){const t=this._$placeId;if(-1===t)return null;const e=this._$parent;if(!e||!e._$placeObjects)return null;const i=e._$placeMap;if(!i||!i.length)return null;const s=i["currentFrame"in e?e.currentFrame:1];if(!s)return null;const r=0|s[t],n=e._$placeObjects[r];return n?(this._$changePlace=r!==this._$currentPlaceId,this._$currentPlaceId=r,this._$placeObject=n,n):null}return this._$placeObject}_$baseBuild(t,e){const i=e._$loaderInfo;if(!i||!i._$data)throw new Error("the loaderInfo or data is nul.");return this._$parent=e,this._$root=e._$root,this._$stage=e._$stage,this._$loaderInfo=i,this._$characterId=0|t.characterId,this._$clipDepth=0|t.clipDepth,this._$startFrame=0|t.startFrame,this._$endFrame=0|t.endFrame,this._$name=t.name||"",i._$data.characters[t.characterId]}_$isUpdated(){return this._$updated}_$updateState(){this._$isNext=!0;const t=this._$parent;t&&t._$updateState()}_$doChanged(){this._$posted=!1,this._$isNext=!0,this._$updated=!0;const t=this._$parent;t&&(t._$updated||t._$doChanged())}_$drawFilter(t,e,i,s,r,n=null){const a=ht(this._$instanceId,"f");let h=wt.get(a);const o=this._$isFilterUpdated(e,i,!0);if(h&&!o)return t.cachePosition=h,h;h&&wt.set(a,null);const l=t.frameBuffer,c=n||t.getTextureFromRect(t.cachePosition),_=this._$applyFilter(t,i,c,e,s,r);l.textureManager.release(c);const $=this._$getLayerBounds(e);return h=l.createCachePosition(v.ceil(v.abs($.xMax-$.xMin)),v.ceil(v.abs($.yMax-$.yMin))),J($),h.filterState=!0,h.matrix=`${e[0]}_${e[1]}_${e[2]}_${e[3]}_0_0`,h.offsetX=_.offsetX,h.offsetY=_.offsetY,t.drawTextureFromRect(_,h),wt.set(a,h),ot(a),h}_$getLayerBounds(t){const e="_$getBounds"in this&&"function"==typeof this._$getBounds?this._$getBounds():Q(),i=pt(e,t);J(e);const s=this._$filters||this.filters;if(!s.length)return i;let r=Q(0,v.abs(i.xMax-i.xMin),0,v.abs(i.yMax-i.yMin));J(i);let n=+v.sqrt(t[0]*t[0]+t[1]*t[1]),a=+v.sqrt(t[2]*t[2]+t[3]*t[3]);n/=f,a/=f,n*=2,a*=2;for(let t=0;t-1&&(t.depth=this._$placeId),this._$clipDepth&&(t.clipDepth=this._$clipDepth),this._$isMask&&(t.isMask=this._$isMask);const e=this._$mask;if(e){t.maskId=e._$instanceId;let i=P,s=e._$parent;for(;s;)i=gt(s._$transform._$rawMatrix(),i),s=s._$parent;t.maskMatrix=i}if(this._$visible){const e=this._$transform,i=e._$rawMatrix();1!==i[0]&&(t.a=i[0]),0!==i[1]&&(t.b=i[1]),0!==i[2]&&(t.c=i[2]),1!==i[3]&&(t.d=i[3]),0!==i[4]&&(t.tx=i[4]),0!==i[5]&&(t.ty=i[5]);const s=e._$rawColorTransform();1!==s[0]&&(t.f0=s[0]),1!==s[1]&&(t.f1=s[1]),1!==s[2]&&(t.f2=s[2]),1!==s[3]&&(t.f3=s[3]),0!==s[4]&&(t.f4=s[4]),0!==s[5]&&(t.f5=s[5]),0!==s[6]&&(t.f6=s[6]),0!==s[7]&&(t.f7=s[7]);const r=this._$filters||this.filters;if(r&&r.length){const e=ht();for(let t=0;tt._$names.size&&t._$names.has(e)?t._$names.get(e):t[e]})}get mouseChildren(){return this._$mouseChildren}set mouseChildren(t){this._$mouseChildren=!!t}get numChildren(){return this._$needsChildren?this._$getChildren().length:this._$children.length}addChild(t){return t._$parent&&t._$parent._$remove(t,!(t._$parent._$instanceId===this._$instanceId)),this._$getChildren().push(t),t._$name&&this._$names.set(t._$name,t),this._$addChild(t)}addChildAt(t,e){t._$parent&&t._$parent._$remove(t,!(t._$parent._$instanceId===this._$instanceId));const i=this._$getChildren(),s=i.length;if(0>e||e>s)throw new RangeError(`RangeError: addChildAt: index error: ${e}`);if(s&&s>e){i.splice(e,0,t);for(let t=0;tt||t>e.length)throw new RangeError(`RangeError: getChildAt: index error: ${t}`);return t in e?e[t]:null}getChildByName(t){if(!t)return null;const e=this._$getChildren();for(let i=0;it;--s)this._$remove(i[s])}}setChildIndex(t,e){const i=this.getChildIndex(t);if(i===e)return;const s=this._$getChildren();s.splice(i,1),s.splice(e,0,t),Mr&&this._$postChildrenIds(),this._$doChanged()}swapChildren(t,e){const i=this._$getChildren(),s=this.getChildIndex(t),r=this.getChildIndex(e);i[s]=e,i[r]=t,Mr&&this._$postChildrenIds(),this._$doChanged()}swapChildrenAt(t,e){this.swapChildren(this.getChildAt(t),this.getChildAt(e))}_$getBounds(t=null){let e=P;if(t){e=t;const i=this._$transform._$rawMatrix();1===i[0]&&0===i[1]&&0===i[2]&&1===i[3]&&0===i[4]&&0===i[5]||(e=gt(t,i))}const i=this._$needsChildren?this._$getChildren():this._$children;if(!i.length){const i=Q(e[4],-e[4],e[5],-e[5]);return t&&e!==t&&st(e),i}const s=E.MAX_VALUE;let r=s,n=-s,a=s,h=-s;for(let t=0;te){if(l._$isNext=!0,l._$placeObject=null,l._$filters=null,l._$blendMode=null,-1===l._$id){h.push(l),l._$name&&this._$names.set(l._$name,l);continue}const t=i[a];if(l._$id===t){l._$placeId=a,h.push(l),l._$name&&this._$names.set(l._$name,l),n.has(t)&&n.delete(t),r.set(t,!0),a++,s&&l._$postProperty();continue}n.set(l._$id,l)}else s&&l._$removeWorkerInstance(),wt.setRemoveTimer(_),l._$loaderInfo&&l._$characterId&&wt.setRemoveTimer(`${l._$loaderInfo._$id}@${l._$characterId}`),l._$graphics&&wt.setRemoveTimer(l._$graphics._$uniqueKey),l.willTrigger(It.REMOVED)&&l.dispatchEvent(new It(It.REMOVED,!0)),l.willTrigger(It.REMOVED_FROM_STAGE)&&l.dispatchEvent(new It(It.REMOVED_FROM_STAGE,!0)),l._$added=!1,l._$addedStage=!1,l._$active=!1,l._$updated=!0,l._$filters=null,l._$blendMode=null,l._$isNext=!0,l._$placeObject=null,l._$created=!1,l._$posted=!1,l instanceof ee&&(l._$executeRemovedFromStage(),l._$removeParentAndStage())}if(i)for(let t=0;t-1;--e)t[e]._$prepareActions();this._$executeAddedEvent()}_$nextFrame(){let t=!1;const e=this._$getChildren();for(let i=e.length-1;i>-1;--i){const s=e[i];s._$isNext&&(t?s._$nextFrame():t=s._$nextFrame())}return this._$executeAddedEvent(),this._$isNext=t,!this._$posted&&Mr&&this._$postProperty(),this._$isNext}_$clip(t,e){let i=e;const s=this._$transform._$rawMatrix();1===s[0]&&0===s[1]&&0===s[2]&&1===s[3]&&0===s[4]&&0===s[5]||(i=gt(e,s));const r=this._$getChildren();for(let e=0;e0||"normal"!==a){const s=this._$getBounds(null),h=pt(s,i);J(s);const o=+h.xMax,l=+h.xMin,c=+h.yMax,_=+h.yMin;J(h);const $=v.ceil(v.abs(o-l)),u=v.ceil(v.abs(c-_));if(0>=$||0>=u)return Mt(r),i!==e&&st(i),null;let d=+v.sqrt(i[0]*i[0]+i[1]*i[1]);if(!E.isInteger(d)){const t=d.toString(),e=t.indexOf("e");-1!==e&&(d=+t.slice(0,e)),d=+d.toFixed(4)}let g=+v.sqrt(i[2]*i[2]+i[3]*i[3]);if(!E.isInteger(g)){const t=g.toString(),e=t.indexOf("e");-1!==e&&(g=+t.slice(0,e)),g=+g.toFixed(4)}r.canApply=this._$canApply(n);let f=Q(0,$,0,u);if(r.canApply&&n)for(let t=0;tp.width||_-f.yMin>p.height)return J(f),Mt(r),i!==e&&st(i),null;if(0>l+f.xMax||0>_+f.yMax)return J(f),Mt(r),i!==e&&st(i),null;let m=i[4]-l,x=i[5]-_;t._$startLayer(Q(l,o,_,c));const b=this._$isFilterUpdated(i,n,r.canApply),T=this._$getLayerBounds(i),y=v.ceil(v.abs(T.xMax-T.xMin)),A=v.ceil(v.abs(T.yMax-T.yMin));J(T);const M=y-f.xMax+f.xMin,w=A-f.yMax+f.yMin;m+=M,x+=w,r.sw=M,r.sh=w,b&&t._$saveAttachment(v.ceil($+M),v.ceil(u+w),!0),r.isLayer=!0,r.isUpdated=b,r.filters=n,r.blendMode=a,r.color=rt(),r.matrix=it(i[0],i[1],i[2],i[3],m,x),i!==e&&st(i),J(f)}return r}_$postDraw(t,e,i,s){t.drawInstacedArray();const r=ht(this._$instanceId,"f"),n=t.frameBuffer,a=s.matrix;let h=0,o=0,l=wt.get(r);if(!l||s.isUpdated){l&&wt.set(r,null),l=n.getTextureFromCurrentAttachment();const i=s.filters;let c=!1;if(i&&i.length){for(let s=0;s_||i._$clipDepth>0)&&(t.restore(),c&&t._$leaveClip(),_=0,c=!0),!c)continue;if(i._$clipDepth>0){_=i._$clipDepth,c=i._$shouldClip(o),c&&(t.save(),c=i._$startClip(t,o));continue}const r=i._$mask;if(r){let e;if(r._$updated=!1,this===r._$parent)e=o;else{e=P;let i=r._$parent;for(;i;)e=gt(i._$transform._$rawMatrix(),e),i=i._$parent;const s=$.scaleX,n=it(s,0,0,s,0,0);if(e=gt(n,e),st(n),t.isLayer){const i=t.getCurrentPosition();e[4]-=i.xMin,e[5]-=i.yMin}}if(!r._$shouldClip(e))continue;const i=r._$startClip(t,e);if(t.save(),!i){t.restore();continue}}i._$draw(t,o,l),i._$updated=!1,r&&(t.restore(),t._$leaveClip())}if(_&&(t.restore(),c&&t._$leaveClip()),h.isLayer)return this._$postDraw(t,e,s,h);h.matrix!==e&&st(h.matrix),s!==i&&nt(s),Mt(h)}_$mouseHit(t,e,i,s=!0){let r=e;const n=this._$transform._$rawMatrix();n!==P&&(r=gt(e,n));const a=this._$getChildren(),h=ht(),o=ht(),l=ct();let c=0,_=0;for(let t=0;tc&&(_=0,c=0),_&&l.set(e._$instanceId,_),o.push(e)))}const $=this._$mouseChildren&&s;let u=!1;const d=this._$root===this;for(;o.length;){const e=o.pop();if(e._$isMask)continue;if(d&&!(e instanceof te))continue;if(l.has(e._$instanceId)){const s=l.get(e._$instanceId);if(!s)continue;if(!h[s]._$hit(t,r,i,!0))continue}const s=e._$mask;if(s)if(this===s._$parent){if(!s._$hit(t,r,i,!0))continue}else{let e=P,r=s._$parent;for(;r;)e=gt(r._$transform._$rawMatrix(),e),r=r._$parent;if(!s._$hit(t,e,i,!0))continue}if(e._$mouseHit(t,r,i,$)||e._$hitArea&&e._$hitArea._$mouseHit(t,r,i,$)){if(e._$root===e)return!0;if(!$)return!0;if(u=!0,e instanceof te){if(!e.mouseEnabled&&!e._$hitObject)continue;return Zs||i.pointer||("_$text"in e&&"type"in e&&"input"===e.type&&(i.pointer="text"),"buttonMode"in e&&"useHandCursor"in e&&e.buttonMode&&e.useHandCursor&&(i.pointer="pointer")),i.hit||(i.hit=!e.mouseEnabled&&e._$hitObject?e._$hitObject:e),!0}}}return ot(h),ot(o),lt(l),r!==e&&st(r),u}_$hit(t,e,i,s=!1){let r=e;const n=this._$transform._$rawMatrix();n!==P&&(r=gt(e,n));const a=this._$getChildren();for(let e=a.length;e>-1;--e){const n=a[e];if(!n._$isMask&&n._$hit(t,r,i,s))return!0}return r!==e&&st(r),!1}_$createInstance(t){if(!this._$dictionary)throw new Error("the dictionary is null.");const e=this._$dictionary[t],i=this._$loaderInfo;if(!i||!i._$data)throw new Error("the loaderInfo or data is null.");const s=i._$data.characters[e.characterId],r=Ar(s.extends);return r._$build(e,this),r._$id=t,r}_$outCheck(t,e){let i=P,s=this._$parent;for(;s;)i=gt(s._$transform._$rawMatrix(),i),s=s._$parent;rr.setTransform(1,0,0,1,0,0),rr.beginPath();const r={x:t,y:e,pointer:"",hit:null};return this._$mouseHit(rr,i,r)}_$createWorkerInstance(){if(this._$created||!Mr)return;this._$created=!0,this._$posted=!0,this._$updated=!1;let t=0;const e=hr();e[t++]=this._$instanceId,e[t++]=this._$parent?this._$parent._$instanceId:-1,this._$registerProperty(e,2);const i=or();i.command="createDisplayObjectContainer",i.buffer=e;const s=ht(e.buffer);Mr.postMessage(i,s),lr(i),ot(s),this._$postChildrenIds()}_$postProperty(){if(!Mr)return;this._$postChildrenIds();const t=ht(),e=this._$createMessage();Mr.postMessage(e,t),ot(t),this._$posted=!0,this._$updated=!1}_$postChildrenIds(t=null){if(!Mr||!this._$created)return;let e=!1;if(!t){const i=this._$getChildren();t=ht();for(let e=0;eo||a>l)&&(h._$width=n,h._$height=a,h._$resizeCanvas(n,a,h.scaleX));const c=i?i._$colorTransform:k;let _=e?e._$matrix:P;if(e){const e=t._$transform.matrix;e.invert(),_=gt(_,e._$matrix),ur(e)}if(s||(s=wt.getCanvas()),Mr){t._$stage||(t instanceof ee?Sr&&Sr(t):(t._$createWorkerInstance(),t._$postProperty())),s.width=n,s.height=a;const e=s.getContext("2d");if(!e)throw new Error("the context is null.");e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,n,a);const i=t._$instanceId;Hs.set(i,{source:t,context:e,callback:r});const h=ht(),o={command:"bitmapDraw",sourceId:i,width:n,height:a};1===_[0]&&0===_[1]&&0===_[2]&&1===_[3]&&0===_[4]&&0===_[5]||(o.matrix=_.slice(),h.push(o.matrix.buffer)),1===c[0]&&1===c[1]&&1===c[2]&&1===c[3]&&0===c[4]&&0===c[5]&&0===c[6]&&0===c[7]||(o.colorTransform=c.slice(),h.push(o.colorTransform.buffer)),Mr.postMessage(o,h),ot(h)}else{const e=h.context;if(!e)throw new Error("the context is null.");e.reset(),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,h._$width,h._$height),e.beginPath(),t._$draw(e,_,c),e.drawInstacedArray(),e.frameBuffer.transferToMainTexture(),s.width=n,s.height=a;const i=s.getContext("2d");if(!i)return;i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,n,a),i.drawImage(h.canvas,0,0),r&&r(s)}e&&ur(e),i&&gr(i)}}class se extends Ft{constructor(t,e){super(),this._$name=`${t}`,this._$frame=0|e}static toString(){return"[class FrameLabel]"}static get namespace(){return"next2d.display.FrameLabel"}toString(){return"[object FrameLabel]"}get namespace(){return"next2d.display.FrameLabel"}get frame(){return this._$frame}get name(){return this._$name}}class re{constructor(t,e=null,i=!0,s=!1){this._$bitmapData=t,this._$matrix=e,this._$repeat=i,this._$smooth=s}clone(){return new re(this._$bitmapData.clone(),this._$matrix?this._$matrix.clone():null,this._$repeat,this._$smooth)}toArray(){return ht(this._$bitmapData,this._$matrix,this._$repeat,this._$smooth)}}class ne{constructor(t,e,i,s,r=null,n="pad",a="rgb",h=0){this._$type=t,this._$colors=e,this._$alphas=i,this._$ratios=s,this._$matrix=r,this._$spreadMethod=n,this._$interpolationMethod=a,this._$focalPointRatio=h,this._$colorStops=ht()}get colorStops(){if(!this._$colorStops.length){const t=v.min(v.min(this._$alphas.length,this._$colors.length),this._$ratios.length);for(let e=0;e7)switch(this._$recode||(this._$recode=ht()),this._$fills[2]===this._$fills[this._$fills.length-2]&&this._$fills[3]===this._$fills[this._$fills.length-1]||this._$fills.push(ae.LINE_TO,this._$fills[2],this._$fills[3]),this._$recode.push(...this._$fills),this._$fillType){case ae.FILL_STYLE:this._$recode.push(this._$fillType,this._$fillStyleR,this._$fillStyleG,this._$fillStyleB,this._$fillStyleA,ae.END_FILL);break;case ae.GRADIENT_FILL:this._$fillGradient&&this._$recode.push(this._$fillType,...this._$fillGradient.toArray());break;case ae.BITMAP_FILL:this._$fillBitmap&&this._$recode.push(this._$fillType,...this._$fillBitmap.toArray())}return this._$fills&&(ot(this._$fills),this._$fills=null),this._$fillType=0,this._$fillGradient=null,this._$fillBitmap=null,this._$fillStyleR=0,this._$fillStyleG=0,this._$fillStyleB=0,this._$fillStyleA=0,this._$doFill=!1,this._$restart(),this}endLine(){if(this._$doLine&&this._$lines)switch(this._$recode||(this._$recode=ht()),this._$recode.push(...this._$lines),ot(this._$lines),this._$lines=null,this._$lineType){case ae.STROKE_STYLE:this._$recode.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,this._$lineStyleR,this._$lineStyleG,this._$lineStyleB,this._$lineStyleA,ae.END_STROKE);break;case ae.GRADIENT_STROKE:this._$lineGradient&&this._$recode.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$lineGradient.toArray());break;case ae.BITMAP_STROKE:this._$fillBitmap&&this._$recode.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$fillBitmap.toArray())}return this._$lineType=0,this._$lineWidth=0,this._$lineGradient=null,this._$lineStyleR=0,this._$lineStyleG=0,this._$lineStyleB=0,this._$lineStyleA=0,this._$caps="none",this._$joints="round",this._$miterLimit=0,this._$doLine=!1,this._$restart(),this}lineBitmapStyle(t,e=null,i=!0,s=!1){return this._$doLine&&this.endLine(),this._$lines||(this._$lines=ht()),this._$maxAlpha=1,this._$doLine=!0,this._$canDraw=!0,this._$lines.push(ae.BEGIN_PATH),this._$lineType=ae.BITMAP_STROKE,this._$fillBitmap=new re(t,e,i,s),this}lineGradientStyle(t,e,i,s,r=null,n="pad",a="rgb",h=0){if(!this._$doLine)return this;this._$lines||(this._$lines=ht());for(let t=0;t0&&a._$canApply(r);let T=Q(0,g,0,f);if(x&&r)for(let t=0;tA.width||d-T.yMin>A.height)return void J(T);if(0>$+T.xMax||0>d+T.yMax)return void J(T);J(T),""===this._$uniqueKey&&(!h&&a._$loaderInfo&&a._$characterId?this._$uniqueKey=`${a._$loaderInfo._$id}@${this._$bitmapId||a._$characterId}`:this._$uniqueKey=this._$createCacheKey());const M=cr();if("bitmap"===this._$mode)this._$cacheKeys.length||(this._$cacheKeys=wt.generateKeys(this._$uniqueKey));else if(!this._$cacheKeys.length||this._$cacheParams[0]!==p||this._$cacheParams[1]!==m||this._$cacheParams[2]!==i[7]){const t=ht();t[0]=p,t[1]=m,this._$cacheKeys=wt.generateKeys(this._$uniqueKey,t,i),ot(t),this._$cacheParams[0]=p,this._$cacheParams[1]=m,this._$cacheParams[2]=i[7]}if(t.cachePosition=wt.get(this._$cacheKeys),!t.cachePosition){const s=y.currentAttachment;s&&s.mask&&t.stopStencil();let r=0,n=0;if("shape"===this._$mode){r=v.ceil(v.abs(l.xMax-l.xMin)*p),n=v.ceil(v.abs(l.yMax-l.yMin)*m);const e=t._$getTextureScale(r,n);e<1&&(r*=e,n*=e)}else r=v.ceil(v.abs(l.xMax-l.xMin)),n=v.ceil(v.abs(l.yMax-l.yMin));if(t.cachePosition=y.createCachePosition(r,n),t.bindRenderBuffer(t.cachePosition),t.reset(),"shape"===this._$mode?t.setTransform(p,0,0,m,-l.xMin*p,-l.yMin*m):t.setTransform(1,0,0,1,-l.xMin,-l.yMin),h){const i=M.scaleX,s=it(i,0,0,i,0,0),r=gt(s,o);st(s);const n=a._$parent._$transform.concatenatedMatrix._$matrix,h=it(n[0],n[1],n[2],n[3],n[4]*i-$,n[5]*i-d);st(n);const c=gt(h,r),_=c[4]-(e[4]-$),u=c[5]-(e[5]-d);st(c);const g=pt(l,r),f=+g.xMax,p=+g.xMin,m=+g.yMax,x=+g.yMin,b=v.ceil(v.abs(f-p)),T=v.ceil(v.abs(m-x));J(g);const y=a._$scale9Grid,E={x:y.x,y:y.y,w:y.width,h:y.height};t.grid.enable(p,x,b,T,l,E,i,r[0],r[1],r[2],r[3],r[4],r[5],h[0],h[1],h[2],h[3],h[4]-_,h[5]-u),st(r),st(h)}this._$doDraw(t,i,!1),h&&t.grid.disable(),y.transferTexture(t.cachePosition),wt.set(this._$cacheKeys,t.cachePosition),t._$bind(s)}let w=0,S=0;if(x){const i=this._$createBitmapTexture(t,t.cachePosition,p,m,g,f),s=a._$drawFilter(t,e,r,g,f,i);s.offsetX&&(w=s.offsetX),s.offsetY&&(S=s.offsetY),t.cachePosition=s}if(x||"bitmap"!==this._$mode){const i=v.atan2(e[1],e[0]),s=v.atan2(-e[2],e[3]);if(x||!i&&!s)t.setTransform(1,0,0,1,$-w,d-S);else{const r=l.xMin*p,n=l.yMin*m,a=v.cos(i),h=v.sin(i),o=v.cos(s),c=v.sin(s);t.setTransform(a,h,-c,o,r*a-n*c+e[4],r*h+n*o+e[5])}}else t.setTransform(e[0],e[1],e[2],e[3],l.xMin*e[0]+l.yMin*e[2]+e[4],l.xMin*e[1]+l.yMin*e[3]+e[5]);t.cachePosition&&(t.globalAlpha=n,t.imageSmoothingEnabled="shape"===this._$mode,t.globalCompositeOperation=s,t.drawInstance($-w,d-S,_,u,i),t.cachePosition=null),J(l)}_$createBitmapTexture(t,e,i,s,r,n){if("bitmap"!==this._$mode)return null;t.drawInstacedArray();const a=t.frameBuffer,h=a.currentAttachment,o=a.createCacheAttachment(r,n);t._$bind(o),t.reset();const l=it(i,0,0,s,r/2,n/2),c=t.getTextureFromRect(e),_=it(1,0,0,1,-c.width/2,-c.height/2),$=gt(l,_);st(l),st(_),t.setTransform($[0],$[1],$[2],$[3],$[4],$[5]),t.drawImage(c,0,0,c.width,c.height);const u=a.getTextureFromCurrentAttachment();return t._$bind(h),a.releaseAttachment(o),a.textureManager.release(c),u}_$doDraw(t,e=null,i=!1){t.reset(),t.beginPath(),this._$runCommand(t,e,i)}_$hit(t,e,i,s=!1){return t.beginPath(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),this._$runCommand(t,null,s,i)}_$getBounds(){const t=this._$displayObject;return t&&t._$bounds?Q(t._$bounds.xMin,t._$bounds.xMax,t._$bounds.yMin,t._$bounds.yMax):Q(this._$xMin,this._$xMax,this._$yMin,this._$yMax)}_$restart(){this._$displayObject&&(this._$displayObject._$posted=!1,this._$displayObject._$isUpdated()||(this._$displayObject._$doChanged(),x(),wt.removeCache(this._$displayObject._$instanceId),this._$displayObject._$characterId&&wt.removeCache(this._$displayObject._$characterId)))}_$setBounds(t=0,e=0){this._$setFillBounds(t,e),this._$doLine&&this._$setLineBounds(t,e)}_$setFillBounds(t=0,e=0){this._$xMin=v.min(this._$xMin,t),this._$xMax=v.max(this._$xMax,t),this._$yMin=v.min(this._$yMin,e),this._$yMax=v.max(this._$yMax,e)}_$setLineBounds(t=0,e=0){this._$xMin=v.min(this._$xMin,v.min(t,this._$pointerX)),this._$xMax=v.max(this._$xMax,v.max(t,this._$pointerX)),this._$yMin=v.min(this._$yMin,v.min(e,this._$pointerY)),this._$yMax=v.max(this._$yMax,v.max(e,this._$pointerY));const i=this._$lineWidth/2,s=.5*v.PI,r=v.atan2(e-this._$pointerY,t-this._$pointerX),n=v.atan2(this._$pointerY-e,this._$pointerX-t),a=r+s,h=r-s,o=n+s,l=n-s;let c=t+i,_=-i+t,$=this._$pointerX+i,u=-i+this._$pointerX,d=e+i,g=-i+e,f=this._$pointerY+i,p=-i+this._$pointerY;switch(this._$xMin=v.min(this._$xMin,v.min(c,v.min(_,v.min($,u)))),this._$xMax=v.max(this._$xMax,v.max(c,v.max(_,v.max($,u)))),this._$yMin=v.min(this._$yMin,v.min(d,v.min(g,v.min(f,p)))),this._$yMax=v.max(this._$yMax,v.max(d,v.max(g,v.max(f,p)))),v.abs(a)%s!=0&&(c=t+v.cos(a)*i),v.abs(h)%s!=0&&(_=t+v.cos(h)*i),v.abs(o)%s!=0&&($=this._$pointerX+v.cos(o)*i),v.abs(l)%s!=0&&(u=this._$pointerX+v.cos(l)*i),a&&v.abs(a)%v.PI!=0&&(d=e+v.sin(a)*i),h&&v.abs(h)%v.PI!=0&&(g=e+v.sin(h)*i),o&&v.abs(o)%v.PI!=0&&(f=this._$pointerY+v.sin(o)*i),l&&v.abs(l)%v.PI!=0&&(p=this._$pointerY+v.sin(l)*i),this._$xMin=v.min(this._$xMin,v.min(c,v.min(_,v.min($,u)))),this._$xMax=v.max(this._$xMax,v.max(c,v.max(_,v.max($,u)))),this._$yMin=v.min(this._$yMin,v.min(d,v.min(g,v.min(f,p)))),this._$yMax=v.max(this._$yMax,v.max(d,v.max(g,v.max(f,p)))),this._$caps){case"round":if(v.abs(r)%s!=0){const e=t+v.cos(r)*i;this._$xMin=v.min(this._$xMin,e),this._$xMax=v.max(this._$xMax,e)}if(r&&v.abs(r)%v.PI!=0){const t=e+v.sin(r)*i;this._$yMin=v.min(this._$yMin,t),this._$yMax=v.max(this._$yMax,t)}if(v.abs(n)%s!=0){const t=this._$pointerX+v.cos(n)*i;this._$xMin=v.min(this._$xMin,t),this._$xMax=v.max(this._$xMax,t)}if(n&&v.abs(n)%v.PI!=0){const t=this._$pointerY+v.sin(n)*i;this._$yMin=v.min(this._$yMin,t),this._$yMax=v.max(this._$yMax,t)}break;case"square":if(v.abs(r)%s!=0){const t=v.cos(r)*i,e=c+t,s=_+t;this._$xMin=v.min(this._$xMin,v.min(e,s)),this._$xMax=v.max(this._$xMax,v.max(e,s))}if(v.abs(n)%s!=0){const t=v.cos(n)*i,e=$+t,s=u+t;this._$xMin=v.min(this._$xMin,v.min(e,s)),this._$xMax=v.max(this._$xMax,v.max(e,s))}if(r&&v.abs(r)%v.PI!=0){const t=v.sin(r)*i,e=d+t,s=g+t;this._$yMin=v.min(this._$yMin,v.min(e,s)),this._$yMax=v.max(this._$yMax,v.max(e,s))}if(n&&v.abs(n)%v.PI!=0){const t=v.sin(n)*i,e=f+t,s=p+t;this._$yMin=v.min(this._$yMin,v.min(e,s)),this._$yMax=v.max(this._$yMax,v.max(e,s))}}}_$margePath(t){this._$doFill&&this._$fills&&this._$fills.push(...t),this._$doLine&&this._$lines&&this._$lines.push(...t),ot(t)}_$createCacheKey(){if(this._$doLine&&this.endLine(),this._$doFill&&this.endFill(),!this._$recode)return"";const t=this._$getRecodes();let e=0;for(let i=0;i{_=t})(dt(t,0,1,1));const e=$(),i=cr(),s=i._$sources;for(let t=0;t{this._$loadStart(t)},progress:t=>{this._$progress(t)},loadend:t=>{this._$loadEnd(t)}}})}_$loadStart(t){this._$bytesLoaded=t.loaded,this._$bytesTotal=t.total,this.willTrigger(It.OPEN)&&this.dispatchEvent(new It(It.OPEN)),this.willTrigger(kt.PROGRESS)&&this.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total))}_$progress(t){this._$bytesLoaded=t.loaded,this._$bytesTotal=t.total,this.willTrigger(kt.PROGRESS)&&this.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total))}_$loadEnd(t){this._$bytesLoaded=t.loaded,this._$bytesTotal=t.total,this.willTrigger(kt.PROGRESS)&&this.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total));const e=t.target;if(!e)throw new Error("the Sound target is null.");199e.status?(this._$arrayBuffer=e.response,Ns?pr(this).then((t=>{(t.hasEventListener(It.INIT)||t.hasEventListener(It.COMPLETE))&&cr()._$loaders.push(t)})):Xs.push(this)):this.willTrigger(Lt.IO_ERROR)&&this.dispatchEvent(new Lt(Lt.IO_ERROR,!1,!1,e.statusText))}play(t=0){const e=this._$character?this._$character.audioBuffer:this._$audioBuffer;if(Ns&&e)this._$createBufferSource(t);else{const e=R.now(),i=()=>{if(null===(this._$character?this._$character.audioBuffer:this._$audioBuffer)||null===Ns)I(i);else{const i=(R.now()-e)/1e3;this._$createBufferSource(t,i)}};I(i)}}stop(){this._$stopFlag=!0;const t=this._$sources.length;if(t){const e=cr();if(Ns)for(let e=0;e{(t.hasEventListener(It.INIT)||t.hasEventListener(It.COMPLETE))&&cr()._$loaders.push(t)})):Xs.push(this)),this._$loopCount=0|t.loopCount,this._$volume=v.min(oe.volume,t.volume)}_$createBufferSource(t=0,e=0){if(!Ns)throw new Error("the Audio Context is null.");const i=Ns.createBufferSource();i.onended=t=>this._$endEventHandler(t),i.buffer=this._$character?this._$character.audioBuffer:this._$audioBuffer,i._$gainNode=Ns.createGain(),i._$gainNode.connect(Ns.destination);const s=v.min(oe.volume,this._$volume);i._$gainNode.gain.value=s,i._$volume=s,i.connect(i._$gainNode),i.start(0|t,e);const r=cr();-1===r._$sources.indexOf(this)&&r._$sources.push(this),this._$sources.push(i),this._$stopFlag=!1}_$endEventHandler(t){const e=t.target;if(this._$sources.splice(this._$sources.indexOf(e),1),!this._$stopFlag&&this._$loopCount>this._$currentCount)this._$createBufferSource(),this._$currentCount++;else{if(this._$currentCount=0,Ns&&(e._$gainNode&&(e._$gainNode.gain.value=0,e._$gainNode.disconnect(),e._$gainNode=null),e.onended=null,e.disconnect()),!this._$sources.length){const t=cr();t._$sources.splice(t._$sources.indexOf(this),1)}this.willTrigger(It.SOUND_COMPLETE)&&this.dispatchEvent(new It(It.SOUND_COMPLETE))}}}class ce{constructor(t=1,e=!1){this._$volume=1,this._$loop=!1,this.volume=t,this.loop=e}static toString(){return"[class SoundTransform]"}static get namespace(){return"next2d.media.SoundTransform"}toString(){return"[object SoundTransform]"}get namespace(){return"next2d.media.SoundTransform"}get loop(){return this._$loop}set loop(t){this._$loop=t}get volume(){return this._$volume}set volume(t){this._$volume=dt(+t,0,1,0)}}class _e extends Zt{constructor(t=0,e=0){super(),this._$smoothing=!0,this._$loop=!1,this._$autoPlay=!0,this._$bounds=Q(0,t,0,e),this._$bytesLoaded=0,this._$bytesTotal=0,this._$timerId=-1,this._$video=null,this._$stop=!0,this._$ready=!1,this._$volume=1,this._$context=null,this._$cacheKeys=ht(),this._$cacheParams=ht(0,0,0)}static toString(){return"[class Video]"}static get namespace(){return"next2d.media.Video"}toString(){return"[object Video]"}get namespace(){return"next2d.media.Video"}get bytesLoaded(){return this._$bytesLoaded}get bytesTotal(){return this._$bytesTotal}get currentTime(){return this._$video?this._$video.currentTime:0}get duration(){return this._$video?this._$video.duration:0}get loop(){return this._$loop}set loop(t){this._$loop=!!t}get autoPlay(){return this._$autoPlay}set autoPlay(t){this._$autoPlay=!!t}get smoothing(){return this._$smoothing}set smoothing(t){this._$smoothing=!!t}get src(){return this._$video?this._$video.src:""}set src(t){this._$video||(this._$video=this._$initializeVideo()),this._$video.src=t,this._$video.load()}get videoHeight(){return this._$video?this._$video.videoHeight:this._$bounds.yMax}get videoWidth(){return this._$video?this._$video.videoWidth:this._$bounds.xMax}get volume(){return this._$volume}set volume(t){this._$volume=dt(v.min(oe.volume,t),0,1,1),this._$video&&(this._$video.volume=this._$volume)}clear(){this._$video&&this._$video.pause(),this._$video=null,this._$bounds.xMax=0,this._$bounds.yMax=0,this._$doChanged()}pause(){if(this._$video&&!this._$stop){this._$stop=!0,this._$video.pause(),F(this._$timerId),this._$timerId=-1,this.hasEventListener(Nt.PAUSE)&&this.dispatchEvent(new Nt(Nt.PAUSE,!1,!1,this._$bytesLoaded,this._$bytesTotal));const t=cr();t._$videos.splice(t._$videos.indexOf(this),1)}}play(){this._$video&&this._$stop&&(this._$stop=!1,this._$video.volume=v.min(this._$volume,oe.volume),this._$video.play().then((()=>{this._$timerId=I((()=>{this._$update()})),this.hasEventListener(Nt.PLAY)&&this.dispatchEvent(new Nt(Nt.PLAY,!1,!1,this._$bytesLoaded,this._$bytesTotal));const t=cr();-1===t._$videos.indexOf(this)&&t._$videos.push(this),this._$ready=!0})))}seek(t){this._$video&&(this._$video.currentTime=t,this.hasEventListener(Nt.SEEK)&&this.dispatchEvent(new Nt(Nt.SEEK,!1,!1,this._$bytesLoaded,this._$bytesTotal)))}_$update(){const t=cr();if(!this.stage||!this._$video)return this._$video&&this._$video.pause(),F(this._$timerId),this._$timerId=-1,void t._$videos.splice(t._$videos.indexOf(this),1);Mr&&this._$postProperty(),this._$bytesLoaded=this._$video.currentTime,this._$video.currentTime&&(this.hasEventListener(Nt.PROGRESS)&&this.dispatchEvent(new Nt(Nt.PROGRESS,!1,!1,this._$bytesLoaded,this._$bytesTotal)),this._$doChanged()),this._$timerId=I((()=>{this._$update()}))}_$start(){if(!this._$video)return;this._$bounds.xMax=this._$video.videoWidth,this._$bounds.yMax=this._$video.videoHeight,this._$bytesTotal=this._$video.duration;const t=cr();this._$autoPlay&&(this._$stop=!1,this._$video.play().then((()=>{-1===t._$videos.indexOf(this)&&t._$videos.push(this),this.hasEventListener(Nt.PLAY_START)&&this.dispatchEvent(new Nt(Nt.PLAY_START,!1,!1,this._$bytesLoaded,this._$bytesTotal)),this._$timerId=I((()=>{this._$update()})),this._$ready=!0,this._$doChanged()}))),this._$createContext()}_$initializeVideo(){this._$cacheKeys.length=0;const t=d.createElement("video");return t.autoplay=!1,t.crossOrigin="anonymous",Ns||(t.muted=!0),Zs&&t.setAttribute("playsinline",""),t.addEventListener("canplaythrough",(()=>{this._$start()})),t.addEventListener("ended",(()=>{this._$loop?t.currentTime=0:(this.hasEventListener(Nt.PLAY_END)&&this.dispatchEvent(new Nt(Nt.PLAY_END,!1,!1,this._$bytesLoaded,this._$bytesTotal)),F(this._$timerId),this._$timerId=-1)})),t}_$createContext(){if(Mr){const t=new S(this._$bounds.xMax,this._$bounds.yMax);this._$context=t.getContext("2d")}}_$buildCharacter(t){t.buffer&&!t._$buffer&&(t._$buffer=new Uint8Array(t.buffer),t.buffer=null),this._$loop=t.loop,this._$autoPlay=t.autoPlay,this._$bounds.xMin=t.bounds.xMin,this._$bounds.yMin=t.bounds.yMin,this._$bounds.xMax=t.bounds.xMax,this._$bounds.yMax=t.bounds.yMax,this._$video||(this._$video=this._$initializeVideo()),this._$video.src=URL.createObjectURL(new Blob([t._$buffer],{type:"video/mp4"})),this._$video.volume=v.min(t.volume,oe.volume),this._$video.load(),Mr&&this._$stage&&this._$createWorkerInstance()}_$sync(t){this._$buildCharacter(t)}_$build(t,e){const i=this._$baseBuild(t,e);return this._$buildCharacter(i),i}_$clip(t,e){const i=this._$bounds.xMax,s=this._$bounds.yMax;if(!i||!s)return;let r=e;const n=this._$transform._$rawMatrix();1===n[0]&&0===n[1]&&0===n[2]&&1===n[3]&&0===n[4]&&0===n[5]||(r=gt(e,n)),t.reset(),t.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),t.clip(),r!==e&&st(r)}_$draw(t,e,i){if(!this._$visible||!this._$video||!this._$ready)return;let s=i;const r=this._$transform._$rawColorTransform();1===r[0]&&1===r[1]&&1===r[2]&&1===r[3]&&0===r[4]&&0===r[5]&&0===r[6]&&0===r[7]||(s=ft(i,r));const n=dt(s[3]+s[7]/255,0,1,0);if(!n)return void(s!==i&&nt(s));let a=e;const h=this._$transform._$rawMatrix();1===h[0]&&0===h[1]&&0===h[2]&&1===h[3]&&0===h[4]&&0===h[5]||(a=gt(e,h));const o=pt(this._$bounds,a),l=+o.xMax,c=+o.xMin,_=+o.yMax,$=+o.yMin;J(o);const u=v.ceil(v.abs(l-c)),d=v.ceil(v.abs(_-$));switch(!0){case 0===u:case 0===d:case u===-1/0:case d===-1/0:case u===b:case d===b:return}let g=+v.sqrt(a[0]*a[0]+a[1]*a[1]);if(!E.isInteger(g)){const t=g.toString(),e=t.indexOf("e");-1!==e&&(g=+t.slice(0,e)),g=+g.toFixed(4)}let f=+v.sqrt(a[2]*a[2]+a[3]*a[3]);if(!E.isInteger(f)){const t=f.toString(),e=t.indexOf("e");-1!==e&&(f=+t.slice(0,e)),f=+f.toFixed(4)}const p=this._$filters||this.filters,m=p&&p.length>0&&this._$canApply(p);let x=Q(0,u,0,d);if(m)for(let t=0;ty.width||$-x.yMin>y.height)return void J(x);if(0>c+x.xMax||0>$+x.yMax)return void J(x);if(J(x),!this._$cacheKeys.length||this._$cacheParams[0]!==g||this._$cacheParams[1]!==f||this._$cacheParams[2]!==i[7]){const t=ht();t[0]=g,t[1]=f,this._$cacheKeys=wt.generateKeys(this._$instanceId,t,i),ot(t),this._$cacheParams[0]=g,this._$cacheParams[1]=f,this._$cacheParams[2]=i[7]}const A=this._$blendMode||this.blendMode;if(t.cachePosition=wt.get(this._$cacheKeys),!t.cachePosition){const e=v.ceil(v.abs(this._$bounds.xMax-this._$bounds.xMin)),i=v.ceil(v.abs(this._$bounds.yMax-this._$bounds.yMin)),s=T.createCachePosition(e,i);t.cachePosition=s,wt.set(this._$cacheKeys,s)}const M=T.createTextureFromVideo(this._$video,this._$smoothing);let w=0,S=0;if(m){const e=T.currentAttachment,i=T.createCacheAttachment(u,d);t._$bind(i),t.reset();const s=it(g,0,0,f,u/2,d/2),r=it(1,0,0,1,-M.width/2,-M.height/2),n=gt(s,r);st(s),st(r),t.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t.drawImage(M,0,0,M.width,M.height);const h=T.getTextureFromCurrentAttachment();t._$bind(e),T.releaseAttachment(i),t.drawTextureFromRect(M,t.cachePosition);const o=this._$drawFilter(t,a,p,u,d,h);o.offsetX&&(w=o.offsetX),o.offsetY&&(S=o.offsetY),t.cachePosition=o,t.setTransform(1,0,0,1,c-w,$-S)}else t.drawTextureFromRect(M,t.cachePosition),t.setTransform(a[0],a[1],a[2],a[3],a[4],a[5]);t.cachePosition&&(t.globalAlpha=n,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=A,t.drawInstance(c-w,$-S,l,_,i),t.cachePosition=null),a!==e&&st(a),s!==i&&nt(s)}_$mouseHit(t,e,i){return!!this._$visible&&this._$hit(t,e,i)}_$hit(t,e,i){let s=e;const r=this._$transform._$rawMatrix();r!==P&&(s=gt(e,r));const n=this._$getBounds(null),a=pt(n,s),h=+a.xMax,o=+a.xMin,l=+a.yMax,c=+a.yMin;J(a),J(n);const _=v.ceil(v.abs(h-o)),$=v.ceil(v.abs(l-c));return t.setTransform(1,0,0,1,o,c),t.beginPath(),t.moveTo(0,0),t.lineTo(_,0),t.lineTo(_,$),t.lineTo(0,$),t.lineTo(0,0),s!==e&&st(s),t.isPointInPath(i.x,i.y)}_$getBounds(t=null){if(t){let e=t;const i=this._$transform._$rawMatrix();1===i[0]&&0===i[1]&&0===i[2]&&1===i[3]&&0===i[4]&&0===i[5]||(e=gt(t,i));const s=pt(this._$bounds,e);return e!==t&&st(e),s}return Q(this._$bounds.xMin,this._$bounds.xMax,this._$bounds.yMin,this._$bounds.yMax)}_$createWorkerInstance(){if(!Mr||this._$created)return;this._$created=!0;const t={command:"createVideo",buffer:new Float32Array,instanceId:this._$instanceId,parentId:this._$parent?this._$parent._$instanceId:-1,smoothing:this._$smoothing,xMin:this._$bounds.xMin,yMin:this._$bounds.yMin,xMax:this._$bounds.xMax,yMax:this._$bounds.yMax};this._$characterId>-1&&(t.characterId=this._$characterId),this._$loaderInfo&&(t.loaderInfoId=this._$loaderInfo._$id),this._$scale9Grid&&(t.grid={x:this._$scale9Grid.x,y:this._$scale9Grid.y,w:this._$scale9Grid.width,h:this._$scale9Grid.height}),Mr.postMessage(t)}_$postProperty(){if(!Mr)return;const t=this._$createMessage();t.smoothing=this._$smoothing;const e=ht(),i=this._$context;if(i&&this._$video){t.xMin=this._$bounds.xMin,t.yMin=this._$bounds.yMin,t.xMax=this._$bounds.xMax,t.yMax=this._$bounds.yMax,i.drawImage(this._$video,0,0);const s=i.canvas.transferToImageBitmap();t.imageBitmap=s,e.push(s)}Mr.postMessage(t,e),ot(e),this._$posted=!0,this._$updated=!1}}class $e extends ee{constructor(){super(),this._$buttonMode=!1,this._$hitArea=null,this._$soundTransform=null,this._$useHandCursor=!0}static toString(){return"[class Sprite]"}static get namespace(){return"next2d.display.Sprite"}toString(){return"[object Sprite]"}get namespace(){return"next2d.display.Sprite"}get buttonMode(){return this._$buttonMode}set buttonMode(t){this._$buttonMode=!!t}get dropTarget(){return Ds}get hitArea(){return this._$hitArea}set hitArea(t){this._$hitArea&&(this._$hitArea._$hitObject=null),this._$hitArea=t,t&&(t._$hitObject=this)}get soundTransform(){return this._$soundTransform||(this._$soundTransform=new ce),this._$soundTransform}set soundTransform(t){this._$soundTransform=t}get useHandCursor(){return this._$useHandCursor}set useHandCursor(t){this._$useHandCursor=t}startDrag(t=!1,e=null){let i=0,s=0;if(!t){const t=this._$dragMousePoint();i=this.x-t.x,s=this.y-t.y}Us(this),Vs.lock=t,Vs.position.x=i,Vs.position.y=s,Vs.bounds=e}stopDrag(){Us(null),Vs.lock=!1,Vs.position.x=0,Vs.position.y=0,Vs.bounds=null}_$sync(t){Mr&&this._$stage&&this._$createWorkerInstance(),this._$controller=t.controller,this._$dictionary=t.dictionary,this._$placeMap=t.placeMap,this._$placeObjects=t.placeObjects}_$build(t,e){const i=this._$baseBuild(t,e);return Mr&&this._$stage&&this._$createWorkerInstance(),this._$controller=i.controller,this._$dictionary=i.dictionary,this._$placeMap=i.placeMap,this._$placeObjects=i.placeObjects,i}_$dragMousePoint(){return this._$parent?this._$parent.globalToLocal(_r()):this.globalToLocal(_r())}}class ue extends $e{constructor(){super(),this._$stopFlag=!1,this._$canAction=!0,this._$childRemove=!1,this._$canSound=!0,this._$actionProcess=!1,this._$actions=ct(),this._$frameCache=ct(),this._$labels=null,this._$sounds=ct(),this._$actionOffset=0,this._$actionLimit=0,this._$currentFrame=1,this._$totalFrames=1,this._$isPlaying=!1,this._$loopConfig=null,this._$tweenFrame=0}static toString(){return"[class MovieClip]"}static get namespace(){return"next2d.display.MovieClip"}toString(){return"[object MovieClip]"}get namespace(){return"next2d.display.MovieClip"}get currentFrame(){return this._$currentFrame}get currentFrameLabel(){if(!this._$labels)return null;const t=this._$currentFrame;return this._$labels.has(t)&&this._$labels.get(t)||null}get currentLabels(){return this._$labels&&this._$labels.size?T.from(this._$labels.values()):null}get isPlaying(){return this._$isPlaying}get totalFrames(){return this._$totalFrames}get loopConfig(){if(this._$loopConfig)return this._$loopConfig;const t=this._$placeObject||this._$getPlaceObject();return t&&t.loop?(this._$tweenFrame&&(this._$changePlace=this._$tweenFrame!==this._$parent._$currentFrame,this._$tweenFrame=0),t.loop.tweenFrame&&(this._$tweenFrame=t.loop.tweenFrame),t.loop):null}set loopConfig(t){this._$loopConfig=t,t&&(t.frame=this._$startFrame,this._$loopConfig=t,this._$currentFrame=this._$getLoopFrame(t))}gotoAndPlay(t){this.play(),this._$goToFrame(t)}gotoAndStop(t){this.stop(),this._$goToFrame(t)}nextFrame(){this.stop(),this._$totalFrames>this._$currentFrame&&this._$goToFrame(this._$currentFrame+1)}play(){this._$stopFlag=!1,this._$isPlaying=!0,this._$updateState()}prevFrame(){const t=this._$currentFrame-1;t&&(this.stop(),this._$goToFrame(t))}stop(){this._$stopFlag=!0,this._$isPlaying=!1}addFrameLabel(t){this._$labels||(this._$labels=ct()),this._$labels.set(t.frame,t)}addFrameScript(...t){for(let e=0;e=s&&this._$addAction(s,r),s===this._$currentFrame){const t=cr();if(t._$actionOffset=t._$actions.length,this._$canAction=!0,this._$setAction(),t._$actionOffset!==t._$actions.length){const e=t._$actions.splice(0,t._$actionOffset);t._$actions.push(...t._$actions,...e),t._$actionOffset=0}}}}_$getFrameForLabel(t){if(!this._$labels)return 0;for(const[e,i]of this._$labels)if(i.name===t)return e;return 0}_$addAction(t,e){if(t){this._$actions.has(t)||this._$actions.set(t,ht());const i=this._$actions.get(t);i&&i.push(e)}}_$setAction(){if(this._$executeAddedEvent(),this._$canAction){const t=this._$currentFrame;if(this._$labels&&this._$labels.has(t)){const e=this._$labels.get(t);e&&e.willTrigger(It.FRAME_LABEL)&&e.dispatchEvent(new It(It.FRAME_LABEL))}if(this._$actions.size&&this._$actions.has(t)){const t=cr();-1===t._$actions.indexOf(this)&&t._$actions.push(this)}}}_$goToFrame(t){let e=+t;if(C(e)&&(e=this._$getFrameForLabel(`${t}`)),e<1&&(e=1),e>this._$totalFrames)return this._$currentFrame=this._$totalFrames,this._$clearChildren(),this._$canAction=!1,void(this._$wait=!1);const i=cr();switch(!0){case e!==this._$currentFrame:{this._$wait=!1;const t=this._$currentFrame;this._$actionProcess&&(this._$frameCache.set("nextFrame",e),this._$frameCache.set("stopFlag",this._$stopFlag),this._$frameCache.set("isPlaying",this._$isPlaying)),this._$currentFrame=e,this._$clearChildren(),i._$actionOffset=i._$actions.length;const s=i._$actionOffset?i._$actions.indexOf(this):-1;if(this._$canAction=!0,this._$prepareActions(),i._$actionOffset&&i._$actionOffset!==i._$actions.length){const t=i._$actions.splice(0,i._$actionOffset);i._$actions.push(...i._$actions,...t),i._$actionOffset=0}if(!this._$actionProcess&&(s>-1||!i._$actionOffset))for(;i._$actions.length&&i._$actions.length!==s;){const t=i._$actions.pop();if(!t)continue;t._$canAction=!1,t._$actionOffset=0,t._$actionLimit=0,t._$actionProcess&&t._$frameCache.size&&(t._$currentFrame=t._$frameCache.get("nextFrame"),t._$clearChildren(),t._$stopFlag=t._$frameCache.get("stopFlag"),t._$isPlaying=t._$frameCache.get("isPlaying"),t._$frameCache.clear());const e=t._$currentFrame;if(!t._$actions.has(e))continue;const s=t._$actions.get(e);if(s)for(let e=0;e-1:{if(!this._$actionLimit)break;this._$wait=!1;const t=i._$actions.splice(this._$actionOffset,this._$actionLimit);for(;t.length;){const e=t.pop();if(!e)continue;e._$canAction=!1,e._$actionOffset=0,e._$actionLimit=0;const i=e._$currentFrame;if(!e._$actions.has(i))continue;const s=e._$actions.get(i);if(s)for(let t=0;t-1;--e)t[e]._$prepareActions();this._$setAction()}_$nextFrame(){let t=this._$needsChildren;switch(!0){case this._$wait:t=!0,this._$wait=!1;break;case this._$stopFlag:case 1===this._$totalFrames:break;default:{t=!0,this._$canAction=!0,this._$canSound=!0;const e=this.loopConfig;if(e){const i=e.end?e.end:this._$totalFrames;switch(e.type){case 0:this._$changePlace?this._$currentFrame=e.start:(++this._$currentFrame,this._$currentFrame>i&&(this._$currentFrame=e.start));break;case 1:this._$changePlace?this._$currentFrame=e.start:(++this._$currentFrame,this._$currentFrame>i&&(this._$currentFrame=i,t=!1,this._$canAction=!1,this._$canSound=!1));break;case 2:this._$changePlace?this._$currentFrame=e.start:(t=!1,this._$canAction=!1,this._$canSound=!1);break;case 3:this._$changePlace?this._$currentFrame=i:(--this._$currentFrame,e.start>this._$currentFrame&&(this._$currentFrame=e.start,t=!1,this._$canAction=!1,this._$canSound=!1));break;case 4:this._$changePlace?this._$currentFrame=i:(--this._$currentFrame,e.start>this._$currentFrame&&(this._$currentFrame=i))}}else++this._$currentFrame,this._$currentFrame>this._$totalFrames&&(this._$currentFrame=1);if(t&&this._$clearChildren(),this._$canSound&&this._$sounds.size&&this._$sounds.has(this._$currentFrame)){const t=cr();t._$sounds.has(this._$instanceId)||t._$sounds.set(this._$instanceId,this)}}}const e=this._$needsChildren?this._$getChildren():this._$children;for(let i=e.length-1;i>-1;--i){const s=e[i];s._$isNext&&(t?s._$nextFrame():t=s._$nextFrame())}return this._$setAction(),this._$isNext=t,!this._$posted&&Mr&&this._$postProperty(),this._$isNext}_$getLoopFrame(t){const e=this._$parent._$currentFrame-t.frame;let i=1;switch(t.type){case 0:{const s=t.end?t.end:this._$totalFrames;i=t.start;for(let r=0;rs&&(i=t.start)}break;case 1:{const s=t.end?t.end:this._$totalFrames;i=v.min(s,t.start+e)}break;case 2:i=t.start;break;case 3:i=t.end?t.end:this._$totalFrames,i=v.max(t.start,i-e);break;case 4:{const s=t.end?t.end:this._$totalFrames;i=s;for(let r=0;ri&&(i=s)}}return i}_$buildCharacter(t){if(t.sounds)for(let e=0;e{this._$loadstart(t)},progress:t=>{this._$progress(t)},loadend:t=>{this._$loadend(t)}}}))}loadJSON(t){if("zlib"===t.type){if(Pr())return void Ir.push(t);Lr(!0);const e=Rr(),i=new Uint8Array(t.buffer);e.onmessage=t=>{this._$unzipHandler(t)},e.postMessage(i,[i.buffer])}else this._$build(t)}_$loadend(t){const e=this._$loaderInfo;if(!e)return;e.bytesLoaded=t.loaded,e.bytesTotal=t.total,e.willTrigger(kt.PROGRESS)&&e.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total));const i=t.target;if(e.willTrigger(Bt.HTTP_STATUS)){const t=Tr(i.getAllResponseHeaders());e.dispatchEvent(new Bt(Bt.HTTP_STATUS,!1,!1,i.status,i.responseURL,t))}199i.status?"json"===e.format?this.loadJSON(i.response):e.willTrigger(Lt.IO_ERROR)&&e.dispatchEvent(new Lt(Lt.IO_ERROR,!1,!1,"LoaderInfo format is `json`")):e.willTrigger(Lt.IO_ERROR)&&e.dispatchEvent(new Lt(Lt.IO_ERROR,!1,!1,i.statusText))}_$unzipHandler(t){if(this._$build(t.data),Ir.length){const t=Ir.pop();if(!t)return;const e=new Uint8Array(t.buffer),i=Rr();i.onmessage=t=>{this._$unzipHandler(t)},i.postMessage(e,[e.buffer])}else Lr(!1)}_$loadstart(t){const e=this._$loaderInfo;e&&(e.bytesLoaded=t.loaded,e.bytesTotal=t.total,e.willTrigger(It.OPEN)&&e.dispatchEvent(new It(It.OPEN)),e.willTrigger(kt.PROGRESS)&&e.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total)))}_$progress(t){const e=this._$loaderInfo;e&&(e.bytesLoaded=t.loaded,e.bytesTotal=t.total,e.willTrigger(kt.PROGRESS)&&e.dispatchEvent(new kt(kt.PROGRESS,!1,!1,t.loaded,t.total)))}_$build(t){const e=this._$loaderInfo;if(!e)return;const i=ct();if(t.symbols.length)for(let e=0;e{const t=e.width,i=e.height,s=new ie(t,i);s.image=e,this.graphics.beginBitmapFill(s).drawRect(0,0,t,i),this.hasEventListener(It.LOAD)&&this.dispatchEvent(new It(It.LOAD))})),this._$src=e.src=t,this.graphics._$mode="bitmap"}_$buildCharacter(t,e){const i=this.graphics;if(!e._$data)throw new Error("the loaderInfo data is null.");if(t.recodes)switch(!0){case t.bitmapId>0:{const s=e._$data.characters[t.bitmapId];if(!s.buffer)throw new Error("the bitmap buffer is null.");const r=v.abs(s.bounds.xMax-s.bounds.xMin),n=v.abs(s.bounds.yMax-s.bounds.yMin),a=new ie(r,n);s._$buffer||(s._$buffer=new Uint8Array(s.buffer),ot(s.buffer),s.buffer=null),a.buffer=s._$buffer.slice(),i._$recode=ht(),r===t.bounds.xMax-t.bounds.xMin&&n===t.bounds.yMax-t.bounds.yMin&&(i._$bitmapId=t.bitmapId,i._$mode="bitmap");const h=t.recodes;if(h[h.length-1]===ae.END_FILL){const t=h.length-6;for(let e=0;e0&&i._$canDraw){i._$posted=!0;const e=or(),s=i._$getRecodes();e.command=`shapeRecodes@${this._$instanceId}`,e.buffer=s;const r=ht(s.buffer);Mr.postMessage(e,r),lr(e),ot(r),t[2]=i._$maxAlpha,t[3]=+i._$canDraw}const s=this._$getBounds();t[e++]=s.xMin,t[e++]=s.yMin,t[e++]=s.xMax,t[e++]=s.yMax,t[e++]=this._$characterId>-1?this._$characterId:-1,t[e++]=this._$loaderInfo?this._$loaderInfo._$id:-1,this._$registerProperty(t,10);const r=or();r.command="createShape",r.buffer=t;const n=ht(t.buffer);Mr.postMessage(r,n),lr(r),ot(n)}_$postProperty(){if(!this._$created||!Mr)return;const t=this._$createMessage(),e=this._$graphics;if(e&&!e._$posted){t.maxAlpha=e._$maxAlpha,t.canDraw=e._$canDraw;const i=e._$getRecodes();t.recodes=i;const s=ht(i.buffer),r=this._$getBounds();t.xMin=r.xMin,t.yMin=r.yMin,t.xMax=r.xMax,t.yMax=r.yMax,Mr.postMessage(t,s),ot(s)}else Mr.postMessage(t);this._$posted=!0,this._$updated=!1}}class fe extends ee{constructor(){super(),this._$player=null,this._$root=this,this._$stage=this,this._$invalidate=!0,this._$color=4294967295,this._$frameRate=60}static toString(){return"[class Stage]"}static get namespace(){return"next2d.display.Stage"}toString(){return"[object Stage]"}get namespace(){return"next2d.display.Stage"}get color(){return this._$color}set color(t){this._$color=dt(xt(t),0,16777215,16777215);const e=this._$player;if(e&&e.context){const t=bt(this._$color);e.context._$setColor(t.R/255,t.G/255,t.B/255,t.A/255)}}get frameRate(){return this._$frameRate}set frameRate(t){this._$frameRate=dt(+t,1,60,60),this._$player&&!this._$player._$stopFlag&&(this._$player.stop(),this._$player.play())}get player(){return this._$player}get canvasHeight(){return this._$player?this._$player._$height/f:0}get canvasWidth(){return this._$player?this._$player._$width/f:0}get currentStageHeight(){return this._$player?this._$player.height*this._$player._$scale:0}get currentStageWidth(){return this._$player?this._$player.width*this._$player._$scale:0}get stageHeight(){return this._$player?this._$player.height:0}get stageWidth(){return this._$player?this._$player.width:0}invalidate(){this._$invalidate=!0}_$addChild(t){return t._$stage=this,t._$root=t,this._$created=!0,super._$addChild(t)}}class pe{static toString(){return"[class Easing]"}static get namespace(){return"next2d.ui.Easing"}toString(){return"[object Easing]"}get namespace(){return"next2d.ui.Easing"}static linear(t,e,i,s){return t/s*i+e}static inQuad(t,e,i,s){return(t/=s)*t*i+e}static outQuad(t,e,i,s){return-(t/=s)*(t-2)*i+e}static inOutQuad(t,e,i,s){return(t/=s/2)<1?t*t*i/2+e:-((t-=1)*(t-2)-1)*i/2+e}static inCubic(t,e,i,s){return(t/=s)*t*t*i+e}static outCubic(t,e,i,s){return t/=s,(--t*t*t+1)*i+e}static inOutCubic(t,e,i,s){return(t/=s/2)<1?t*t*t*i/2+e:((t-=2)*t*t+2)*i/2+e}static inQuart(t,e,i,s){return(t/=s)*t*t*t*i+e}static outQuart(t,e,i,s){return t/=s,(--t*t*t*t-1)*-i+e}static inOutQuart(t,e,i,s){return(t/=s/2)<1?t*t*t*t*i/2+e:((t-=2)*t*t*t-2)*-i/2+e}static inQuint(t,e,i,s){return(t/=s)*t*t*t*t*i+e}static outQuint(t,e,i,s){return t/=s,(--t*t*t*t*t+1)*i+e}static inOutQuint(t,e,i,s){return(t/=s/2)<1?t*t*t*t*t*i/2+e:((t-=2)*t*t*t*t+2)*i/2+e}static inSine(t,e,i,s){return-i*v.cos(t/s*(v.PI/2))+i+e}static outSine(t,e,i,s){return i*v.sin(t/s*(v.PI/2))+e}static inOutSine(t,e,i,s){return-i/2*(v.cos(v.PI*t/s)-1)+e}static inExpo(t,e,i,s){return i*v.pow(2,10*(t/s-1))+e}static outExpo(t,e,i,s){return i*(1-v.pow(2,-10*t/s))+e}static inOutExpo(t,e,i,s){return(t/=s/2)<1?i/2*v.pow(2,10*(t-1))+e:i/2*(2-v.pow(2,-10*(t-1)))+e}static inCirc(t,e,i,s){return(1-v.sqrt(1-(t/=s)*t))*i+e}static outCirc(t,e,i,s){return t/=s,v.sqrt(1- --t*t)*i+e}static inOutCirc(t,e,i,s){return(t/=2*s)<1?(v.sqrt(1-t*t)-1)/-2*i+e:(v.sqrt(1-(t-=2)*t)+1)/2*i+e}static inBack(t,e,i,s){return(2.70158*(t/=s)*t*t-1.70158*t*t)*i+e}static outBack(t,e,i,s){return(1+2.70158*v.pow((t/=s)-1,3)+1.70158*v.pow(t-1,2))*i+e}static inOutBack(t,e,i,s){let r=1.70158;return(t/=s/2)<1?t*t*((1+(r*=1.525))*t-r)*i/2+e:((t-=2)*t*((1+(r*=1.525))*t+r)+2)*i/2+e}static inElastic(t,e,i,s){return 0==(t/=s)?e:1===t?i+e:-v.pow(2,(t*=10)-10)*v.sin((t-10.75)*(2*v.PI/3))*i+e}static outElastic(t,e,i,s){return 0==(t/=s)?e:1===t?i+e:(v.pow(2,-10*t)*v.sin((10*t-.75)*(2*v.PI/3))+1)*i+e}static inOutElastic(t,e,i,s){return 0==(t/=s)?e:1===t?i+e:t<.5?-v.pow(2,20*t-10)*v.sin((20*t-11.125)*(2*v.PI/4.5))/2*i+e:(v.pow(2,-20*t+10)*v.sin((20*t-11.125)*(2*v.PI/4.5))/2+1)*i+e}static outBounce(t,e,i,s){return(t/=s)<1/2.75?7.5625*t*t*i+e:t<2/2.75?(7.5625*(t-=1.5/2.75)*t+.75)*i+e:t<2.5/2.75?(7.5625*(t-=2.25/2.75)*t+.9375)*i+e:(7.5625*(t-=2.625/2.75)*t+.984375)*i+e}static inBounce(t,e,i,s){return i-pe.outBounce(s-t,0,i,s)+e}static inOutBounce(t,e,i,s){return t{this._$update(t)})))}entries(t){const e=Object.entries(t);for(let t=0;t{this.hasEventListener(It.COMPLETE)||this.addEventListener(It.COMPLETE,(e=>{this.removeEventListener(It.COMPLETE,e.listener),t()})),this._$delay?B((()=>{this.initialize()}),1e3*this._$delay):this.initialize()}))}stop(){this.hasEventListener(It.STOP)&&this.dispatchEvent(new It(It.STOP)),this.hasEventListener(It.ENTER_FRAME)&&this.removeAllEventListener(It.ENTER_FRAME),this.hasEventListener(It.UPDATE)&&this.removeAllEventListener(It.UPDATE),this.hasEventListener(It.COMPLETE)&&this.removeAllEventListener(It.COMPLETE),this._$forceStop=!0,this._$stopFlag=!0}_$update(t){this._$stopFlag||(this._$currentTime=.001*(R.now()-this._$startTime),this._$names&&this._$updateProperty(this._$target,this._$from,this._$to,this._$names),this.hasEventListener(It.UPDATE)&&this.dispatchEvent(new It(It.UPDATE)),this._$currentTime>=this._$duration&&(this.removeEventListener(It.ENTER_FRAME,t.listener),this.hasEventListener(It.COMPLETE)&&this.dispatchEvent(new It(It.COMPLETE))))}_$updateProperty(t,e,i,s){for(let r=0;rthis._$currentTime?t[a]=this._$ease(this._$currentTime,o,i[a]-o,this._$duration):t[a]=i[a]}}}class xe{static toString(){return"[class Tween]"}static get namespace(){return"next2d.ui.Tween"}toString(){return"[object Tween]"}get namespace(){return"next2d.ui.Tween"}static add(t,e,i,s=0,r=1,n=null){return new me(t,e,i,s,r,n)}}class be{constructor(t=null,e=null,i=null,s=null,r=null,n=null,a=null,h=null,o=null,l=null){this._$font=t,this._$size=e,this._$color=null===i?null:dt(xt(i),0,16777215,0),this._$bold=s,this._$italic=r,this._$underline=n,this._$align=a,this._$leftMargin=h,this._$rightMargin=o,this._$leading=l,this._$letterSpacing=0}static toString(){return"[class TextFormat]"}static get namespace(){return"next2d.text.TextFormat"}toString(){return"[object TextFormat]"}get namespace(){return"next2d.text.TextFormat"}get align(){return this._$align}set align(t){this._$align=t}get bold(){return this._$bold}set bold(t){this._$bold=null!==t?!!t:null}get color(){return this._$color}set color(t){this._$color=t,t&&(this._$color=dt(xt(t),0,16777215,0))}get font(){return this._$font}set font(t){this._$font=null!==t?`${t}`:null}get italic(){return this._$italic}set italic(t){this._$italic=null!==t?!!t:null}get leading(){return this._$leading}set leading(t){this._$leading=t}get leftMargin(){return this._$leftMargin}set leftMargin(t){this._$leftMargin=t}get letterSpacing(){return this._$letterSpacing}set letterSpacing(t){this._$letterSpacing=t}get rightMargin(){return this._$rightMargin}set rightMargin(t){this._$rightMargin=t}get size(){return this._$size}set size(t){this._$size=t?0|t:null}get underline(){return this._$underline}set underline(t){this._$underline=null!==t?!!t:null}_$toStyleString(){let t="";if(this._$font&&(t+=`font-family: ${this._$font};`),this._$size&&(t+=`font-size: ${this._$size}px;`),this._$color){const e=Et(xt(this._$color));t+=`color: #${e.R.toString(16).padStart(2,"0")}${e.G.toString(16).padStart(2,"0")}${e.B.toString(16).padStart(2,"0")};`}return this._$bold&&(t+="font-weight: bold;"),this._$italic&&(t+="font-style: italic;"),this._$underline&&(t+="text-decoration: underline;"),this._$align&&(t+=`text-align: ${this._$align};`),this._$leftMargin&&(t+=`margin-left: ${this._$leftMargin}px;`),this._$rightMargin&&(t+=`margin-right: ${this._$rightMargin}px;`),this._$leading&&(t+=`margin-bottom: ${this._$leading}px;`),this._$letterSpacing&&(t+=`letter-spacing: ${this._$letterSpacing}px;`),t}_$isSame(t){return this._$font===t.font&&this._$size===t.size&&this._$color===t.color&&this._$bold===t.bold&&this._$italic===t.italic&&this._$underline===t.underline&&this._$align===t.align&&this._$leftMargin===t.leftMargin&&this._$rightMargin===t.rightMargin&&this._$leading===t.leading&&this._$letterSpacing===t.letterSpacing}_$clone(){const t=new be(this._$font,this._$size,this._$color,this._$bold,this._$italic,this._$underline,this._$align,this._$leftMargin,this._$rightMargin,this._$leading);return t._$letterSpacing=this._$letterSpacing,t}_$setDefault(){this._$align="left",this._$bold=!1,this._$color=0,this._$font="Times New Roman",this._$italic=!1,this._$leading=0,this._$leftMargin=0,this._$letterSpacing=0,this._$rightMargin=0,this._$size=12,this._$underline=!1}_$merge(t){null===this._$align&&(this._$align=t._$align),null===this._$bold&&(this._$bold=t._$bold),null===this._$color&&(this._$color=t._$color),null===this._$font&&(this._$font=t._$font),null===this._$italic&&(this._$italic=t._$italic),null===this._$leading&&(this._$leading=t._$leading),null===this._$leftMargin&&(this._$leftMargin=t._$leftMargin),null===this._$letterSpacing&&(this._$letterSpacing=t._$letterSpacing),null===this._$rightMargin&&(this._$rightMargin=t._$rightMargin),null===this._$size&&(this._$size=t._$size),null===this._$underline&&(this._$underline=t._$underline)}_$widthMargin(){let t=0;return this._$leftMargin&&(t+=this._$leftMargin),this._$rightMargin&&(t+=this._$rightMargin),t}_$generateFontStyle(){let t="";return this._$italic&&(t="italic "),this._$bold&&(t+="bold "),`${t}${this._$size}px '${this._$font}',sans-serif`}}const ve=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((t=>t.charCodeAt(0)))),Te=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((t=>t.charCodeAt(0))));var ye;const Ee=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Ae=null!==(ye=String.fromCodePoint)&&void 0!==ye?ye:function(t){let e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t),e};var Me,we,Se,Ce,Ie,Fe,Re,Be;function Le(t){return t>=Me.ZERO&&t<=Me.NINE}!function(t){t[t.NUM=35]="NUM",t[t.SEMI=59]="SEMI",t[t.EQUALS=61]="EQUALS",t[t.ZERO=48]="ZERO",t[t.NINE=57]="NINE",t[t.LOWER_A=97]="LOWER_A",t[t.LOWER_F=102]="LOWER_F",t[t.LOWER_X=120]="LOWER_X",t[t.LOWER_Z=122]="LOWER_Z",t[t.UPPER_A=65]="UPPER_A",t[t.UPPER_F=70]="UPPER_F",t[t.UPPER_Z=90]="UPPER_Z"}(Me||(Me={})),function(t){t[t.VALUE_LENGTH=49152]="VALUE_LENGTH",t[t.BRANCH_LENGTH=16256]="BRANCH_LENGTH",t[t.JUMP_TABLE=127]="JUMP_TABLE"}(we||(we={})),function(t){t[t.EntityStart=0]="EntityStart",t[t.NumericStart=1]="NumericStart",t[t.NumericDecimal=2]="NumericDecimal",t[t.NumericHex=3]="NumericHex",t[t.NamedEntity=4]="NamedEntity"}(Se||(Se={})),(Ie=Ce||(Ce={}))[Ie.Legacy=0]="Legacy",Ie[Ie.Strict=1]="Strict",Ie[Ie.Attribute=2]="Attribute";class Pe{constructor(t,e,i){this.decodeTree=t,this.emitCodePoint=e,this.errors=i,this.state=Se.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Ce.Strict}startEntity(t){this.decodeMode=t,this.state=Se.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,e){switch(this.state){case Se.EntityStart:return t.charCodeAt(e)===Me.NUM?(this.state=Se.NumericStart,this.consumed+=1,this.stateNumericStart(t,e+1)):(this.state=Se.NamedEntity,this.stateNamedEntity(t,e));case Se.NumericStart:return this.stateNumericStart(t,e);case Se.NumericDecimal:return this.stateNumericDecimal(t,e);case Se.NumericHex:return this.stateNumericHex(t,e);case Se.NamedEntity:return this.stateNamedEntity(t,e)}}stateNumericStart(t,e){return e>=t.length?-1:(32|t.charCodeAt(e))===Me.LOWER_X?(this.state=Se.NumericHex,this.consumed+=1,this.stateNumericHex(t,e+1)):(this.state=Se.NumericDecimal,this.stateNumericDecimal(t,e))}addToNumericResult(t,e,i,s){if(e!==i){const r=i-e;this.result=this.result*Math.pow(s,r)+parseInt(t.substr(e,r),s),this.consumed+=r}}stateNumericHex(t,e){const i=e;for(;e=Me.UPPER_A&&s<=Me.UPPER_F||s>=Me.LOWER_A&&s<=Me.LOWER_F)))return this.addToNumericResult(t,i,e,16),this.emitNumericEntity(r,3);e+=1}var s;return this.addToNumericResult(t,i,e,16),-1}stateNumericDecimal(t,e){const i=e;for(;e=55296&&t<=57343||t>1114111?65533:null!==(e=Ee.get(t))&&void 0!==e?e:t}(this.result),this.consumed),this.errors&&(t!==Me.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,e){const{decodeTree:i}=this;let s=i[this.treeIndex],r=(s&we.VALUE_LENGTH)>>14;for(;e=Me.UPPER_A&&t<=Me.UPPER_Z||t>=Me.LOWER_A&&t<=Me.LOWER_Z||Le(t)}(n)))?0:this.emitNotTerminatedNamedEntity();if(s=i[this.treeIndex],r=(s&we.VALUE_LENGTH)>>14,0!==r){if(a===Me.SEMI)return this.emitNamedEntityData(this.treeIndex,r,this.consumed+this.excess);this.decodeMode!==Ce.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}var n;return-1}emitNotTerminatedNamedEntity(){var t;const{result:e,decodeTree:i}=this,s=(i[e]&we.VALUE_LENGTH)>>14;return this.emitNamedEntityData(e,s,this.consumed),null===(t=this.errors)||void 0===t||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,e,i){const{decodeTree:s}=this;return this.emitCodePoint(1===e?s[t]&~we.VALUE_LENGTH:s[t+1],i),3===e&&this.emitCodePoint(s[t+2],i),i}end(){var t;switch(this.state){case Se.NamedEntity:return 0===this.result||this.decodeMode===Ce.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case Se.NumericDecimal:return this.emitNumericEntity(0,2);case Se.NumericHex:return this.emitNumericEntity(0,3);case Se.NumericStart:return null===(t=this.errors)||void 0===t||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Se.EntityStart:return 0}}}function ke(t){let e="";const i=new Pe(t,(t=>e+=Ae(t)));return function(t,s){let r=0,n=0;for(;(n=t.indexOf("&",n))>=0;){e+=t.slice(r,n),i.startEntity(s);const a=i.write(t,n+1);if(a<0){r=n+i.end();break}r=n+a,n=0===a?r+1:r}const a=e+t.slice(r);return e="",a}}function Ne(t,e,i,s){const r=(e&we.BRANCH_LENGTH)>>7,n=e&we.JUMP_TABLE;if(0===r)return 0!==n&&s===n?i:-1;if(n){const e=s-n;return e<0||e>=r?-1:t[i+e]-1}let a=i,h=a+r-1;for(;a<=h;){const e=a+h>>>1,i=t[e];if(is))return t[e+r];h=e-1}}return-1}function Oe(t){return t===Fe.Space||t===Fe.NewLine||t===Fe.Tab||t===Fe.FormFeed||t===Fe.CarriageReturn}function De(t){return t===Fe.Slash||t===Fe.Gt||Oe(t)}ke(ve),ke(Te),function(t){t[t.Tab=9]="Tab",t[t.NewLine=10]="NewLine",t[t.FormFeed=12]="FormFeed",t[t.CarriageReturn=13]="CarriageReturn",t[t.Space=32]="Space",t[t.ExclamationMark=33]="ExclamationMark",t[t.Number=35]="Number",t[t.Amp=38]="Amp",t[t.SingleQuote=39]="SingleQuote",t[t.DoubleQuote=34]="DoubleQuote",t[t.Dash=45]="Dash",t[t.Slash=47]="Slash",t[t.Zero=48]="Zero",t[t.Nine=57]="Nine",t[t.Semi=59]="Semi",t[t.Lt=60]="Lt",t[t.Eq=61]="Eq",t[t.Gt=62]="Gt",t[t.Questionmark=63]="Questionmark",t[t.UpperA=65]="UpperA",t[t.LowerA=97]="LowerA",t[t.UpperF=70]="UpperF",t[t.LowerF=102]="LowerF",t[t.UpperZ=90]="UpperZ",t[t.LowerZ=122]="LowerZ",t[t.LowerX=120]="LowerX",t[t.OpeningSquareBracket=91]="OpeningSquareBracket"}(Fe||(Fe={})),function(t){t[t.Text=1]="Text",t[t.BeforeTagName=2]="BeforeTagName",t[t.InTagName=3]="InTagName",t[t.InSelfClosingTag=4]="InSelfClosingTag",t[t.BeforeClosingTagName=5]="BeforeClosingTagName",t[t.InClosingTagName=6]="InClosingTagName",t[t.AfterClosingTagName=7]="AfterClosingTagName",t[t.BeforeAttributeName=8]="BeforeAttributeName",t[t.InAttributeName=9]="InAttributeName",t[t.AfterAttributeName=10]="AfterAttributeName",t[t.BeforeAttributeValue=11]="BeforeAttributeValue",t[t.InAttributeValueDq=12]="InAttributeValueDq",t[t.InAttributeValueSq=13]="InAttributeValueSq",t[t.InAttributeValueNq=14]="InAttributeValueNq",t[t.BeforeDeclaration=15]="BeforeDeclaration",t[t.InDeclaration=16]="InDeclaration",t[t.InProcessingInstruction=17]="InProcessingInstruction",t[t.BeforeComment=18]="BeforeComment",t[t.CDATASequence=19]="CDATASequence",t[t.InSpecialComment=20]="InSpecialComment",t[t.InCommentLike=21]="InCommentLike",t[t.BeforeSpecialS=22]="BeforeSpecialS",t[t.SpecialStartSequence=23]="SpecialStartSequence",t[t.InSpecialTag=24]="InSpecialTag",t[t.InEntity=25]="InEntity"}(Re||(Re={})),function(t){t[t.NoValue=0]="NoValue",t[t.Unquoted=1]="Unquoted",t[t.Single=2]="Single",t[t.Double=3]="Double"}(Be||(Be={}));const Ue={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])};class Ve{constructor({xmlMode:t=!1,decodeEntities:e=!0},i){this.cbs=i,this.state=Re.Text,this.buffer="",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=Re.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=t,this.decodeEntities=e,this.entityDecoder=new Pe(t?Te:ve,((t,e)=>this.emitCodePoint(t,e)))}reset(){this.state=Re.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=Re.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(t){this.offset+=this.buffer.length,this.buffer=t,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=Re.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&t===Fe.Amp&&this.startEntity()}stateSpecialStartSequence(t){const e=this.sequenceIndex===this.currentSequence.length;if(e?De(t):(32|t)===this.currentSequence[this.sequenceIndex]){if(!e)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=Re.InTagName,this.stateInTagName(t)}stateInSpecialTag(t){if(this.sequenceIndex===this.currentSequence.length){if(t===Fe.Gt||Oe(t)){const e=this.index-this.currentSequence.length;if(this.sectionStart=Fe.LowerA&&t<=Fe.LowerZ||t>=Fe.UpperA&&t<=Fe.UpperZ}(t)}startSpecial(t,e){this.isSpecial=!0,this.currentSequence=t,this.sequenceIndex=e,this.state=Re.SpecialStartSequence}stateBeforeTagName(t){if(t===Fe.ExclamationMark)this.state=Re.BeforeDeclaration,this.sectionStart=this.index+1;else if(t===Fe.Questionmark)this.state=Re.InProcessingInstruction,this.sectionStart=this.index+1;else if(this.isTagStartChar(t)){const e=32|t;this.sectionStart=this.index,this.xmlMode||e!==Ue.TitleEnd[2]?this.state=this.xmlMode||e!==Ue.ScriptEnd[2]?Re.InTagName:Re.BeforeSpecialS:this.startSpecial(Ue.TitleEnd,3)}else t===Fe.Slash?this.state=Re.BeforeClosingTagName:(this.state=Re.Text,this.stateText(t))}stateInTagName(t){De(t)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateBeforeClosingTagName(t){Oe(t)||(t===Fe.Gt?this.state=Re.Text:(this.state=this.isTagStartChar(t)?Re.InClosingTagName:Re.InSpecialComment,this.sectionStart=this.index))}stateInClosingTagName(t){(t===Fe.Gt||Oe(t))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=Re.AfterClosingTagName,this.stateAfterClosingTagName(t))}stateAfterClosingTagName(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.state=Re.Text,this.sectionStart=this.index+1)}stateBeforeAttributeName(t){t===Fe.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=Re.InSpecialTag,this.sequenceIndex=0):this.state=Re.Text,this.sectionStart=this.index+1):t===Fe.Slash?this.state=Re.InSelfClosingTag:Oe(t)||(this.state=Re.InAttributeName,this.sectionStart=this.index)}stateInSelfClosingTag(t){t===Fe.Gt?(this.cbs.onselfclosingtag(this.index),this.state=Re.Text,this.sectionStart=this.index+1,this.isSpecial=!1):Oe(t)||(this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateInAttributeName(t){(t===Fe.Eq||De(t))&&(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=-1,this.state=Re.AfterAttributeName,this.stateAfterAttributeName(t))}stateAfterAttributeName(t){t===Fe.Eq?this.state=Re.BeforeAttributeValue:t===Fe.Slash||t===Fe.Gt?(this.cbs.onattribend(Be.NoValue,this.index),this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t)):Oe(t)||(this.cbs.onattribend(Be.NoValue,this.index),this.state=Re.InAttributeName,this.sectionStart=this.index)}stateBeforeAttributeValue(t){t===Fe.DoubleQuote?(this.state=Re.InAttributeValueDq,this.sectionStart=this.index+1):t===Fe.SingleQuote?(this.state=Re.InAttributeValueSq,this.sectionStart=this.index+1):Oe(t)||(this.sectionStart=this.index,this.state=Re.InAttributeValueNq,this.stateInAttributeValueNoQuotes(t))}handleInAttributeValue(t,e){t===e||!this.decodeEntities&&this.fastForwardTo(e)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(e===Fe.DoubleQuote?Be.Double:Be.Single,this.index),this.state=Re.BeforeAttributeName):this.decodeEntities&&t===Fe.Amp&&this.startEntity()}stateInAttributeValueDoubleQuotes(t){this.handleInAttributeValue(t,Fe.DoubleQuote)}stateInAttributeValueSingleQuotes(t){this.handleInAttributeValue(t,Fe.SingleQuote)}stateInAttributeValueNoQuotes(t){Oe(t)||t===Fe.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(Be.Unquoted,this.index),this.state=Re.BeforeAttributeName,this.stateBeforeAttributeName(t)):this.decodeEntities&&t===Fe.Amp&&this.startEntity()}stateBeforeDeclaration(t){t===Fe.OpeningSquareBracket?(this.state=Re.CDATASequence,this.sequenceIndex=0):this.state=t===Fe.Dash?Re.BeforeComment:Re.InDeclaration}stateInDeclaration(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=Re.Text,this.sectionStart=this.index+1)}stateInProcessingInstruction(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=Re.Text,this.sectionStart=this.index+1)}stateBeforeComment(t){t===Fe.Dash?(this.state=Re.InCommentLike,this.currentSequence=Ue.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=Re.InDeclaration}stateInSpecialComment(t){(t===Fe.Gt||this.fastForwardTo(Fe.Gt))&&(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=Re.Text,this.sectionStart=this.index+1)}stateBeforeSpecialS(t){const e=32|t;e===Ue.ScriptEnd[3]?this.startSpecial(Ue.ScriptEnd,4):e===Ue.StyleEnd[3]?this.startSpecial(Ue.StyleEnd,4):(this.state=Re.InTagName,this.stateInTagName(t))}startEntity(){this.baseState=this.state,this.state=Re.InEntity,this.entityStart=this.index,this.entityDecoder.startEntity(this.xmlMode?Ce.Strict:this.baseState===Re.Text||this.baseState===Re.InSpecialTag?Ce.Legacy:Ce.Attribute)}stateInEntity(){const t=this.entityDecoder.write(this.buffer,this.index-this.offset);t>=0?(this.state=this.baseState,0===t&&(this.index=this.entityStart)):this.index=this.offset+this.buffer.length-1}cleanup(){this.running&&this.sectionStart!==this.index&&(this.state===Re.Text||this.state===Re.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==Re.InAttributeValueDq&&this.state!==Re.InAttributeValueSq&&this.state!==Re.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}shouldContinue(){return this.index=t||(this.state===Re.InCommentLike?this.currentSequence===Ue.CdataEnd?this.cbs.oncdata(this.sectionStart,t,0):this.cbs.oncomment(this.sectionStart,t,0):this.state===Re.InTagName||this.state===Re.BeforeAttributeName||this.state===Re.BeforeAttributeValue||this.state===Re.AfterAttributeName||this.state===Re.InAttributeName||this.state===Re.InAttributeValueSq||this.state===Re.InAttributeValueDq||this.state===Re.InAttributeValueNq||this.state===Re.InClosingTagName||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,e){this.baseState!==Re.Text&&this.baseState!==Re.InSpecialTag?(this.sectionStart0&&n.has(this.stack[0]);){const t=this.stack.shift();null===(i=(e=this.cbs).onclosetag)||void 0===i||i.call(e,t,!0)}this.isVoidElement(t)||(this.stack.unshift(t),this.htmlMode&&(We.has(t)?this.foreignContext.unshift(!0):Ke.has(t)&&this.foreignContext.unshift(!1))),null===(r=(s=this.cbs).onopentagname)||void 0===r||r.call(s,t),this.cbs.onopentag&&(this.attribs={})}endOpenTag(t){var e,i;this.startIndex=this.openTagStart,this.attribs&&(null===(i=(e=this.cbs).onopentag)||void 0===i||i.call(e,this.tagname,this.attribs,t),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(t){this.endIndex=t,this.endOpenTag(!1),this.startIndex=t+1}onclosetag(t,e){var i,s,r,n,a,h,o,l;this.endIndex=e;let c=this.getSlice(t,e);if(this.lowerCaseTagNames&&(c=c.toLowerCase()),this.htmlMode&&(We.has(c)||Ke.has(c))&&this.foreignContext.shift(),this.isVoidElement(c))this.htmlMode&&"br"===c&&(null===(n=(r=this.cbs).onopentagname)||void 0===n||n.call(r,"br"),null===(h=(a=this.cbs).onopentag)||void 0===h||h.call(a,"br",{},!0),null===(l=(o=this.cbs).onclosetag)||void 0===l||l.call(o,"br",!1));else{const t=this.stack.indexOf(c);if(-1!==t)for(let e=0;e<=t;e++){const r=this.stack.shift();null===(s=(i=this.cbs).onclosetag)||void 0===s||s.call(i,r,e!==t)}else this.htmlMode&&"p"===c&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=e+1}onselfclosingtag(t){this.endIndex=t,this.options.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=t+1):this.onopentagend(t)}closeCurrentTag(t){var e,i;const s=this.tagname;this.endOpenTag(t),this.stack[0]===s&&(null===(i=(e=this.cbs).onclosetag)||void 0===i||i.call(e,s,!t),this.stack.shift())}onattribname(t,e){this.startIndex=t;const i=this.getSlice(t,e);this.attribname=this.lowerCaseAttributeNames?i.toLowerCase():i}onattribdata(t,e){this.attribvalue+=this.getSlice(t,e)}onattribentity(t){this.attribvalue+=Ae(t)}onattribend(t,e){var i,s;this.endIndex=e,null===(s=(i=this.cbs).onattribute)||void 0===s||s.call(i,this.attribname,this.attribvalue,t===Be.Double?'"':t===Be.Single?"'":t===Be.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(t){const e=t.search(Qe);let i=e<0?t:t.substr(0,e);return this.lowerCaseTagNames&&(i=i.toLowerCase()),i}ondeclaration(t,e){this.endIndex=e;const i=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(i);this.cbs.onprocessinginstruction(`!${t}`,`!${i}`)}this.startIndex=e+1}onprocessinginstruction(t,e){this.endIndex=e;const i=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(i);this.cbs.onprocessinginstruction(`?${t}`,`?${i}`)}this.startIndex=e+1}oncomment(t,e,i){var s,r,n,a;this.endIndex=e,null===(r=(s=this.cbs).oncomment)||void 0===r||r.call(s,this.getSlice(t,e-i)),null===(a=(n=this.cbs).oncommentend)||void 0===a||a.call(n),this.startIndex=e+1}oncdata(t,e,i){var s,r,n,a,h,o,l,c,_,$;this.endIndex=e;const u=this.getSlice(t,e-i);!this.htmlMode||this.options.recognizeCDATA?(null===(r=(s=this.cbs).oncdatastart)||void 0===r||r.call(s),null===(a=(n=this.cbs).ontext)||void 0===a||a.call(n,u),null===(o=(h=this.cbs).oncdataend)||void 0===o||o.call(h)):(null===(c=(l=this.cbs).oncomment)||void 0===c||c.call(l,`[CDATA[${u}]]`),null===($=(_=this.cbs).oncommentend)||void 0===$||$.call(_)),this.startIndex=e+1}onend(){var t,e;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let t=0;t=this.buffers[0].length;)this.shiftBuffer();let i=this.buffers[0].slice(t-this.bufferOffset,e-this.bufferOffset);for(;e-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),i+=this.buffers[0].slice(0,e-this.bufferOffset);return i}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(t){var e,i;this.ended?null===(i=(e=this.cbs).onerror)||void 0===i||i.call(e,new Error(".write() after done!")):(this.buffers.push(t),this.tokenizer.running&&(this.tokenizer.write(t),this.writeIndex++))}end(t){var e,i;this.ended?null===(i=(e=this.cbs).onerror)||void 0===i||i.call(e,new Error(".end() after done!")):(t&&this.write(t),this.ended=!0,this.tokenizer.end())}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex0?this.children[this.children.length-1]:null}get childNodes(){return this.children}set childNodes(t){this.children=t}}class hi extends ai{constructor(){super(...arguments),this.type=Ze.CDATA}get nodeType(){return 4}}class oi extends ai{constructor(){super(...arguments),this.type=Ze.Root}get nodeType(){return 9}}class li extends ai{constructor(t,e,i=[],s=("script"===t?Ze.Script:"style"===t?Ze.Style:Ze.Tag)){super(i),this.name=t,this.attribs=e,this.type=s}get nodeType(){return 1}get tagName(){return this.name}set tagName(t){this.name=t}get attributes(){return Object.keys(this.attribs).map((t=>{var e,i;return{name:t,value:this.attribs[t],namespace:null===(e=this["x-attribsNamespace"])||void 0===e?void 0:e[t],prefix:null===(i=this["x-attribsPrefix"])||void 0===i?void 0:i[t]}}))}}function ci(t,e=!1){let i;if(function(t){return t.type===Ze.Text}(t))i=new si(t.data);else if(function(t){return t.type===Ze.Comment}(t))i=new ri(t.data);else if(function(t){return(e=t).type===Ze.Tag||e.type===Ze.Script||e.type===Ze.Style;var e}(t)){const s=e?_i(t.children):[],r=new li(t.name,{...t.attribs},s);s.forEach((t=>t.parent=r)),null!=t.namespace&&(r.namespace=t.namespace),t["x-attribsNamespace"]&&(r["x-attribsNamespace"]={...t["x-attribsNamespace"]}),t["x-attribsPrefix"]&&(r["x-attribsPrefix"]={...t["x-attribsPrefix"]}),i=r}else if(function(t){return t.type===Ze.CDATA}(t)){const s=e?_i(t.children):[],r=new hi(s);s.forEach((t=>t.parent=r)),i=r}else if(function(t){return t.type===Ze.Root}(t)){const s=e?_i(t.children):[],r=new oi(s);s.forEach((t=>t.parent=r)),t["x-mode"]&&(r["x-mode"]=t["x-mode"]),i=r}else{if(!function(t){return t.type===Ze.Directive}(t))throw new Error(`Not implemented yet: ${t.type}`);{const e=new ni(t.name,t.data);null!=t["x-name"]&&(e["x-name"]=t["x-name"],e["x-publicId"]=t["x-publicId"],e["x-systemId"]=t["x-systemId"]),i=e}}return i.startIndex=t.startIndex,i.endIndex=t.endIndex,null!=t.sourceCodeLocation&&(i.sourceCodeLocation=t.sourceCodeLocation),i}function _i(t){const e=t.map((t=>ci(t,!0)));for(let t=1;t'"]/g,gi),fi(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),fi(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]])),function(t){t[t.XML=0]="XML",t[t.HTML=1]="HTML"}(pi||(pi={})),function(t){t[t.UTF8=0]="UTF8",t[t.ASCII=1]="ASCII",t[t.Extensive=2]="Extensive",t[t.Attribute=3]="Attribute",t[t.Text=4]="Text"}(mi||(mi={})),new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((t=>[t.toLowerCase(),t]))),new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((t=>[t.toLowerCase(),t]))),new Set(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]),new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),new Set(["svg","math"]),function(t){t[t.DISCONNECTED=1]="DISCONNECTED",t[t.PRECEDING=2]="PRECEDING",t[t.FOLLOWING=4]="FOLLOWING",t[t.CONTAINS=8]="CONTAINS",t[t.CONTAINED_BY=16]="CONTAINED_BY"}(xi||(xi={}));class bi{constructor(){this._$textWidth=-1,this._$textHeight=-1,this._$widthTable=[],this._$heightTable=[],this._$ascentTable=[],this._$textTable=[],this._$lineTable=[]}get textWidth(){if(-1===this._$textWidth){this._$textWidth=0;for(let t=0;t{let r=i.lineTable.length-1;const n=s.width-e._$widthMargin()-4;for(let a=0;an){Ti=_,r++,l.line=r;const t={mode:"wrap",text:"",x:0,y:0,w:0,h:0,line:r,textFormat:h._$clone()};let e=1,s=!0;const n=/[0-9a-zA-Z?!;:.,?!。、;:〜]/g;for(;;){const t=i.textTable.length-e;if(0>=t){s=!1,e=0;break}const r=i.textTable[t];if(!r){s=!1,e=0;break}if("text"!==r.mode){s=!1;break}if(" "===r.text){e--;break}if(!r.text.match(n)){e--;break}e++}if(i.widthTable[r]=0,i.heightTable[r]=0,i.ascentTable[r]=0,e>0&&s){const s=i.textTable.length-e;i.textTable.splice(s,0,t),i.lineTable.push(t);const n=r-1;i.widthTable[n]=0,i.heightTable[n]=0,i.ascentTable[n]=0;for(let t=0;t{const s=t.trim().split(";"),r=[];for(let t=0;t{for(let s=0;se.size&&(e.size=1));break;case"color":e.color=xt(r.value);break;case"letterSpacing":e.letterSpacing=+r.value;break;case"leading":e.leading=+r.value;break;case"leftMargin":e.leftMargin=+r.value;break;case"rightMargin":e.rightMargin=+r.value;break;case"underline":e.underline=!0;break;case"bold":e.bold=!0;break;case"italic":e.italic=!0}}},Mi=(t,e)=>{Ti=0;const i=t.lineTable.length;vi.font=e._$generateFontStyle();const s=vi.measureText(""),r={mode:"break",text:"",x:0,y:0,w:0,h:s.fontBoundingBoxAscent+s.fontBoundingBoxDescent,line:i,textFormat:e._$clone()};t.heightTable[i]=0,t.ascentTable[i]=0,t.widthTable[i]=0,t.lineTable.push(r),t.textTable.push(r)},wi=(t,e,i,s)=>{for(let r=0;r{const e=t.heightTable.length-1;for(let i=1;i0)continue;const e=t.lineTable[i];t.heightTable[i]=e.h=t.heightTable[i-1]}};class Ci extends te{constructor(){super(),this._$background=!1,this._$backgroundColor=16777215,this._$border=!1,this._$borderColor=0,this._$htmlText="",this._$multiline=!1,this._$text="",this._$wordWrap=!1,this._$scrollX=0,this._$scrollY=0,this._$maxChars=0,this._$stopIndex=-1,this._$compositionStartIndex=-1,this._$compositionEndIndex=-1;const t=new be;t._$setDefault(),this._$defaultTextFormat=t,this._$rawHtmlText="",this._$bounds={xMin:0,xMax:100,yMin:0,yMax:100},this._$originBounds={xMin:0,xMax:100,yMin:0,yMax:100},this._$restrict="",this._$isHTML=!1,this._$textData=null,this._$autoSize="none",this._$autoFontSize=!1,this._$focusVisible=!1,this._$timerId=-1,this._$focusIndex=-1,this._$selectIndex=-1,this._$scrollEnabled=!0,this._$xScrollShape=null,this._$yScrollShape=null,this._$type="static",this._$focus=!1,this._$copyText="",this._$thickness=0,this._$thicknessColor=0,this._$textFormats=null,this._$cacheKeys=ht(),this._$cacheParams=ht(0,0,0)}static toString(){return"[class TextField]"}static get namespace(){return"next2d.display.TextField"}toString(){return"[object TextField]"}get namespace(){return"next2d.display.TextField"}get autoFontSize(){return this._$autoFontSize}set autoFontSize(t){t!==this._$autoFontSize&&(this._$autoFontSize=t,this._$reload())}get autoSize(){return this._$autoSize}set autoSize(t){t!==this._$autoSize&&(this._$autoSize=t,this._$reload())}get background(){return this._$background}set background(t){t!==this._$background&&(this._$background=!!t,this._$reset())}get backgroundColor(){return this._$backgroundColor}set backgroundColor(t){(t=dt(xt(t),0,16777215,16777215))!==this._$backgroundColor&&(this._$backgroundColor=t,this._$reset())}get border(){return this._$border}set border(t){t!==this._$border&&(this._$border=!!t,this._$reset())}get borderColor(){return this._$borderColor}set borderColor(t){(t=dt(xt(t),0,16777215,0))!==this._$borderColor&&(this._$borderColor=t,this._$reset())}get stopIndex(){return this._$stopIndex}set stopIndex(t){if(t|=0,this._$stopIndex===t)return;this._$stopIndex=t;const e=this.getTextData();if(!e.textTable.length)return;let i=2,s=0;for(let r=0;r=t){s=r;break}"break"===n.mode&&(a=!0,this._$scrollX=0,i=2),a&&s++}const r=e.textTable[s].line;let n=0;for(let t=0;t<=r;++t)n+=e.heightTable[t];const a=this.height;let h=0;for(let t=r;t>-1;--t){const i=e.heightTable[t];if(aa){const t=(this.textHeight-a)/a;this._$scrollY=v.min((n-h)/t,a)}const o=this.width;let l=0;for(let t=s;t>0;--t){const i=e.textTable[t];if("text"===i.mode){if(oo){const t=(this.textWidth-o)/o;this._$scrollX=v.min((i-l)/t,o+.5)}this._$doChanged()}get defaultTextFormat(){return this._$defaultTextFormat._$clone()}set defaultTextFormat(t){t._$merge(this._$defaultTextFormat),this._$defaultTextFormat=t,this._$reset()}get focus(){return this._$focus}set focus(t){if(this._$focus===t)return;if("input"!==this._$type)return;this._$focus=!!t;const e=this._$focus?Rt.FOCUS_IN:Rt.FOCUS_OUT;this.willTrigger(e)&&this.dispatchEvent(new Rt(e)),tr.value="",this._$focus?tr.focus():(this._$focusIndex=-1,this._$selectIndex=-1,this._$focusVisible=!1,L(this._$timerId),tr.blur()),this._$doChanged(),x()}get htmlText(){if(this._$htmlText)return this._$htmlText;const t=this.getTextData();let e=t.textTable[0].textFormat,i="";continue}const n=r.textFormat;if(!e._$isSame(n)){i+="e){this._$doChanged(),this._$scrollX=t,this._$xScrollShape.width=e*e/this.textWidth;const i=this._$parent;if(i){this._$xScrollShape.hasLocalVariable("job")&&this._$xScrollShape.getLocalVariable("job").stop(),this._$xScrollShape.alpha=.9,this._$xScrollShape.x=this.x+1+(e-1-this._$xScrollShape.width)/(e-1)*(this._$scrollX-1),this._$xScrollShape.y=this.y+this.height-this._$xScrollShape.height-.5,i.addChildAt(this._$xScrollShape,i.getChildIndex(this)+1);const t=xe.add(this._$xScrollShape,{alpha:.9},{alpha:0},.5,.2,pe.outQuad);t.addEventListener(It.COMPLETE,(t=>{const e=t.target.target;e.deleteLocalVariable("job"),e.parent&&e.parent.removeChild(e)})),t.start(),this._$xScrollShape.setLocalVariable("job",t)}}this.willTrigger(It.SCROLL)&&this.dispatchEvent(new It(It.SCROLL,!0))}}get scrollY(){return this._$scrollY}set scrollY(t){if(this._$scrollEnabled&&"none"===this._$autoSize&&(this._$multiline||this._$wordWrap)&&!(this._$xScrollShape&&this._$xScrollShape.hasLocalVariable("job")||(t=dt(t,0,this.height,0),this._$scrollY===t))){const e=this.height;if(this._$yScrollShape&&this.textHeight>e){this._$doChanged(),this._$scrollY=t,this._$yScrollShape.height=e*e/this.textHeight;const i=this._$parent;if(i){this._$yScrollShape.hasLocalVariable("job")&&this._$yScrollShape.getLocalVariable("job").stop(),this._$yScrollShape.alpha=.9,this._$yScrollShape.x=this.x+this.width-this._$yScrollShape.width-.5,this._$yScrollShape.y=this.y+.5+(e-1-this._$yScrollShape.height)/(e-1)*(this._$scrollY-1),i.addChildAt(this._$yScrollShape,i.getChildIndex(this)+1);const t=xe.add(this._$yScrollShape,{alpha:.9},{alpha:0},.5,.2,pe.outQuad);t.addEventListener(It.COMPLETE,(t=>{const e=t.target.target;e.deleteLocalVariable("job"),e.parent&&e.parent.removeChild(e)})),t.start(),this._$yScrollShape.setLocalVariable("job",t)}}this.willTrigger(It.SCROLL)&&this.dispatchEvent(new It(It.SCROLL,!0))}}get text(){if(!this._$isHTML)return this._$text;if(this._$rawHtmlText)return this._$rawHtmlText;let t="";const e=this.getTextData();for(let i=1;i-1){const e=this._$getBounds(null),i=v.abs(e.xMin);this._$originBounds.xMax=t+i,this._$originBounds.xMin=i,this._$bounds.xMax=this._$originBounds.xMax,this._$bounds.xMin=this._$originBounds.xMin,super.width=t,this._$reload()}}get height(){return super.height}set height(t){if(!C(t=+t)&&t>-1){const e=this._$getBounds(null),i=v.abs(e.yMin);this._$originBounds.yMax=t+i,this._$bounds.yMax=this._$originBounds.yMax,this._$bounds.yMin=this._$originBounds.yMin,super.height=t,this._$reload()}}get x(){const t=this._$transform.matrix,e=this._$getBounds(null);return t._$matrix[4]+e.xMin}set x(t){const e=this._$getBounds(null);super.x=t-e.xMin}get y(){const t=this._$transform.matrix,e=this._$getBounds(null);return t._$matrix[5]+e.yMin}set y(t){const e=this._$getBounds(null);super.y=t-e.yMin}appendText(t){const e=this.text;this.text=e+`${t}`}getLineText(t){if(!this._$text&&!this._$htmlText)return"";t|=0;let e="";const i=this.getTextData();for(let s=0;st)break;r.line===t&&"text"===r.mode&&(e+=r.text)}return e}replaceText(t,e,i){if(e|=0,(t|=0)>-1&&e>-1&&e>=t){const s=this.text;t>=s.length?e>=s.length&&e>=t&&(this.text=s+`${i}`):this.text=s.slice(0,t)+`${i}`+s.slice(e,s.length)}}getTextData(t=0){return null!==this._$textData||(this._$isHTML?this._$textData=((t,e,i)=>{const s=new bi;if(!t)return s;const r=t.trim().replace(/\r?\n/g,"").replace(/\t/g,""),n=e._$clone();i.subFontSize&&i.subFontSize>0&&n.size&&(n.size-=i.subFontSize,1>n.size&&(n.size=1));const a=function(t,e){const i=new ui(void 0,e);return new Je(i,e).end(t),i.root}(r);return Mi(s,n),wi(a,n,s,i),Si(s),s})(this._$htmlText,this._$defaultTextFormat,{width:this.width,multiline:this._$multiline,wordWrap:this._$wordWrap,subFontSize:t,textFormats:this._$textFormats}):this._$textData=((t,e,i)=>{const s=new bi;if(!t)return s;const r=i.multiline?t.split("\n"):[t.replace("\n","")];for(let t=0;t0&&n.size&&(n.size-=i.subFontSize,1>n.size&&(n.size=1)),(0===t||i.wordWrap||i.multiline)&&Mi(s,n);const a=r[t];a&&(Ti=0,yi(a,n,s,i))}return Si(s),s})(this._$text,this._$defaultTextFormat,{width:this.width,multiline:this._$multiline,wordWrap:this._$wordWrap,subFontSize:t,textFormats:this._$textFormats})),this._$textData}selectAll(){const t=this.getTextData();t.textTable.length&&(this._$selectIndex=1,this._$focusIndex=t.textTable.length)}copy(){if(-1===this._$focusIndex||-1===this._$selectIndex)return;let t="";const e=v.min(this._$focusIndex,this._$selectIndex),i=v.max(this._$focusIndex,this._$selectIndex)+1,s=this.getTextData();for(let r=e;rs)break;i.line===s&&"text"===i.mode&&(r+=i.w)}let n=2;const a=s-1;for(let e=1;ea)return this._$focusIndex="text"===i.mode?e-1:e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking();if(i.line===a&&"text"===i.mode&&(n+=i.w,n>r))return this._$focusIndex=e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking()}}arrowDown(){if(-1===this._$focusIndex)return;const t=this.getTextData();if(!t.textTable.length)return;const e=t.textTable[this._$focusIndex],i="text"===e.mode?e.line:e.line-1;if(i===t.lineTable.length-1)return;let s=2;for(let e=1;ei)break;r.line===i&&"text"===r.mode&&(s+=r.w)}let r=2;const n=i+1;for(let e=1;en)return this._$focusIndex="text"===i.mode?e-1:e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking();if(i.line===n&&"text"===i.mode&&(r+=i.w,r>s))return this._$focusIndex=e,this._$selectIndex=-1,L(this._$timerId),void this._$blinking()}this._$focusIndex=t.textTable.length,this._$selectIndex=-1,L(this._$timerId),this._$blinking()}arrowLeft(){this._$focusIndex&&(this.getTextData().textTable.length&&this._$focusIndex<2?this._$focusIndex=1:(this._$focusIndex--,this._$selectIndex=-1,L(this._$timerId),this._$blinking()))}arrowRight(){this.getTextData().textTable.length!==this._$focusIndex&&(this._$focusIndex++,this._$selectIndex=-1,L(this._$timerId),this._$blinking())}deleteText(){if(this._$compositionStartIndex>-1)return;let t=0,e=0;if(this._$selectIndex>-1)t=v.min(this._$focusIndex,this._$selectIndex),e=v.max(this._$focusIndex,this._$selectIndex)+1,this._$focusIndex=t;else{if(2>this._$focusIndex)return;this._$focusIndex--}const i=this.getTextData(),s=i.textTable[this._$focusIndex];s&&"wrap"===s.mode&&this._$focusIndex--;const r=ht();let n="";for(let s=1;ss))switch(a.mode){case"break":r.push(a.textFormat),n+="\n";break;case"text":r.push(a.textFormat),n+=a.text;break;default:continue}}if(i.textTable.length===this._$focusIndex&&(r.pop(),n=n.slice(0,-1)),this._$selectIndex=-1,n){const t=this.textWidth,e=this.textHeight;if(this._$textFormats=r,this.text=n,this._$scrollX>0){const e=this.textWidth,i=this.width;switch(!0){case i>e:this._$scrollY=0;break;case t!==e:this._$scrollY-=(t-e)/(e/i)}}if(this._$scrollY>0){const t=this.textHeight,i=this.height;switch(!0){case i>t:this._$scrollY=0;break;case e!==t:this._$scrollY-=(e-t)/(t/i)}}this._$textFormats=null,ot(r)}else this.text=null,this._$scrollX=0,this._$scrollY=0,this._$focusIndex=0}compositionStart(){this._$compositionStartIndex=this._$focusIndex}compositionUpdate(t){if(this._$compositionEndIndex>-1){const t=this._$compositionStartIndex;this._$focusIndex=this._$compositionStartIndex,this._$selectIndex=this._$compositionEndIndex-1,this._$compositionStartIndex=-1,this.deleteText(),this._$compositionStartIndex=t,this._$selectIndex=-1}let e=this.getTextData();const i=ht(),s=t.length;let r="";if(e.textTable.length){for(let n=1;nthis._$compositionStartIndex&&n++}}this._$compositionEndIndex=this._$focusIndex=n;const a=cr(),h=v.min(e.textTable.length-1,this._$compositionEndIndex),o=e.textTable[h];if(o){const t=o.line;let i=0;for(let s=0;s-1){const t=this.getTextData();for(let e=this._$compositionStartIndex;e-1)return;this._$selectIndex>-1&&this.deleteText();const e=this.getTextData(),i=ht();let s="";for(let r=1;ri&&this.textWidth+4>this.width;)this._$reset(),this.getTextData(i++);if(this.height&&this.textHeight)for(;t>i&&this.textHeight+4>this.height;)this._$reset(),this.getTextData(i++)}this._$resize()}_$blinking(){this._$focusVisible=!this._$focusVisible,this._$doChanged(),x(),this._$timerId=+B((()=>{this._$blinking()}),500),this._$timerId|=0}_$setIndex(t,e){if("input"!==this._$type)return;const i=this.getTextData();if(!i.textTable.length)return this._$focusIndex=0,this._$selectIndex=-1,void this.setBlinkingTimer();const s=this.width,r=this.height;let n=0;this._$scrollX>0&&(n+=this._$scrollX*(this.textWidth-s)/s);let h=0;this._$scrollY&&(h+=this._$scrollY*(this.textHeight-r)/r);const o=a(),l=this.globalToLocal(new Dt(t,e)),c=l.x+n,_=l.y+h;let $=2,u=2,d=u+i.heightTable[0];for(let t=1;t$&&_>u&&d>_&&s>c){const e=t;switch(o){case Cs:case Rs:this._$selectIndex!==e&&this._$focusIndex===e&&(this._$selectIndex=e,this._$focusIndex!==e&&(this._$focusVisible=!1,L(this._$timerId),this._$doChanged(),x()));break;default:(this._$focusIndex!==e||this._$selectIndex>-1)&&(this._$focusIndex=e,this._$selectIndex=-1,this.setBlinkingTimer())}return}$=2,u+=i.heightTable[e.line-1],d=u+i.heightTable[e.line];break;case"text":if(t===i.textTable.length-1&&c>$&&_>u&&d>_&&s>c){const t=i.textTable.length;switch(o){case Cs:case Rs:this._$selectIndex!==t&&(this._$selectIndex=t,this._$focusIndex!==t&&(this._$focusVisible=!1,L(this._$timerId),this._$doChanged(),x()));break;default:(this._$focusIndex!==t||this._$selectIndex>-1)&&(this._$focusIndex=t,this._$selectIndex=-1,this.setBlinkingTimer())}return}if(c>$&&_>u&&d>_&&$+e.w>c){let s=t;switch(o){case Cs:case Rs:this._$focusIndex>s?this._$focusIndex===s+1?$+e.w/2c&&(s=-1):$+e.w/2>c&&(s-=1),this._$selectIndex!==s&&(this._$selectIndex=s,this._$selectIndex>-1&&(this._$focusVisible=!1,L(this._$timerId)),this._$doChanged(),x());break;default:if($+e.w/2-1)&&(this._$focusIndex=s,this._$selectIndex=-1,this.setBlinkingTimer())}return}$+=e.w}}switch(o){case Cs:case Rs:this._$focusIndex=-1,this._$selectIndex=-1;break;default:this._$focusIndex=i.textTable.length,this._$selectIndex=-1,this.setBlinkingTimer()}}setBlinkingTimer(){this._$focusVisible=!1,this._$doChanged(),x(),L(this._$timerId),this._$timerId=+B((()=>{this._$blinking()}),500),this._$timerId|=0}_$resize(){if("none"!==this._$autoSize){const t=this._$defaultTextFormat,e=this.textWidth+4+t._$widthMargin();if(this._$wordWrap)this._$bounds.xMax=this._$originBounds.xMax,this._$bounds.xMin=this._$originBounds.xMin;else switch(this._$autoSize){case"left":case"center":this._$bounds.xMax=e+this._$bounds.xMin;break;case"right":this._$bounds.xMax=this._$originBounds.xMax-(this._$originBounds.xMax-this._$originBounds.xMin-(e-this._$originBounds.xMin))}this._$bounds.yMax=this.textHeight+this._$originBounds.yMin}else this._$scrollEnabled&&(this._$xScrollShape||(this._$xScrollShape=new ge,this._$xScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this._$xScrollShape.scale9Grid=new Vt(1.5,1.5,.1,.1)),this._$yScrollShape||(this._$yScrollShape=new ge,this._$yScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this._$yScrollShape.scale9Grid=new Vt(1.5,1.5,.1,.1)))}_$getAlignOffset(t,e){const i=this.getTextData().getLineWidth(t.line),s=t.textFormat,r=s.leftMargin||0;if(!this._$wordWrap&&i>e)return v.max(0,r);const n=s.rightMargin||0;return"center"===s.align||"center"===this._$autoSize?v.max(0,e/2-r-n-i/2-2):"right"===s.align||"right"===this._$autoSize?v.max(0,e-r-i-n-4):v.max(0,r)}_$getBounds(t=null){if(t){let e=t;const i=this._$transform._$rawMatrix();return 1===i[0]&&0===i[1]&&0===i[2]&&1===i[3]&&0===i[4]&&0===i[5]||(e=gt(t,i)),pt(this._$bounds,e)}return Q(this._$bounds.xMin,this._$bounds.xMax,this._$bounds.yMin,this._$bounds.yMax)}_$buildCharacter(t){const e=this._$defaultTextFormat;switch(e.font=t.font,e.size=0|t.size,e.align=t.align,e.color=0|t.color,e.leading=t.leading,e.letterSpacing=t.letterSpacing,e.leftMargin=t.leftMargin,e.rightMargin=t.rightMargin,t.fontType){case 1:e.bold=!0;break;case 2:e.italic=!0;break;case 3:e.bold=!0,e.italic=!0}switch(this._$type=t.inputType,this._$multiline=!!t.multiline,this._$wordWrap=!!t.wordWrap,this._$border=!!t.border,this._$scrollEnabled=!!t.scroll,this._$thickness=0|t.thickness,this._$thicknessColor=0|t.thicknessColor,this._$bounds.xMin=t.originBounds.xMin,this._$bounds.xMax=t.originBounds.xMax,this._$bounds.yMin=t.originBounds.yMin,this._$bounds.yMax=t.originBounds.yMax,this._$originBounds.xMin=t.originBounds.xMin,this._$originBounds.xMax=t.originBounds.xMax,this._$originBounds.yMin=t.originBounds.yMin,this._$originBounds.yMax=t.originBounds.yMax,t.autoSize){case 1:this.autoSize=t.align;break;case 2:this.autoFontSize=!0}this.text=t.text,Mr&&this._$stage&&this._$createWorkerInstance()}_$sync(t){this._$buildCharacter(t)}_$build(t,e){const i=this._$baseBuild(t,e);return this._$buildCharacter(i),i}_$clip(t,e){const i=this._$getBounds(),s=i.xMax,r=i.xMin,n=i.yMax,a=i.yMin;J(i);const h=v.ceil(v.abs(s-r)),o=v.ceil(v.abs(n-a));if(!h||!o)return;let l=e;const c=this._$transform._$rawMatrix();1===c[0]&&0===c[1]&&0===c[2]&&1===c[3]&&0===c[4]&&0===c[5]||(l=gt(e,c)),t.reset(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(h,0),t.lineTo(h,o),t.lineTo(0,o),t.lineTo(0,0),t.clip(),l!==e&&st(l)}_$draw(t,e,i){if(!this._$visible)return;if(-1===this._$focusIndex&&!this._$background&&!this._$border&&!this.text)return;let s=i;const r=this._$transform._$rawColorTransform();1===r[0]&&1===r[1]&&1===r[2]&&1===r[3]&&0===r[4]&&0===r[5]&&0===r[6]&&0===r[7]||(s=ft(i,r));const n=dt(s[3]+s[7]/255,0,1);if(!n)return;let a=e;const h=this._$transform._$rawMatrix();1===h[0]&&0===h[1]&&0===h[2]&&1===h[3]&&0===h[4]&&0===h[5]||(a=gt(e,h));const o=this._$getBounds(null);o.xMin-=this._$thickness,o.xMax+=this._$thickness,o.yMin-=this._$thickness,o.yMax+=this._$thickness;const l=pt(o,a),c=+l.xMax,_=+l.xMin,$=+l.yMax,u=+l.yMin;J(l);const d=v.ceil(v.abs(c-_)),g=v.ceil(v.abs($-u));switch(!0){case 0===d:case 0===g:case d===-1/0:case g===-1/0:case d===b:case g===b:return}let f=+v.sqrt(a[0]*a[0]+a[1]*a[1]);if(!E.isInteger(f)){const t=f.toString(),e=t.indexOf("e");-1!==e&&(f=+t.slice(0,e)),f=+f.toFixed(4)}let p=+v.sqrt(a[2]*a[2]+a[3]*a[3]);if(!E.isInteger(p)){const t=p.toString(),e=t.indexOf("e");-1!==e&&(p=+t.slice(0,e)),p=+p.toFixed(4)}const m=this._$filters||this.filters,x=null!==m&&m.length>0&&this._$canApply(m);let T=Q(0,d,0,g);if(x&&m)for(let t=0;tA.width||u-T.yMin>A.height)return void J(T);if(0>_+T.xMax||0>u+T.yMax)return void J(T);if(J(T),this._$isUpdated()&&(wt.removeCache(this._$instanceId),t.cachePosition=null,this._$cacheKeys.length=0),!this._$cacheKeys.length||this._$cacheParams[0]!==f||this._$cacheParams[1]!==p||this._$cacheParams[2]!==i[7]){const t=ht(f,p);this._$cacheKeys=wt.generateKeys(this._$instanceId,t),ot(t),this._$cacheParams[0]=f,this._$cacheParams[1]=p,this._$cacheParams[2]=i[7]}const M=this._$blendMode||this.blendMode;if(t.cachePosition=wt.get(this._$cacheKeys),!t.cachePosition){const e=v.min(1,v.max(f,p)),i=v.ceil(v.abs(o.xMax-o.xMin)*f),r=v.ceil(v.abs(o.yMax-o.yMin)*p),n=wt.getCanvas();n.width=i+2*e,n.height=r+2*e;const a=n.getContext("2d");if(!a)throw new Error("the context is null.");if(this._$background||this._$border){if(a.beginPath(),a.moveTo(0,0),a.lineTo(i,0),a.lineTo(i,r),a.lineTo(0,r),a.lineTo(0,0),this._$background){const t=Et(this._$backgroundColor),e=v.max(0,v.min(255*t.A+s[7],255))/255;a.fillStyle=`rgba(${t.R},${t.G},${t.B},${e})`,a.fill()}if(this._$border){const t=Et(this._$borderColor),i=v.max(0,v.min(255*t.A+s[7],255))/255;a.lineWidth=e,a.strokeStyle=`rgba(${t.R},${t.G},${t.B},${i})`,a.stroke()}}a.save(),a.beginPath(),a.moveTo(2,2),a.lineTo(i-2,2),a.lineTo(i-2,r-2),a.lineTo(2,r-2),a.lineTo(2,2),a.clip();let h=2;if(this._$scrollX>0){const t=(this.textWidth-this.width)/this.width;h+=-this._$scrollX*t}let l=2;if(this._$scrollY>0){const t=(this.textHeight-this.height)/this.height;l+=-this._$scrollY*t}a.setTransform(f,0,0,p,h*f,l*p),a.beginPath(),this._$doDraw(a,s,i/f,e),a.restore();const c=y.createCachePosition(i,r),_=y.createTextureFromCanvas(a.canvas);t.drawTextureFromRect(_,c),t.cachePosition=c,wt.set(this._$cacheKeys,c),wt.destroy(a)}let w=!1,S=0,C=0;if(m&&m.length&&this._$canApply(m)){w=!0;const e=this._$drawFilter(t,a,m,d,g);e.offsetX&&(S=e.offsetX),e.offsetY&&(C=e.offsetY),t.cachePosition=e}const I=v.atan2(a[1],a[0]),F=v.atan2(-a[2],a[3]);if(w||!I&&!F)t.setTransform(1,0,0,1,_-S,u-C);else{const e=o.xMin*f,i=o.yMin*p,s=v.cos(I),r=v.sin(I),n=v.cos(F),h=v.sin(F);t.setTransform(s,r,-h,n,e*s-i*h+a[4],e*r+i*n+a[5])}t.cachePosition&&(t.globalAlpha=n,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=M,t.drawInstance(_-S,u-C,c,$,i),t.cachePosition=null),J(o),a!==e&&st(a),s!==i&&nt(s)}_$doDraw(t,e,i,s){const r=this.getTextData();if(!r.textTable.length&&this._$focusIndex>-1&&this._$focusVisible){const i=this._$defaultTextFormat,s=Et(i.color||0),r=v.max(0,v.min(255*s.A+e[7],255))/255;return t.strokeStyle=`rgba(${s.R},${s.G},${s.B},${r})`,t.beginPath(),t.moveTo(0,0),t.lineTo(0,0+(i.size||12)),void t.stroke()}if(this._$selectIndex>-1&&this._$focusIndex>-1){const e=r.textTable.length-1;let s=0,n=0;this._$focusIndex<=this._$selectIndex?(s=v.min(this._$focusIndex,e),n=v.min(this._$selectIndex,e)):(s=v.min(this._$selectIndex,e),n=v.min(this._$focusIndex-1,e));const a=r.textTable[s],h=r.lineTable[a.line],o=this._$getAlignOffset(h,i);let l=0;if(s&&"text"===a.mode){let t=s;for(;t;){const e=r.textTable[--t];if("text"!==e.mode)break;l+=e.w}}t.fillStyle="#b4d7ff";let c=0;for(let e=s;e<=n;++e){const i=r.textTable[e];if("text"===i.mode&&(c+=i.w,e!==n))continue;let s=0;const a="text"===i.mode?i.line:i.line-1;for(let t=0;t0){const t=(this.textWidth-n)/n;a=this._$scrollX*t}const h=n+a,o=this.height;let l=0;if(this._$scrollY>0){const t=(this.textHeight-o)/o;l=this._$scrollY*t}const c=o+l;let _=0,$=0,u=0,d=0,g=!1,f=-1;for(let n=0;n-1&&f>this._$stopIndex))break;if(g&&"text"===o.mode)continue;const p=o.textFormat;if("none"===this._$autoSize){if($>c)break;if("text"===o.mode&&(a>_+o.w||_>h)){_+=o.w;continue}}const m=Et(p.color||0),x=v.max(0,v.min(255*m.A+e[7],255))/255;if(t.fillStyle=`rgba(${m.R},${m.G},${m.B},${x})`,this._$focusVisible&&this._$focusIndex===n){const e=_+u+.1;let i=o.line,s=o.y,n=r.ascentTable[i];"text"!==o.mode&&(s="break"===o.mode?o.h:r.ascentTable[i-1],i>0&&!r.ascentTable[i-1]?(i=o.line,n=r.ascentTable[i-1]):(i=o.line-1,n=r.ascentTable[i]));for(let t=0;t$+r.heightTable[b]){g=!0;continue}d=r.ascentTable[b],u=this._$getAlignOffset(o,i),g=!1;break;case"text":{t.beginPath(),t.font=At(p.font||"",p.size||0,!!p.italic,!!p.bold);const i=_+u,r=$+d;if(p.underline){const n=Et(p.color||0),a=v.max(0,v.min(255*n.A+e[7],255))/255;t.lineWidth=s,t.strokeStyle=`rgba(${n.R},${n.G},${n.B},${a})`,t.beginPath(),t.moveTo(i,r+2),t.lineTo(i+o.w,r+2),t.stroke()}this._$thickness&&t.strokeText(o.text,i,r),t.fillText(o.text,i,r),_+=o.w}}}if(this._$focusVisible&&this._$focusIndex>=r.textTable.length){const i=r.textTable[this._$focusIndex-1];if(i){const s=Et(i.textFormat.color||0),r=v.max(0,v.min(255*s.A+e[7],255))/255;t.strokeStyle=`rgba(${s.R},${s.G},${s.B},${r})`;const n=_+u+.1,a=$+d;t.beginPath(),"text"===i.mode?(t.moveTo(n,a-i.y),t.lineTo(n,a)):(t.moveTo(n,a+i.h),t.lineTo(n,a)),t.stroke()}}}_$mouseHit(t,e,i){return!!this._$visible&&this._$hit(t,e,i)}_$hit(t,e,i){let s=e;const r=this._$transform._$rawMatrix();1===r[0]&&0===r[1]&&0===r[2]&&1===r[3]&&0===r[4]&&0===r[5]||(s=gt(e,r));const n=this._$getBounds(null),a=pt(n,s),h=+a.xMax,o=+a.xMin,l=+a.yMax,c=+a.yMin;J(a),J(n);const _=v.ceil(v.abs(h-o)),$=v.ceil(v.abs(l-c));return t.setTransform(1,0,0,1,o,c),t.beginPath(),t.moveTo(0,0),t.lineTo(_,0),t.lineTo(_,$),t.lineTo(0,$),t.lineTo(0,0),s!==e&&st(s),t.isPointInPath(i.x,i.y)}_$createWorkerInstance(){if(this._$created||!Mr)return;this._$created=!0;const t=this._$getBounds(),e={command:"createTextField",buffer:new Float32Array,instanceId:this._$instanceId,parentId:this._$parent?this._$parent._$instanceId:-1,xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax,limitWidth:this.width,limitHeight:this.height,textHeight:this.textHeight,autoSize:this._$autoSize,wordWrap:this._$wordWrap,border:this._$border,background:this._$background,thickness:this._$thickness};this._$border&&(e.borderColor=this._$borderColor),this._$background&&(e.backgroundColor=this._$backgroundColor),this._$thickness&&(e.thicknessColor=this._$backgroundColor),this._$characterId>-1&&(e.characterId=this._$characterId),this._$loaderInfo&&(e.loaderInfoId=this._$loaderInfo._$id),this._$scale9Grid&&(e.grid={x:this._$scale9Grid.x,y:this._$scale9Grid.y,w:this._$scale9Grid.width,h:this._$scale9Grid.height}),Mr.postMessage(e)}_$postProperty(){if(!Mr)return;const t=this._$createMessage(),e=this._$getBounds(null);t.xMin=e.xMin,t.yMin=e.yMin,t.xMax=e.xMax,t.yMax=e.yMax,J(e),this._$isUpdated()&&(t.limitWidth=this.width,t.limitHeight=this.height,t.textHeight=this.textHeight,t.autoSize=this._$autoSize,t.wordWrap=this._$wordWrap,t.border=this._$border,this._$border&&(t.borderColor=this._$borderColor),t.background=this._$background,this._$background&&(t.backgroundColor=this._$backgroundColor),t.thickness=this._$thickness,this._$thickness&&(t.thicknessColor=this._$backgroundColor)),Mr.postMessage(t),this._$posted=!0,this._$updated=!1}}class Ii{constructor(){this._$rgb="rgb",this._$mode="pad",this._$type="linear",this._$focalPointRatio=0,this._$points=it(),this._$stops=ht()}dispose(){const t=this._$stops;for(let i=0;i{switch(!0){case t[0]>e[0]:return 1;case e[0]>t[0]:return-1;default:return 0}})),this._$stops}linear(t,e,i,s,r="rgb",n="pad"){return this._$type="linear",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$rgb=r,this._$mode=n,this._$stops.length&&(this._$stops.length=0),this}radial(t,e,i,s,r,n,a="rgb",h="pad",o=0){return this._$type="radial",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$points[4]=r,this._$points[5]=n,this._$rgb=a,this._$mode=h,this._$focalPointRatio=dt(o,-.975,.975,0),this._$stops.length&&(this._$stops.length=0),this}addColorStop(t,e){this._$stops.push(ht(t,e))}}class Fi{constructor(t,e,i,s){this._$context=t,this._$texture=e,this._$repeat=i,this._$colorTransform=s}get texture(){return this._$texture}get repeat(){return this._$repeat}get colorTransform(){return this._$colorTransform}}class Ri{constructor(){this._$fillStyle=Z(1,1,1,1),this._$strokeStyle=Z(1,1,1,1),this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5}get miterLimit(){return this._$miterLimit}set miterLimit(t){this._$miterLimit=t}get lineWidth(){return this._$lineWidth}set lineWidth(t){this._$lineWidth=t}get lineCap(){return this._$lineCap}set lineCap(t){this._$lineCap=t}get lineJoin(){return this._$lineJoin}set lineJoin(t){this._$lineJoin=t}get fillStyle(){return this._$fillStyle}set fillStyle(t){this._$fillStyle instanceof A&&tt(this._$fillStyle),this._$fillStyle=t}get strokeStyle(){return this._$strokeStyle}set strokeStyle(t){this._$strokeStyle instanceof A&&tt(this._$strokeStyle),this._$strokeStyle=t}clear(){this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5,this._$clearFill(),this._$clearStroke()}_$clearFill(){if(this._$fillStyle instanceof Ii)return this._$fillStyle.dispose(),void(this._$fillStyle=Z(1,1,1,1));this._$fillStyle instanceof Fi?this._$fillStyle=Z(1,1,1,1):this._$fillStyle.fill(1)}_$clearStroke(){if(this._$strokeStyle instanceof Ii)return this._$strokeStyle.dispose(),void(this._$strokeStyle=Z(1,1,1,1));this._$strokeStyle instanceof Fi?this._$strokeStyle=Z(1,1,1,1):this._$strokeStyle.fill(1)}}let Bi=2048;class Li{constructor(t){t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!0),this._$gl=t,this._$objectPool=[],this._$objectPoolArea=0,this._$activeTexture=-1,this._$boundTextures=[null,null,null],this._$maxWidth=0,this._$maxHeight=0,this._$atlasTextures=[],this._$atlasCacheMap=new Map,this._$positionObjectArray=[],this._$nodeObjectArray=[],this._$atlasNodes=new Map}createTextureAtlas(){const t=this._$gl.createTexture();t.width=Bi,t.height=Bi,this._$gl.activeTexture(this._$gl.TEXTURE3),this._$gl.bindTexture(this._$gl.TEXTURE_2D,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,this._$gl.NEAREST),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,this._$gl.NEAREST),this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,Bi,Bi),this._$gl.bindTexture(this._$gl.TEXTURE_2D,null),this._$activeTexture>-1&&this._$gl.activeTexture(this._$activeTexture);const e=this._$atlasTextures.length;this._$atlasNodes.set(e,[]),this._$atlasCacheMap.set(e,[]),this._$atlasTextures.push(t)}getAtlasTexture(t){return this._$atlasTextures[t]}getNode(t,e,i,s){const r=this._$nodeObjectArray.length?this._$nodeObjectArray.pop():{x:0,y:0,w:0,h:0};return r.x=t,r.y=e,r.w=i,r.h=s,r}createCachePosition(t,e){const i=this._$positionObjectArray.length?this._$positionObjectArray.pop():{index:0,x:0,y:0,w:0,h:0};i.x=i.y=0,i.w=t,i.h=e;for(const[s,r]of this._$atlasNodes){if(!r.length)return t>e?(Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,e)),Bi-e-1>0&&r.push(this.getNode(0,e+1,Bi,Bi-e-1))):(Bi-e-1>0&&r.push(this.getNode(0,e+1,t,Bi-e-1)),Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,Bi))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i;const n=r.length;for(let a=0;an.w||e>n.h))return i.index=s,i.x=n.x,i.y=n.y,this._$atlasCacheMap.get(i.index).push(i),n.w!==t||n.h!==e?t>e?(n.h-e-1>0&&r.push(this.getNode(n.x,n.y+e+1,n.w,n.h-e-1)),n.w-t-1>0?(n.x=n.x+t+1,n.w=n.w-t-1,n.h=e):(r.splice(a,1),this._$nodeObjectArray.push(n))):(n.w-t-1>0&&r.push(this.getNode(n.x+t+1,n.y,n.w-t-1,n.h)),n.h-e-1>0?(n.y=n.y+e+1,n.w=t,n.h=n.h-e-1):(r.splice(a,1),this._$nodeObjectArray.push(n))):(r.splice(a,1),this._$nodeObjectArray.push(n)),i}}const s=this._$atlasTextures.length;this.createTextureAtlas();const r=this._$atlasNodes.get(s);return t>e?(Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,e)),Bi-e-1>0&&r.push(this.getNode(0,e+1,Bi,Bi-e-1))):(Bi-e-1>0&&r.push(this.getNode(0,e+1,t,Bi-e-1)),Bi-t-1>0&&r.push(this.getNode(t+1,0,Bi-t-1,Bi))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i}releasePosition(t){var e;this._$atlasNodes.has(t.index)&&(null===(e=this._$atlasNodes.get(t.index))||void 0===e||e.unshift(this.getNode(t.x,t.y,t.w,t.h)),this._$positionObjectArray.push(t))}clearCache(){for(const t of this._$atlasCacheMap.values())t.length=0;for(const t of this._$atlasNodes.values())t.length=0}_$createTexture(t,e){const i=this._$gl.createTexture();return i.width=0,i.height=0,i.area=0,i.dirty=!0,i.smoothing=!0,this.bind0(i,!1),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,t,e),i}_$getTexture(t,e){for(let i=0;ithis._$maxWidth*this._$maxHeight*2)this._$gl.deleteTexture(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPool.length&&this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();this._$objectPoolArea-=t.area,this._$gl.deleteTexture(t)}}bind0(t,e=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,e)}bind01(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,e,i),this._$bindTexture(0,this._$gl.TEXTURE0,t,i)}bind012(t,e,i,s=null){this._$bindTexture(2,this._$gl.TEXTURE2,i,s),this._$bindTexture(1,this._$gl.TEXTURE1,e,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}bind02(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,e,i),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}_$bindTexture(t,e,i=null,s=null){const r=i!==this._$boundTextures[t],n=null!==s&&null!==i&&s!==i.smoothing;if((r||n||e===this._$gl.TEXTURE0)&&e!==this._$activeTexture&&(this._$activeTexture=e,this._$gl.activeTexture(e)),r&&(this._$boundTextures[t]=i,this._$gl.bindTexture(this._$gl.TEXTURE_2D,i)),n){i&&(i.smoothing=!!s);const t=s?this._$gl.LINEAR:this._$gl.NEAREST;this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,t)}}}class Pi{constructor(t){this._$gl=t,this._$objectPool=ht(),this._$objectPoolArea=0,this._$maxWidth=0,this._$maxHeight=0}set maxWidth(t){this._$maxWidth=t}set maxHeight(t){this._$maxHeight=t}_$createStencilBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the stencil buffer is null.");return t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getStencilBuffer(t,e){const i=this._$objectPool.length;for(let s=0;s100){const t=this._$objectPool.shift();if(t)return this._$objectPoolArea-=t.area,t}return this._$createStencilBuffer()}create(t,e){const i=this._$getStencilBuffer(t,e);return i.width===t&&i.height===e||(i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,i),this._$gl.renderbufferStorage(this._$gl.RENDERBUFFER,this._$gl.STENCIL_INDEX8,t,e)),i}release(t){if(t.area>this._$maxWidth*this._$maxHeight*2)this._$gl.deleteRenderbuffer(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();t&&(this._$objectPoolArea-=t.area,this._$gl.deleteRenderbuffer(t))}}}class ki{constructor(t,e){this._$gl=t,this._$samples=e,this._$objectPool=ht()}set samples(t){this._$samples=t}_$createColorBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the color buffer is null.");const e=this._$gl.createRenderbuffer();if(!e)throw new Error("the stencil buffer is null.");return t.stencil=e,t.samples=0,t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getColorBuffer(t){if(!this._$objectPool.length)return this._$createColorBuffer();const e=this._$bsearch(t);if(e1;){const s=v.floor((i+e)/2);t<=this._$objectPool[s].area?i=s:e=s}return i}}class Ni{constructor(t,e){this._$gl=t,this._$objectPool=[],this._$frameBuffer=t.createFramebuffer(),t.bindFramebuffer(t.READ_FRAMEBUFFER,this._$frameBuffer),this._$frameBufferTexture=t.createFramebuffer(),this._$currentAttachment=null,this._$isBinding=!1,this._$textureManager=new Li(t),this._$stencilBufferPool=new Pi(t),this._$colorBufferPool=new ki(t,e),this._$isRenderBinding=!1,this._$colorBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.RGBA8,Bi,Bi),this._$stencilBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.STENCIL_INDEX8,Bi,Bi)}bindRenderBuffer(){this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),this._$isRenderBinding||(this._$isRenderBinding=!0,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,this._$stencilBuffer))}get currentAttachment(){return this._$currentAttachment}get textureManager(){return this._$textureManager}createCacheAttachment(t,e,i=!1,s=0){const r=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},n=this._$textureManager.create(t,e);return r.width=t,r.height=e,i?(r.color=this._$colorBufferPool.create(t,e,s),r.texture=n,r.msaa=!0,r.stencil=r.color.stencil):(r.color=n,r.texture=n,r.msaa=!1,r.stencil=this._$stencilBufferPool.create(t,e)),r.mask=!1,r.clipLevel=0,r.isActive=!0,r}clearCache(){this._$textureManager.clearCache()}setMaxSize(t,e){this._$stencilBufferPool._$maxWidth=t,this._$stencilBufferPool._$maxHeight=e,this._$textureManager._$maxWidth=t,this._$textureManager._$maxHeight=e}createTextureAttachment(t,e){const i=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},s=this._$textureManager.create(t,e);return i.width=t,i.height=e,i.color=s,i.texture=s,i.msaa=!1,i.stencil=null,i.mask=!1,i.clipLevel=0,i.isActive=!0,i}createTextureAttachmentFrom(t){const e=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!0};return e.width=t.width,e.height=t.height,e.color=t,e.texture=t,e.msaa=!1,e.stencil=null,e.mask=!1,e.clipLevel=0,e.isActive=!0,e}releaseAttachment(t=null,e=!1){t&&t.isActive&&(t.msaa?t.color instanceof WebGLRenderbuffer&&this._$colorBufferPool.release(t.color):t.stencil&&this._$stencilBufferPool.release(t.stencil),e&&t.texture&&this._$textureManager.release(t.texture),t.color=null,t.texture=null,t.stencil=null,t.isActive=!1,this._$objectPool.push(t))}bind(t){this._$currentAttachment=t,this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),t.msaa?t.color instanceof WebGLRenderbuffer&&(this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.color),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,t.color)):t.color instanceof WebGLTexture&&(t.color&&this._$textureManager.bind0(t.color),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,t.color,0)),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.stencil),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,t.stencil),this._$isRenderBinding=!1}unbind(){this._$currentAttachment=null,this._$isBinding&&(this._$isBinding=!1,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,null))}transferToMainTexture(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,null),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBuffer)}createCachePosition(t,e){return this._$textureManager.createCachePosition(t,e)}transferTexture(t){this._$gl.disable(this._$gl.SCISSOR_TEST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture);const e=this._$textureManager.getAtlasTexture(t.index);this._$textureManager.bind0(e),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,e,0);const i=v.max(0,t.x-1),s=v.max(0,t.y-1),r=v.min(Bi,t.x+t.w+1),n=v.min(Bi,t.y+t.h+1);this._$gl.blitFramebuffer(i,s,r,n,i,s,r,n,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)}getTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");if(!this._$currentAttachment.msaa&&this._$currentAttachment.texture)return this._$currentAttachment.texture;const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");return i.dirty=!1,this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer),i}createTextureFromPixels(t,e,i=null,s=!1,r=!0){return this._$textureManager.create(t,e,i,s,r)}createTextureFromCanvas(t){return this._$textureManager.createFromCanvas(t)}createTextureFromImage(t,e=!1){return this._$textureManager.createFromImage(t,e)}createTextureFromVideo(t,e=!1){return this._$textureManager.createFromVideo(t,e)}createTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$textureManager.create(t,e);return this._$textureManager.bind0(i),this._$gl.copyTexSubImage2D(this._$gl.TEXTURE_2D,0,0,0,0,0,t,e),i}releaseTexture(t){this._$textureManager.release(t)}}class Oi{constructor(){this._$bezierConverterBuffer=new A(32)}cubicToQuad(t,e,i,s,r,n,a,h){this._$split2Cubic(t,e,i,s,r,n,a,h,0,16),this._$split2Cubic(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0,8),this._$split2Cubic(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16,24),this._$split2Quad(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0),this._$split2Quad(this._$bezierConverterBuffer[8],this._$bezierConverterBuffer[9],this._$bezierConverterBuffer[10],this._$bezierConverterBuffer[11],this._$bezierConverterBuffer[12],this._$bezierConverterBuffer[13],this._$bezierConverterBuffer[14],this._$bezierConverterBuffer[15],8),this._$split2Quad(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16),this._$split2Quad(this._$bezierConverterBuffer[24],this._$bezierConverterBuffer[25],this._$bezierConverterBuffer[26],this._$bezierConverterBuffer[27],this._$bezierConverterBuffer[28],this._$bezierConverterBuffer[29],this._$bezierConverterBuffer[30],this._$bezierConverterBuffer[31],24)}_$split2Cubic(t,e,i,s,r,n,a,h,o,l){const c=.125*(t+3*(i+r)+a),_=.125*(e+3*(s+n)+h),$=.125*(a+r-i-t),u=.125*(h+n-s-e);this._$bezierConverterBuffer[o]=t,this._$bezierConverterBuffer[o+1]=e,this._$bezierConverterBuffer[o+2]=.5*(t+i),this._$bezierConverterBuffer[o+3]=.5*(e+s),this._$bezierConverterBuffer[o+4]=c-$,this._$bezierConverterBuffer[o+5]=_-u,this._$bezierConverterBuffer[o+6]=c,this._$bezierConverterBuffer[o+7]=_,this._$bezierConverterBuffer[l]=c,this._$bezierConverterBuffer[l+1]=_,this._$bezierConverterBuffer[l+2]=c+$,this._$bezierConverterBuffer[l+3]=_+u,this._$bezierConverterBuffer[l+4]=.5*(r+a),this._$bezierConverterBuffer[l+5]=.5*(n+h),this._$bezierConverterBuffer[l+6]=a,this._$bezierConverterBuffer[l+7]=h}_$split2Quad(t,e,i,s,r,n,a,h,o){const l=.125*(t+3*(i+r)+a),c=.125*(e+3*(s+n)+h);this._$bezierConverterBuffer[o]=.25*t+.75*i,this._$bezierConverterBuffer[o+1]=.25*e+.75*s,this._$bezierConverterBuffer[o+2]=l,this._$bezierConverterBuffer[o+3]=c,this._$bezierConverterBuffer[o+4]=.75*r+.25*a,this._$bezierConverterBuffer[o+5]=.75*n+.25*h,this._$bezierConverterBuffer[o+6]=a,this._$bezierConverterBuffer[o+7]=h}}class Di{constructor(){this._$currentPath=ht(),this._$vertices=ht(),this._$bezierConverter=new Oi}get vertices(){return this._$pushCurrentPathToVertices(),this._$vertices}begin(){for(this._$currentPath.length=0;this._$vertices.length;)ot(this._$vertices.pop())}moveTo(t,e){this._$currentPath.length?this._$equalsToLastPoint(t,e)||(this._$pushCurrentPathToVertices(),this._$pushPointToCurrentPath(t,e,!1)):this._$pushPointToCurrentPath(t,e,!1)}lineTo(t,e){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}quadTo(t,e,i,s){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(i,s)||(this._$pushPointToCurrentPath(t,e,!0),this._$pushPointToCurrentPath(i,s,!1))}cubicTo(t,e,i,s,r,n){if(this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(r,n))return;const a=+this._$currentPath[this._$currentPath.length-3],h=+this._$currentPath[this._$currentPath.length-2];this._$bezierConverter.cubicToQuad(a,h,t,e,i,s,r,n);const o=this._$bezierConverter._$bezierConverterBuffer;for(let t=0;t<32;)this.quadTo(o[t++],o[t++],o[t++],o[t++])}drawCircle(t,e,i){const s=i,r=.5522847498307936*i;this.cubicTo(t+s,e+r,t+r,e+s,t,e+s),this.cubicTo(t-r,e+s,t-s,e+r,t-s,e),this.cubicTo(t-s,e-r,t-r,e-s,t,e-s),this.cubicTo(t+r,e-s,t+s,e-r,t+s,e)}close(){if(this._$currentPath.length<=6)return;const t=+this._$currentPath[0],e=+this._$currentPath[1];this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}_$equalsToLastPoint(t,e){const i=+this._$currentPath[this._$currentPath.length-3],s=+this._$currentPath[this._$currentPath.length-2];return t===i&&e===s}_$pushPointToCurrentPath(t,e,i){this._$currentPath.push(t,e,i)}_$pushCurrentPathToVertices(){this._$currentPath.length<4?this._$currentPath.length=0:(this._$vertices.push(this._$currentPath),this._$currentPath=ht())}createRectVertices(t,e,i,s){return ht(ht(t,e,!1,t+i,e,!1,t+i,e+s,!1,t,e+s,!1))}}class Ui{constructor(){this.enabled=!1,this.parentMatrixA=1,this.parentMatrixB=0,this.parentMatrixC=0,this.parentMatrixD=0,this.parentMatrixE=1,this.parentMatrixF=0,this.parentMatrixG=0,this.parentMatrixH=0,this.parentMatrixI=1,this.ancestorMatrixA=1,this.ancestorMatrixB=0,this.ancestorMatrixC=0,this.ancestorMatrixD=0,this.ancestorMatrixE=1,this.ancestorMatrixF=0,this.ancestorMatrixG=0,this.ancestorMatrixH=0,this.ancestorMatrixI=1,this.parentViewportX=0,this.parentViewportY=0,this.parentViewportW=0,this.parentViewportH=0,this.minXST=1e-5,this.minYST=1e-5,this.minXPQ=1e-5,this.minYPQ=1e-5,this.maxXST=.99999,this.maxYST=.99999,this.maxXPQ=.99999,this.maxYPQ=.99999}enable(t,e,i,s,r,n,a,h,o,l,c,_,$,u,d,g,f,p,m){const x=r.xMax-r.xMin,b=r.yMax-r.yMin,T=n.w,y=n.h,E=v.abs(v.ceil(x*a)),A=v.abs(v.ceil(b*a)),M=T>0?(n.x-r.xMin)/x:1e-5,w=y>0?(n.y-r.yMin)/b:1e-5,S=T>0?(n.x+n.w-r.xMin)/x:.99999,C=y>0?(n.y+n.h-r.yMin)/b:.99999;let I=E*M/i,F=A*w/s,R=(i-E*(1-S))/i,B=(s-A*(1-C))/s;if(I>=R){const t=M/(M+(1-S));I=v.max(t-1e-5,0),R=v.min(t+1e-5,1)}if(F>=B){const t=w/(w+(1-C));F=v.max(t-1e-5,0),B=v.min(t+1e-5,1)}this.enabled=!0,this.parentMatrixA=h,this.parentMatrixB=o,this.parentMatrixD=l,this.parentMatrixE=c,this.parentMatrixG=_,this.parentMatrixH=$,this.ancestorMatrixA=u,this.ancestorMatrixB=d,this.ancestorMatrixD=g,this.ancestorMatrixE=f,this.ancestorMatrixG=p,this.ancestorMatrixH=m,this.parentViewportX=t,this.parentViewportY=e,this.parentViewportW=i,this.parentViewportH=s,this.minXST=M,this.minYST=w,this.minXPQ=I,this.minYPQ=F,this.maxXST=S,this.maxYST=C,this.maxXPQ=R,this.maxYPQ=B}disable(){this.enabled=!1}}class Vi{constructor(t,e){this._$gl=t,this._$array=[],this._$map=ct();const i=this._$gl.getProgramParameter(e,this._$gl.ACTIVE_UNIFORMS);for(let t=0;t0&&(t.assign--,t.method(t.array)))}}}class Gi{constructor(){this._$attributes=[],this._$count=0}get attributes(){return this._$attributes}get count(){return this._$count}set count(t){this._$count=t}clear(){this._$attributes.length=0,this._$count=0}}class zi{constructor(t,e,i,s){this._$gl=t,this._$context=e,this._$program=this._$createProgram(i,s),this._$uniform=new Vi(t,this._$program),this._$instance=null}get instance(){return this._$instance||(this._$instance=new Gi),this._$instance}get uniform(){return this._$uniform}_$createProgram(t,e){const i=this._$gl.createProgram();i.id=p++;const s=this._$gl.createShader(this._$gl.VERTEX_SHADER);this._$gl.shaderSource(s,t),this._$gl.compileShader(s);const r=this._$gl.createShader(this._$gl.FRAGMENT_SHADER);return this._$gl.shaderSource(r,e),this._$gl.compileShader(r),this._$gl.attachShader(i,s),this._$gl.attachShader(i,r),this._$gl.linkProgram(i),this._$gl.detachShader(i,s),this._$gl.detachShader(i,r),this._$gl.deleteShader(s),this._$gl.deleteShader(r),i}_$attachProgram(){const t=this._$context.shaderList;t.currentProgramId!==this._$program.id&&(t.currentProgramId=this._$program.id,this._$gl.useProgram(this._$program))}drawArraysInstanced(t){this._$attachProgram(),this._$context.vao.bindInstnceArray(t),this._$gl.drawArraysInstanced(this._$gl.TRIANGLE_STRIP,0,4,t.count)}_$drawImage(){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindCommonVertexArray(),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$drawGradient(t,e){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindGradientVertexArray(t,e),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$stroke(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawElements(this._$gl.TRIANGLES,t.indexCount,this._$gl.UNSIGNED_SHORT,0)}_$fill(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t);const e=t.indexRanges,i=e[e.length-1];this._$gl.drawArrays(this._$gl.TRIANGLES,0,i.first+i.count)}_$containerClip(t,e,i){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.TRIANGLES,e,i)}_$drawPoints(t,e,i){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.POINTS,e,i)}}class Xi{static FUNCTION_GRID_OFF(){return"\n\nvec2 applyMatrix(in vec2 vertex) {\n mat3 matrix = mat3(\n u_highp[0].xyz,\n u_highp[1].xyz,\n u_highp[2].xyz\n );\n\n vec2 position = (matrix * vec3(vertex, 1.0)).xy;\n\n return position;\n}\n\n"}static FUNCTION_GRID_ON(t){return`\n\nvec2 applyMatrix(in vec2 vertex) {\n mat3 parent_matrix = mat3(\n u_highp[${t}].xyz,\n u_highp[${t+1}].xyz,\n u_highp[${t+2}].xyz\n );\n mat3 ancestor_matrix = mat3(\n u_highp[${t+3}].xyz,\n u_highp[${t+4}].xyz,\n u_highp[${t+5}].xyz\n );\n vec2 parent_offset = vec2(u_highp[${t+2}].w, u_highp[${t+3}].w);\n vec2 parent_size = vec2(u_highp[${t+4}].w, u_highp[${t+5}].w);\n vec4 grid_min = u_highp[${t+6}];\n vec4 grid_max = u_highp[${t+7}];\n\n vec2 position = (parent_matrix * vec3(vertex, 1.0)).xy;\n position = (position - parent_offset) / parent_size;\n\n vec4 ga = grid_min;\n vec4 gb = grid_max - grid_min;\n vec4 gc = vec4(1.0) - grid_max;\n\n vec2 pa = position;\n vec2 pb = position - grid_min.st;\n vec2 pc = position - grid_max.st;\n\n position = (ga.pq / ga.st) * min(pa, ga.st)\n + (gb.pq / gb.st) * clamp(pb, vec2(0.0), gb.st)\n + (gc.pq / gc.st) * max(vec2(0.0), pc);\n\n position = position * parent_size + parent_offset;\n position = (ancestor_matrix * vec3(position, 1.0)).xy;\n\n return position;\n}\n\n`}}class qi{static TEMPLATE(t,e,i,s){const r=e-1,n=i?this.VARYING_UV_ON():"",a=i?this.STATEMENT_UV_ON():"";return`#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\nlayout (location = 1) in vec2 a_option1;\nlayout (location = 2) in vec2 a_option2;\nlayout (location = 3) in float a_type;\n\nuniform vec4 u_highp[${t}];\n\n${n}\n\n${s?Xi.FUNCTION_GRID_ON(i?5:0):Xi.FUNCTION_GRID_OFF()}\n\nfloat crossVec2(in vec2 v1, in vec2 v2) {\n return v1.x * v2.y - v2.x * v1.y;\n}\n\nvec2 perpendicularVec2(in vec2 v1) {\n float face = u_highp[${r}][1];\n\n return face * vec2(v1.y, -v1.x);\n}\n\nvec2 calculateNormal(in vec2 direction) {\n vec2 normalized = normalize(direction);\n return perpendicularVec2(normalized);\n}\n\nvec2 calculateIntersection(in vec2 v1, in vec2 v2, in vec2 o1, in vec2 o2) {\n float t = crossVec2(o2 - o1, v2) / crossVec2(v1, v2);\n return (o1 + t * v1);\n}\n\nvec2 calculateAnchor(in vec2 position, in float convex, out vec2 v1, out vec2 v2, out vec2 o1, out vec2 o2) {\n float miter_limit = u_highp[${r}][2];\n\n vec2 a = applyMatrix(a_option1);\n vec2 b = applyMatrix(a_option2);\n\n v1 = convex * (position - a);\n v2 = convex * (b - position);\n o1 = calculateNormal(v1) + a;\n o2 = calculateNormal(v2) + position;\n\n vec2 anchor = calculateIntersection(v1, v2, o1, o2) - position;\n return normalize(anchor) * min(length(anchor), miter_limit);\n}\n\nvoid main() {\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\n float half_width = u_highp[${r}][0];\n\n vec2 position = applyMatrix(a_vertex);\n vec2 offset = vec2(0.0);\n vec2 v1, v2, o1, o2;\n\n if (a_type == 1.0 || a_type == 2.0) { // 線分\n offset = calculateNormal(a_option2 * (applyMatrix(a_option1) - position));\n } else if (a_type == 10.0) { // スクエア線端\n offset = normalize(position - applyMatrix(a_option1));\n offset += a_option2 * perpendicularVec2(offset);\n } else if (a_type == 21.0) { // マイター結合(線分Bの凸側)\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\n } else if (a_type == 22.0) { // マイター結合(線分Aの凸側)\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\n } else if (a_type == 23.0) { // マイター結合(線分Aの凹側)\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\n } else if (a_type == 24.0) { // マイター結合(線分Bの凹側)\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\n } else if (a_type >= 30.0) { // ラウンド結合\n float face = u_highp[${r}][1];\n float rad = face * (a_type - 30.0) * 0.3488888889; /* 0.3488888889 = PI / 9.0 */\n offset = mat2(cos(rad), sin(rad), -sin(rad), cos(rad)) * vec2(1.0, 0.0);\n }\n \n offset *= half_width;\n position += offset;\n ${a}\n\n position /= viewport;\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n`}static VARYING_UV_ON(){return"\nout vec2 v_uv;\n"}static STATEMENT_UV_ON(){return"\n mat3 uv_matrix = mat3(\n u_highp[0].xyz,\n u_highp[1].xyz,\n u_highp[2].xyz\n );\n mat3 inverse_matrix = mat3(\n u_highp[3].xyz,\n u_highp[4].xyz,\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\n );\n\n v_uv = (uv_matrix * vec3(a_vertex, 1.0)).xy;\n v_uv += offset;\n v_uv = (inverse_matrix * vec3(v_uv, 1.0)).xy;\n"}}class Yi{static TEMPLATE(t,e,i,s){const r=i?this.ATTRIBUTE_BEZIER_ON():"",n=i?this.VARYING_BEZIER_ON():e?this.VARYING_UV_ON():"",a=i?this.STATEMENT_BEZIER_ON():e?this.STATEMENT_UV_ON():"";return`#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n${r}\n\nuniform vec4 u_highp[${t}];\n\n${n}\n\n${s?Xi.FUNCTION_GRID_ON(e?5:0):Xi.FUNCTION_GRID_OFF()}\n\nvoid main() {\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\n\n ${a}\n\n vec2 pos = applyMatrix(a_vertex) / viewport;\n pos = pos * 2.0 - 1.0;\n gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0);\n}\n\n`}static ATTRIBUTE_BEZIER_ON(){return"\nlayout (location = 1) in vec2 a_bezier;\n"}static VARYING_UV_ON(){return"\nout vec2 v_uv;\n"}static VARYING_BEZIER_ON(){return"\nout vec2 v_bezier;\n"}static STATEMENT_UV_ON(){return"\n mat3 uv_matrix = mat3(\n u_highp[0].xyz,\n u_highp[1].xyz,\n u_highp[2].xyz\n );\n mat3 inverse_matrix = mat3(\n u_highp[3].xyz,\n u_highp[4].xyz,\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\n );\n\n v_uv = (inverse_matrix * uv_matrix * vec3(a_vertex, 1.0)).xy;\n"}static STATEMENT_BEZIER_ON(){return"\n v_bezier = a_bezier;\n"}}class Hi{static FUNCTION_IS_INSIDE(){return"\n\nfloat isInside(in vec2 uv) {\n return step(4.0, dot(step(vec4(0.0, uv.x, 0.0, uv.y), vec4(uv.x, 1.0, uv.y, 1.0)), vec4(1.0)));\n}\n\n"}static STATEMENT_INSTANCED_COLOR_TRANSFORM_ON(){return"\n src.rgb /= max(0.0001, src.a);\n src = clamp(src * mul + add, 0.0, 1.0);\n src.rgb *= src.a;\n"}static STATEMENT_COLOR_TRANSFORM_ON(t){return`\n vec4 mul = u_mediump[${t}];\n vec4 add = u_mediump[${t+1}];\n${Hi.STATEMENT_INSTANCED_COLOR_TRANSFORM_ON()}\n`}}class ji{static SOLID_COLOR(){return"#version 300 es\nprecision mediump float;\n\nuniform vec4 u_mediump;\n\nout vec4 o_color;\n\nvoid main() {\n o_color = vec4(u_mediump.rgb * u_mediump.a, u_mediump.a);\n}\n\n"}static BITMAP_CLIPPED(){return`#version 300 es\nprecision mediump float;\n\nuniform sampler2D u_texture;\nuniform vec4 u_mediump[3];\n\nin vec2 v_uv;\nout vec4 o_color;\n\nvoid main() {\n vec2 uv = vec2(v_uv.x, u_mediump[0].y - v_uv.y) / u_mediump[0].xy;\n\n vec4 src = texture(u_texture, uv);\n ${Hi.STATEMENT_COLOR_TRANSFORM_ON(1)}\n o_color = src;\n}`}static BITMAP_PATTERN(){return`#version 300 es\nprecision mediump float;\n\nuniform sampler2D u_texture;\nuniform vec4 u_mediump[3];\n\nin vec2 v_uv;\nout vec4 o_color;\n\nvoid main() {\n vec2 uv = fract(vec2(v_uv.x, -v_uv.y) / u_mediump[0].xy);\n \n vec4 src = texture(u_texture, uv);\n ${Hi.STATEMENT_COLOR_TRANSFORM_ON(1)}\n o_color = src;\n}`}static MASK(){return"#version 300 es\nprecision mediump float;\n\nin vec2 v_bezier;\nout vec4 o_color;\n\nvoid main() {\n vec2 px = dFdx(v_bezier);\n vec2 py = dFdy(v_bezier);\n\n vec2 f = (2.0 * v_bezier.x) * vec2(px.x, py.x) - vec2(px.y, py.y);\n float alpha = 0.5 - (v_bezier.x * v_bezier.x - v_bezier.y) / length(f);\n\n if (alpha > 0.0) {\n o_color = vec4(min(alpha, 1.0));\n } else {\n discard;\n } \n}\n\n"}}class Wi{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=ct()}getSolidColorShapeShader(t,e){const i=`s${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?qi.TEMPLATE(s,r,!1,e):Yi.TEMPLATE(s,!1,!1,e);const a=new zi(this._$gl,this._$context,n,ji.SOLID_COLOR());return this._$collection.set(i,a),a}getBitmapShapeShader(t,e,i){const s=`b${t?"y":"n"}${e?"y":"n"}${i?"y":"n"}`;if(this._$collection.has(s)){const t=this._$collection.get(s);if(t)return t}const r=(i?13:5)+(t?1:0),n=r;let a;a=t?qi.TEMPLATE(r,n,!0,i):Yi.TEMPLATE(r,!0,!1,i);const h=e?ji.BITMAP_PATTERN():ji.BITMAP_CLIPPED(),o=new zi(this._$gl,this._$context,a,h);return this._$collection.set(s,o),o}getMaskShapeShader(t,e){const i=`m${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?qi.TEMPLATE(s,r,!1,e):Yi.TEMPLATE(s,!1,!0,e);const a=new zi(this._$gl,this._$context,n,ji.MASK());return this._$collection.set(i,a),a}setSolidColorShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_){const $=t.highp;let u;n?($[0]=l.parentMatrixA,$[1]=l.parentMatrixB,$[2]=l.parentMatrixC,$[4]=l.parentMatrixD,$[5]=l.parentMatrixE,$[6]=l.parentMatrixF,$[8]=l.parentMatrixG,$[9]=l.parentMatrixH,$[10]=l.parentMatrixI,$[12]=l.ancestorMatrixA,$[13]=l.ancestorMatrixB,$[14]=l.ancestorMatrixC,$[16]=l.ancestorMatrixD,$[17]=l.ancestorMatrixE,$[18]=l.ancestorMatrixF,$[20]=l.ancestorMatrixG,$[21]=l.ancestorMatrixH,$[22]=l.ancestorMatrixI,$[3]=h,$[7]=o,$[11]=l.parentViewportX,$[15]=l.parentViewportY,$[19]=l.parentViewportW,$[23]=l.parentViewportH,$[24]=l.minXST,$[25]=l.minYST,$[26]=l.minXPQ,$[27]=l.minYPQ,$[28]=l.maxXST,$[29]=l.maxYST,$[30]=l.maxXPQ,$[31]=l.maxYPQ,u=32):($[0]=a[0],$[1]=a[1],$[2]=a[2],$[4]=a[3],$[5]=a[4],$[6]=a[5],$[8]=a[6],$[9]=a[7],$[10]=a[8],$[3]=h,$[7]=o,u=12),e&&($[u]=i,$[u+1]=s,$[u+2]=r);const d=t.mediump;d[0]=c[0],d[1]=c[1],d[2]=c[2],d[3]=c[3]*_}setBitmapShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_,$,u,d,g,f,p,m,x,b){const v=t.highp;let T;v[0]=a[0],v[1]=a[1],v[2]=a[2],v[4]=a[3],v[5]=a[4],v[6]=a[5],v[8]=a[6],v[9]=a[7],v[10]=a[8],v[12]=h[0],v[13]=h[1],v[14]=h[2],v[16]=h[3],v[17]=h[4],v[18]=h[5],v[11]=h[6],v[15]=h[7],v[19]=h[8],v[3]=o,v[7]=l,T=20,n&&(v[T]=c.parentMatrixA,v[T+1]=c.parentMatrixB,v[T+2]=c.parentMatrixC,v[T+4]=c.parentMatrixD,v[T+5]=c.parentMatrixE,v[T+6]=c.parentMatrixF,v[T+8]=c.parentMatrixG,v[T+9]=c.parentMatrixH,v[T+10]=c.parentMatrixI,v[T+12]=c.ancestorMatrixA,v[T+13]=c.ancestorMatrixB,v[T+14]=c.ancestorMatrixC,v[T+16]=c.ancestorMatrixD,v[T+17]=c.ancestorMatrixE,v[T+18]=c.ancestorMatrixF,v[T+20]=c.ancestorMatrixG,v[T+21]=c.ancestorMatrixH,v[T+22]=c.ancestorMatrixI,v[T+11]=c.parentViewportX,v[T+15]=c.parentViewportY,v[T+19]=c.parentViewportW,v[T+23]=c.parentViewportH,v[T+24]=c.minXST,v[T+25]=c.minYST,v[T+26]=c.minXPQ,v[T+27]=c.minYPQ,v[T+28]=c.maxXST,v[T+29]=c.maxYST,v[T+30]=c.maxXPQ,v[T+31]=c.maxYPQ,T=52),e&&(v[T]=i,v[T+1]=s,v[T+2]=r);const y=t.mediump;y[0]=_,y[1]=$,y[4]=u,y[5]=d,y[6]=g,y[7]=f,y[8]=p,y[9]=m,y[10]=x,y[11]=b}setMaskShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_,$,u=null){const d=t.highp;e&&u?(d[0]=u.parentMatrixA,d[1]=u.parentMatrixB,d[2]=u.parentMatrixC,d[4]=u.parentMatrixD,d[5]=u.parentMatrixE,d[6]=u.parentMatrixF,d[8]=u.parentMatrixG,d[9]=u.parentMatrixH,d[10]=u.parentMatrixI,d[12]=u.ancestorMatrixA,d[13]=u.ancestorMatrixB,d[14]=u.ancestorMatrixC,d[16]=u.ancestorMatrixD,d[17]=u.ancestorMatrixE,d[18]=u.ancestorMatrixF,d[20]=u.ancestorMatrixG,d[21]=u.ancestorMatrixH,d[22]=u.ancestorMatrixI,d[3]=_,d[7]=$,d[11]=u.parentViewportX,d[15]=u.parentViewportY,d[19]=u.parentViewportW,d[23]=u.parentViewportH,d[24]=u.minXST,d[25]=u.minYST,d[26]=u.minXPQ,d[27]=u.minYPQ,d[28]=u.maxXST,d[29]=u.maxYST,d[30]=u.maxXPQ,d[31]=u.maxYPQ):(d[0]=i,d[1]=s,d[2]=r,d[4]=n,d[5]=a,d[6]=h,d[8]=o,d[9]=l,d[10]=c,d[3]=_,d[7]=$)}setMaskShapeUniformIdentity(t,e,i){const s=t.highp;s[0]=1,s[1]=0,s[2]=0,s[4]=0,s[5]=1,s[6]=0,s[8]=0,s[9]=0,s[10]=1,s[3]=e,s[7]=i}}class Ki{static TEMPLATE(t,e,i,s,r){const n=i?this.STATEMENT_GRADIENT_TYPE_RADIAL(e,s):this.STATEMENT_GRADIENT_TYPE_LINEAR(e);let a;switch(r){case"reflect":a="1.0 - abs(fract(t * 0.5) * 2.0 - 1.0)";break;case"repeat":a="fract(t)";break;default:a="clamp(t, 0.0, 1.0)"}return`#version 300 es\nprecision highp float;\n\nuniform sampler2D u_texture;\nuniform vec4 u_highp[${t}];\n\nin vec2 v_uv;\nout vec4 o_color;\n\nvoid main() {\n vec2 p = v_uv;\n ${n}\n t = ${a};\n o_color = texture(u_texture, vec2(t, 0.5));\n}\n\n`}static STATEMENT_GRADIENT_TYPE_LINEAR(t){return`\n vec2 a = u_highp[${t}].xy;\n vec2 b = u_highp[${t}].zw;\n\n vec2 ab = b - a;\n vec2 ap = p - a;\n\n float t = dot(ab, ap) / dot(ab, ab);\n`}static STATEMENT_GRADIENT_TYPE_RADIAL(t,e){return`\n float radius = u_highp[${t}][0];\n\n vec2 coord = p / radius;\n ${e?this.STATEMENT_FOCAL_POINT_ON(t):this.STATEMENT_FOCAL_POINT_OFF()}\n`}static STATEMENT_FOCAL_POINT_OFF(){return"\n float t = length(coord);\n"}static STATEMENT_FOCAL_POINT_ON(t){return`\n vec2 focal = vec2(u_highp[${t}][1], 0.0);\n\n vec2 dir = normalize(coord - focal);\n\n float a = dot(dir, dir);\n float b = 2.0 * dot(dir, focal);\n float c = dot(focal, focal) - 1.0;\n float x = (-b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a);\n\n float t = distance(focal, coord) / distance(focal, focal + dir * x);\n`}}class Qi{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=ct()}getGradientShapeShader(t,e,i,s,r){const n=this.createCollectionKey(t,e,i,s,r);if(this._$collection.has(n)){const t=this._$collection.get(n);if(t)return t}const a=(e?13:5)+(t?1:0)+1,h=a-1;let o;o=t?qi.TEMPLATE(a,h,!0,e):Yi.TEMPLATE(a,!0,!1,e);const l=new zi(this._$gl,this._$context,o,Ki.TEMPLATE(a,h,i,s,r));return this._$collection.set(n,l),l}createCollectionKey(t,e,i,s,r){const n=t?"y":"n",a=e?"y":"n",h=i?"y":"n",o=i&&s?"y":"n";let l=0;switch(r){case"reflect":l=1;break;case"repeat":l=2}return`${n}${a}${h}${o}${l}`}setGradientShapeUniform(t,e,i,s,r,n,a,h,o,l,c,_,$,u){const d=t.highp;d[0]=a[0],d[1]=a[1],d[2]=a[2],d[4]=a[3],d[5]=a[4],d[6]=a[5],d[8]=a[6],d[9]=a[7],d[10]=a[8],d[12]=h[0],d[13]=h[1],d[14]=h[2],d[16]=h[3],d[17]=h[4],d[18]=h[5],d[11]=h[6],d[15]=h[7],d[19]=h[8],d[3]=o,d[7]=l;let g=20;n&&(d[g]=c.parentMatrixA,d[g+1]=c.parentMatrixB,d[g+2]=c.parentMatrixC,d[g+4]=c.parentMatrixD,d[g+5]=c.parentMatrixE,d[g+6]=c.parentMatrixF,d[g+8]=c.parentMatrixG,d[g+9]=c.parentMatrixH,d[g+10]=c.parentMatrixI,d[g+12]=c.ancestorMatrixA,d[g+13]=c.ancestorMatrixB,d[g+14]=c.ancestorMatrixC,d[g+16]=c.ancestorMatrixD,d[g+17]=c.ancestorMatrixE,d[g+18]=c.ancestorMatrixF,d[g+20]=c.ancestorMatrixG,d[g+21]=c.ancestorMatrixH,d[g+22]=c.ancestorMatrixI,d[g+11]=c.parentViewportX,d[g+15]=c.parentViewportY,d[g+19]=c.parentViewportW,d[g+23]=c.parentViewportH,d[g+24]=c.minXST,d[g+25]=c.minYST,d[g+26]=c.minXPQ,d[g+27]=c.minYPQ,d[g+28]=c.maxXST,d[g+29]=c.maxYST,d[g+30]=c.maxXPQ,d[g+31]=c.maxYPQ,g=52),e&&(d[g]=i,d[g+1]=s,d[g+2]=r,g+=4),_?(d[g]=$[5],d[g+1]=u):(d[g]=$[0],d[g+1]=$[1],d[g+2]=$[2],d[g+3]=$[3])}}class Ji{static TEXTURE(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nout vec2 v_coord;\n\nvoid main() {\n v_coord = a_vertex;\n\n vec2 position = a_vertex * 2.0 - 1.0;\n gl_Position = vec4(position, 0.0, 1.0);\n}\n\n"}static BLEND(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nuniform vec4 u_highp[4];\n\nout vec2 v_coord;\n\nvoid main() {\n v_coord = a_vertex;\n\n vec2 offset = u_highp[0].xy;\n vec2 size = u_highp[0].zw;\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position = position * size + offset;\n position = (matrix * vec3(position, 1.0)).xy;\n position /= viewport;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}static INSTANCE_BLEND(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nuniform vec4 u_highp[5];\n\nout vec2 v_src_coord;\nout vec2 v_dst_coord;\n\nvoid main() {\n vec4 rect = vec4(u_highp[0].x, u_highp[0].y, u_highp[0].z, u_highp[0].w);\n vec2 size = vec2(u_highp[4].x, u_highp[4].y);\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\n\n v_src_coord = a_vertex * rect.zw + rect.xy;\n v_dst_coord = a_vertex;\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position = position * size;\n position = (matrix * vec3(position, 1.0)).xy;\n position /= viewport;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}static INSTANCE(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\nlayout (location = 1) in vec4 a_rect;\nlayout (location = 2) in vec4 a_size;\nlayout (location = 3) in vec2 a_offset;\nlayout (location = 4) in vec4 a_matrix;\nlayout (location = 5) in vec4 a_mul;\nlayout (location = 6) in vec4 a_add;\n\nout vec2 v_coord;\nout vec4 mul;\nout vec4 add;\n\nvoid main() {\n v_coord = a_vertex * a_rect.zw + a_rect.xy;\n mul = a_mul;\n add = a_add;\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position = position * a_size.xy;\n mat3 matrix = mat3(a_matrix.x, a_matrix.y, 0.0, a_matrix.z, a_matrix.w, 0.0, a_offset.x, a_offset.y, 1.0);\n position = (matrix * vec3(position, 1.0)).xy;\n position /= a_size.zw;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}static BLEND_CLIP(){return"#version 300 es\n\nlayout (location = 0) in vec2 a_vertex;\n\nuniform vec4 u_highp[4];\n\nout vec2 v_coord;\n\nvoid main() {\n v_coord = a_vertex;\n\n vec2 offset = u_highp[0].xy;\n vec2 size = u_highp[0].zw;\n mat3 inv_matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\n\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\n position *= viewport;\n position = (inv_matrix * vec3(position, 1.0)).xy;\n position = (position - offset) / size;\n\n position = position * 2.0 - 1.0;\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\n}\n\n"}}class Zi{static TEMPLATE(t,e,i){let s="";for(let t=1;t>16)/255,h[a++]=(e>>8&255)/255,h[a++]=(255&e)/255,h[a++]=s[t]}for(let t=r;tthis._$vertexBufferData.length){const t=new A(2*this._$vertexBufferData.length);t.set(this._$vertexBufferData),this._$vertexBufferData=t}}static _$expandIndexBufferIfNeeded(t){if(this._$indexBufferPos+t>this._$indexBufferData.length){const t=new w(2*this._$indexBufferData.length);t.set(this._$indexBufferData),this._$indexBufferData=t}}static _$generateLineSegment(t){const e=t.length-5;for(let i=0;it*s-i*e;class ds{constructor(t){this._$gl=t,this._$fillVertexArrayPool=[],this._$strokeVertexArrayPool=[],this._$boundVertexArray=null,this._$fillAttrib_vertex=0,this._$fillAttrib_bezier=1,this._$strokeAttrib_vertex=0,this._$strokeAttrib_option1=1,this._$strokeAttrib_option2=2,this._$strokeAttrib_type=3,this._$vertexBufferData=new Float32Array([0,0,0,1,1,0,1,1]),this._$attributeVertexBuffer=t.createBuffer(),this._$attributeBuffer=new Float32Array(22),this._$instanceVertexArray=this._$getCommonVertexArray(),this._$commonVertexArray=this._$getVertexArray(0,1)}_$getCommonVertexArray(){const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1]),this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,this._$attributeVertexBuffer),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(1,4,this._$gl.FLOAT,!1,88,0),this._$gl.vertexAttribDivisor(1,1),this._$gl.enableVertexAttribArray(2),this._$gl.vertexAttribPointer(2,4,this._$gl.FLOAT,!1,88,16),this._$gl.vertexAttribDivisor(2,1),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(3,2,this._$gl.FLOAT,!1,88,32),this._$gl.vertexAttribDivisor(3,1),this._$gl.enableVertexAttribArray(4),this._$gl.vertexAttribPointer(4,4,this._$gl.FLOAT,!1,88,40),this._$gl.vertexAttribDivisor(4,1),this._$gl.enableVertexAttribArray(5),this._$gl.vertexAttribPointer(5,4,this._$gl.FLOAT,!1,88,56),this._$gl.vertexAttribDivisor(5,1),this._$gl.enableVertexAttribArray(6),this._$gl.vertexAttribPointer(6,4,this._$gl.FLOAT,!1,88,72),this._$gl.vertexAttribDivisor(6,1),t}_$getVertexArray(t,e){const i=this._$gl.createVertexArray();this.bind(i);const s=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s),this._$vertexBufferData[0]=t,this._$vertexBufferData[2]=t,this._$vertexBufferData[4]=e,this._$vertexBufferData[6]=e,this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$vertexBufferData,this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),i}_$getFillVertexArray(){if(this._$fillVertexArrayPool.length){const t=this._$fillVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(this._$fillAttrib_vertex,2,this._$gl.FLOAT,!1,16,0),this._$gl.vertexAttribPointer(this._$fillAttrib_bezier,2,this._$gl.FLOAT,!1,16,8),t}_$getStrokeVertexArray(){if(this._$strokeVertexArrayPool.length){const t=this._$strokeVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e);const i=this._$gl.createBuffer();return t.indexBuffer=i,t.indexLength=0,this._$gl.bindBuffer(this._$gl.ELEMENT_ARRAY_BUFFER,i),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.enableVertexAttribArray(2),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(this._$strokeAttrib_vertex,2,this._$gl.FLOAT,!1,28,0),this._$gl.vertexAttribPointer(this._$strokeAttrib_option1,2,this._$gl.FLOAT,!1,28,8),this._$gl.vertexAttribPointer(this._$strokeAttrib_option2,2,this._$gl.FLOAT,!1,28,16),this._$gl.vertexAttribPointer(this._$strokeAttrib_type,1,this._$gl.FLOAT,!1,28,24),t}createFill(t){const e=$s.generate(t),i=e.vertexBufferData,s=this._$getFillVertexArray();return s.indexRanges=e.indexRanges,this.bind(s),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s.vertexBuffer),s.vertexLengththis._$attributeBuffer.length&&(this._$attributeBuffer=new Float32Array(t.attributes.length),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW)),this._$attributeBuffer.set(t.attributes),this._$gl.bufferSubData(this._$gl.ARRAY_BUFFER,0,this._$attributeBuffer.subarray(0,t.attributes.length))}bindCommonVertexArray(){this.bind(this._$commonVertexArray)}bindGradientVertexArray(t,e){const i=this._$getVertexArray(t,e);this.bind(i)}}class gs{constructor(t,e){this._$context=t,this._$gl=e,this._$clips=[],this._$poolClip=[],this._$clipStatus=!1,this._$containerClip=!1,this._$currentClip=!1}get containerClip(){return this._$containerClip}set containerClip(t){this._$containerClip=t}_$onClear(t){t&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0)}_$onBind(t){!t&&this._$currentClip?(this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1):t&&!this._$currentClip&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0,this._$endClipDef())}_$onClearRect(){this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1}_$enterClip(){this._$currentClip||(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0);const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");t.mask=!0,++t.clipLevel}_$beginClipDef(){const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.stencilMask(1<7&&(this._$unionStencilMask(e,a,h),n=e)}n>e+1&&this._$unionStencilMask(e,a,h)}_$unionStencilMask(t,e,i){const s=this._$context.path.createRectVertices(0,0,e,i),r=this._$context.vao.createFill(s);ot(s.pop()),ot(s);const n=this._$context.shaderList.shapeShaderVariants,a=n.getMaskShapeShader(!1,!1),h=a.uniform;n.setMaskShapeUniformIdentity(h,e,i);const o=r.indexRanges[0];this._$gl.stencilFunc(this._$gl.LEQUAL,1<this._$maxTextureSize?this._$maxTextureSize/i:1}drawInstacedArray(){this.blend.drawInstacedArray()}clearInstacedArray(){this.blend.clearInstacedArray()}bindRenderBuffer(t){this._$frameBufferManager.bindRenderBuffer(),this._$gl.clearColor(0,0,0,0),this._$gl.clear(this._$gl.COLOR_BUFFER_BIT|this._$gl.STENCIL_BUFFER_BIT),this._$viewportWidth=t.w,this._$viewportHeight=t.h,this._$gl.viewport(t.x,t.y,t.w,t.h),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(t.x,t.y,t.w,t.h)}getTextureFromRect(t){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t.index),s=e.currentAttachment,r=e.createTextureAttachment(t.w,t.h);this._$bind(r),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(i,-t.x,-i.height+t.h+t.y,i.width,i.height),this.restore();const n=r.texture;return e.releaseAttachment(r),this._$bind(s),n}drawBitmap(t){const e=this._$shaderList.blendShaderVariants,i=e.getNormalBlendShader(!1);e.setNormalBlendUniform(i.uniform,0,0,t.width,t.height,this._$matrix,this._$viewportWidth,this._$viewportHeight,!1,1,1,1,1,0,0,0,0),this._$frameBufferManager.textureManager.bind0(t,this._$imageSmoothingEnabled),this.blend.toOperation("normal"),i._$drawImage()}drawTextureFromRect(t,e){const i=this._$frameBufferManager,s=i.currentAttachment;this.bindRenderBuffer(e),i.transferTexture(e);const r=i.textureManager.getAtlasTexture(e.index),n=i.createTextureAttachmentFrom(r);this._$bind(n),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(e.x,e.y,e.w,e.h),this._$gl.clearColor(0,0,0,0),this._$gl.disable(this._$gl.SCISSOR_TEST),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(t,e.x,r.height-e.h-e.y,t.width,t.height),this.restore(),i.releaseAttachment(n),this._$bind(s),i.textureManager.release(t)}stopStencil(){this._$mask._$onClearRect()}_$bind(t=null){if(!t)return;this._$frameBufferManager.bind(t);const e=t.color,i=t.stencil,s=t.width,r=t.height;this._$viewportWidth===s&&this._$viewportHeight===r||(this._$viewportWidth=s,this._$viewportHeight=r,this._$gl.viewport(0,0,s,r)),(e&&e.dirty||i&&i.dirty)&&(e&&(e.dirty=!1),i&&(i.dirty=!1),this._$gl.clearColor(0,0,0,0),this.clearRect(0,0,this._$viewportWidth,this._$viewportHeight),this._$gl.clearColor(this._$clearColorR,this._$clearColorG,this._$clearColorB,this._$clearColorA),this._$mask._$onClear(t.mask)),this._$mask._$onBind(t.mask)}setTransform(t,e,i,s,r,n){this._$matrix[0]=t,this._$matrix[1]=e,this._$matrix[3]=i,this._$matrix[4]=s,this._$matrix[6]=r,this._$matrix[7]=n}setMaxSize(t,e){this._$frameBufferManager.setMaxSize(t,e)}transform(t,e,i,s,r,n){const a=this._$matrix[0],h=this._$matrix[1],o=this._$matrix[3],l=this._$matrix[4],c=this._$matrix[6],_=this._$matrix[7];this._$matrix[0]=t*a+e*o,this._$matrix[1]=t*h+e*l,this._$matrix[3]=i*a+s*o,this._$matrix[4]=i*h+s*l,this._$matrix[6]=r*a+n*o+c,this._$matrix[7]=r*h+n*l+_}debug(t=0){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t),s=e.currentAttachment,r=e.createTextureAttachmentFrom(i);this._$bind(r);const n=new Uint8Array(i.width*i.height*4);this._$gl.readPixels(0,0,i.width,i.height,this._$gl.RGBA,this._$gl.UNSIGNED_BYTE,n);const a=document.createElement("canvas");a.width=i.width,a.height=i.height;const h=a.getContext("2d"),o=new ImageData(i.width,i.height);for(let t=0;ts.length||e.push(s)}if(!e.length)return void ot(e);const i=this._$vao.createFill(e),s=this.fillStyle;let r,n,a,h=this._$matrix;const o=this._$grid.enabled;if(s instanceof Ii){const t=s.stops,e="linearRGB"===s.rgb;if(r=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0(r,!0),this._$frameBufferManager.bindRenderBuffer(),n=this._$shaderList.gradientShapeShaderVariants,"linear"===s.type)a=n.getGradientShapeShader(!1,o,!1,!1,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,s.points,0);else{h=this._$stack[this._$stack.length-1];const t=0!==s.focalPointRatio;a=n.getGradientShapeShader(!1,o,!0,t,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,s.points,s.focalPointRatio)}}else if(s instanceof Fi){h=this._$stack[this._$stack.length-1];const t=s.colorTransform;r=s.texture,this._$frameBufferManager.textureManager.bind0(r,this._$imageSmoothingEnabled),n=this._$shaderList.shapeShaderVariants,a=n.getBitmapShapeShader(!1,s.repeat,o),t?n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,1,1,1,this._$globalAlpha,0,0,0,0)}else n=this._$shaderList.shapeShaderVariants,a=n.getSolidColorShapeShader(!1,this._$grid.enabled),n.setSolidColorShapeUniform(a.uniform,!1,0,0,0,o,h,this._$viewportWidth,this._$viewportHeight,this._$grid,s,this._$globalAlpha);const l=this._$shaderList.shapeShaderVariants,c=l.getMaskShapeShader(!1,o);l.setMaskShapeUniform(c.uniform,o,h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8],this._$viewportWidth,this._$viewportHeight,this._$grid),this._$gl.enable(this._$gl.STENCIL_TEST),this._$gl.stencilMask(255),this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.colorMask(!1,!1,!1,!1),c._$fill(i),this._$gl.disable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.NOTEQUAL,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.ZERO,this._$gl.ZERO),this._$gl.colorMask(!0,!0,!0,!0),a._$fill(i),this._$gl.disable(this._$gl.STENCIL_TEST),this.releaseFillVertexArray(i)}releaseFillVertexArray(t){this._$vao.releaseFill(t);const e=t.indexRanges;for(let t=0;tn.width||i>n.height||0>e&&0>=s+e||0>i&&0>=r+i||(this._$maskBounds.xMin=v.max(0,v.min(this._$maskBounds.xMin,e)),this._$maskBounds.yMin=v.max(0,v.min(this._$maskBounds.yMin,i)),this._$maskBounds.xMax=v.min(n.width,v.min(this._$maskBounds.xMax,s)),this._$maskBounds.yMax=v.min(n.height,v.min(this._$maskBounds.yMax,r)),0))}_$endClipDef(){this._$mask._$endClipDef()}_$leaveClip(){this.drawInstacedArray(),this._$mask._$leaveClip()}_$drawContainerClip(){this._$mask._$drawContainerClip()}closePath(){this._$path.close()}stroke(){const t=this._$path.vertices;if(!t.length)return;const e=ht();for(let i=0;is.length||e.push(s)}if(!e.length)return void ot(e);const i=this._$vao.createStroke(t,this.lineCap,this.lineJoin);let s=this._$matrix;const r=this.strokeStyle;let n=v.sign(s[0]*s[4]);n>0&&0!==s[1]&&0!==s[3]&&(n=-v.sign(s[1]*s[3]));let a,h,o=.5*this.lineWidth;this._$grid.enabled?(a=v.abs(this._$grid.ancestorMatrixA+this._$grid.ancestorMatrixD),h=v.abs(this._$grid.ancestorMatrixB+this._$grid.ancestorMatrixE)):(a=v.abs(s[0]+s[3]),h=v.abs(s[1]+s[4]));const l=v.min(a,h),c=v.max(a,h);o*=c*(1-.3*v.cos(.5*v.PI*(l/c))),o=v.max(1,o);const _=this._$grid.enabled;let $,u,d;if(r instanceof Ii){"radial"===r.type&&(s=this._$stack[this._$stack.length-1]);const t=r.stops,e="linearRGB"===r.rgb;if($=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0($,!0),u=this._$shaderList.gradientShapeShaderVariants,"linear"===r.type)d=u.getGradientShapeShader(!0,_,!1,!1,r.mode),u.setGradientShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,r.points,0);else{s=this._$stack[this._$stack.length-1];const t=0!==r.focalPointRatio;d=u.getGradientShapeShader(!0,_,!0,t,r.mode),u.setGradientShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,r.points,r.focalPointRatio)}}else if(r instanceof Fi){s=this._$stack[this._$stack.length-1];const t=r.colorTransform;$=r.texture,this._$frameBufferManager.textureManager.bind0($),u=this._$shaderList.shapeShaderVariants,d=u.getBitmapShapeShader(!0,r.repeat,this._$grid.enabled),t?u.setBitmapShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,$.width,$.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):u.setBitmapShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,ut(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,$.width,$.height,1,1,1,this._$globalAlpha,0,0,0,0)}else u=this._$shaderList.shapeShaderVariants,d=u.getSolidColorShapeShader(!0,this._$grid.enabled),u.setSolidColorShapeUniform(d.uniform,!0,o,n,this.miterLimit,_,s,this._$viewportWidth,this._$viewportHeight,this._$grid,r,this._$globalAlpha);d._$stroke(i),this._$vao.releaseStroke(i)}arc(t,e,i){this._$path.drawCircle(t,e,i)}clip(){const t=this._$path.vertices;if(!t.length)return;const e=ht();for(let i=0;is.length||e.push(s)}if(!e.length)return void ot(e);const i=this._$vao.createFill(e),s=this._$shaderList.shapeShaderVariants,r=s.getMaskShapeShader(!1,!1),n=r.uniform;s.setMaskShapeUniform(n,!1,this._$matrix[0],this._$matrix[1],this._$matrix[2],this._$matrix[3],this._$matrix[4],this._$matrix[5],this._$matrix[6],this._$matrix[7],this._$matrix[8],this._$viewportWidth,this._$viewportHeight,null),this._$mask._$onClip(i,this._$matrix,this._$viewportWidth,this._$viewportHeight)||(r._$fill(i),this.beginPath())}save(){const t=this._$matrix;this._$stack.push(at(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])),this._$mask._$onSave()}restore(){var t;this._$stack.length&&(t=this._$matrix,Y.push(t),this._$matrix=this._$stack.pop()||at()),this._$mask._$onRestore()}createPattern(t,e,i){return new Fi(this,t,e,i)}createLinearGradient(t,e,i,s,r="rgb",n="pad"){return(new Ii).linear(t,e,i,s,r,n)}createRadialGradient(t,e,i,s,r,n,a="rgb",h="pad",o=0){return(new Ii).radial(t,e,i,s,r,n,a,h,o)}_$applyBlurFilter(t,e,i){const s=this._$frameBufferManager,r=s.currentAttachment;if(!r)throw new Error("the current attachment is null.");const n=r.width,a=r.height;s.textureManager.bind0(t,!0);const h=v.ceil(.5*i),o=1-(h-.5*i),l=1+i,c=this._$shaderList.filterShaderVariants,_=c.getBlurFilterShader(h);c.setBlurFilterUniform(_.uniform,n,a,e,o,l),_._$drawImage()}_$applyBitmapFilter(t,e,i,s,r,n,a,h,o,l,c,_,$,u,d,g=null,f=null,p=null,m=0,x=0,b=0,v=0,T=0,y=0,E=0,A=0){const M=this._$frameBufferManager,w="inner"===$,S=M.currentAttachment,C=M.getTextureFromCurrentAttachment();let I=null;const F=null!==g&&null!==f&&null!==p;let R;null!==g&&null!==f&&null!==p&&(I=this._$gradientLUT.generateForFilter(g,f,p)),w?F&&I?M.textureManager.bind02(t,I,!0):M.textureManager.bind0(t):(R=this._$frameBufferManager.createTextureAttachment(e,i),this._$bind(R),F&&I?M.textureManager.bind012(t,C,I,!0):M.textureManager.bind01(t,C));const B=!(w||"full"===$&&u),L=!(e===h&&i===o&&0===l&&0===c),P=!(1===d),k=this._$shaderList.filterShaderVariants,N=k.getBitmapFilterShader(B,L,_,$,u,P,F);k.setBitmapFilterUniform(N.uniform,e,i,s,r,n,a,h,o,l,c,_,d,m,x,b,v,T,y,E,A,B,L,P,F),w?u?this.blend.toSourceIn():this.blend.toSourceAtop():this.blend.toOneZero(),N._$drawImage(),w||M.releaseAttachment(S,!0)}_$applyColorMatrixFilter(t,e){this._$frameBufferManager.textureManager.bind0(t,!0);const i=this._$shaderList.filterShaderVariants,s=i.getColorMatrixFilterShader();i.setColorMatrixFilterUniform(s.uniform,e),this.blend.reset(),s._$drawImage()}_$applyConvolutionFilter(t,e,i,s,r,n,a,h,o,l,c,_){const $=t.width,u=t.height,d=this._$frameBufferManager.createTextureAttachment($,u);this._$bind(d),this._$frameBufferManager.textureManager.bind0(t,!0);const g=this._$shaderList.filterShaderVariants,f=g.getConvolutionFilterShader(e,i,a,h);g.setConvolutionFilterUniform(f.uniform,$,u,s,r,n,h,o,l,c,_),this.blend.reset(),f._$drawImage()}_$applyDisplacementMapFilter(t,e,i,s,r,n,a,h,o,l,c,_,$,u){const d=t.width,g=t.height,f=this._$frameBufferManager.createTextureAttachment(d,g);this._$bind(f),r||(r={x:0,y:0});const p=this._$frameBufferManager.createTextureFromImage(e);this._$frameBufferManager.textureManager.bind01(t,p);const m=this._$shaderList.filterShaderVariants,x=m.getDisplacementMapFilterShader(n,a,l);m.setDisplacementMapFilterUniform(x.uniform,e.width,e.height,i,s,r.x,r.y,h,o,l,c,_,$,u),this.blend.reset(),x._$drawImage(),this._$frameBufferManager.releaseTexture(p)}_$startLayer(t){this._$positions.push(t),this._$blends.push(this._$isLayer),this._$isLayer=!0}_$endLayer(){const t=this._$positions.pop();t&&J(t),this._$isLayer=!!this._$blends.pop()}_$saveAttachment(t,e,i=!1){this.drawInstacedArray();const s=this._$frameBufferManager;this._$attachmentArray.push(s.currentAttachment),this._$bind(s.createCacheAttachment(t,e,i))}_$restoreAttachment(t=!1){const e=this._$frameBufferManager;e.releaseAttachment(e.currentAttachment,t),this._$bind(this._$attachmentArray.pop())}getCurrentPosition(){return this._$positions[this._$positions.length-1]}textureScale(t,e){const i=v.max(t,e);return i>this._$maxTextureSize?this._$maxTextureSize/i:1}}class ms{constructor(){var t;t=window.devicePixelRatio,f=t,this._$stage=new fe,this._$stage._$player=this,this._$mode="loader",this._$actionOffset=0,this._$actions=ht(),this._$loaders=ht(),this._$sounds=ct(),this._$hitObject={x:0,y:0,pointer:"",hit:null},this._$rollOverObject=null,this._$mouseOverTarget=null,this._$ratio=f,this._$stopFlag=!0,this._$startTime=0,this._$fps=16,this._$loadStatus=0,this._$width=0,this._$height=0,this._$baseWidth=0,this._$baseHeight=0,this._$scale=1,this._$matrix=it(1,0,0,1,0,0),this._$tx=0,this._$ty=0,this._$state="up",this._$hitTestStart=!1,this._$stageX=-1,this._$stageY=-1,this._$deltaX=0,this._$deltaY=0,this._$broadcastEvents=ct(),this._$optionWidth=0,this._$optionHeight=0,this._$tagId="",this._$bgColor="transparent",this._$base="",this._$fullScreen=!1,this._$quality="high",this._$sources=ht(),this._$videos=ht(),this._$textField=null,this._$timerId=-1,this._$loadId=-1,this._$context=null,this._$attachment=null,this._$clickTarget=null,this._$actionProcess=!1,this._$canvas=d.createElement("canvas")}static get LOAD_START(){return 1}static get LOAD_END(){return 2}get cacheStore(){return wt}get canvas(){return this._$canvas}get broadcastEvents(){return this._$broadcastEvents}get context(){return this._$context}set context(t){this._$context=t}get base(){return this._$base}set base(t){if(-1===t.indexOf("//")){const e=t.split("/");""!==e[0]&&"."!==e[0]||e.shift(),e.pop(),this._$base=`${location.origin}/`,e.length&&(this._$base+=`${e.join("/")}/`)}else if(-1===t.indexOf("?"))this._$base="/"===t.slice(-1)?t:`${t}/`;else{const e=t.split("?")[0];this._$base="/"===e.slice(-1)?e:`${e}/`}}get stage(){return this._$stage}get x(){return this._$tx}get y(){return this._$ty}get scaleX(){return this._$matrix[0]}get scaleY(){return this._$matrix[3]}get mode(){return this._$mode}set mode(t){this._$mode=t}get contentElementId(){return ws}get width(){return this._$baseWidth}set width(t){this._$baseWidth=0|t}get height(){return this._$baseHeight}set height(t){this._$baseHeight=0|t}get bgColor(){return this._$bgColor}set bgColor(t){this._$bgColor=`${t}`}play(){if(this._$stopFlag){this._$stopFlag=!1,this._$timerId>-1&&F(this._$timerId),this._$startTime=R.now();const t=this._$stage._$frameRate;this._$fps=1e3/t|0,this._$timerId=I((t=>{this._$run(t)}))}}stop(){this._$timerId>-1&&F(this._$timerId),this._$stopFlag=!0,this._$timerId=-1,oe.stopAll(),wt.reset(),Mr&&Mr.postMessage({command:"stop"})}removeCache(t){wt.removeCache(t),Mr&&Mr.postMessage({command:"removeCache",id:t})}setOptions(t=null){t&&(this._$optionWidth=t.width||this._$optionWidth,this._$optionHeight=t.height||this._$optionHeight,this._$tagId=t.tagId||this._$tagId,this.base=t.base||this._$base,this._$bgColor=t.bgColor||this._$bgColor,this._$fullScreen=!!t.fullScreen)}_$loadWebAudio(t=null){t&&this._$canvas.removeEventListener(Bs,this._$loadWebAudio),Ns||mr()}_$updateLoadStatus(){if(this._$loadStatus===ms.LOAD_END)return this._$loadId>-1&&F(this._$loadId),this._$loadId=-1,void this._$loaded();this._$loadId=I((()=>{this._$updateLoadStatus()}))}_$loaded(){const t=d.getElementById(this.contentElementId);if(t){this._$setBackgroundColor(this._$bgColor),this._$deleteNode(),t.appendChild(this._$canvas),t.appendChild(tr),this._$stage._$prepareActions(),this._$broadcastEvents.has(It.FRAME_CONSTRUCTED)&&this._$dispatchEvent(new It(It.FRAME_CONSTRUCTED)),this._$doAction(),this._$broadcastEvents.has(It.EXIT_FRAME)&&this._$dispatchEvent(new It(It.EXIT_FRAME));const e=this._$loaders.length;for(let t=0;t`);const e=d.getElementById(t);if(!e)throw new Error("the content element is null.");const i=e.parentElement;if(i){this._$initStyle(e),this._$buildWait();const t=this._$optionWidth?this._$optionWidth:"BODY"===i.tagName?u.innerWidth:i.offsetWidth,s=this._$optionHeight?this._$optionHeight:"BODY"===i.tagName?u.innerHeight:i.offsetHeight;"loader"===this._$mode&&t&&s&&(this._$baseWidth=t,this._$baseHeight=s,this._$resize())}"loader"===this._$mode?(this._$loadStatus=ms.LOAD_START,this._$updateLoadStatus()):(this._$resize(),this._$loaded())}_$initStyle(t){const e=t.style;e.position="relative",e.top="0",e.left="0",e.backgroundColor="transparent",e.overflow="hidden",e.padding="0",e.margin="0",e.userSelect="none",e.outline="none";const i=this._$optionWidth,s=this._$optionHeight,r=t.parentElement;if(!r)throw new Error("the parentElement is null.");if("BODY"===r.tagName)return e.width=i?`${i}px`:`${window.innerWidth}px`,void(e.height=s?`${s}px`:`${window.innerHeight}px`);e.width=i?`${i}px`:`${r.offsetWidth}px`,e.height=s?`${s}px`:`${r.offsetHeight}px`}_$buildWait(){const t=d.getElementById(this.contentElementId);if(t){const e=`${this.contentElementId}_loading`;t.innerHTML=``;const i=d.createElement("div");i.id=e,t.appendChild(i)}}_$deleteNode(){const t=d.getElementById(this.contentElementId);if(t)for(;t.childNodes.length;)t.removeChild(t.childNodes[0])}_$initializeCanvas(){if(this._$canvas.width=1,this._$canvas.height=1,Mr){const t=this._$canvas.transferControlToOffscreen(),e=hr();let i=0;e[i++]=this._$stage._$instanceId,e[i++]=+Ws,e[i++]=f,e[i++]=this._$getSamples();const s=ht(t,e.buffer);Mr.postMessage({command:"initialize",canvas:t,buffer:e},s),ot(s)}else{const t=this._$canvas.getContext("webgl2",{stencil:!0,premultipliedAlpha:!0,antialias:!1,depth:!1,preserveDrawingBuffer:!0});t?(this._$context=new ps(t,this._$getSamples()),wt.context=this._$context):alert("WebGL setting is off. Please turn the setting on.")}const t=()=>{if(this._$canvas.removeEventListener(Bs,t),this._$canvas.removeEventListener(Is,t),!Ns){mr();for(let t=0;t{c(t),h(Ss),this._$hitTest()})),this._$canvas.addEventListener(Cs,(t=>{c(t),h(Cs),this._$hitTest()})),this._$canvas.addEventListener(Is,(t=>{c(t),h(Is),this._$hitTest()})),this._$canvas.addEventListener(Cs,(t=>{c(t),h(Cs),this._$hitTest()}),{passive:!1}),this._$canvas.addEventListener(Fs,(t=>{c(t),h(Fs),t.button||this._$hitTest()})),this._$canvas.addEventListener(Ps,(t=>{c(t),h(Ps),t.button||this._$hitTest()})),this._$canvas.addEventListener(ks,(t=>{c(t),h(ks),this._$hitTest(),c(null),this._$stageX=-1,this._$stageY=-1})),this._$canvas.addEventListener(Bs,(t=>{c(t),h(Bs),t.button||this._$hitTest()})),this._$canvas.addEventListener(Rs,(t=>{c(t),h(Rs),this._$hitTest()})),this._$canvas.addEventListener(Ls,(t=>{t.defaultPrevented||(c(t),h(Ls),this._$hitTest())}),{passive:!1});let e="";e+="position: absolute;",e+="top: 0;",e+="left: 0;",e+="-webkit-tap-highlight-color: rgba(0,0,0,0);",e+="backface-visibility: hidden;",e+="transform-origin: 0 0;",1!==f&&(e+=`transform: scale(${1/f});`),this._$canvas.setAttribute("style",e)}_$resize(){const t=d.getElementById(this.contentElementId);if(t){const e=t.parentElement;if(!e)throw new Error("the parentElement is null.");const i=this._$optionWidth?this._$optionWidth:"BODY"===e.tagName?u.innerWidth:e.offsetWidth?e.offsetWidth:parseFloat(e.style.width),s=this._$optionHeight?this._$optionHeight:"BODY"===e.tagName?u.innerHeight:e.offsetHeight?e.offsetHeight:parseFloat(e.style.height),r="BODY"===e.tagName?u.innerWidth:e.offsetWidth,n=v.min(i/this._$baseWidth,s/this._$baseHeight);let a=this._$fullScreen?i:this._$baseWidth*n|0,h=this._$fullScreen?s:this._$baseHeight*n|0;const o=t.style;if(o.width=`${a}px`,o.height=`${h}px`,o.top="0",o.left=this._$fullScreen?"0":r/2-a/2+"px",a*=f,h*=f,this._$width===a&&this._$height===h)return;this._$stage._$doChanged(),wt.reset(),this._$scale=n,this._$width=a,this._$height=h;const l=this._$scale*this._$ratio;this._$matrix[0]=l,this._$matrix[3]=l,this._$fullScreen&&(this._$tx=(a-this._$baseWidth*n*f)/2,this._$ty=(h-this._$baseHeight*n*f)/2,this._$matrix[4]=this._$tx,this._$matrix[5]=this._$ty),this._$resizeCanvas(a,h,l,this._$tx,this._$ty),this._$ratio>1&&f>1&&(this._$canvas.style.transform=`scale(${1/this._$ratio})`),t.children.length>1&&t.children[1].dispatchEvent(new Event(`${ws}_blur`))}}_$setBackgroundColor(t="transparent"){if(Mr){const e=hr();e[0]="transparent"===t?-1:xt(t);const i=or();i.command="setBackgroundColor",i.buffer=e;const s=ht(e.buffer);Mr.postMessage(i,s),lr(i),ot(s)}else{const e=this._$context;if(!e)return;if("transparent"===t)e._$setColor(0,0,0,0);else{const i=bt(xt(t));e._$setColor(i.R/255,i.G/255,i.B/255,1)}}}_$resizeCanvas(t,e,i,s=0,r=0){if(Mr){const n=hr();let a=0;n[a++]=t,n[a++]=e,n[a++]=i,n[a++]=s,n[a++]=r;const h=or(),o=ht(n.buffer);h.command="resize",h.buffer=n,Mr.postMessage(h,o),lr(h),ot(o)}else{const i=this._$context;if(!i)return;i.clearInstacedArray(),this._$canvas.width=t,this._$canvas.height=e,i._$gl.viewport(0,0,t,e);const s=i.frameBuffer;this._$attachment&&(s.unbind(),s.releaseAttachment(this._$attachment,!0)),this._$attachment=s.createCacheAttachment(t,e,!0),i.setMaxSize(t,e),i._$bind(this._$attachment)}}_$getSamples(){switch(this._$quality){case"high":return 4;case"medium":return 2;default:return 0}}_$dispatchEvent(t){if(this._$broadcastEvents.size&&this._$broadcastEvents.has(t.type)){const e=this._$broadcastEvents.get(t.type).slice(0);t.eventPhase=Ct.AT_TARGET;for(let i=0;ithis._$fps){if(this._$startTime=t-e%this._$fps,this._$action(),this._$sounds.size){for(const t of this._$sounds.values())t._$soundPlay();this._$sounds.clear()}this._$draw(),!Zs&&!this._$hitTestStart&&"up"===this._$state&&this._$stageX>-1&&this._$stageY>-1&&l()&&this._$pointerCheck()}else this._$videos.length&&!Mr&&this._$draw();this._$timerId=I((t=>{this._$run(t)}))}_$pointerCheck(){const t=this._$stageX,e=this._$stageY;this._$hitObject.x=t,this._$hitObject.y=e,this._$hitObject.pointer="",this._$hitObject.hit=null,rr.setTransform(1,0,0,1,0,0),rr.beginPath(),zs[4]=this._$tx/this._$scale/f,zs[5]=this._$ty/this._$scale/f,this._$stage._$mouseHit(rr,zs,this._$hitObject,!0);let i=null,s=null,r=!1,n=!1;if(this._$hitObject.hit){if(i=this._$hitObject.hit,this._$mouseOverTarget&&this._$mouseOverTarget!==i){const t=this._$mouseOverTarget;t.willTrigger(Pt.MOUSE_OUT)&&t.dispatchEvent(new Pt(Pt.MOUSE_OUT,!0,!1))}if(this._$rollOverObject!==i){let r=null;if(this._$rollOverObject)for(s=this._$rollOverObject,s.willTrigger(Pt.ROLL_OUT)&&s.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),r=s._$parent;r&&r._$root!==r&&r!==i;){if(r._$mouseEnabled&&r._$outCheck(t,e)){let t=!1,e=i;for(;e&&e._$root!==e;){if(e===r){t=!0;break}e=e._$parent}if(!t&&r._$parent===i._$parent&&r._$index>i._$index&&(t=!0),t)break}r.willTrigger(Pt.ROLL_OUT)&&r.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),r=r._$parent}for(s=i;s.willTrigger(Pt.ROLL_OVER)&&s.dispatchEvent(new Pt(Pt.ROLL_OVER,!1,!1)),s=s._$parent,s&&s!==r&&s.stage!==s;);}switch(this._$rollOverObject=i,!0){case null===this._$mouseOverTarget:case this._$mouseOverTarget!==i:i&&i.willTrigger(Pt.MOUSE_OVER)&&i.dispatchEvent(new Pt(Pt.MOUSE_OVER,!0,!1)),this._$mouseOverTarget=i}if("up"===this._$state&&(this._$clickTarget=null),!Zs&&"up"===this._$state)for(s=i;s&&s.root!==s;){if("_$text"in s&&"input"===s.type){r=!0;break}if("buttonMode"in s&&s.buttonMode){n=!0;break}s=s._$parent}}else{if(this._$mouseOverTarget&&(i=this._$mouseOverTarget,i.willTrigger(Pt.MOUSE_OUT)&&i.dispatchEvent(new Pt(Pt.MOUSE_OUT,!0,!1))),this._$rollOverObject)for(s=this._$rollOverObject;s&&s.root!==s;)s.willTrigger(Pt.ROLL_OUT)&&s.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),s=s._$parent;this._$rollOverObject=null,this._$mouseOverTarget=null}switch(!0){case r:this._$canvas.style.cursor="text";break;case n:this._$canvas.style.cursor="pointer";break;case!Zs&&"up"===this._$state:this._$canvas.style.cursor="auto"}this._$actions.length>1&&this._$doAction()}_$action(){if(this._$stopFlag)return;let t=null;const e=this._$loaders.length;if(e){t=this._$loaders.slice(0),this._$loaders.length=0;for(let i=0;ie._$index&&(i=!0),i)break}t.willTrigger(Pt.ROLL_OUT)&&t.dispatchEvent(new Pt(Pt.ROLL_OUT,!1,!1)),t=t._$parent}for(i=e;i.willTrigger(Pt.ROLL_OVER)&&i.dispatchEvent(new Pt(Pt.ROLL_OVER,!1,!1)),i=i._$parent,i&&i!==t&&i.stage!==i;);}switch(this._$rollOverObject=e,!0){case null===this._$mouseOverTarget:case this._$mouseOverTarget!==e:e.willTrigger(Pt.MOUSE_OVER)&&e.dispatchEvent(new Pt(Pt.MOUSE_OVER,!0,!1)),this._$mouseOverTarget=e}"up"===this._$state?this._$clickTarget=null:this._$textField&&this._$textField._$setIndex(c,_);break;case Ss:case Fs:this._$textField&&e!==this._$textField&&(this._$textField.focus=!1,this._$textField=null),"_$text"in e&&(e.focus=!0,e._$setIndex(c,_),this._$textField=e,tr.style.left=`${h}px`,tr.style.top=`${o}px`),e.willTrigger(Pt.MOUSE_DOWN)&&e.dispatchEvent(new Pt(Pt.MOUSE_DOWN,!0,!1)),this._$clickTarget=e;break;case Is:case Bs:e.willTrigger(Pt.MOUSE_UP)&&e.dispatchEvent(new Pt(Pt.MOUSE_UP,!0,!1)),this._$clickTarget===e&&e.willTrigger(Pt.CLICK)&&e.dispatchEvent(new Pt(Pt.CLICK,!0,!1)),this._$clickTarget=null;break;case Ls:e.willTrigger(Pt.MOUSE_WHEEL)&&e.dispatchEvent(new Pt(Pt.MOUSE_WHEEL)),e.scrollEnabled&&("deltaX"in t&&(e.scrollX+=t.deltaX/(e.textWidth/e.width)),"deltaY"in t&&(e.scrollY+=t.deltaY/(e.textHeight/e.height)));break;case Ps:e.willTrigger(Pt.DOUBLE_CLICK)&&e.dispatchEvent(new Pt(Pt.DOUBLE_CLICK))}if(!g&&!Zs&&"up"===this._$state)for(i=e;i&&i.root!==i;){if("_$text"in i){if("input"===i.type){$=!0;break}}else if(i._$buttonMode){p=!0;break}i=i._$parent}}switch(!0){case $:this._$canvas.style.cursor="text";break;case p:this._$canvas.style.cursor="pointer";break;case!Zs&&"up"===this._$state:this._$canvas.style.cursor="auto"}!this._$actionProcess&&this._$actions.length>1&&this._$doAction(),m&&(this._$stage._$prepareActions(),this._$actionProcess||this._$doAction()),this._$hitTestStart=!1}}const xs={Event:It,EventDispatcher:Ft,EventPhase:Ct,FocusEvent:Rt,HTTPStatusEvent:Bt,IOErrorEvent:Lt,MouseEvent:Pt,ProgressEvent:kt,VideoEvent:Nt};Object.entries(xs).forEach((([t,e])=>{Object.defineProperty(xs,t,{get:()=>e})}));const bs={DisplayObject:Zt,InteractiveObject:te,DisplayObjectContainer:ee,Sprite:$e,MovieClip:ue,BitmapData:ie,BlendMode:class{static toString(){return"[class BlendMode]"}static get namespace(){return"next2d.display.BlendMode"}toString(){return"[object BlendMode]"}get namespace(){return"next2d.display.BlendMode"}static get ADD(){return"add"}static get ALPHA(){return"alpha"}static get DARKEN(){return"darken"}static get DIFFERENCE(){return"difference"}static get ERASE(){return"erase"}static get HARDLIGHT(){return"hardlight"}static get INVERT(){return"invert"}static get LAYER(){return"layer"}static get LIGHTEN(){return"lighten"}static get MULTIPLY(){return"multiply"}static get NORMAL(){return"normal"}static get OVERLAY(){return"overlay"}static get SCREEN(){return"screen"}static get SUBTRACT(){return"subtract"}},FrameLabel:se,Graphics:ae,Loader:de,LoaderInfo:he,Shape:ge,Stage:fe,TextField:Ci};Object.entries(bs).forEach((([t,e])=>{Object.defineProperty(bs,t,{get:()=>e})}));const vs={BevelFilter:Xt,BlurFilter:zt,ColorMatrixFilter:qt,ConvolutionFilter:Yt,DisplacementMapFilter:Ht,DropShadowFilter:jt,GlowFilter:Wt,GradientBevelFilter:Kt,GradientGlowFilter:Qt};Object.entries(vs).forEach((([t,e])=>{Object.defineProperty(vs,t,{get:()=>e})}));const Ts={ColorTransform:Ot,Matrix:Ut,Point:Dt,Rectangle:Vt,Transform:Jt};Object.entries(Ts).forEach((([t,e])=>{Object.defineProperty(Ts,t,{get:()=>e})}));const ys={Sound:le,SoundMixer:oe,SoundTransform:ce,Video:_e};Object.entries(ys).forEach((([t,e])=>{Object.defineProperty(ys,t,{get:()=>e})}));const Es={URLRequest:St,URLRequestHeader:g};Object.entries(Es).forEach((([t,e])=>{Object.defineProperty(Es,t,{get:()=>e})}));const As={TextFormat:be};Object.entries(As).forEach((([t,e])=>{Object.defineProperty(As,t,{get:()=>e})}));const Ms={Easing:pe,Job:me,Tween:xe};Object.entries(Ms).forEach((([t,e])=>{Object.defineProperty(Ms,t,{get:()=>e})}));const ws="__next2d__",Ss="touchstart",Cs="touchmove",Is="touchend",Fs="mousedown",Rs="mousemove",Bs="mouseup",Ls="wheel",Ps="dblclick",ks="mouseleave";let Ns=null;const Os=new Map;let Ds=null;const Us=t=>{Ds=t},Vs={lock:!1,position:{x:0,y:0},bounds:null},Gs=new Float32Array(256);new Float32Array(256);for(let t=0;t<256;++t)Gs[t]=v.pow(t/255,2.23333333),Gs[t]=t/255;const zs=new Float32Array([1,0,0,1,0,0]),Xs=[],qs=[],Ys=[],Hs=new Map;let js=!1,Ws=!1,Ks=!1,Qs=!1,Js=!1,Zs=!1;const tr=d.createElement("textarea");let er="";er+="position: fixed;",er+="top: 0;",er+="left: 0;",er+="font-size: 16px;",er+="border: 0;",er+="resize: none;",er+="opacity: 0;",er+="z-index: -1;",er+="pointer-events: none;",tr.setAttribute("style","position: fixed;top: 0;left: 0;font-size: 16px;border: 0;resize: none;opacity: 0;z-index: -1;pointer-events: none;"),tr.tabIndex=-1,tr.addEventListener("compositionstart",(()=>{const t=u.next2d.player._$textField;t&&t.compositionStart()})),tr.addEventListener("compositionupdate",(t=>{const e=u.next2d.player._$textField;e&&e.compositionUpdate(t.data)})),tr.addEventListener("compositionend",(()=>{const t=u.next2d.player._$textField;t&&t.compositionEnd()})),tr.addEventListener("input",(t=>{if(!t.data)return;const e=u.next2d.player._$textField;e&&e.insertText(t.data)})),tr.addEventListener("keydown",(t=>{const e=u.next2d.player._$textField;if(e)switch(t.key){case"Backspace":case"Delete":e.deleteText();break;case"Enter":e.insertText("\n");break;case"ArrowLeft":e.arrowLeft();break;case"ArrowRight":e.arrowRight();break;case"ArrowUp":e.arrowUp();break;case"ArrowDown":e.arrowDown();break;case"a":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.selectAll());break;case"v":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.paste());break;case"c":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.copy())}}));const ir=d.createElement("canvas");ir.width=1,ir.height=1;const sr=ir.getContext("2d");if(!sr)throw new Error("the CanvasRenderingContext2D is null.");sr.globalAlpha=0,sr.imageSmoothingEnabled=!1;const rr=sr,nr=[],ar=[],hr=()=>nr.length?nr.pop():new Float32Array(64),or=()=>ar.length?ar.pop():{command:""},lr=t=>{t.buffer=null,ar.push(t),console.log("renderMessageArray: ",ar)},cr=()=>u.next2d.player,_r=()=>{const t=l();if(!t)return new Dt;const e=cr();let i=u.scrollX,s=u.scrollY;const r=d.getElementById(e.contentElementId);if(r){const t=r.getBoundingClientRect();i+=t.left,s+=t.top}let n=0,a=0;if("changedTouches"in t){const e=t.changedTouches[0];n=e.pageX,a=e.pageY}else"pageX"in t&&(n=t.pageX,a=t.pageY);const h=(n-i)/e._$scale-e.x/e._$scale/f,o=(a-s)/e._$scale-e.y/e._$scale/f;return new Dt(h,o)},$r=(t=1,e=0,i=0,s=1,r=0,n=0)=>{const a=qs.pop();return a?(a.setTo(t,e,i,s,r,n),a):new Ut(t,e,i,s,r,n)},ur=t=>{qs.push(t)},dr=(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0)=>{const o=Ys.length?Ys.pop():null;return o?(o.redMultiplier=t,o.greenMultiplier=e,o.blueMultiplier=i,o.alphaMultiplier=s,o.redOffset=r,o.greenOffset=n,o.blueOffset=a,o.alphaOffset=h,o):new Ot(t,e,i,s,r,n,a,h)},gr=t=>{Ys.push(t)},fr=(t,e)=>{t._$character?t._$character.audioBuffer=e:t._$audioBuffer=e},pr=t=>{if(!Ns)throw new Error("the AudioContext is null.");let e=null;if(t._$character){const i=t._$character.buffer;i&&(e=new Uint8Array(i).buffer,ot(i),t._$character.buffer=null)}else e=t._$arrayBuffer;return e?Ns.decodeAudioData(e).then((e=>(fr(t,e),Promise.resolve(t)))).catch((()=>{if(!e)throw new Error;return((t,e)=>{if(!Ns)throw new Error("the Audio Context is null.");const i=new Uint8Array(e);let s=0;for(;s=i.indexOf(255,s),-1!==s&&224!=(224&i[s+1]);)++s;if(s>-1)return Ns.decodeAudioData(i.subarray(s).buffer).then((e=>(fr(t,e),Promise.resolve(t)))).catch((()=>{throw new Error("This voice data is not available.")}));throw new Error("This voice data is not available.")})(t,e)})):Promise.resolve(t)},mr=()=>{if(Ns||(Ns=new AudioContext,Ns.resume()),Ns){const t=ht();for(let e=0;e{Xs.length=0,cr()._$loaders.push(...t)}))}};let xr=-1;const br=()=>{const t=cr();if(t._$loadStatus===ms.LOAD_END){t._$resize();const e=t.stage;e.willTrigger(It.RESIZE)&&e.dispatchEvent(new It(It.RESIZE))}};u.addEventListener("resize",(()=>{L(xr),xr=B(br,300)}));const vr=t=>{let e=null;switch(t.method.toUpperCase()){case"GET":if(t.data){const e=t.url.split("?");e[1]=1===e.length?t.data.toString():`${e[1]}&${t.data.toString()}`,t.url=e.join("?")}break;case"PUT":case"POST":t.data&&(e=t.data.toString())}const i=new XMLHttpRequest;if(i.open(t.method,t.url,!0),i.responseType=t.format,i.withCredentials=t.withCredentials,t.event){const e=Object.keys(t.event);for(let s=0;s{const e=ht();if(t){const i=t.trim().split("\n"),s=i.length;for(let t=0;tyr.has(t)&&yr.get(t)||1,Ar=t=>{switch(t){case ue.namespace:return new ue;case ge.namespace:return new ge;case Ci.namespace:return new Ci;case $e.namespace:return new $e;case _e.namespace:return new _e}};let Mr=null,wr=null,Sr=null;const Cr=URL.createObjectURL(new Blob(['(()=>{"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,a=new r([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,0,0,0]),t=new r([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,0,0]),i=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),o=function(r,a){for(var t=new n(31),i=0;i<31;++i)t[i]=a+=1<>1|(21845&s)<<1;w=(61680&(w=(52428&w)>>2|(13107&w)<<2))>>4|(3855&w)<<4,d[s]=((65280&w)>>8|(255&w)<<8)>>1}var h=function(r,e,a){for(var t=r.length,i=0,o=new n(e);i>v]=c}else for(f=new n(t),i=0;i>15-r[i]);return f},y=new r(288);for(s=0;s<144;++s)y[s]=8;for(s=144;s<256;++s)y[s]=9;for(s=256;s<280;++s)y[s]=7;for(s=280;s<288;++s)y[s]=8;var b=new r(32);for(s=0;s<32;++s)b[s]=5;var g=h(y,9,1),p=h(b,5,1),m=function(r){for(var n=r[0],e=1;en&&(n=r[e]);return n},k=function(r,n,e){var a=n/8|0;return(r[a]|r[a+1]<<8)>>(7&n)&e},x=function(r,n){var e=n/8|0;return(r[e]|r[e+1]<<8|r[e+2]<<16)>>(7&n)},T=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],z=function(r,n,e){var a=new Error(n||T[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,z),!e)throw a;return a},E=function(n,e,o,f){var v=n.length,c=f?f.length:0;if(!v||e.f&&!e.l)return o||new r(0);var d=!o||2!=e.i,s=e.i;o||(o=new r(3*v));var w,y=function(n){var e=o.length;if(n>e){var a=new r(Math.max(2*e,n));a.set(o),o=a}},b=e.f||0,T=e.p||0,E=e.b||0,M=e.l,S=e.d,U=e.m,A=e.n,C=8*v;do{if(!M){b=k(n,T,1);var q=k(n,T+1,3);if(T+=3,!q){var D=n[(w=T,(G=4+((w+7)/8|0))-4)]|n[G-3]<<8,F=G+D;if(F>v){s&&z(0);break}d&&y(E+D),o.set(n.subarray(G,F),E),e.b=E+=D,e.p=T=8*F,e.f=b;continue}if(1==q)M=g,S=p,U=9,A=5;else if(2==q){var I=k(n,T,31)+257,O=k(n,T+10,15)+4,J=I+k(n,T+5,31)+1;T+=14;for(var L=new r(J),N=new r(19),P=0;P>4)<16)L[P++]=G;else{var K=0,Q=0;for(16==G?(Q=3+k(n,T,3),T+=2,K=L[P-1]):17==G?(Q=3+k(n,T,7),T+=3):18==G&&(Q=11+k(n,T,127),T+=7);Q--;)L[P++]=K}}var V=L.subarray(0,I),W=L.subarray(I);U=m(V),A=m(W),M=h(V,U,1),S=h(W,A,1)}else z(1);if(T>C){s&&z(0);break}}d&&y(E+131072);for(var X=(1<>4;if((T+=15&K)>C){s&&z(0);break}if(K||z(2),$<256)o[E++]=$;else{if(256==$){Z=T,M=null;break}var _=$-254;if($>264){var rr=a[P=$-257];_=k(n,T,(1<>4;if(nr||z(3),T+=15&nr,W=l[er],er>3&&(rr=t[er],W+=x(n,T)&(1<C){s&&z(0);break}d&&y(E+131072);var ar=E+_;if(En.length)&&(a=n.length);var t=new r(a-e);return t.set(n.subarray(e,a)),t}(o,0,E)},M=new r(0);function S(n,e){var a,t,i=function(r){31==r[0]&&139==r[1]&&8==r[2]||z(6,"invalid gzip data");var n=r[3],e=10;4&n&&(e+=2+(r[10]|r[11]<<8));for(var a=(n>>3&1)+(n>>4&1);a>0;a-=!r[e++]);return e+(2&n)}(n);return i+8>n.length&&z(6,"invalid gzip data"),E(n.subarray(i,-8),{i:2},e&&e.out||new r((t=(a=n).length,(a[t-4]|a[t-3]<<8|a[t-2]<<16|a[t-1]<<24)>>>0)),e&&e.dictionary)}function U(r,n){return E(r.subarray((e=r,a=n&&n.dictionary,(8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31)&&z(6,"invalid zlib data"),(e[1]>>5&1)==+!a&&z(6,"invalid zlib data: "+(32&e[1]?"need":"unexpected")+" dictionary"),2+(e[1]>>3&4)),-4),{i:2},n&&n.out,n&&n.dictionary);var e,a}var A="undefined"!=typeof TextDecoder&&new TextDecoder;try{A.decode(M,{stream:!0})}catch(r){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout;self.addEventListener("message",(r=>{return n=void 0,e=void 0,t=function*(){const n=31==(e=r.data)[0]&&139==e[1]&&8==e[2]?S(e,a):8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31?function(r,n){return E(r,{i:2},n&&n.out,n&&n.dictionary)}(e,a):U(e,a);var e,a;let t="";for(let r=0;r(Fr||(Fr=new Worker(Cr)),Fr);let Br=!1;const Lr=t=>{Br=t},Pr=()=>Br,kr=()=>{if("OffscreenCanvas"in window){const t=new OffscreenCanvas(0,0).getContext("webgl2");Mr=null!==t?new Worker(URL.createObjectURL(new Blob(['(()=>{"use strict";let t=1,e=0,i=!1;const s=1/0,r=Math,n=Array,a=Map,h=Number,o=Float32Array,_=Int32Array,l=Int16Array,c=OffscreenCanvas,$=isNaN,u=requestAnimationFrame,d=setTimeout,g=clearTimeout,f=new o([1,0,0,1,0,0]),m=new o([1,1,1,1,0,0,0,0]),p=r.PI/180,x=(r.PI,[]),b=[],v=[],T=[],A=[],M=[],y=[],E=[],C=[],S=new c(1,1).getContext("2d"),F=(t=0,e=0,i=0,s=0)=>{const r=C.pop()||{xMin:0,xMax:0,yMin:0,yMax:0};return r.xMin=t,r.xMax=e,r.yMin=i,r.yMax=s,r},B=t=>{C.push(t)},w=(t=0,e=0,i=0,s=0)=>{const r=v.pop()||new o(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},R=t=>{v.push(t)},I=(t=0,e=0,i=0,s=0)=>{const r=b.pop()||new _(4);return r[0]=t,r[1]=e,r[2]=i,r[3]=s,r},P=(t=0,e=0,i=0,s=0,r=0,n=0)=>{const a=T.pop()||new o(6);return a[0]=t,a[1]=e,a[2]=i,a[3]=s,a[4]=r,a[5]=n,a},N=t=>{T.push(t)},k=(t=1,e=1,i=1,s=1,r=0,n=0,a=0,h=0)=>{const _=A.pop()||new o(8);return _[0]=t,_[1]=e,_[2]=i,_[3]=s,_[4]=r,_[5]=n,_[6]=a,_[7]=h,_},L=t=>{A.push(t)},O=(t=0,e=0,i=0,s=0,r=0,n=0,a=0,h=0,_=0)=>{const l=M.pop()||new o(9);return l[0]=t,l[1]=e,l[2]=i,l[3]=s,l[4]=r,l[5]=n,l[6]=a,l[7]=h,l[8]=_,l},U=(...t)=>{const e=y.pop()||[];return t.length&&e.push(...t),e},D=(t=null)=>{t&&(t.length&&(t.length=0),y.push(t))},X=t=>{t.size&&t.clear(),E.push(t)},V=()=>E.pop()||new a,Y=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t),z=t=>{const e=1/(t[0]*t[4]-t[3]*t[1]),i=t[3]*t[7]-t[4]*t[6],s=t[1]*t[6]-t[0]*t[7];return O(t[4]*e,0-t[1]*e,0,0-t[3]*e,t[0]*e,0,i*e,s*e,1)},G=(t,e,i,s=null)=>{const n=+t;return $(n)&&null!==s?s:r.min(r.max(e,$(n)?0:n),i)},H=(t,e)=>P(t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],t[0]*e[4]+t[2]*e[5]+t[4],t[1]*e[4]+t[3]*e[5]+t[5]),W=(t,e)=>k(t[0]*e[0],t[1]*e[1],t[2]*e[2],t[3]*e[3],t[0]*e[4]+t[4],t[1]*e[5]+t[5],t[2]*e[6]+t[6],t[3]*e[7]+t[7]),q=(t,e)=>{const i=t.xMax*e[0]+t.yMax*e[2]+e[4],s=t.xMax*e[0]+t.yMin*e[2]+e[4],n=t.xMin*e[0]+t.yMax*e[2]+e[4],a=t.xMin*e[0]+t.yMin*e[2]+e[4],o=t.xMax*e[1]+t.yMax*e[3]+e[5],_=t.xMax*e[1]+t.yMin*e[3]+e[5],l=t.xMin*e[1]+t.yMax*e[3]+e[5],c=t.xMin*e[1]+t.yMin*e[3]+e[5],$=r.min(h.MAX_VALUE,i,s,n,a),u=r.max(0-h.MAX_VALUE,i,s,n,a),d=r.min(h.MAX_VALUE,o,_,l,c),g=r.max(0-h.MAX_VALUE,o,_,l,c);return F($,u,d,g)},j=t=>$(+t)?(t=>{if(!S)return 0;S.fillStyle=t;const e=+`0x${S.fillStyle.slice(1)}`;return S.fillStyle="rgba(0, 0, 0, 1)",e})(`${t}`):+t,K=(t,e,i)=>(t>>16)*(i?e:1)/255,Q=(t,e,i)=>(t>>8&255)*(i?e:1)/255,J=(t,e,i)=>(255&t)*(i?e:1)/255,Z=(t,e=1)=>({R:(16711680&t)>>16,G:(65280&t)>>8,B:255&t,A:255*e}),tt=(t,e,i=!1,s=!1)=>{let r="";return i&&(r="italic "),s&&(r+="bold "),`${r}${e}px \'${t}\',\'sans-serif\'`},et=t=>{t.color&&L(t.color),t.isLayer=!1,t.isUpdated=null,t.canApply=null,t.matrix=null,t.color=null,t.filters=null,t.blendMode="normal",t.sw=0,t.sh=0,x.push(t)},it=new Map([[1,"normal"],[2,"layer"],[3,"multiply"],[4,"screen"],[5,"lighten"],[6,"darken"],[7,"difference"],[8,"add"],[9,"subtract"],[10,"invert"],[11,"alpha"],[12,"erase"],[13,"overlay"],[14,"hardlight"]]),st=t=>it.has(t)&&it.get(t)||"normal",rt=new class{constructor(){this._$pool=[],this._$store=new Map,this._$timerMap=new Map,this._$context=null}set context(t){this._$context=t}reset(){for(const t of this._$store.values()){for(const e of t.values())this.destroy(e);X(t)}this._$store.clear(),this._$context&&this._$context.frameBuffer.clearCache()}destroy(t=null){if(t&&"object"==typeof t)if(t instanceof WebGLTexture)u((()=>{this._$context&&this._$context.frameBuffer.releaseTexture(t)}));else{if("canvas"in t&&t instanceof CanvasRenderingContext2D){const e=t.canvas,i=e.width,s=e.height;t.clearRect(0,0,i+1,s+1),e.width=e.height=1,this._$pool.push(e)}this._$context&&"index"in t&&this._$context.frameBuffer.textureManager.releasePosition(t)}}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(t,e){if(!this._$store.has(t))return;const i=this._$store.get(t);i.has(e)&&(i.delete(e),i.size||(X(i),this._$store.delete(t)))}stopTimer(t){t=`${t}`,this._$timerMap.has(t)&&(g(this._$timerMap.get(t)),this._$timerMap.delete(t))}removeCache(t){if(t=`${t}`,this._$store.has(t)){const e=this._$store.get(t);for(const t of e.values())this.destroy(t);e.clear(),X(e),this._$store.delete(t)}this._$timerMap.delete(t)}setRemoveTimer(t){if(t=`${t}`,this.stopTimer(t),this._$store.has(t)){const e=d((()=>{this.removeCache(t)}),5e3);this._$timerMap.set(t,e)}}get(t){const e=`${t[0]}`,i=`${t[1]}`;if(this._$store.has(e)){this.stopTimer(e);const t=this._$store.get(e);if(t.has(i))return t.get(i)}return null}set(t,e=null){const i=`${t[0]}`,s=`${t[1]}`;this._$store.has(i)||this._$store.set(i,V());const r=this._$store.get(i);if(null===e){if(!r.has(s))return;return this.destroy(r.get(s)),r.delete(s),void(r.size||(X(r),this._$store.delete(i)))}r.set(s,e)}has(t){const e=`${t[0]}`;return!!this._$store.has(e)&&this._$store.get(e).has(`${t[1]}`)}generateKeys(t,e=null,i=null){let s="";e&&e.length&&(s+=`${e[0]}_${e[1]}`),i&&i.length&&(s+=0===i[7]?"":`_${i[7]}`);const r=U();if(s){let t=0;const e=s.length;for(let i=0;i{i=t})()}}class at extends nt{constructor(t=4,e=4,i=1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this.blurX=t,this.blurY=e,this.quality=i}static toString(){return"[class BlurFilter]"}static get namespace(){return"next2d.filters.BlurFilter"}toString(){return"[object BlurFilter]"}get namespace(){return"next2d.filters.BlurFilter"}static get STEP(){return[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5]}get blurX(){return this._$blurX}set blurX(t){(t=G(+t,0,255,0))!==this._$blurX&&(this._$blurX=t,this._$doChanged())}get blurY(){return this._$blurY}set blurY(t){(t=G(+t,0,255,0))!==this._$blurY&&(this._$blurY=t,this._$doChanged())}get quality(){return this._$quality}set quality(t){(t=G(0|t,0,15,1))!==this._$quality&&(this._$quality=t,this._$doChanged())}clone(){return new at(this._$blurX,this._$blurY,this._$quality)}_$toArray(){return U(1,this._$blurX,this._$blurY,this._$quality)}_$generateFilterRect(t,e=0,i=0){const s=F(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$quality)return s;const n=at.STEP[this._$quality-1];let a=0>=this._$blurX?1:this._$blurX*n,h=0>=this._$blurY?1:this._$blurY*n;return e?a*=e:a=r.round(a),i?h*=i:h=r.round(h),s.xMin-=a,s.xMax+=2*a,s.yMin-=h,s.yMax+=2*h,s}_$canApply(){return 0!==this._$blurX&&0!==this._$blurY}_$applyFilter(e,i,s=!0){this._$updated=!1;const n=e.frameBuffer,a=n.currentAttachment,h=n.getTextureFromCurrentAttachment();if(!this._$canApply())return s?h:n.createTextureFromCurrentAttachment();let o=r.sqrt(i[0]*i[0]+i[1]*i[1]),_=r.sqrt(i[2]*i[2]+i[3]*i[3]);o/=t,_/=t,o*=2,_*=2;const l=F(0,h.width,0,h.height),c=this._$generateFilterRect(l,o,_);B(l);const $=0|r.ceil(c.xMax),u=0|r.ceil(c.yMax),d=r.ceil(r.abs(c.xMin)+.5*r.abs($-c.xMax)),g=r.ceil(r.abs(c.yMin)+.5*r.abs(u-c.yMax));e._$offsetX=d+e._$offsetX,e._$offsetY=g+e._$offsetY;const f=this._$blurX*o,m=this._$blurY*_;let p=1,x=1;f>128?p=.0625:f>64?p=.125:f>32?p=.25:f>16&&(p=.5),m>128?x=.0625:m>64?x=.125:m>32?x=.25:m>16&&(x=.5);const b=f*p,v=m*x,T=r.ceil($*p),A=r.ceil(u*x),M=n.createTextureAttachment(T,A),y=[M,n.createTextureAttachment(T,A)];let E=0;e._$bind(M),e.reset(),e.setTransform(p,0,0,x,0,0),e.drawImage(h,d,g,h.width,h.height),e.blend.toOneZero();let C=n.getTextureFromCurrentAttachment();for(let t=0;t0){E=(E+1)%2;const t=y[E];e._$bind(t),e._$applyBlurFilter(C,!0,b),C=n.getTextureFromCurrentAttachment()}if(this._$blurY>0){E=(E+1)%2;const t=y[E];e._$bind(t),e._$applyBlurFilter(C,!1,v),C=n.getTextureFromCurrentAttachment()}}if(e.blend.reset(),1!==p||1!==x){const t=n.createTextureAttachment($,u);e._$bind(t),e.reset(),e.imageSmoothingEnabled=!0,e.setTransform(1/p,0,0,1/x,0,0),e.drawImage(C,0,0,T,A),C=n.getTextureFromCurrentAttachment(),e.reset(),e.setTransform(1,0,0,1,0,0),n.releaseAttachment(y[0],!0),n.releaseAttachment(y[1],!0),s?n.releaseAttachment(a,!0):n.releaseAttachment(t,!1)}else n.releaseAttachment(y[(E+1)%2],!0),s?n.releaseAttachment(a,!0):n.releaseAttachment(y[E],!1);return C}}class ht extends nt{constructor(t=4,e=45,i=16777215,s=1,r=0,n=1,a=4,h=4,o=1,_=1,l="inner",c=!1){super(),this._$blurFilter=new at(a,h,_),this._$distance=4,this._$angle=45,this._$highlightColor=16777215,this._$highlightAlpha=1,this._$shadowColor=0,this._$shadowAlpha=1,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.highlightColor=i,this.highlightAlpha=s,this.shadowColor=r,this.shadowAlpha=n,this.strength=o,this.type=l,this.knockout=c}static toString(){return"[class BevelFilter]"}static get namespace(){return"next2d.filters.BevelFilter"}toString(){return"[object BevelFilter]"}get namespace(){return"next2d.filters.BevelFilter"}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=G(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get distance(){return this._$distance}set distance(t){(t=G(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get highlightAlpha(){return this._$highlightAlpha}set highlightAlpha(t){(t=G(+t,0,1,0))!==this._$highlightAlpha&&(this._$highlightAlpha=t,this._$doChanged())}get highlightColor(){return this._$highlightColor}set highlightColor(t){(t=G(j(t),0,16777215,16777215))!==this._$highlightColor&&(this._$highlightColor=t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get shadowAlpha(){return this._$shadowAlpha}set shadowAlpha(t){(t=G(+t,0,1,0))!==this._$shadowAlpha&&(this._$shadowAlpha=t,this._$doChanged())}get shadowColor(){return this._$shadowColor}set shadowColor(t){(t=G(j(t),0,16777215,0))!==this._$shadowColor&&(this._$shadowColor=t,this._$doChanged())}get strength(){return this._$strength}set strength(t){(t=G(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}get type(){return this._$type}set type(t){(t=`${t}`)!==this._$type&&(this._$type=t,this._$doChanged())}clone(){return new ht(this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$toArray(){return U(0,this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$type,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=F(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const n=this._$angle*p;let a=r.abs(r.cos(n)*this._$distance),h=r.abs(r.sin(n)*this._$distance);return e&&(a*=e),i&&(h*=i),s.xMin=r.min(s.xMin,a),a>0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$strength>0&&0!==this._$distance&&this._$blurFilter._$canApply()}_$applyFilter(e,i){this._$updated=!1;const s=e.frameBuffer,n=s.currentAttachment;if(!n)throw new Error("the current attachment is null.");e.setTransform(1,0,0,1,0,0);const a=s.getTextureFromCurrentAttachment();if(!this._$canApply())return a;const h=n.width,o=n.height,_=e._$offsetX,l=e._$offsetY;let c=r.sqrt(i[0]*i[0]+i[1]*i[1]),$=r.sqrt(i[2]*i[2]+i[3]*i[3]);c/=t,$/=t,c*=2,$*=2;const u=this._$angle*p,d=r.cos(u)*this._$distance*c,g=r.sin(u)*this._$distance*$,f=s.createTextureAttachment(h,o);e._$bind(f),e.reset(),e.drawImage(a,0,0,h,o),e.globalCompositeOperation="erase",e.drawImage(a,2*d,2*g,h,o);const m=this._$blurFilter._$applyFilter(e,i,!1),x=m.width,b=m.height,v=r.ceil(x+2*r.abs(d)),T=r.ceil(b+2*r.abs(g)),A="inner"===this._$type,M=A?h:v,y=A?o:T,E=r.abs(d),C=r.abs(g),S=(x-h)/2,F=(b-o)/2,B=A?0:E+S,w=A?0:C+F,R=A?-S-d:E-d,I=A?-F-g:C-g;return e._$bind(n),s.releaseAttachment(f,!0),e._$applyBitmapFilter(m,M,y,h,o,B,w,x,b,R,I,!1,this._$type,this._$knockout,this._$strength,null,null,null,K(this._$highlightColor,this._$highlightAlpha,!0),Q(this._$highlightColor,this._$highlightAlpha,!0),J(this._$highlightColor,this._$highlightAlpha,!0),this._$highlightAlpha,K(this._$shadowColor,this._$shadowAlpha,!0),Q(this._$shadowColor,this._$shadowAlpha,!0),J(this._$shadowColor,this._$shadowAlpha,!0),this._$shadowAlpha),e._$offsetX=_+B,e._$offsetY=l+w,s.releaseTexture(m),s.getTextureFromCurrentAttachment()}}class ot extends nt{constructor(t=null){super(),this._$matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix=t}static toString(){return"[class ColorMatrixFilter]"}static get namespace(){return"next2d.filters.ColorMatrixFilter"}toString(){return"[object ColorMatrixFilter]"}get namespace(){return"next2d.filters.ColorMatrixFilter"}get matrix(){return this._$matrix}set matrix(t){if(t&&n.isArray(t)&&20===t.length){for(let e=0;e<20;++e)if(t[e]!==this._$matrix[e]){this._$doChanged();break}this._$matrix=t}}clone(){return new ot(this._$matrix)}_$toArray(){return U(2,this._$matrix)}_$generateFilterRect(t){return t}_$canApply(){return!0}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment(),r=s.width,n=s.height,a=e.createTextureAttachment(r,n);return t._$bind(a),t.reset(),t._$applyColorMatrixFilter(s,this._$matrix),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()}}class _t extends nt{constructor(t=0,e=0,i=null,s=1,r=0,n=!0,a=!0,h=0,o=0){super(),this._$matrixX=0,this._$matrixY=0,this._$matrix=null,this._$divisor=1,this._$bias=0,this._$preserveAlpha=!0,this._$clamp=!0,this._$color=0,this._$alpha=0,this.matrixX=t,this.matrixY=e,this.matrix=i,this.divisor=s,this.bias=r,this.preserveAlpha=n,this.clamp=a,this.color=h,this.alpha=o}static toString(){return"[class ConvolutionFilter]"}static get namespace(){return"next2d.filters.ConvolutionFilter"}toString(){return"[object ConvolutionFilter]"}get namespace(){return"next2d.filters.ConvolutionFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get bias(){return this._$bias}set bias(t){t!==this._$bias&&(this._$bias=0|t,this._$doChanged())}get clamp(){return this._$clamp}set clamp(t){t!==this._$clamp&&(this._$clamp=!!t,this._$doChanged())}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get divisor(){return this._$divisor}set divisor(t){t!==this._$divisor&&(this._$divisor=0|t,this._$doChanged())}get matrix(){return this._$matrix}set matrix(t){n.isArray(this._$matrix)&&D(this._$matrix),this._$matrix=n.isArray(t)?t:null,this._$doChanged()}get matrixX(){return this._$matrixX}set matrixX(t){(t=0|G(0|t,0,15,0))!==this._$matrixX&&(this._$matrixX=t,this._$doChanged())}get matrixY(){return this._$matrixY}set matrixY(t){(t=0|G(0|t,0,15,0))!==this._$matrixY&&(this._$matrixY=t,this._$doChanged())}get preserveAlpha(){return this._$preserveAlpha}set preserveAlpha(t){t!==this._$preserveAlpha&&(this._$preserveAlpha=!!t,this._$doChanged())}clone(){return new _t(this._$matrixX,this._$matrixY,this._$matrix?this._$matrix.slice():null,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$toArray(){return U(3,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$matrix&&this._$matrixX*this._$matrixY===this._$matrix.length}_$applyFilter(t){this._$updated=!1;const e=t.frameBuffer,i=e.currentAttachment;t.setTransform(1,0,0,1,0,0);const s=e.getTextureFromCurrentAttachment();return this._$canApply()&&this._$matrix?(t._$applyConvolutionFilter(s,this._$matrixX,this._$matrixY,this._$matrix,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,K(this._$color,this._$alpha,!1),Q(this._$color,this._$alpha,!1),J(this._$color,this._$alpha,!1),this._$alpha),e.releaseAttachment(i,!0),e.getTextureFromCurrentAttachment()):s}}class lt extends nt{constructor(t=null,e=null,i=0,s=0,r=0,n=0,a="wrap",h=0,o=0){super(),this._$mapBitmap=null,this._$mapPoint=null,this._$componentX=0,this._$componentY=0,this._$scaleX=0,this._$scaleY=0,this._$mode="wrap",this._$color=0,this._$alpha=0,this.mapBitmap=t,this.mapPoint=e,this.componentX=i,this.componentY=s,this.scaleX=r,this.scaleY=n,this.mode=a,this.color=h,this.alpha=o}static toString(){return"[class DisplacementMapFilter]"}static get namespace(){return"next2d.filters.DisplacementMapFilter"}toString(){return"[object DisplacementMapFilter]"}get namespace(){return"next2d.filters.DisplacementMapFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get componentX(){return this._$componentX}set componentX(t){t!==this._$componentX&&(this._$componentX=t,this._$doChanged())}get componentY(){return this._$componentY}set componentY(t){t!==this._$componentY&&(this._$componentY=t,this._$doChanged())}get mapBitmap(){return this._$mapBitmap}set mapBitmap(t){t!==this._$mapBitmap&&(this._$mapBitmap=t,this._$doChanged())}get mapPoint(){return this._$mapPoint}set mapPoint(t){t!==this._$mapPoint&&(this._$mapPoint=t,this._$doChanged())}get mode(){return this._$mode}set mode(t){t!==this._$mode&&(this._$mode=t,this._$doChanged())}get scaleX(){return this._$scaleX}set scaleX(t){(t=G(+t,-65535,65535,0))!==this._$scaleX&&(this._$scaleX=t,this._$doChanged())}get scaleY(){return this._$scaleY}set scaleY(t){(t=G(+t,-65535,65535,0))!==this._$scaleY&&(this._$scaleY=t,this._$doChanged())}clone(){return new lt(this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$toArray(){return U(4,this._$mapBitmap,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,this._$color,this._$alpha)}_$generateFilterRect(t){return t}_$canApply(){return null!==this._$mapBitmap&&this._$componentX>0&&this._$componentY>0&&0!==this._$scaleX&&0!==this._$scaleY}_$applyFilter(t,e){this._$updated=!1;const i=t.frameBuffer,s=i.currentAttachment;t.setTransform(1,0,0,1,0,0);const n=i.getTextureFromCurrentAttachment();if(!this._$canApply()||!s||!this._$mapBitmap)return n;const a=r.sqrt(e[0]*e[0]+e[1]*e[1]),h=r.sqrt(e[2]*e[2]+e[3]*e[3]);return t._$applyDisplacementMapFilter(n,this._$mapBitmap,n.width/a,n.height/h,this._$mapPoint,this._$componentX,this._$componentY,this._$scaleX,this._$scaleY,this._$mode,K(this._$color,this._$alpha,!0),Q(this._$color,this._$alpha,!0),J(this._$color,this._$alpha,!0),this._$alpha),i.releaseAttachment(s,!0),i.getTextureFromCurrentAttachment()}}class ct extends nt{constructor(t=4,e=45,i=0,s=1,r=4,n=4,a=1,h=1,o=!1,_=!1,l=!1){super(),this._$blurFilter=new at(r,n,h),this._$distance=4,this._$angle=45,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this._$hideObject=!1,this.distance=t,this.angle=e,this.color=i,this.alpha=s,this.strength=a,this.inner=o,this.knockout=_,this.hideObject=l}static toString(){return"[class DropShadowFilter]"}static get namespace(){return"next2d.filters.DropShadowFilter"}toString(){return"[object DropShadowFilter]"}get namespace(){return"next2d.filters.DropShadowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get angle(){return this._$angle}set angle(t){(t%=360)!==this._$angle&&(this._$angle=G(t,-360,360,45),this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,0))!==this._$color&&(this._$color=t,this._$doChanged())}get distance(){return this._$distance}set distance(t){(t=G(+t,-255,255,4))!==this._$distance&&(this._$distance=t,this._$doChanged())}get hideObject(){return this._$hideObject}set hideObject(t){t!==this._$hideObject&&(this._$hideObject=!!t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=G(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new ct(this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$toArray(){return U(5,this._$distance,this._$angle,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout,this._$hideObject)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){let s=F(t.xMin,t.xMax,t.yMin,t.yMax);if(!this._$canApply())return s;s=this._$blurFilter._$generateFilterRect(s,e,i);const n=this._$angle*p;let a=r.cos(n)*this._$distance,h=r.sin(n)*this._$distance;return e&&(a*=e),i&&(h*=i),s.xMin=r.min(s.xMin,a),a>0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(e,i){const s=e.frameBuffer,n=s.currentAttachment;if(!n)throw new Error("the current attachment is null.");if(e.setTransform(1,0,0,1,0,0),!this._$canApply())return s.getTextureFromCurrentAttachment();const a=n.width,h=n.height,o=e._$offsetX,_=e._$offsetY,l=this._$blurFilter._$applyFilter(e,i,!1),c=l.width,$=l.height,u=e._$offsetX,d=e._$offsetY,g=u-o,f=d-_;let m=r.sqrt(i[0]*i[0]+i[1]*i[1]),x=r.sqrt(i[2]*i[2]+i[3]*i[3]);m/=t,x/=t,m*=2,x*=2;const b=this._$angle*p,v=r.cos(b)*this._$distance*m,T=r.sin(b)*this._$distance*x,A=this._$inner?a:c+r.max(0,r.abs(v)-g),M=this._$inner?h:$+r.max(0,r.abs(T)-f),y=r.ceil(A),E=r.ceil(M),C=(y-A)/2,S=(E-M)/2,F=this._$inner?0:r.max(0,g-v)+C,B=this._$inner?0:r.max(0,f-T)+S,w=this._$inner?v-u:(v>0?r.max(0,v-g):0)+C,R=this._$inner?T-d:(T>0?r.max(0,T-f):0)+S;let I,P;return this._$inner?(I="inner",P=this._$knockout||this._$hideObject):!this._$knockout&&this._$hideObject?(I="full",P=!0):(I="outer",P=this._$knockout),e._$bind(n),e._$applyBitmapFilter(l,y,E,a,h,F,B,c,$,w,R,!0,I,P,this._$strength,null,null,null,K(this._$color,this._$alpha,!0),Q(this._$color,this._$alpha,!0),J(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),e._$offsetX=o+F,e._$offsetY=_+B,s.releaseTexture(l),s.getTextureFromCurrentAttachment()}}class $t extends nt{constructor(t=0,e=1,i=4,s=4,r=1,n=1,a=!1,h=!1){super(),this._$blurFilter=new at(i,s,n),this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this.color=t,this.alpha=e,this.strength=r,this.inner=a,this.knockout=h}static toString(){return"[class GlowFilter]"}static get namespace(){return"next2d.filters.GlowFilter"}toString(){return"[object GlowFilter]"}get namespace(){return"next2d.filters.GlowFilter"}get alpha(){return this._$alpha}set alpha(t){(t=G(+t,0,1,0))!==this._$alpha&&(this._$alpha=t,this._$doChanged())}get blurX(){return this._$blurFilter.blurX}set blurX(t){this._$blurFilter.blurX=t}get blurY(){return this._$blurFilter.blurY}set blurY(t){this._$blurFilter.blurY=t}get color(){return this._$color}set color(t){(t=G(j(t),0,16777215,4))!==this._$color&&(this._$color=t,this._$doChanged())}get inner(){return this._$inner}set inner(t){t!==this._$inner&&(this._$inner=!!t,this._$doChanged())}get knockout(){return this._$knockout}set knockout(t){t!==this._$knockout&&(this._$knockout=!!t,this._$doChanged())}get quality(){return this._$blurFilter.quality}set quality(t){this._$blurFilter.quality=t}get strength(){return this._$strength}set strength(t){(t=G(0|t,0,255,0))!==this._$strength&&(this._$strength=t,this._$doChanged())}clone(){return new $t(this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$toArray(){return U(6,this._$color,this._$alpha,this._$blurFilter.blurX,this._$blurFilter.blurY,this._$strength,this._$blurFilter.quality,this._$inner,this._$knockout)}_$isUpdated(){return this._$updated||this._$blurFilter._$isUpdated()}_$generateFilterRect(t,e=0,i=0){const s=F(t.xMin,t.xMax,t.yMin,t.yMax);return this._$canApply()?this._$blurFilter._$generateFilterRect(s,e,i):s}_$canApply(){return this._$alpha>0&&this._$strength>0&&this._$blurFilter._$canApply()}_$applyFilter(t,e){const i=t.frameBuffer,s=i.currentAttachment;if(!s)throw new Error("the current attachment is null.");if(this._$updated=!1,t.setTransform(1,0,0,1,0,0),!this._$canApply())return i.getTextureFromCurrentAttachment();const r=s.width,n=s.height,a=t._$offsetX,h=t._$offsetY,o=this._$blurFilter._$applyFilter(t,e,!1),_=o.width,l=o.height,c=t._$offsetX,$=t._$offsetY,u=this._$inner?r:_,d=this._$inner?n:l,g=this._$inner?0:c-a,f=this._$inner?0:$-h,m=this._$inner?-c:0,p=this._$inner?-$:0,x=this._$inner?"inner":"outer";return t._$bind(s),t._$applyBitmapFilter(o,u,d,r,n,g,f,_,l,m,p,!0,x,this._$knockout,this._$strength,null,null,null,K(this._$color,this._$alpha,!0),Q(this._$color,this._$alpha,!0),J(this._$color,this._$alpha,!0),this._$alpha,0,0,0,0),t._$offsetX=a+g,t._$offsetY=h+f,i.releaseTexture(o),i.getTextureFromCurrentAttachment()}}class ut extends nt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,_="inner",l=!1){super(),this._$blurFilter=new at(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=_,this.knockout=l}static toString(){return"[class GradientBevelFilter]"}static get namespace(){return"next2d.filters.GradientBevelFilter"}toString(){return"[object GradientBevelFilter]"}get namespace(){return"next2d.filters.GradientBevelFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,n.isArray(t)){for(let e=0;e0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(e,i){this._$updated=!1;const s=e.frameBuffer,n=s.currentAttachment;e.setTransform(1,0,0,1,0,0);const a=s.getTextureFromCurrentAttachment();if(!this._$canApply()||!n)return a;const h=n.width,o=n.height,_=e._$offsetX,l=e._$offsetY;let c=r.sqrt(i[0]*i[0]+i[1]*i[1]),$=r.sqrt(i[2]*i[2]+i[3]*i[3]);c/=t,$/=t,c*=2,$*=2;const u=+this._$angle*p,d=+r.cos(u)*this._$distance*c,g=+r.sin(u)*this._$distance*$,f=s.createTextureAttachment(h,o);e._$bind(f),e.reset(),e.drawImage(a,0,0,h,o),e.globalCompositeOperation="erase",e.drawImage(a,2*d,2*g,h,o);const m=this._$blurFilter._$applyFilter(e,i,!1),x=m.width,b=m.height,v=r.ceil(x+2*r.abs(d)),T=r.ceil(b+2*r.abs(g)),A="inner"===this._$type,M=A?h:v,y=A?o:T,E=r.abs(d),C=r.abs(g),S=(x-h)/2,F=(b-o)/2,B=A?0:E+S,w=A?0:C+F,R=A?-S-d:E-d,I=A?-F-g:C-g;return e._$bind(n),e._$applyBitmapFilter(m,M,y,h,o,B,w,x,b,R,I,!1,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),e._$offsetX=_+B,e._$offsetY=l+w,s.releaseAttachment(f,!0),s.getTextureFromCurrentAttachment()}}class dt extends nt{constructor(t=4,e=45,i=null,s=null,r=null,n=4,a=4,h=1,o=1,_="inner",l=!1){super(),this._$blurFilter=new at(n,a,o),this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.distance=t,this.angle=e,this.colors=i,this.alphas=s,this.ratios=r,this.strength=h,this.type=_,this.knockout=l}static toString(){return"[class GradientGlowFilter]"}static get namespace(){return"next2d.filters.GradientGlowFilter"}toString(){return"[object GradientGlowFilter]"}get namespace(){return"next2d.filters.GradientGlowFilter"}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(this._$alphas=t,n.isArray(t)){for(let e=0;e0&&(s.xMax+=a),s.yMin=r.min(s.yMin,h),h>0&&(s.yMax+=h),s}_$canApply(){return this._$strength>0&&this._$distance>0&&null!==this._$alphas&&null!==this._$ratios&&null!==this._$colors&&this._$blurFilter._$canApply()}_$applyFilter(e,i){this._$updated=!1;const s=e.frameBuffer,n=s.currentAttachment;if(e.setTransform(1,0,0,1,0,0),!this._$canApply()||!n)return s.getTextureFromCurrentAttachment();const a=n.width,h=n.height,o=e._$offsetX,_=e._$offsetY,l=this._$blurFilter._$applyFilter(e,i,!1),c=l.width,$=l.height,u=e._$offsetX,d=e._$offsetY,g=u-o,f=d-_;let m=r.sqrt(i[0]*i[0]+i[1]*i[1]),x=r.sqrt(i[2]*i[2]+i[3]*i[3]);m/=t,x/=t,m*=2,x*=2;const b=+this._$angle*p,v=+r.cos(b)*this._$distance*m,T=+r.sin(b)*this._$distance*x,A="inner"===this.type,M=A?a:c+r.max(0,r.abs(v)-g),y=A?h:$+r.max(0,r.abs(T)-f),E=r.ceil(M),C=r.ceil(y),S=(E-M)/2,F=(C-y)/2,B=A?0:r.max(0,g-v)+S,w=A?0:r.max(0,f-T)+F,R=A?v-u:(v>0?r.max(0,v-g):0)+S,I=A?T-d:(T>0?r.max(0,T-f):0)+F;return e._$bind(n),e._$applyBitmapFilter(l,E,C,a,h,B,w,c,$,R,I,!0,this._$type,this._$knockout,this._$strength,this._$ratios,this._$colors,this._$alphas,0,0,0,0,0,0,0,0),e._$offsetX=o+B,e._$offsetY=_+w,s.releaseTexture(l),s.getTextureFromCurrentAttachment()}}class gt{constructor(){this._$instanceId=-1,this._$parentId=-1,this._$loaderInfoId=-1,this._$characterId=-1,this._$clipDepth=0,this._$depth=0,this._$isMask=!1,this._$updated=!0,this._$matrix=P(1,0,0,1,0,0),this._$colorTransform=k(1,1,1,1,0,0,0,0),this._$blendMode="normal",this._$filters=null,this._$visible=!0,this._$maskId=-1,this._$maskMatrix=null,this._$isMask=!1,this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$scale9Grid=null,this._$matrixBase=null}_$shouldClip(t){const e=this._$getBounds(t),i=r.abs(e.xMax-e.xMin),s=r.abs(e.yMax-e.yMin);return B(e),!(!i||!s)}_$getLayerBounds(e){const i=this._$getBounds(),s=q(i,e);B(i);const n=this._$filters;if(!n||!n.length)return s;let a=F(0,r.abs(s.xMax-s.xMin),0,r.abs(s.yMax-s.yMin));B(s);let h=+r.sqrt(e[0]*e[0]+e[1]*e[1]),o=+r.sqrt(e[2]*e[2]+e[3]*e[3]);h/=t,o/=t,h*=2,o*=2;for(let t=0;t-1){const t=le.instances;if(!t.has(this._$parentId))return;const e=t.get(this._$parentId);e._$updated||e._$doChanged()}}_$update(t){if(this._$doChanged(),this._$visible=t.visible,"depth"in t&&(this._$depth=t.depth),"isMask"in t&&(this._$isMask=t.isMask),"clipDepth"in t&&(this._$clipDepth=t.clipDepth),"maskId"in t&&(this._$maskId=t.maskId,this._$maskId>-1&&t.maskMatrix&&(this._$maskMatrix=t.maskMatrix)),this._$matrix[0]="a"in t?t.a:1,this._$matrix[1]="b"in t?t.b:0,this._$matrix[2]="c"in t?t.c:0,this._$matrix[3]="d"in t?t.d:1,this._$matrix[4]="tx"in t?t.tx:0,this._$matrix[5]="ty"in t?t.ty:0,this._$colorTransform[0]="f0"in t?t.f0:1,this._$colorTransform[1]="f1"in t?t.f1:1,this._$colorTransform[2]="f2"in t?t.f2:1,this._$colorTransform[3]="f3"in t?t.f3:1,this._$colorTransform[4]="f4"in t?t.f4:0,this._$colorTransform[5]="f5"in t?t.f5:0,this._$colorTransform[6]="f6"in t?t.f6:0,this._$colorTransform[7]="f7"in t?t.f7:0,this._$blendMode=t.blendMode||"normal",this._$filters=null,t.filters&&t.filters.length){this._$filters=U();for(let e=0;e-1&&this._$characterId&&rt.setRemoveTimer(`${this._$loaderInfoId}@${this._$characterId}`),t.instances.delete(this._$instanceId),this._$instanceId=-1,this._$parentId=-1,this._$loaderInfoId=-1,this._$characterId=-1,this._$blendMode="normal",this._$filters=null,this._$visible=!0,this._$maskId=-1,this._$isMask=!1,this._$depth=0,this._$clipDepth=0,this._$scale9Grid=null}_$isUpdated(){return this._$updated}_$isFilterUpdated(t,e=null,i=!1){if(this._$isUpdated())return!0;if(i&&e)for(let t=0;tc||s._$clipDepth>0)&&(t.restore(),l&&t._$leaveClip(),c=0,l=!0),!l)continue;if(s._$clipDepth>0){c=s._$clipDepth,l=s._$shouldClip(o),l&&(t.save(),l=s._$startClip(t,o));continue}const a=s._$maskId>-1&&$.has(s._$maskId)?$.get(s._$maskId):null;if(a){let e;if(a._$updated=!1,this._$instanceId===a._$parentId)e=o;else{e=f;let i=$.get(a._$parentId);for(;i||i._$instanceId!==i._$parentId;)e=H(i._$matrix,e),i=$.get(i._$parentId);const s=le.scaleX,r=P(s,0,0,s,0,0);if(e=H(r,e),N(r),t.isLayer){const i=t.getCurrentPosition();e[4]-=i.xMin,e[5]-=i.yMin}}if(!a._$shouldClip(e))continue;const i=a._$startClip(t,e);if(t.save(),!i){t.restore();continue}}s._$draw(t,o,_),s._$updated=!1,a&&(t.restore(),t._$leaveClip())}if(c&&(t.restore(),l&&t._$leaveClip()),h.isLayer)return this._$postDraw(t,e,s,h);h.matrix!==e&&N(h.matrix),s!==i&&L(s),et(h)}_$getLayerBounds(e){const i=this._$children;if(!i.length)return F(0,0,0,0);const s=h.MAX_VALUE;let n=s,a=-s,o=s,_=-s;const l=le.instances;for(let t=0;t0){const s=this._$getBounds(null),o=q(s,i);B(s);const _=+o.xMax,l=+o.xMin,c=+o.yMax,$=+o.yMin;B(o);const u=r.ceil(r.abs(_-l)),d=r.ceil(r.abs(c-$));if(0>=u||0>=d)return et(n),i!==e&&N(i),null;let g=+r.sqrt(i[0]*i[0]+i[1]*i[1]);if(!h.isInteger(g)){const t=g.toString(),e=t.indexOf("e");-1!==e&&(g=+t.slice(0,e)),g=+g.toFixed(4)}let f=+r.sqrt(i[2]*i[2]+i[3]*i[3]);if(!h.isInteger(f)){const t=f.toString(),e=t.indexOf("e");-1!==e&&(f=+t.slice(0,e)),f=+f.toFixed(4)}n.canApply=this._$canApply(this._$filters);let m=F(0,u,0,d);if(n.canApply&&this._$filters)for(let t=0;tp.width||$-m.yMin>p.height)return B(m),et(n),i!==e&&N(i),null;if(0>l+m.xMax||0>$+m.yMax)return B(m),et(n),i!==e&&N(i),null;let x=i[4]-l,b=i[5]-$;t._$startLayer(F(l,_,$,c));const v=this._$isFilterUpdated(i,this._$filters,n.canApply),T=this._$getLayerBounds(i),A=r.ceil(r.abs(T.xMax-T.xMin)),M=r.ceil(r.abs(T.yMax-T.yMin));B(T);const y=A-m.xMax+m.xMin,E=M-m.yMax+m.yMin;x+=y,b+=E,n.sw=y,n.sh=E,v&&t._$saveAttachment(r.ceil(u+y),r.ceil(d+E),!0),n.isLayer=!0,n.isUpdated=v,n.filters=this._$filters,n.blendMode=a,n.color=k(),n.matrix=P(i[0],i[1],i[2],i[3],x,b),i!==e&&N(i),B(m)}return n}_$postDraw(t,e,i,s){t.drawInstacedArray();const r=U(this._$instanceId,"f"),n=t.frameBuffer,a=s.matrix;let h=0,o=0,_=rt.get(r);if(!_||s.isUpdated){_&&rt.set(r,null),_=n.getTextureFromCurrentAttachment();const i=s.filters;let l=!1;if(i&&i.length){for(let s=0;s{switch(!0){case t[0]>e[0]:return 1;case e[0]>t[0]:return-1;default:return 0}})),this._$stops}linear(t,e,i,s,r="rgb",n="pad"){return this._$type="linear",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$rgb=r,this._$mode=n,this._$stops.length&&(this._$stops.length=0),this}radial(t,e,i,s,r,n,a="rgb",h="pad",o=0){return this._$type="radial",this._$points[0]=t,this._$points[1]=e,this._$points[2]=i,this._$points[3]=s,this._$points[4]=r,this._$points[5]=n,this._$rgb=a,this._$mode=h,this._$focalPointRatio=G(o,-.975,.975,0),this._$stops.length&&(this._$stops.length=0),this}addColorStop(t,e){this._$stops.push(U(t,e))}}class pt{constructor(t,e,i,s){this._$context=t,this._$texture=e,this._$repeat=i,this._$colorTransform=s}get texture(){return this._$texture}get repeat(){return this._$repeat}get colorTransform(){return this._$colorTransform}}class xt{constructor(){this._$fillStyle=w(1,1,1,1),this._$strokeStyle=w(1,1,1,1),this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5}get miterLimit(){return this._$miterLimit}set miterLimit(t){this._$miterLimit=t}get lineWidth(){return this._$lineWidth}set lineWidth(t){this._$lineWidth=t}get lineCap(){return this._$lineCap}set lineCap(t){this._$lineCap=t}get lineJoin(){return this._$lineJoin}set lineJoin(t){this._$lineJoin=t}get fillStyle(){return this._$fillStyle}set fillStyle(t){this._$fillStyle instanceof o&&R(this._$fillStyle),this._$fillStyle=t}get strokeStyle(){return this._$strokeStyle}set strokeStyle(t){this._$strokeStyle instanceof o&&R(this._$strokeStyle),this._$strokeStyle=t}clear(){this._$lineWidth=1,this._$lineCap="round",this._$lineJoin="round",this._$miterLimit=5,this._$clearFill(),this._$clearStroke()}_$clearFill(){if(this._$fillStyle instanceof mt)return this._$fillStyle.dispose(),void(this._$fillStyle=w(1,1,1,1));this._$fillStyle instanceof pt?this._$fillStyle=w(1,1,1,1):this._$fillStyle.fill(1)}_$clearStroke(){if(this._$strokeStyle instanceof mt)return this._$strokeStyle.dispose(),void(this._$strokeStyle=w(1,1,1,1));this._$strokeStyle instanceof pt?this._$strokeStyle=w(1,1,1,1):this._$strokeStyle.fill(1)}}let bt=2048;class vt{constructor(t){t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!0),this._$gl=t,this._$objectPool=[],this._$objectPoolArea=0,this._$activeTexture=-1,this._$boundTextures=[null,null,null],this._$maxWidth=0,this._$maxHeight=0,this._$atlasTextures=[],this._$atlasCacheMap=new Map,this._$positionObjectArray=[],this._$nodeObjectArray=[],this._$atlasNodes=new Map}createTextureAtlas(){const t=this._$gl.createTexture();t.width=bt,t.height=bt,this._$gl.activeTexture(this._$gl.TEXTURE3),this._$gl.bindTexture(this._$gl.TEXTURE_2D,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,this._$gl.NEAREST),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,this._$gl.NEAREST),this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,bt,bt),this._$gl.bindTexture(this._$gl.TEXTURE_2D,null),this._$activeTexture>-1&&this._$gl.activeTexture(this._$activeTexture);const e=this._$atlasTextures.length;this._$atlasNodes.set(e,[]),this._$atlasCacheMap.set(e,[]),this._$atlasTextures.push(t)}getAtlasTexture(t){return this._$atlasTextures[t]}getNode(t,e,i,s){const r=this._$nodeObjectArray.length?this._$nodeObjectArray.pop():{x:0,y:0,w:0,h:0};return r.x=t,r.y=e,r.w=i,r.h=s,r}createCachePosition(t,e){const i=this._$positionObjectArray.length?this._$positionObjectArray.pop():{index:0,x:0,y:0,w:0,h:0};i.x=i.y=0,i.w=t,i.h=e;for(const[s,r]of this._$atlasNodes){if(!r.length)return t>e?(bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,e)),bt-e-1>0&&r.push(this.getNode(0,e+1,bt,bt-e-1))):(bt-e-1>0&&r.push(this.getNode(0,e+1,t,bt-e-1)),bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,bt))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i;const n=r.length;for(let a=0;an.w||e>n.h))return i.index=s,i.x=n.x,i.y=n.y,this._$atlasCacheMap.get(i.index).push(i),n.w!==t||n.h!==e?t>e?(n.h-e-1>0&&r.push(this.getNode(n.x,n.y+e+1,n.w,n.h-e-1)),n.w-t-1>0?(n.x=n.x+t+1,n.w=n.w-t-1,n.h=e):(r.splice(a,1),this._$nodeObjectArray.push(n))):(n.w-t-1>0&&r.push(this.getNode(n.x+t+1,n.y,n.w-t-1,n.h)),n.h-e-1>0?(n.y=n.y+e+1,n.w=t,n.h=n.h-e-1):(r.splice(a,1),this._$nodeObjectArray.push(n))):(r.splice(a,1),this._$nodeObjectArray.push(n)),i}}const s=this._$atlasTextures.length;this.createTextureAtlas();const r=this._$atlasNodes.get(s);return t>e?(bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,e)),bt-e-1>0&&r.push(this.getNode(0,e+1,bt,bt-e-1))):(bt-e-1>0&&r.push(this.getNode(0,e+1,t,bt-e-1)),bt-t-1>0&&r.push(this.getNode(t+1,0,bt-t-1,bt))),i.index=s,this._$atlasCacheMap.get(i.index).push(i),i}releasePosition(t){var e;this._$atlasNodes.has(t.index)&&(null===(e=this._$atlasNodes.get(t.index))||void 0===e||e.unshift(this.getNode(t.x,t.y,t.w,t.h)),this._$positionObjectArray.push(t))}clearCache(){for(const t of this._$atlasCacheMap.values())t.length=0;for(const t of this._$atlasNodes.values())t.length=0}_$createTexture(t,e){const i=this._$gl.createTexture();return i.width=0,i.height=0,i.area=0,i.dirty=!0,i.smoothing=!0,this.bind0(i,!1),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_S,this._$gl.CLAMP_TO_EDGE),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_WRAP_T,this._$gl.CLAMP_TO_EDGE),i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.texStorage2D(this._$gl.TEXTURE_2D,1,this._$gl.RGBA8,t,e),i}_$getTexture(t,e){for(let i=0;ithis._$maxWidth*this._$maxHeight*2)this._$gl.deleteTexture(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPool.length&&this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();this._$objectPoolArea-=t.area,this._$gl.deleteTexture(t)}}bind0(t,e=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,e)}bind01(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,null,null),this._$bindTexture(1,this._$gl.TEXTURE1,e,i),this._$bindTexture(0,this._$gl.TEXTURE0,t,i)}bind012(t,e,i,s=null){this._$bindTexture(2,this._$gl.TEXTURE2,i,s),this._$bindTexture(1,this._$gl.TEXTURE1,e,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}bind02(t,e,i=null){this._$bindTexture(2,this._$gl.TEXTURE2,e,i),this._$bindTexture(1,this._$gl.TEXTURE1,null,null),this._$bindTexture(0,this._$gl.TEXTURE0,t,null)}_$bindTexture(t,e,i=null,s=null){const r=i!==this._$boundTextures[t],n=null!==s&&null!==i&&s!==i.smoothing;if((r||n||e===this._$gl.TEXTURE0)&&e!==this._$activeTexture&&(this._$activeTexture=e,this._$gl.activeTexture(e)),r&&(this._$boundTextures[t]=i,this._$gl.bindTexture(this._$gl.TEXTURE_2D,i)),n){i&&(i.smoothing=!!s);const t=s?this._$gl.LINEAR:this._$gl.NEAREST;this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MIN_FILTER,t),this._$gl.texParameteri(this._$gl.TEXTURE_2D,this._$gl.TEXTURE_MAG_FILTER,t)}}}class Tt{constructor(t){this._$gl=t,this._$objectPool=U(),this._$objectPoolArea=0,this._$maxWidth=0,this._$maxHeight=0}set maxWidth(t){this._$maxWidth=t}set maxHeight(t){this._$maxHeight=t}_$createStencilBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the stencil buffer is null.");return t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getStencilBuffer(t,e){const i=this._$objectPool.length;for(let s=0;s100){const t=this._$objectPool.shift();if(t)return this._$objectPoolArea-=t.area,t}return this._$createStencilBuffer()}create(t,e){const i=this._$getStencilBuffer(t,e);return i.width===t&&i.height===e||(i.width=t,i.height=e,i.area=t*e,i.dirty=!1,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,i),this._$gl.renderbufferStorage(this._$gl.RENDERBUFFER,this._$gl.STENCIL_INDEX8,t,e)),i}release(t){if(t.area>this._$maxWidth*this._$maxHeight*2)this._$gl.deleteRenderbuffer(t);else if(t.dirty=!0,this._$objectPool.push(t),this._$objectPoolArea+=t.area,this._$objectPoolArea>this._$maxWidth*this._$maxHeight*10){const t=this._$objectPool.shift();t&&(this._$objectPoolArea-=t.area,this._$gl.deleteRenderbuffer(t))}}}class At{constructor(t,e){this._$gl=t,this._$samples=e,this._$objectPool=U()}set samples(t){this._$samples=t}_$createColorBuffer(){const t=this._$gl.createRenderbuffer();if(!t)throw new Error("the color buffer is null.");const e=this._$gl.createRenderbuffer();if(!e)throw new Error("the stencil buffer is null.");return t.stencil=e,t.samples=0,t.width=0,t.height=0,t.area=0,t.dirty=!0,t}_$getColorBuffer(t){if(!this._$objectPool.length)return this._$createColorBuffer();const e=this._$bsearch(t);if(e1;){const s=r.floor((i+e)/2);t<=this._$objectPool[s].area?i=s:e=s}return i}}class Mt{constructor(t,e){this._$gl=t,this._$objectPool=[],this._$frameBuffer=t.createFramebuffer(),t.bindFramebuffer(t.READ_FRAMEBUFFER,this._$frameBuffer),this._$frameBufferTexture=t.createFramebuffer(),this._$currentAttachment=null,this._$isBinding=!1,this._$textureManager=new vt(t),this._$stencilBufferPool=new Tt(t),this._$colorBufferPool=new At(t,e),this._$isRenderBinding=!1,this._$colorBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.RGBA8,bt,bt),this._$stencilBuffer=this._$gl.createRenderbuffer(),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.renderbufferStorageMultisample(this._$gl.RENDERBUFFER,e,this._$gl.STENCIL_INDEX8,bt,bt)}bindRenderBuffer(){this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),this._$isRenderBinding||(this._$isRenderBinding=!0,this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,this._$colorBuffer),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,this._$stencilBuffer),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,this._$stencilBuffer))}get currentAttachment(){return this._$currentAttachment}get textureManager(){return this._$textureManager}createCacheAttachment(t,e,i=!1,s=0){const r=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},n=this._$textureManager.create(t,e);return r.width=t,r.height=e,i?(r.color=this._$colorBufferPool.create(t,e,s),r.texture=n,r.msaa=!0,r.stencil=r.color.stencil):(r.color=n,r.texture=n,r.msaa=!1,r.stencil=this._$stencilBufferPool.create(t,e)),r.mask=!1,r.clipLevel=0,r.isActive=!0,r}clearCache(){this._$textureManager.clearCache()}setMaxSize(t,e){this._$stencilBufferPool._$maxWidth=t,this._$stencilBufferPool._$maxHeight=e,this._$textureManager._$maxWidth=t,this._$textureManager._$maxHeight=e}createTextureAttachment(t,e){const i=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!1},s=this._$textureManager.create(t,e);return i.width=t,i.height=e,i.color=s,i.texture=s,i.msaa=!1,i.stencil=null,i.mask=!1,i.clipLevel=0,i.isActive=!0,i}createTextureAttachmentFrom(t){const e=this._$objectPool.pop()||{width:0,height:0,color:null,texture:null,msaa:!1,stencil:null,mask:!1,clipLevel:0,isActive:!0};return e.width=t.width,e.height=t.height,e.color=t,e.texture=t,e.msaa=!1,e.stencil=null,e.mask=!1,e.clipLevel=0,e.isActive=!0,e}releaseAttachment(t=null,e=!1){t&&t.isActive&&(t.msaa?t.color instanceof WebGLRenderbuffer&&this._$colorBufferPool.release(t.color):t.stencil&&this._$stencilBufferPool.release(t.stencil),e&&t.texture&&this._$textureManager.release(t.texture),t.color=null,t.texture=null,t.stencil=null,t.isActive=!1,this._$objectPool.push(t))}bind(t){this._$currentAttachment=t,this._$isBinding||(this._$isBinding=!0,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)),t.msaa?t.color instanceof WebGLRenderbuffer&&(this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.color),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.RENDERBUFFER,t.color)):t.color instanceof WebGLTexture&&(t.color&&this._$textureManager.bind0(t.color),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,t.color,0)),this._$gl.bindRenderbuffer(this._$gl.RENDERBUFFER,t.stencil),this._$gl.framebufferRenderbuffer(this._$gl.FRAMEBUFFER,this._$gl.STENCIL_ATTACHMENT,this._$gl.RENDERBUFFER,t.stencil),this._$isRenderBinding=!1}unbind(){this._$currentAttachment=null,this._$isBinding&&(this._$isBinding=!1,this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,null))}transferToMainTexture(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,null),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBuffer)}createCachePosition(t,e){return this._$textureManager.createCachePosition(t,e)}transferTexture(t){this._$gl.disable(this._$gl.SCISSOR_TEST),this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture);const e=this._$textureManager.getAtlasTexture(t.index);this._$textureManager.bind0(e),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,e,0);const i=r.max(0,t.x-1),s=r.max(0,t.y-1),n=r.min(bt,t.x+t.w+1),a=r.min(bt,t.y+t.h+1);this._$gl.blitFramebuffer(i,s,n,a,i,s,n,a,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer)}getTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");if(!this._$currentAttachment.msaa&&this._$currentAttachment.texture)return this._$currentAttachment.texture;const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$currentAttachment.texture;if(!i)throw new Error("the texture is null.");return i.dirty=!1,this._$gl.bindFramebuffer(this._$gl.DRAW_FRAMEBUFFER,this._$frameBufferTexture),this._$textureManager.bind0(i),this._$gl.framebufferTexture2D(this._$gl.FRAMEBUFFER,this._$gl.COLOR_ATTACHMENT0,this._$gl.TEXTURE_2D,i,0),this._$gl.blitFramebuffer(0,0,t,e,0,0,t,e,this._$gl.COLOR_BUFFER_BIT,this._$gl.NEAREST),this._$gl.bindFramebuffer(this._$gl.FRAMEBUFFER,this._$frameBuffer),i}createTextureFromPixels(t,e,i=null,s=!1,r=!0){return this._$textureManager.create(t,e,i,s,r)}createTextureFromCanvas(t){return this._$textureManager.createFromCanvas(t)}createTextureFromImage(t,e=!1){return this._$textureManager.createFromImage(t,e)}createTextureFromVideo(t,e=!1){return this._$textureManager.createFromVideo(t,e)}createTextureFromCurrentAttachment(){if(!this._$currentAttachment)throw new Error("the current attachment is null.");const t=this._$currentAttachment.width,e=this._$currentAttachment.height,i=this._$textureManager.create(t,e);return this._$textureManager.bind0(i),this._$gl.copyTexSubImage2D(this._$gl.TEXTURE_2D,0,0,0,0,0,t,e),i}releaseTexture(t){this._$textureManager.release(t)}}class yt{constructor(){this._$bezierConverterBuffer=new o(32)}cubicToQuad(t,e,i,s,r,n,a,h){this._$split2Cubic(t,e,i,s,r,n,a,h,0,16),this._$split2Cubic(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0,8),this._$split2Cubic(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16,24),this._$split2Quad(this._$bezierConverterBuffer[0],this._$bezierConverterBuffer[1],this._$bezierConverterBuffer[2],this._$bezierConverterBuffer[3],this._$bezierConverterBuffer[4],this._$bezierConverterBuffer[5],this._$bezierConverterBuffer[6],this._$bezierConverterBuffer[7],0),this._$split2Quad(this._$bezierConverterBuffer[8],this._$bezierConverterBuffer[9],this._$bezierConverterBuffer[10],this._$bezierConverterBuffer[11],this._$bezierConverterBuffer[12],this._$bezierConverterBuffer[13],this._$bezierConverterBuffer[14],this._$bezierConverterBuffer[15],8),this._$split2Quad(this._$bezierConverterBuffer[16],this._$bezierConverterBuffer[17],this._$bezierConverterBuffer[18],this._$bezierConverterBuffer[19],this._$bezierConverterBuffer[20],this._$bezierConverterBuffer[21],this._$bezierConverterBuffer[22],this._$bezierConverterBuffer[23],16),this._$split2Quad(this._$bezierConverterBuffer[24],this._$bezierConverterBuffer[25],this._$bezierConverterBuffer[26],this._$bezierConverterBuffer[27],this._$bezierConverterBuffer[28],this._$bezierConverterBuffer[29],this._$bezierConverterBuffer[30],this._$bezierConverterBuffer[31],24)}_$split2Cubic(t,e,i,s,r,n,a,h,o,_){const l=.125*(t+3*(i+r)+a),c=.125*(e+3*(s+n)+h),$=.125*(a+r-i-t),u=.125*(h+n-s-e);this._$bezierConverterBuffer[o]=t,this._$bezierConverterBuffer[o+1]=e,this._$bezierConverterBuffer[o+2]=.5*(t+i),this._$bezierConverterBuffer[o+3]=.5*(e+s),this._$bezierConverterBuffer[o+4]=l-$,this._$bezierConverterBuffer[o+5]=c-u,this._$bezierConverterBuffer[o+6]=l,this._$bezierConverterBuffer[o+7]=c,this._$bezierConverterBuffer[_]=l,this._$bezierConverterBuffer[_+1]=c,this._$bezierConverterBuffer[_+2]=l+$,this._$bezierConverterBuffer[_+3]=c+u,this._$bezierConverterBuffer[_+4]=.5*(r+a),this._$bezierConverterBuffer[_+5]=.5*(n+h),this._$bezierConverterBuffer[_+6]=a,this._$bezierConverterBuffer[_+7]=h}_$split2Quad(t,e,i,s,r,n,a,h,o){const _=.125*(t+3*(i+r)+a),l=.125*(e+3*(s+n)+h);this._$bezierConverterBuffer[o]=.25*t+.75*i,this._$bezierConverterBuffer[o+1]=.25*e+.75*s,this._$bezierConverterBuffer[o+2]=_,this._$bezierConverterBuffer[o+3]=l,this._$bezierConverterBuffer[o+4]=.75*r+.25*a,this._$bezierConverterBuffer[o+5]=.75*n+.25*h,this._$bezierConverterBuffer[o+6]=a,this._$bezierConverterBuffer[o+7]=h}}class Et{constructor(){this._$currentPath=U(),this._$vertices=U(),this._$bezierConverter=new yt}get vertices(){return this._$pushCurrentPathToVertices(),this._$vertices}begin(){for(this._$currentPath.length=0;this._$vertices.length;)D(this._$vertices.pop())}moveTo(t,e){this._$currentPath.length?this._$equalsToLastPoint(t,e)||(this._$pushCurrentPathToVertices(),this._$pushPointToCurrentPath(t,e,!1)):this._$pushPointToCurrentPath(t,e,!1)}lineTo(t,e){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}quadTo(t,e,i,s){this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(i,s)||(this._$pushPointToCurrentPath(t,e,!0),this._$pushPointToCurrentPath(i,s,!1))}cubicTo(t,e,i,s,r,n){if(this._$currentPath.length||this.moveTo(0,0),this._$equalsToLastPoint(r,n))return;const a=+this._$currentPath[this._$currentPath.length-3],h=+this._$currentPath[this._$currentPath.length-2];this._$bezierConverter.cubicToQuad(a,h,t,e,i,s,r,n);const o=this._$bezierConverter._$bezierConverterBuffer;for(let t=0;t<32;)this.quadTo(o[t++],o[t++],o[t++],o[t++])}drawCircle(t,e,i){const s=i,r=.5522847498307936*i;this.cubicTo(t+s,e+r,t+r,e+s,t,e+s),this.cubicTo(t-r,e+s,t-s,e+r,t-s,e),this.cubicTo(t-s,e-r,t-r,e-s,t,e-s),this.cubicTo(t+r,e-s,t+s,e-r,t+s,e)}close(){if(this._$currentPath.length<=6)return;const t=+this._$currentPath[0],e=+this._$currentPath[1];this._$equalsToLastPoint(t,e)||this._$pushPointToCurrentPath(t,e,!1)}_$equalsToLastPoint(t,e){const i=+this._$currentPath[this._$currentPath.length-3],s=+this._$currentPath[this._$currentPath.length-2];return t===i&&e===s}_$pushPointToCurrentPath(t,e,i){this._$currentPath.push(t,e,i)}_$pushCurrentPathToVertices(){this._$currentPath.length<4?this._$currentPath.length=0:(this._$vertices.push(this._$currentPath),this._$currentPath=U())}createRectVertices(t,e,i,s){return U(U(t,e,!1,t+i,e,!1,t+i,e+s,!1,t,e+s,!1))}}class Ct{constructor(){this.enabled=!1,this.parentMatrixA=1,this.parentMatrixB=0,this.parentMatrixC=0,this.parentMatrixD=0,this.parentMatrixE=1,this.parentMatrixF=0,this.parentMatrixG=0,this.parentMatrixH=0,this.parentMatrixI=1,this.ancestorMatrixA=1,this.ancestorMatrixB=0,this.ancestorMatrixC=0,this.ancestorMatrixD=0,this.ancestorMatrixE=1,this.ancestorMatrixF=0,this.ancestorMatrixG=0,this.ancestorMatrixH=0,this.ancestorMatrixI=1,this.parentViewportX=0,this.parentViewportY=0,this.parentViewportW=0,this.parentViewportH=0,this.minXST=1e-5,this.minYST=1e-5,this.minXPQ=1e-5,this.minYPQ=1e-5,this.maxXST=.99999,this.maxYST=.99999,this.maxXPQ=.99999,this.maxYPQ=.99999}enable(t,e,i,s,n,a,h,o,_,l,c,$,u,d,g,f,m,p,x){const b=n.xMax-n.xMin,v=n.yMax-n.yMin,T=a.w,A=a.h,M=r.abs(r.ceil(b*h)),y=r.abs(r.ceil(v*h)),E=T>0?(a.x-n.xMin)/b:1e-5,C=A>0?(a.y-n.yMin)/v:1e-5,S=T>0?(a.x+a.w-n.xMin)/b:.99999,F=A>0?(a.y+a.h-n.yMin)/v:.99999;let B=M*E/i,w=y*C/s,R=(i-M*(1-S))/i,I=(s-y*(1-F))/s;if(B>=R){const t=E/(E+(1-S));B=r.max(t-1e-5,0),R=r.min(t+1e-5,1)}if(w>=I){const t=C/(C+(1-F));w=r.max(t-1e-5,0),I=r.min(t+1e-5,1)}this.enabled=!0,this.parentMatrixA=o,this.parentMatrixB=_,this.parentMatrixD=l,this.parentMatrixE=c,this.parentMatrixG=$,this.parentMatrixH=u,this.ancestorMatrixA=d,this.ancestorMatrixB=g,this.ancestorMatrixD=f,this.ancestorMatrixE=m,this.ancestorMatrixG=p,this.ancestorMatrixH=x,this.parentViewportX=t,this.parentViewportY=e,this.parentViewportW=i,this.parentViewportH=s,this.minXST=E,this.minYST=C,this.minXPQ=B,this.minYPQ=w,this.maxXST=S,this.maxYST=F,this.maxXPQ=R,this.maxYPQ=I}disable(){this.enabled=!1}}class St{constructor(t,e){this._$gl=t,this._$array=[],this._$map=V();const i=this._$gl.getProgramParameter(e,this._$gl.ACTIVE_UNIFORMS);for(let t=0;t0&&(t.assign--,t.method(t.array)))}}}class Ft{constructor(){this._$attributes=[],this._$count=0}get attributes(){return this._$attributes}get count(){return this._$count}set count(t){this._$count=t}clear(){this._$attributes.length=0,this._$count=0}}class Bt{constructor(t,e,i,s){this._$gl=t,this._$context=e,this._$program=this._$createProgram(i,s),this._$uniform=new St(t,this._$program),this._$instance=null}get instance(){return this._$instance||(this._$instance=new Ft),this._$instance}get uniform(){return this._$uniform}_$createProgram(t,i){const s=this._$gl.createProgram();s.id=e++;const r=this._$gl.createShader(this._$gl.VERTEX_SHADER);this._$gl.shaderSource(r,t),this._$gl.compileShader(r);const n=this._$gl.createShader(this._$gl.FRAGMENT_SHADER);return this._$gl.shaderSource(n,i),this._$gl.compileShader(n),this._$gl.attachShader(s,r),this._$gl.attachShader(s,n),this._$gl.linkProgram(s),this._$gl.detachShader(s,r),this._$gl.detachShader(s,n),this._$gl.deleteShader(r),this._$gl.deleteShader(n),s}_$attachProgram(){const t=this._$context.shaderList;t.currentProgramId!==this._$program.id&&(t.currentProgramId=this._$program.id,this._$gl.useProgram(this._$program))}drawArraysInstanced(t){this._$attachProgram(),this._$context.vao.bindInstnceArray(t),this._$gl.drawArraysInstanced(this._$gl.TRIANGLE_STRIP,0,4,t.count)}_$drawImage(){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindCommonVertexArray(),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$drawGradient(t,e){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bindGradientVertexArray(t,e),this._$gl.drawArrays(this._$gl.TRIANGLE_STRIP,0,4)}_$stroke(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawElements(this._$gl.TRIANGLES,t.indexCount,this._$gl.UNSIGNED_SHORT,0)}_$fill(t){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t);const e=t.indexRanges,i=e[e.length-1];this._$gl.drawArrays(this._$gl.TRIANGLES,0,i.first+i.count)}_$containerClip(t,e,i){this._$attachProgram(),this._$context.blend.reset(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.TRIANGLES,e,i)}_$drawPoints(t,e,i){this._$attachProgram(),this._$uniform.bindUniforms(),this._$context.vao.bind(t),this._$gl.drawArrays(this._$gl.POINTS,e,i)}}class wt{static FUNCTION_GRID_OFF(){return"\\n\\nvec2 applyMatrix(in vec2 vertex) {\\n mat3 matrix = mat3(\\n u_highp[0].xyz,\\n u_highp[1].xyz,\\n u_highp[2].xyz\\n );\\n\\n vec2 position = (matrix * vec3(vertex, 1.0)).xy;\\n\\n return position;\\n}\\n\\n"}static FUNCTION_GRID_ON(t){return`\\n\\nvec2 applyMatrix(in vec2 vertex) {\\n mat3 parent_matrix = mat3(\\n u_highp[${t}].xyz,\\n u_highp[${t+1}].xyz,\\n u_highp[${t+2}].xyz\\n );\\n mat3 ancestor_matrix = mat3(\\n u_highp[${t+3}].xyz,\\n u_highp[${t+4}].xyz,\\n u_highp[${t+5}].xyz\\n );\\n vec2 parent_offset = vec2(u_highp[${t+2}].w, u_highp[${t+3}].w);\\n vec2 parent_size = vec2(u_highp[${t+4}].w, u_highp[${t+5}].w);\\n vec4 grid_min = u_highp[${t+6}];\\n vec4 grid_max = u_highp[${t+7}];\\n\\n vec2 position = (parent_matrix * vec3(vertex, 1.0)).xy;\\n position = (position - parent_offset) / parent_size;\\n\\n vec4 ga = grid_min;\\n vec4 gb = grid_max - grid_min;\\n vec4 gc = vec4(1.0) - grid_max;\\n\\n vec2 pa = position;\\n vec2 pb = position - grid_min.st;\\n vec2 pc = position - grid_max.st;\\n\\n position = (ga.pq / ga.st) * min(pa, ga.st)\\n + (gb.pq / gb.st) * clamp(pb, vec2(0.0), gb.st)\\n + (gc.pq / gc.st) * max(vec2(0.0), pc);\\n\\n position = position * parent_size + parent_offset;\\n position = (ancestor_matrix * vec3(position, 1.0)).xy;\\n\\n return position;\\n}\\n\\n`}}class Rt{static TEMPLATE(t,e,i,s){const r=e-1,n=i?this.VARYING_UV_ON():"",a=i?this.STATEMENT_UV_ON():"";return`#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\nlayout (location = 1) in vec2 a_option1;\\nlayout (location = 2) in vec2 a_option2;\\nlayout (location = 3) in float a_type;\\n\\nuniform vec4 u_highp[${t}];\\n\\n${n}\\n\\n${s?wt.FUNCTION_GRID_ON(i?5:0):wt.FUNCTION_GRID_OFF()}\\n\\nfloat crossVec2(in vec2 v1, in vec2 v2) {\\n return v1.x * v2.y - v2.x * v1.y;\\n}\\n\\nvec2 perpendicularVec2(in vec2 v1) {\\n float face = u_highp[${r}][1];\\n\\n return face * vec2(v1.y, -v1.x);\\n}\\n\\nvec2 calculateNormal(in vec2 direction) {\\n vec2 normalized = normalize(direction);\\n return perpendicularVec2(normalized);\\n}\\n\\nvec2 calculateIntersection(in vec2 v1, in vec2 v2, in vec2 o1, in vec2 o2) {\\n float t = crossVec2(o2 - o1, v2) / crossVec2(v1, v2);\\n return (o1 + t * v1);\\n}\\n\\nvec2 calculateAnchor(in vec2 position, in float convex, out vec2 v1, out vec2 v2, out vec2 o1, out vec2 o2) {\\n float miter_limit = u_highp[${r}][2];\\n\\n vec2 a = applyMatrix(a_option1);\\n vec2 b = applyMatrix(a_option2);\\n\\n v1 = convex * (position - a);\\n v2 = convex * (b - position);\\n o1 = calculateNormal(v1) + a;\\n o2 = calculateNormal(v2) + position;\\n\\n vec2 anchor = calculateIntersection(v1, v2, o1, o2) - position;\\n return normalize(anchor) * min(length(anchor), miter_limit);\\n}\\n\\nvoid main() {\\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\\n float half_width = u_highp[${r}][0];\\n\\n vec2 position = applyMatrix(a_vertex);\\n vec2 offset = vec2(0.0);\\n vec2 v1, v2, o1, o2;\\n\\n if (a_type == 1.0 || a_type == 2.0) { // 線分\\n offset = calculateNormal(a_option2 * (applyMatrix(a_option1) - position));\\n } else if (a_type == 10.0) { // スクエア線端\\n offset = normalize(position - applyMatrix(a_option1));\\n offset += a_option2 * perpendicularVec2(offset);\\n } else if (a_type == 21.0) { // マイター結合(線分Bの凸側)\\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\\n } else if (a_type == 22.0) { // マイター結合(線分Aの凸側)\\n offset = calculateAnchor(position, 1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\\n } else if (a_type == 23.0) { // マイター結合(線分Aの凹側)\\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v1, perpendicularVec2(offset), o1, position + offset) - position;\\n } else if (a_type == 24.0) { // マイター結合(線分Bの凹側)\\n offset = calculateAnchor(position, -1.0, v1, v2, o1, o2);\\n offset = calculateIntersection(v2, perpendicularVec2(offset), o2, position + offset) - position;\\n } else if (a_type >= 30.0) { // ラウンド結合\\n float face = u_highp[${r}][1];\\n float rad = face * (a_type - 30.0) * 0.3488888889; /* 0.3488888889 = PI / 9.0 */\\n offset = mat2(cos(rad), sin(rad), -sin(rad), cos(rad)) * vec2(1.0, 0.0);\\n }\\n \\n offset *= half_width;\\n position += offset;\\n ${a}\\n\\n position /= viewport;\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n`}static VARYING_UV_ON(){return"\\nout vec2 v_uv;\\n"}static STATEMENT_UV_ON(){return"\\n mat3 uv_matrix = mat3(\\n u_highp[0].xyz,\\n u_highp[1].xyz,\\n u_highp[2].xyz\\n );\\n mat3 inverse_matrix = mat3(\\n u_highp[3].xyz,\\n u_highp[4].xyz,\\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\\n );\\n\\n v_uv = (uv_matrix * vec3(a_vertex, 1.0)).xy;\\n v_uv += offset;\\n v_uv = (inverse_matrix * vec3(v_uv, 1.0)).xy;\\n"}}class It{static TEMPLATE(t,e,i,s){const r=i?this.ATTRIBUTE_BEZIER_ON():"",n=i?this.VARYING_BEZIER_ON():e?this.VARYING_UV_ON():"",a=i?this.STATEMENT_BEZIER_ON():e?this.STATEMENT_UV_ON():"";return`#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n${r}\\n\\nuniform vec4 u_highp[${t}];\\n\\n${n}\\n\\n${s?wt.FUNCTION_GRID_ON(e?5:0):wt.FUNCTION_GRID_OFF()}\\n\\nvoid main() {\\n vec2 viewport = vec2(u_highp[0].w, u_highp[1].w);\\n\\n ${a}\\n\\n vec2 pos = applyMatrix(a_vertex) / viewport;\\n pos = pos * 2.0 - 1.0;\\n gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0);\\n}\\n\\n`}static ATTRIBUTE_BEZIER_ON(){return"\\nlayout (location = 1) in vec2 a_bezier;\\n"}static VARYING_UV_ON(){return"\\nout vec2 v_uv;\\n"}static VARYING_BEZIER_ON(){return"\\nout vec2 v_bezier;\\n"}static STATEMENT_UV_ON(){return"\\n mat3 uv_matrix = mat3(\\n u_highp[0].xyz,\\n u_highp[1].xyz,\\n u_highp[2].xyz\\n );\\n mat3 inverse_matrix = mat3(\\n u_highp[3].xyz,\\n u_highp[4].xyz,\\n vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w)\\n );\\n\\n v_uv = (inverse_matrix * uv_matrix * vec3(a_vertex, 1.0)).xy;\\n"}static STATEMENT_BEZIER_ON(){return"\\n v_bezier = a_bezier;\\n"}}class Pt{static FUNCTION_IS_INSIDE(){return"\\n\\nfloat isInside(in vec2 uv) {\\n return step(4.0, dot(step(vec4(0.0, uv.x, 0.0, uv.y), vec4(uv.x, 1.0, uv.y, 1.0)), vec4(1.0)));\\n}\\n\\n"}static STATEMENT_INSTANCED_COLOR_TRANSFORM_ON(){return"\\n src.rgb /= max(0.0001, src.a);\\n src = clamp(src * mul + add, 0.0, 1.0);\\n src.rgb *= src.a;\\n"}static STATEMENT_COLOR_TRANSFORM_ON(t){return`\\n vec4 mul = u_mediump[${t}];\\n vec4 add = u_mediump[${t+1}];\\n${Pt.STATEMENT_INSTANCED_COLOR_TRANSFORM_ON()}\\n`}}class Nt{static SOLID_COLOR(){return"#version 300 es\\nprecision mediump float;\\n\\nuniform vec4 u_mediump;\\n\\nout vec4 o_color;\\n\\nvoid main() {\\n o_color = vec4(u_mediump.rgb * u_mediump.a, u_mediump.a);\\n}\\n\\n"}static BITMAP_CLIPPED(){return`#version 300 es\\nprecision mediump float;\\n\\nuniform sampler2D u_texture;\\nuniform vec4 u_mediump[3];\\n\\nin vec2 v_uv;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 uv = vec2(v_uv.x, u_mediump[0].y - v_uv.y) / u_mediump[0].xy;\\n\\n vec4 src = texture(u_texture, uv);\\n ${Pt.STATEMENT_COLOR_TRANSFORM_ON(1)}\\n o_color = src;\\n}`}static BITMAP_PATTERN(){return`#version 300 es\\nprecision mediump float;\\n\\nuniform sampler2D u_texture;\\nuniform vec4 u_mediump[3];\\n\\nin vec2 v_uv;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 uv = fract(vec2(v_uv.x, -v_uv.y) / u_mediump[0].xy);\\n \\n vec4 src = texture(u_texture, uv);\\n ${Pt.STATEMENT_COLOR_TRANSFORM_ON(1)}\\n o_color = src;\\n}`}static MASK(){return"#version 300 es\\nprecision mediump float;\\n\\nin vec2 v_bezier;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 px = dFdx(v_bezier);\\n vec2 py = dFdy(v_bezier);\\n\\n vec2 f = (2.0 * v_bezier.x) * vec2(px.x, py.x) - vec2(px.y, py.y);\\n float alpha = 0.5 - (v_bezier.x * v_bezier.x - v_bezier.y) / length(f);\\n\\n if (alpha > 0.0) {\\n o_color = vec4(min(alpha, 1.0));\\n } else {\\n discard;\\n } \\n}\\n\\n"}}class kt{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=V()}getSolidColorShapeShader(t,e){const i=`s${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?Rt.TEMPLATE(s,r,!1,e):It.TEMPLATE(s,!1,!1,e);const a=new Bt(this._$gl,this._$context,n,Nt.SOLID_COLOR());return this._$collection.set(i,a),a}getBitmapShapeShader(t,e,i){const s=`b${t?"y":"n"}${e?"y":"n"}${i?"y":"n"}`;if(this._$collection.has(s)){const t=this._$collection.get(s);if(t)return t}const r=(i?13:5)+(t?1:0),n=r;let a;a=t?Rt.TEMPLATE(r,n,!0,i):It.TEMPLATE(r,!0,!1,i);const h=e?Nt.BITMAP_PATTERN():Nt.BITMAP_CLIPPED(),o=new Bt(this._$gl,this._$context,a,h);return this._$collection.set(s,o),o}getMaskShapeShader(t,e){const i=`m${t?"y":"n"}${e?"y":"n"}`;if(this._$collection.has(i)){const t=this._$collection.get(i);if(t)return t}const s=(e?8:3)+(t?1:0),r=s;let n;n=t?Rt.TEMPLATE(s,r,!1,e):It.TEMPLATE(s,!1,!0,e);const a=new Bt(this._$gl,this._$context,n,Nt.MASK());return this._$collection.set(i,a),a}setSolidColorShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c){const $=t.highp;let u;n?($[0]=_.parentMatrixA,$[1]=_.parentMatrixB,$[2]=_.parentMatrixC,$[4]=_.parentMatrixD,$[5]=_.parentMatrixE,$[6]=_.parentMatrixF,$[8]=_.parentMatrixG,$[9]=_.parentMatrixH,$[10]=_.parentMatrixI,$[12]=_.ancestorMatrixA,$[13]=_.ancestorMatrixB,$[14]=_.ancestorMatrixC,$[16]=_.ancestorMatrixD,$[17]=_.ancestorMatrixE,$[18]=_.ancestorMatrixF,$[20]=_.ancestorMatrixG,$[21]=_.ancestorMatrixH,$[22]=_.ancestorMatrixI,$[3]=h,$[7]=o,$[11]=_.parentViewportX,$[15]=_.parentViewportY,$[19]=_.parentViewportW,$[23]=_.parentViewportH,$[24]=_.minXST,$[25]=_.minYST,$[26]=_.minXPQ,$[27]=_.minYPQ,$[28]=_.maxXST,$[29]=_.maxYST,$[30]=_.maxXPQ,$[31]=_.maxYPQ,u=32):($[0]=a[0],$[1]=a[1],$[2]=a[2],$[4]=a[3],$[5]=a[4],$[6]=a[5],$[8]=a[6],$[9]=a[7],$[10]=a[8],$[3]=h,$[7]=o,u=12),e&&($[u]=i,$[u+1]=s,$[u+2]=r);const d=t.mediump;d[0]=l[0],d[1]=l[1],d[2]=l[2],d[3]=l[3]*c}setBitmapShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c,$,u,d,g,f,m,p,x,b){const v=t.highp;let T;v[0]=a[0],v[1]=a[1],v[2]=a[2],v[4]=a[3],v[5]=a[4],v[6]=a[5],v[8]=a[6],v[9]=a[7],v[10]=a[8],v[12]=h[0],v[13]=h[1],v[14]=h[2],v[16]=h[3],v[17]=h[4],v[18]=h[5],v[11]=h[6],v[15]=h[7],v[19]=h[8],v[3]=o,v[7]=_,T=20,n&&(v[T]=l.parentMatrixA,v[T+1]=l.parentMatrixB,v[T+2]=l.parentMatrixC,v[T+4]=l.parentMatrixD,v[T+5]=l.parentMatrixE,v[T+6]=l.parentMatrixF,v[T+8]=l.parentMatrixG,v[T+9]=l.parentMatrixH,v[T+10]=l.parentMatrixI,v[T+12]=l.ancestorMatrixA,v[T+13]=l.ancestorMatrixB,v[T+14]=l.ancestorMatrixC,v[T+16]=l.ancestorMatrixD,v[T+17]=l.ancestorMatrixE,v[T+18]=l.ancestorMatrixF,v[T+20]=l.ancestorMatrixG,v[T+21]=l.ancestorMatrixH,v[T+22]=l.ancestorMatrixI,v[T+11]=l.parentViewportX,v[T+15]=l.parentViewportY,v[T+19]=l.parentViewportW,v[T+23]=l.parentViewportH,v[T+24]=l.minXST,v[T+25]=l.minYST,v[T+26]=l.minXPQ,v[T+27]=l.minYPQ,v[T+28]=l.maxXST,v[T+29]=l.maxYST,v[T+30]=l.maxXPQ,v[T+31]=l.maxYPQ,T=52),e&&(v[T]=i,v[T+1]=s,v[T+2]=r);const A=t.mediump;A[0]=c,A[1]=$,A[4]=u,A[5]=d,A[6]=g,A[7]=f,A[8]=m,A[9]=p,A[10]=x,A[11]=b}setMaskShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c,$,u=null){const d=t.highp;e&&u?(d[0]=u.parentMatrixA,d[1]=u.parentMatrixB,d[2]=u.parentMatrixC,d[4]=u.parentMatrixD,d[5]=u.parentMatrixE,d[6]=u.parentMatrixF,d[8]=u.parentMatrixG,d[9]=u.parentMatrixH,d[10]=u.parentMatrixI,d[12]=u.ancestorMatrixA,d[13]=u.ancestorMatrixB,d[14]=u.ancestorMatrixC,d[16]=u.ancestorMatrixD,d[17]=u.ancestorMatrixE,d[18]=u.ancestorMatrixF,d[20]=u.ancestorMatrixG,d[21]=u.ancestorMatrixH,d[22]=u.ancestorMatrixI,d[3]=c,d[7]=$,d[11]=u.parentViewportX,d[15]=u.parentViewportY,d[19]=u.parentViewportW,d[23]=u.parentViewportH,d[24]=u.minXST,d[25]=u.minYST,d[26]=u.minXPQ,d[27]=u.minYPQ,d[28]=u.maxXST,d[29]=u.maxYST,d[30]=u.maxXPQ,d[31]=u.maxYPQ):(d[0]=i,d[1]=s,d[2]=r,d[4]=n,d[5]=a,d[6]=h,d[8]=o,d[9]=_,d[10]=l,d[3]=c,d[7]=$)}setMaskShapeUniformIdentity(t,e,i){const s=t.highp;s[0]=1,s[1]=0,s[2]=0,s[4]=0,s[5]=1,s[6]=0,s[8]=0,s[9]=0,s[10]=1,s[3]=e,s[7]=i}}class Lt{static TEMPLATE(t,e,i,s,r){const n=i?this.STATEMENT_GRADIENT_TYPE_RADIAL(e,s):this.STATEMENT_GRADIENT_TYPE_LINEAR(e);let a;switch(r){case"reflect":a="1.0 - abs(fract(t * 0.5) * 2.0 - 1.0)";break;case"repeat":a="fract(t)";break;default:a="clamp(t, 0.0, 1.0)"}return`#version 300 es\\nprecision highp float;\\n\\nuniform sampler2D u_texture;\\nuniform vec4 u_highp[${t}];\\n\\nin vec2 v_uv;\\nout vec4 o_color;\\n\\nvoid main() {\\n vec2 p = v_uv;\\n ${n}\\n t = ${a};\\n o_color = texture(u_texture, vec2(t, 0.5));\\n}\\n\\n`}static STATEMENT_GRADIENT_TYPE_LINEAR(t){return`\\n vec2 a = u_highp[${t}].xy;\\n vec2 b = u_highp[${t}].zw;\\n\\n vec2 ab = b - a;\\n vec2 ap = p - a;\\n\\n float t = dot(ab, ap) / dot(ab, ab);\\n`}static STATEMENT_GRADIENT_TYPE_RADIAL(t,e){return`\\n float radius = u_highp[${t}][0];\\n\\n vec2 coord = p / radius;\\n ${e?this.STATEMENT_FOCAL_POINT_ON(t):this.STATEMENT_FOCAL_POINT_OFF()}\\n`}static STATEMENT_FOCAL_POINT_OFF(){return"\\n float t = length(coord);\\n"}static STATEMENT_FOCAL_POINT_ON(t){return`\\n vec2 focal = vec2(u_highp[${t}][1], 0.0);\\n\\n vec2 dir = normalize(coord - focal);\\n\\n float a = dot(dir, dir);\\n float b = 2.0 * dot(dir, focal);\\n float c = dot(focal, focal) - 1.0;\\n float x = (-b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a);\\n\\n float t = distance(focal, coord) / distance(focal, focal + dir * x);\\n`}}class Ot{constructor(t,e){this._$context=t,this._$gl=e,this._$collection=V()}getGradientShapeShader(t,e,i,s,r){const n=this.createCollectionKey(t,e,i,s,r);if(this._$collection.has(n)){const t=this._$collection.get(n);if(t)return t}const a=(e?13:5)+(t?1:0)+1,h=a-1;let o;o=t?Rt.TEMPLATE(a,h,!0,e):It.TEMPLATE(a,!0,!1,e);const _=new Bt(this._$gl,this._$context,o,Lt.TEMPLATE(a,h,i,s,r));return this._$collection.set(n,_),_}createCollectionKey(t,e,i,s,r){const n=t?"y":"n",a=e?"y":"n",h=i?"y":"n",o=i&&s?"y":"n";let _=0;switch(r){case"reflect":_=1;break;case"repeat":_=2}return`${n}${a}${h}${o}${_}`}setGradientShapeUniform(t,e,i,s,r,n,a,h,o,_,l,c,$,u){const d=t.highp;d[0]=a[0],d[1]=a[1],d[2]=a[2],d[4]=a[3],d[5]=a[4],d[6]=a[5],d[8]=a[6],d[9]=a[7],d[10]=a[8],d[12]=h[0],d[13]=h[1],d[14]=h[2],d[16]=h[3],d[17]=h[4],d[18]=h[5],d[11]=h[6],d[15]=h[7],d[19]=h[8],d[3]=o,d[7]=_;let g=20;n&&(d[g]=l.parentMatrixA,d[g+1]=l.parentMatrixB,d[g+2]=l.parentMatrixC,d[g+4]=l.parentMatrixD,d[g+5]=l.parentMatrixE,d[g+6]=l.parentMatrixF,d[g+8]=l.parentMatrixG,d[g+9]=l.parentMatrixH,d[g+10]=l.parentMatrixI,d[g+12]=l.ancestorMatrixA,d[g+13]=l.ancestorMatrixB,d[g+14]=l.ancestorMatrixC,d[g+16]=l.ancestorMatrixD,d[g+17]=l.ancestorMatrixE,d[g+18]=l.ancestorMatrixF,d[g+20]=l.ancestorMatrixG,d[g+21]=l.ancestorMatrixH,d[g+22]=l.ancestorMatrixI,d[g+11]=l.parentViewportX,d[g+15]=l.parentViewportY,d[g+19]=l.parentViewportW,d[g+23]=l.parentViewportH,d[g+24]=l.minXST,d[g+25]=l.minYST,d[g+26]=l.minXPQ,d[g+27]=l.minYPQ,d[g+28]=l.maxXST,d[g+29]=l.maxYST,d[g+30]=l.maxXPQ,d[g+31]=l.maxYPQ,g=52),e&&(d[g]=i,d[g+1]=s,d[g+2]=r,g+=4),c?(d[g]=$[5],d[g+1]=u):(d[g]=$[0],d[g+1]=$[1],d[g+2]=$[2],d[g+3]=$[3])}}class Ut{static TEXTURE(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nout vec2 v_coord;\\n\\nvoid main() {\\n v_coord = a_vertex;\\n\\n vec2 position = a_vertex * 2.0 - 1.0;\\n gl_Position = vec4(position, 0.0, 1.0);\\n}\\n\\n"}static BLEND(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nuniform vec4 u_highp[4];\\n\\nout vec2 v_coord;\\n\\nvoid main() {\\n v_coord = a_vertex;\\n\\n vec2 offset = u_highp[0].xy;\\n vec2 size = u_highp[0].zw;\\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position = position * size + offset;\\n position = (matrix * vec3(position, 1.0)).xy;\\n position /= viewport;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}static INSTANCE_BLEND(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nuniform vec4 u_highp[5];\\n\\nout vec2 v_src_coord;\\nout vec2 v_dst_coord;\\n\\nvoid main() {\\n vec4 rect = vec4(u_highp[0].x, u_highp[0].y, u_highp[0].z, u_highp[0].w);\\n vec2 size = vec2(u_highp[4].x, u_highp[4].y);\\n mat3 matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\\n\\n v_src_coord = a_vertex * rect.zw + rect.xy;\\n v_dst_coord = a_vertex;\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position = position * size;\\n position = (matrix * vec3(position, 1.0)).xy;\\n position /= viewport;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}static INSTANCE(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\nlayout (location = 1) in vec4 a_rect;\\nlayout (location = 2) in vec4 a_size;\\nlayout (location = 3) in vec2 a_offset;\\nlayout (location = 4) in vec4 a_matrix;\\nlayout (location = 5) in vec4 a_mul;\\nlayout (location = 6) in vec4 a_add;\\n\\nout vec2 v_coord;\\nout vec4 mul;\\nout vec4 add;\\n\\nvoid main() {\\n v_coord = a_vertex * a_rect.zw + a_rect.xy;\\n mul = a_mul;\\n add = a_add;\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position = position * a_size.xy;\\n mat3 matrix = mat3(a_matrix.x, a_matrix.y, 0.0, a_matrix.z, a_matrix.w, 0.0, a_offset.x, a_offset.y, 1.0);\\n position = (matrix * vec3(position, 1.0)).xy;\\n position /= a_size.zw;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}static BLEND_CLIP(){return"#version 300 es\\n\\nlayout (location = 0) in vec2 a_vertex;\\n\\nuniform vec4 u_highp[4];\\n\\nout vec2 v_coord;\\n\\nvoid main() {\\n v_coord = a_vertex;\\n\\n vec2 offset = u_highp[0].xy;\\n vec2 size = u_highp[0].zw;\\n mat3 inv_matrix = mat3(u_highp[1].xyz, u_highp[2].xyz, u_highp[3].xyz);\\n vec2 viewport = vec2(u_highp[1].w, u_highp[2].w);\\n\\n vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y);\\n position *= viewport;\\n position = (inv_matrix * vec3(position, 1.0)).xy;\\n position = (position - offset) / size;\\n\\n position = position * 2.0 - 1.0;\\n gl_Position = vec4(position.x, -position.y, 0.0, 1.0);\\n}\\n\\n"}}class Dt{static TEMPLATE(t,e,i){let s="";for(let t=1;t>16)/255,h[a++]=(e>>8&255)/255,h[a++]=(255&e)/255,h[a++]=s[t]}for(let t=r;tthis._$vertexBufferData.length){const t=new o(2*this._$vertexBufferData.length);t.set(this._$vertexBufferData),this._$vertexBufferData=t}}static _$expandIndexBufferIfNeeded(t){if(this._$indexBufferPos+t>this._$indexBufferData.length){const t=new l(2*this._$indexBufferData.length);t.set(this._$indexBufferData),this._$indexBufferData=t}}static _$generateLineSegment(t){const e=t.length-5;for(let i=0;it*s-i*e;class ee{constructor(t){this._$gl=t,this._$fillVertexArrayPool=[],this._$strokeVertexArrayPool=[],this._$boundVertexArray=null,this._$fillAttrib_vertex=0,this._$fillAttrib_bezier=1,this._$strokeAttrib_vertex=0,this._$strokeAttrib_option1=1,this._$strokeAttrib_option2=2,this._$strokeAttrib_type=3,this._$vertexBufferData=new Float32Array([0,0,0,1,1,0,1,1]),this._$attributeVertexBuffer=t.createBuffer(),this._$attributeBuffer=new Float32Array(22),this._$instanceVertexArray=this._$getCommonVertexArray(),this._$commonVertexArray=this._$getVertexArray(0,1)}_$getCommonVertexArray(){const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1]),this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,this._$attributeVertexBuffer),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(1,4,this._$gl.FLOAT,!1,88,0),this._$gl.vertexAttribDivisor(1,1),this._$gl.enableVertexAttribArray(2),this._$gl.vertexAttribPointer(2,4,this._$gl.FLOAT,!1,88,16),this._$gl.vertexAttribDivisor(2,1),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(3,2,this._$gl.FLOAT,!1,88,32),this._$gl.vertexAttribDivisor(3,1),this._$gl.enableVertexAttribArray(4),this._$gl.vertexAttribPointer(4,4,this._$gl.FLOAT,!1,88,40),this._$gl.vertexAttribDivisor(4,1),this._$gl.enableVertexAttribArray(5),this._$gl.vertexAttribPointer(5,4,this._$gl.FLOAT,!1,88,56),this._$gl.vertexAttribDivisor(5,1),this._$gl.enableVertexAttribArray(6),this._$gl.vertexAttribPointer(6,4,this._$gl.FLOAT,!1,88,72),this._$gl.vertexAttribDivisor(6,1),t}_$getVertexArray(t,e){const i=this._$gl.createVertexArray();this.bind(i);const s=this._$gl.createBuffer();return this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s),this._$vertexBufferData[0]=t,this._$vertexBufferData[2]=t,this._$vertexBufferData[4]=e,this._$vertexBufferData[6]=e,this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$vertexBufferData,this._$gl.STATIC_DRAW),this._$gl.enableVertexAttribArray(0),this._$gl.vertexAttribPointer(0,2,this._$gl.FLOAT,!1,0,0),i}_$getFillVertexArray(){if(this._$fillVertexArrayPool.length){const t=this._$fillVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();return t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.vertexAttribPointer(this._$fillAttrib_vertex,2,this._$gl.FLOAT,!1,16,0),this._$gl.vertexAttribPointer(this._$fillAttrib_bezier,2,this._$gl.FLOAT,!1,16,8),t}_$getStrokeVertexArray(){if(this._$strokeVertexArrayPool.length){const t=this._$strokeVertexArrayPool.pop();if(t)return t}const t=this._$gl.createVertexArray();this.bind(t);const e=this._$gl.createBuffer();t.vertexBuffer=e,t.vertexLength=0,this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,e);const i=this._$gl.createBuffer();return t.indexBuffer=i,t.indexLength=0,this._$gl.bindBuffer(this._$gl.ELEMENT_ARRAY_BUFFER,i),this._$gl.enableVertexAttribArray(0),this._$gl.enableVertexAttribArray(1),this._$gl.enableVertexAttribArray(2),this._$gl.enableVertexAttribArray(3),this._$gl.vertexAttribPointer(this._$strokeAttrib_vertex,2,this._$gl.FLOAT,!1,28,0),this._$gl.vertexAttribPointer(this._$strokeAttrib_option1,2,this._$gl.FLOAT,!1,28,8),this._$gl.vertexAttribPointer(this._$strokeAttrib_option2,2,this._$gl.FLOAT,!1,28,16),this._$gl.vertexAttribPointer(this._$strokeAttrib_type,1,this._$gl.FLOAT,!1,28,24),t}createFill(t){const e=Zt.generate(t),i=e.vertexBufferData,s=this._$getFillVertexArray();return s.indexRanges=e.indexRanges,this.bind(s),this._$gl.bindBuffer(this._$gl.ARRAY_BUFFER,s.vertexBuffer),s.vertexLengththis._$attributeBuffer.length&&(this._$attributeBuffer=new Float32Array(t.attributes.length),this._$gl.bufferData(this._$gl.ARRAY_BUFFER,this._$attributeBuffer.byteLength,this._$gl.DYNAMIC_DRAW)),this._$attributeBuffer.set(t.attributes),this._$gl.bufferSubData(this._$gl.ARRAY_BUFFER,0,this._$attributeBuffer.subarray(0,t.attributes.length))}bindCommonVertexArray(){this.bind(this._$commonVertexArray)}bindGradientVertexArray(t,e){const i=this._$getVertexArray(t,e);this.bind(i)}}class ie{constructor(t,e){this._$context=t,this._$gl=e,this._$clips=[],this._$poolClip=[],this._$clipStatus=!1,this._$containerClip=!1,this._$currentClip=!1}get containerClip(){return this._$containerClip}set containerClip(t){this._$containerClip=t}_$onClear(t){t&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0)}_$onBind(t){!t&&this._$currentClip?(this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1):t&&!this._$currentClip&&(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0,this._$endClipDef())}_$onClearRect(){this._$gl.disable(this._$gl.STENCIL_TEST),this._$currentClip=!1}_$enterClip(){this._$currentClip||(this._$gl.enable(this._$gl.STENCIL_TEST),this._$currentClip=!0);const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");t.mask=!0,++t.clipLevel}_$beginClipDef(){const t=this._$context.frameBuffer.currentAttachment;if(!t)throw new Error("mask currentAttachment is null.");this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.stencilMask(1<7&&(this._$unionStencilMask(e,a,h),n=e)}n>e+1&&this._$unionStencilMask(e,a,h)}_$unionStencilMask(t,e,i){const s=this._$context.path.createRectVertices(0,0,e,i),r=this._$context.vao.createFill(s);D(s.pop()),D(s);const n=this._$context.shaderList.shapeShaderVariants,a=n.getMaskShapeShader(!1,!1),h=a.uniform;n.setMaskShapeUniformIdentity(h,e,i);const o=r.indexRanges[0];this._$gl.stencilFunc(this._$gl.LEQUAL,1<this._$maxTextureSize?this._$maxTextureSize/i:1}drawInstacedArray(){this.blend.drawInstacedArray()}clearInstacedArray(){this.blend.clearInstacedArray()}bindRenderBuffer(t){this._$frameBufferManager.bindRenderBuffer(),this._$gl.clearColor(0,0,0,0),this._$gl.clear(this._$gl.COLOR_BUFFER_BIT|this._$gl.STENCIL_BUFFER_BIT),this._$viewportWidth=t.w,this._$viewportHeight=t.h,this._$gl.viewport(t.x,t.y,t.w,t.h),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(t.x,t.y,t.w,t.h)}getTextureFromRect(t){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t.index),s=e.currentAttachment,r=e.createTextureAttachment(t.w,t.h);this._$bind(r),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(i,-t.x,-i.height+t.h+t.y,i.width,i.height),this.restore();const n=r.texture;return e.releaseAttachment(r),this._$bind(s),n}drawBitmap(t){const e=this._$shaderList.blendShaderVariants,i=e.getNormalBlendShader(!1);e.setNormalBlendUniform(i.uniform,0,0,t.width,t.height,this._$matrix,this._$viewportWidth,this._$viewportHeight,!1,1,1,1,1,0,0,0,0),this._$frameBufferManager.textureManager.bind0(t,this._$imageSmoothingEnabled),this.blend.toOperation("normal"),i._$drawImage()}drawTextureFromRect(t,e){const i=this._$frameBufferManager,s=i.currentAttachment;this.bindRenderBuffer(e),i.transferTexture(e);const r=i.textureManager.getAtlasTexture(e.index),n=i.createTextureAttachmentFrom(r);this._$bind(n),this._$gl.enable(this._$gl.SCISSOR_TEST),this._$gl.scissor(e.x,e.y,e.w,e.h),this._$gl.clearColor(0,0,0,0),this._$gl.disable(this._$gl.SCISSOR_TEST),this.save(),this.setTransform(1,0,0,1,0,0),this.reset(),this.drawImage(t,e.x,r.height-e.h-e.y,t.width,t.height),this.restore(),i.releaseAttachment(n),this._$bind(s),i.textureManager.release(t)}stopStencil(){this._$mask._$onClearRect()}_$bind(t=null){if(!t)return;this._$frameBufferManager.bind(t);const e=t.color,i=t.stencil,s=t.width,r=t.height;this._$viewportWidth===s&&this._$viewportHeight===r||(this._$viewportWidth=s,this._$viewportHeight=r,this._$gl.viewport(0,0,s,r)),(e&&e.dirty||i&&i.dirty)&&(e&&(e.dirty=!1),i&&(i.dirty=!1),this._$gl.clearColor(0,0,0,0),this.clearRect(0,0,this._$viewportWidth,this._$viewportHeight),this._$gl.clearColor(this._$clearColorR,this._$clearColorG,this._$clearColorB,this._$clearColorA),this._$mask._$onClear(t.mask)),this._$mask._$onBind(t.mask)}setTransform(t,e,i,s,r,n){this._$matrix[0]=t,this._$matrix[1]=e,this._$matrix[3]=i,this._$matrix[4]=s,this._$matrix[6]=r,this._$matrix[7]=n}setMaxSize(t,e){this._$frameBufferManager.setMaxSize(t,e)}transform(t,e,i,s,r,n){const a=this._$matrix[0],h=this._$matrix[1],o=this._$matrix[3],_=this._$matrix[4],l=this._$matrix[6],c=this._$matrix[7];this._$matrix[0]=t*a+e*o,this._$matrix[1]=t*h+e*_,this._$matrix[3]=i*a+s*o,this._$matrix[4]=i*h+s*_,this._$matrix[6]=r*a+n*o+l,this._$matrix[7]=r*h+n*_+c}debug(t=0){const e=this._$frameBufferManager,i=e.textureManager.getAtlasTexture(t),s=e.currentAttachment,r=e.createTextureAttachmentFrom(i);this._$bind(r);const n=new Uint8Array(i.width*i.height*4);this._$gl.readPixels(0,0,i.width,i.height,this._$gl.RGBA,this._$gl.UNSIGNED_BYTE,n);const a=document.createElement("canvas");a.width=i.width,a.height=i.height;const h=a.getContext("2d"),o=new ImageData(i.width,i.height);for(let t=0;ts.length||e.push(s)}if(!e.length)return void D(e);const i=this._$vao.createFill(e),s=this.fillStyle;let r,n,a,h=this._$matrix;const o=this._$grid.enabled;if(s instanceof mt){const t=s.stops,e="linearRGB"===s.rgb;if(r=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0(r,!0),this._$frameBufferManager.bindRenderBuffer(),n=this._$shaderList.gradientShapeShaderVariants,"linear"===s.type)a=n.getGradientShapeShader(!1,o,!1,!1,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,s.points,0);else{h=this._$stack[this._$stack.length-1];const t=0!==s.focalPointRatio;a=n.getGradientShapeShader(!1,o,!0,t,s.mode),n.setGradientShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,s.points,s.focalPointRatio)}}else if(s instanceof pt){h=this._$stack[this._$stack.length-1];const t=s.colorTransform;r=s.texture,this._$frameBufferManager.textureManager.bind0(r,this._$imageSmoothingEnabled),n=this._$shaderList.shapeShaderVariants,a=n.getBitmapShapeShader(!1,s.repeat,o),t?n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):n.setBitmapShapeUniform(a.uniform,!1,0,0,0,o,h,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,r.width,r.height,1,1,1,this._$globalAlpha,0,0,0,0)}else n=this._$shaderList.shapeShaderVariants,a=n.getSolidColorShapeShader(!1,this._$grid.enabled),n.setSolidColorShapeUniform(a.uniform,!1,0,0,0,o,h,this._$viewportWidth,this._$viewportHeight,this._$grid,s,this._$globalAlpha);const _=this._$shaderList.shapeShaderVariants,l=_.getMaskShapeShader(!1,o);_.setMaskShapeUniform(l.uniform,o,h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8],this._$viewportWidth,this._$viewportHeight,this._$grid),this._$gl.enable(this._$gl.STENCIL_TEST),this._$gl.stencilMask(255),this._$gl.enable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.ALWAYS,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.INVERT,this._$gl.INVERT),this._$gl.colorMask(!1,!1,!1,!1),l._$fill(i),this._$gl.disable(this._$gl.SAMPLE_ALPHA_TO_COVERAGE),this._$gl.stencilFunc(this._$gl.NOTEQUAL,0,255),this._$gl.stencilOp(this._$gl.KEEP,this._$gl.ZERO,this._$gl.ZERO),this._$gl.colorMask(!0,!0,!0,!0),a._$fill(i),this._$gl.disable(this._$gl.STENCIL_TEST),this.releaseFillVertexArray(i)}releaseFillVertexArray(t){this._$vao.releaseFill(t);const e=t.indexRanges;for(let t=0;ta.width||i>a.height||0>e&&0>=s+e||0>i&&0>=n+i||(this._$maskBounds.xMin=r.max(0,r.min(this._$maskBounds.xMin,e)),this._$maskBounds.yMin=r.max(0,r.min(this._$maskBounds.yMin,i)),this._$maskBounds.xMax=r.min(a.width,r.min(this._$maskBounds.xMax,s)),this._$maskBounds.yMax=r.min(a.height,r.min(this._$maskBounds.yMax,n)),0))}_$endClipDef(){this._$mask._$endClipDef()}_$leaveClip(){this.drawInstacedArray(),this._$mask._$leaveClip()}_$drawContainerClip(){this._$mask._$drawContainerClip()}closePath(){this._$path.close()}stroke(){const t=this._$path.vertices;if(!t.length)return;const e=U();for(let i=0;is.length||e.push(s)}if(!e.length)return void D(e);const i=this._$vao.createStroke(t,this.lineCap,this.lineJoin);let s=this._$matrix;const n=this.strokeStyle;let a=r.sign(s[0]*s[4]);a>0&&0!==s[1]&&0!==s[3]&&(a=-r.sign(s[1]*s[3]));let h,o,_=.5*this.lineWidth;this._$grid.enabled?(h=r.abs(this._$grid.ancestorMatrixA+this._$grid.ancestorMatrixD),o=r.abs(this._$grid.ancestorMatrixB+this._$grid.ancestorMatrixE)):(h=r.abs(s[0]+s[3]),o=r.abs(s[1]+s[4]));const l=r.min(h,o),c=r.max(h,o);_*=c*(1-.3*r.cos(.5*r.PI*(l/c))),_=r.max(1,_);const $=this._$grid.enabled;let u,d,g;if(n instanceof mt){"radial"===n.type&&(s=this._$stack[this._$stack.length-1]);const t=n.stops,e="linearRGB"===n.rgb;if(u=this._$gradientLUT.generateForShape(t,e),this._$frameBufferManager.textureManager.bind0(u,!0),d=this._$shaderList.gradientShapeShaderVariants,"linear"===n.type)g=d.getGradientShapeShader(!0,$,!1,!1,n.mode),d.setGradientShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!1,n.points,0);else{s=this._$stack[this._$stack.length-1];const t=0!==n.focalPointRatio;g=d.getGradientShapeShader(!0,$,!0,t,n.mode),d.setGradientShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,!0,n.points,n.focalPointRatio)}}else if(n instanceof pt){s=this._$stack[this._$stack.length-1];const t=n.colorTransform;u=n.texture,this._$frameBufferManager.textureManager.bind0(u),d=this._$shaderList.shapeShaderVariants,g=d.getBitmapShapeShader(!0,n.repeat,this._$grid.enabled),t?d.setBitmapShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,u.width,u.height,t[0],t[1],t[2],this._$globalAlpha,t[4]/255,t[5]/255,t[6]/255,0):d.setBitmapShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,z(this._$matrix),this._$viewportWidth,this._$viewportHeight,this._$grid,u.width,u.height,1,1,1,this._$globalAlpha,0,0,0,0)}else d=this._$shaderList.shapeShaderVariants,g=d.getSolidColorShapeShader(!0,this._$grid.enabled),d.setSolidColorShapeUniform(g.uniform,!0,_,a,this.miterLimit,$,s,this._$viewportWidth,this._$viewportHeight,this._$grid,n,this._$globalAlpha);g._$stroke(i),this._$vao.releaseStroke(i)}arc(t,e,i){this._$path.drawCircle(t,e,i)}clip(){const t=this._$path.vertices;if(!t.length)return;const e=U();for(let i=0;is.length||e.push(s)}if(!e.length)return void D(e);const i=this._$vao.createFill(e),s=this._$shaderList.shapeShaderVariants,r=s.getMaskShapeShader(!1,!1),n=r.uniform;s.setMaskShapeUniform(n,!1,this._$matrix[0],this._$matrix[1],this._$matrix[2],this._$matrix[3],this._$matrix[4],this._$matrix[5],this._$matrix[6],this._$matrix[7],this._$matrix[8],this._$viewportWidth,this._$viewportHeight,null),this._$mask._$onClip(i,this._$matrix,this._$viewportWidth,this._$viewportHeight)||(r._$fill(i),this.beginPath())}save(){const t=this._$matrix;this._$stack.push(O(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])),this._$mask._$onSave()}restore(){var t;this._$stack.length&&(t=this._$matrix,M.push(t),this._$matrix=this._$stack.pop()||O()),this._$mask._$onRestore()}createPattern(t,e,i){return new pt(this,t,e,i)}createLinearGradient(t,e,i,s,r="rgb",n="pad"){return(new mt).linear(t,e,i,s,r,n)}createRadialGradient(t,e,i,s,r,n,a="rgb",h="pad",o=0){return(new mt).radial(t,e,i,s,r,n,a,h,o)}_$applyBlurFilter(t,e,i){const s=this._$frameBufferManager,n=s.currentAttachment;if(!n)throw new Error("the current attachment is null.");const a=n.width,h=n.height;s.textureManager.bind0(t,!0);const o=r.ceil(.5*i),_=1-(o-.5*i),l=1+i,c=this._$shaderList.filterShaderVariants,$=c.getBlurFilterShader(o);c.setBlurFilterUniform($.uniform,a,h,e,_,l),$._$drawImage()}_$applyBitmapFilter(t,e,i,s,r,n,a,h,o,_,l,c,$,u,d,g=null,f=null,m=null,p=0,x=0,b=0,v=0,T=0,A=0,M=0,y=0){const E=this._$frameBufferManager,C="inner"===$,S=E.currentAttachment,F=E.getTextureFromCurrentAttachment();let B=null;const w=null!==g&&null!==f&&null!==m;let R;null!==g&&null!==f&&null!==m&&(B=this._$gradientLUT.generateForFilter(g,f,m)),C?w&&B?E.textureManager.bind02(t,B,!0):E.textureManager.bind0(t):(R=this._$frameBufferManager.createTextureAttachment(e,i),this._$bind(R),w&&B?E.textureManager.bind012(t,F,B,!0):E.textureManager.bind01(t,F));const I=!(C||"full"===$&&u),P=!(e===h&&i===o&&0===_&&0===l),N=!(1===d),k=this._$shaderList.filterShaderVariants,L=k.getBitmapFilterShader(I,P,c,$,u,N,w);k.setBitmapFilterUniform(L.uniform,e,i,s,r,n,a,h,o,_,l,c,d,p,x,b,v,T,A,M,y,I,P,N,w),C?u?this.blend.toSourceIn():this.blend.toSourceAtop():this.blend.toOneZero(),L._$drawImage(),C||E.releaseAttachment(S,!0)}_$applyColorMatrixFilter(t,e){this._$frameBufferManager.textureManager.bind0(t,!0);const i=this._$shaderList.filterShaderVariants,s=i.getColorMatrixFilterShader();i.setColorMatrixFilterUniform(s.uniform,e),this.blend.reset(),s._$drawImage()}_$applyConvolutionFilter(t,e,i,s,r,n,a,h,o,_,l,c){const $=t.width,u=t.height,d=this._$frameBufferManager.createTextureAttachment($,u);this._$bind(d),this._$frameBufferManager.textureManager.bind0(t,!0);const g=this._$shaderList.filterShaderVariants,f=g.getConvolutionFilterShader(e,i,a,h);g.setConvolutionFilterUniform(f.uniform,$,u,s,r,n,h,o,_,l,c),this.blend.reset(),f._$drawImage()}_$applyDisplacementMapFilter(t,e,i,s,r,n,a,h,o,_,l,c,$,u){const d=t.width,g=t.height,f=this._$frameBufferManager.createTextureAttachment(d,g);this._$bind(f),r||(r={x:0,y:0});const m=this._$frameBufferManager.createTextureFromImage(e);this._$frameBufferManager.textureManager.bind01(t,m);const p=this._$shaderList.filterShaderVariants,x=p.getDisplacementMapFilterShader(n,a,_);p.setDisplacementMapFilterUniform(x.uniform,e.width,e.height,i,s,r.x,r.y,h,o,_,l,c,$,u),this.blend.reset(),x._$drawImage(),this._$frameBufferManager.releaseTexture(m)}_$startLayer(t){this._$positions.push(t),this._$blends.push(this._$isLayer),this._$isLayer=!0}_$endLayer(){const t=this._$positions.pop();t&&B(t),this._$isLayer=!!this._$blends.pop()}_$saveAttachment(t,e,i=!1){this.drawInstacedArray();const s=this._$frameBufferManager;this._$attachmentArray.push(s.currentAttachment),this._$bind(s.createCacheAttachment(t,e,i))}_$restoreAttachment(t=!1){const e=this._$frameBufferManager;e.releaseAttachment(e.currentAttachment,t),this._$bind(this._$attachmentArray.pop())}getCurrentPosition(){return this._$positions[this._$positions.length-1]}textureScale(t,e){const i=r.max(t,e);return i>this._$maxTextureSize?this._$maxTextureSize/i:1}}class ne extends gt{constructor(){super(),this._$recodes=null,this._$maxAlpha=0,this._$canDraw=!1,this._$uniqueKey="",this._$cacheKeys=U(),this._$cacheParams=U(0,0,0),this._$bitmapId=0,this._$mode="shape"}_$clip(t,e){if(!this._$recodes)return;const i=this._$getBounds(),n=q(i,e);B(i);const a=r.ceil(r.abs(n.xMax-n.xMin)),h=r.ceil(r.abs(n.yMax-n.yMin));switch(B(n),!0){case 0===a:case 0===h:case a===-1/0:case h===-1/0:case a===s:case h===s:return}t.reset(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),this._$runCommand(t,this._$recodes,null,!0),t.clip()}_$createCacheKey(){if(!this._$recodes)return"";let t=0;for(let e=0;e0&&this._$canApply(a);let T=F(0,m,0,p);if(v&&a)for(let t=0;tM.width||f-T.yMin>M.height)return void B(T);if(0>d+T.xMax||0>f+T.yMax)return void B(T);if(B(T),""===this._$uniqueKey&&(!l&&this._$loaderInfoId>-1&&this._$characterId>-1?this._$uniqueKey=`${this._$loaderInfoId}@${this._$characterId}`:this._$uniqueKey=this._$createCacheKey()),"bitmap"===this._$mode)this._$cacheKeys.length||(this._$cacheKeys=rt.generateKeys(this._$uniqueKey));else if(!this._$cacheKeys.length||this._$cacheParams[0]!==x||this._$cacheParams[1]!==b||this._$cacheParams[2]!==i[7]){const t=U();t[0]=x,t[1]=b,this._$cacheKeys=rt.generateKeys(this._$uniqueKey,t,i),D(t),this._$cacheParams[0]=x,this._$cacheParams[1]=b,this._$cacheParams[2]=i[7]}if(t.cachePosition=rt.get(this._$cacheKeys),!t.cachePosition){const s=A.currentAttachment;s&&s.mask&&t.stopStencil();let n=0,a=0;if("shape"===this._$mode){n=r.ceil(r.abs(c.xMax-c.xMin)*x),a=r.ceil(r.abs(c.yMax-c.yMin)*b);const e=t._$getTextureScale(n,a);e<1&&(n*=e,a*=e)}else n=r.ceil(r.abs(c.xMax-c.xMin)),a=r.ceil(r.abs(c.yMax-c.yMin));if(t.cachePosition=A.createCachePosition(n,a),t.bindRenderBuffer(t.cachePosition),t.reset(),"shape"===this._$mode?t.setTransform(x,0,0,b,-c.xMin*x,-c.yMin*b):t.setTransform(1,0,0,1,-c.xMin,-c.yMin),l){const i=le.scaleX,s=P(i,0,0,i,0,0),n=H(s,_);N(s);const a=this._$matrixBase,h=P(a[0],a[1],a[2],a[3],a[4]*i-d,a[5]*i-f),o=H(h,n),l=o[4]-(e[4]-d),$=o[5]-(e[5]-f);N(o);const u=q(c,n),g=+u.xMax,m=+u.xMin,p=+u.yMax,x=+u.yMin,b=r.ceil(r.abs(g-m)),v=r.ceil(r.abs(p-x));B(u),t.grid.enable(m,x,b,v,c,this._$scale9Grid,i,n[0],n[1],n[2],n[3],n[4],n[5],h[0],h[1],h[2],h[3],h[4]-l,h[5]-$),N(n),N(h)}this._$runCommand(t,this._$recodes,i,!1),l&&t.grid.disable(),A.transferTexture(t.cachePosition),rt.set(this._$cacheKeys,t.cachePosition),t._$bind(s)}let y=0,E=0;if(v&&a){const i=this._$createBitmapTexture(t,t.cachePosition,x,b,m,p),s=this._$drawFilter(t,e,a,m,p,i);s.offsetX&&(y=s.offsetX),s.offsetY&&(E=s.offsetY),t.cachePosition=s}if(v||"bitmap"!==this._$mode){const i=r.atan2(e[1],e[0]),s=r.atan2(-e[2],e[3]);if(v||!i&&!s)t.setTransform(1,0,0,1,d-y,f-E);else{const n=c.xMin*x,a=c.yMin*b,h=r.cos(i),o=r.sin(i),_=r.cos(s),l=r.sin(s);t.setTransform(h,o,-l,_,n*h-a*l+e[4],n*o+a*_+e[5])}}else t.setTransform(e[0],e[1],e[2],e[3],c.xMin*e[0]+c.yMin*e[2]+e[4],c.xMin*e[1]+c.yMin*e[3]+e[5]);t.cachePosition&&(t.globalAlpha=o,t.imageSmoothingEnabled="shape"===this._$mode,t.globalCompositeOperation=n,t.drawInstance(d-y,f-E,u,g,i),t.cachePosition=null),B(c)}setupStroke(t,e,i,s,r){switch(t.lineWidth=e,i){case 0:t.lineCap="none";break;case 1:t.lineCap="round";break;case 2:t.lineCap="square"}switch(s){case 0:t.lineJoin="bevel";break;case 1:t.lineJoin="miter";break;case 2:t.lineJoin="round"}t.miterLimit=r}createGradientStyle(t,e,i,s,n,a,h,o=null){let _,l="pad";switch(n){case 0:l="reflect";break;case 1:l="repeat"}if(0===e){const e=(t=>{const e=-819.2*t[0]-819.2*t[2]+t[4],i=819.2*t[0]-819.2*t[2]+t[4],s=-819.2*t[0]+819.2*t[2]+t[4],n=-819.2*t[1]-819.2*t[3]+t[5],a=819.2*t[1]-819.2*t[3]+t[5];let h=s-e,o=-819.2*t[1]+819.2*t[3]+t[5]-n;const _=r.sqrt(h*h+o*o);_?(h/=_,o/=_):(h=0,o=0);const l=(i-e)*h+(a-n)*o;return w(e+l*h,n+l*o,i,a)})(s);_=t.createLinearGradient(e[0],e[1],e[2],e[3],a?"rgb":"linearRGB",l)}else t.save(),t.transform(s[0],s[1],s[2],s[3],s[4],s[5]),_=t.createRadialGradient(0,0,0,0,0,819.2,a?"rgb":"linearRGB",l,h);for(let t=0;t-1&&this._$characterId>-1&&rt.removeCache(`${this._$loaderInfoId}@${this._$characterId}`))}}class ae extends ne{_$clip(t,e){let i=e;const n=this._$matrix;1===n[0]&&0===n[1]&&0===n[2]&&1===n[3]&&0===n[4]&&0===n[5]||(i=H(e,n));const a=this._$getBounds(),h=q(a,i);B(a);const o=r.ceil(r.abs(h.xMax-h.xMin)),_=r.ceil(r.abs(h.yMax-h.yMin));switch(B(h),!0){case 0===o:case 0===_:case o===-1/0:case _===-1/0:case o===s:case _===s:return}super._$clip(t,i),i!==e&&N(i)}_$draw(t,e,i){if(!this._$visible||!this._$maxAlpha||!this._$canDraw)return;let s=i;const r=this._$colorTransform;if(1===r[0]&&1===r[1]&&1===r[2]&&1===r[3]&&0===r[4]&&0===r[5]&&0===r[6]&&0===r[7]||(s=W(i,r)),!G(s[3]+s[7]/255,0,1,0))return void(s!==i&&L(s));let n=e;const a=this._$matrix;1===a[0]&&0===a[1]&&0===a[2]&&1===a[3]&&0===a[4]&&0===a[5]||(n=H(e,a)),super._$draw(t,n,s,this._$blendMode,this._$filters),n!==e&&N(n),s!==i&&L(s)}_$remove(){this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$recodes=null,super._$remove(),ce.push(this)}}class he extends gt{constructor(){super(),this._$background=!1,this._$backgroundColor=16777215,this._$border=!1,this._$borderColor=0,this._$wordWrap=!1,this._$textData=U(),this._$textAreaActive=!1,this._$thickness=0,this._$thicknessColor=0,this._$limitWidth=0,this._$limitHeight=0,this._$autoSize="none",this._$widthTable=U(),this._$heightTable=U(),this._$objectTable=U(),this._$textHeightTable=U(),this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$maxScrollV=null,this._$scrollV=1,this._$textHeight=0,this._$verticalAlign="top",this._$cacheKeys=U(),this._$cacheParams=U(0,0,0)}get width(){const t=q(this._$getBounds(null),this._$matrix),e=r.abs(t.xMax-t.xMin);switch(B(t),!0){case 0===e:case e===s:case e===-1/0:return 0;default:return e}}get height(){const t=q(this._$getBounds(null),this._$matrix),e=r.abs(t.yMax-t.yMin);switch(B(t),e){case 0:case s:case-1/0:return 0;default:return e}}get maxScrollV(){if(null===this._$maxScrollV){this._$maxScrollV=1;const t=this._$textHeightTable.length,e=this.height;if(e>this._$textHeight)return this._$maxScrollV;let i=0,s=0;for(;t>s&&(i+=this._$textHeightTable[s++],!(i>e));)this._$maxScrollV++}return this._$maxScrollV}_$clip(t,e){const i=this._$getBounds(),s=i.xMax,n=i.xMin,a=i.yMax,h=i.yMin;B(i);const o=r.ceil(r.abs(s-n)),_=r.ceil(r.abs(a-h));if(!o||!_)return;let l=e;const c=this._$matrix;1===c[0]&&0===c[1]&&0===c[2]&&1===c[3]&&0===c[4]&&0===c[5]||(l=H(e,c)),t.reset(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(o,0),t.lineTo(o,_),t.lineTo(0,_),t.lineTo(0,0),t.clip(),l!==e&&N(l)}_$draw(t,e,i){if(!this._$visible||this._$textAreaActive)return;if(!this._$background&&!this._$border&&2>this._$textData.length)return;let n=i;const a=this._$colorTransform;1===a[0]&&1===a[1]&&1===a[2]&&1===a[3]&&0===a[4]&&0===a[5]&&0===a[6]&&0===a[7]||(n=W(i,a));const o=G(n[3]+n[7]/255,0,1);if(!o)return;let _=e;const l=this._$matrix;1===l[0]&&0===l[1]&&0===l[2]&&1===l[3]&&0===l[4]&&0===l[5]||(_=H(e,l));const c=this._$getBounds(null);c.xMin-=this._$thickness,c.xMax+=this._$thickness,c.yMin-=this._$thickness,c.yMax+=this._$thickness;const $=q(c,_),u=+$.xMax,d=+$.xMin,g=+$.yMax,f=+$.yMin;B($);const m=r.ceil(r.abs(u-d)),p=r.ceil(r.abs(g-f));switch(!0){case 0===m:case 0===p:case m===-1/0:case p===-1/0:case m===s:case p===s:return}let x=+r.sqrt(_[0]*_[0]+_[1]*_[1]);if(!h.isInteger(x)){const t=x.toString(),e=t.indexOf("e");-1!==e&&(x=+t.slice(0,e)),x=+x.toFixed(4)}let b=+r.sqrt(_[2]*_[2]+_[3]*_[3]);if(!h.isInteger(b)){const t=b.toString(),e=t.indexOf("e");-1!==e&&(b=+t.slice(0,e)),b=+b.toFixed(4)}const v=this._$filters,T=null!==v&&v.length>0&&this._$canApply(v);let A=F(0,m,0,p);if(T&&v)for(let t=0;ty.width||f-A.yMin>y.height)return void B(A);if(0>d+A.xMax||0>f+A.yMax)return void B(A);if(B(A),this._$isUpdated()&&(rt.removeCache(this._$instanceId),t.cachePosition=null,this._$cacheKeys.length=0),!this._$cacheKeys.length||this._$cacheParams[0]!==x||this._$cacheParams[1]!==b||this._$cacheParams[2]!==i[7]){const t=U(x,b);this._$cacheKeys=rt.generateKeys(this._$instanceId,t),D(t),this._$cacheParams[0]=x,this._$cacheParams[1]=b,this._$cacheParams[2]=i[7]}if(t.cachePosition=rt.get(this._$cacheKeys),!t.cachePosition){const s=r.min(1,r.max(x,b)),a=r.ceil(r.abs(c.xMax-c.xMin)*x),h=r.ceil(r.abs(c.yMax-c.yMin)*b);n[3]=1;const o=new OffscreenCanvas(a+2*s,h+2*s).getContext("2d");if(!o)return;if(this._$background||this._$border){if(o.beginPath(),o.moveTo(0,0),o.lineTo(a,0),o.lineTo(a,h),o.lineTo(0,h),o.lineTo(0,0),this._$background){const t=Z(this._$backgroundColor),e=r.max(0,r.min(255*t.A*i[3]+i[7],255))/255;o.fillStyle=`rgba(${t.R},${t.G},${t.B},${e})`,o.fill()}if(this._$border){const t=Z(this._$borderColor),e=r.max(0,r.min(255*t.A*i[3]+i[7],255))/255;o.lineWidth=s,o.strokeStyle=`rgba(${t.R},${t.G},${t.B},${e})`,o.stroke()}}o.save(),o.beginPath(),o.moveTo(2,2),o.lineTo(a-2,2),o.lineTo(a-2,h-2),o.lineTo(2,h-2),o.lineTo(2,2),o.clip(),o.beginPath(),o.setTransform(x,0,0,b,0,0),this._$doDraw(o,e,i,a/x),o.restore();const _=M.createCachePosition(m,p),l=M.createTextureFromCanvas(o.canvas);t.drawTextureFromRect(l,_),t.cachePosition=_,rt.set(this._$cacheKeys,_)}let E=!1,C=0,S=0;if(v&&v.length&&this._$canApply(v)){E=!0;const e=this._$drawFilter(t,_,v,m,p);e.offsetX&&(C=e.offsetX),e.offsetY&&(S=e.offsetY),t.cachePosition=e}const w=r.atan2(_[1],_[0]),R=r.atan2(-_[2],_[3]);if(E||!w&&!R)t.setTransform(1,0,0,1,d-C,f-S);else{const e=c.xMin*x,i=c.yMin*b,s=r.cos(w),n=r.sin(w),a=r.cos(R),h=r.sin(R);t.setTransform(s,n,-h,a,e*s-i*h+_[4],e*n+i*a+_[5])}t.cachePosition&&(t.globalAlpha=o,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=this._$blendMode,t.drawInstance(d-C,f-S,u,g,i),t.cachePosition=null),B(c),_!==e&&N(_),n!==i&&L(n)}_$doDraw(t,e,i,s){const n=this.width,a=this.height;let h=0,o=0,_=0,l=0;if("top"!==this._$verticalAlign&&this.height>this._$textHeight)switch(this._$verticalAlign){case"middle":l=(this.height-this._$textHeight+2)/2;break;case"bottom":l=this.height-this._$textHeight+2}const c=this._$textData.length;for(let $=0;$a||u>n))continue;const d=c.textFormat,g=Z(c.textFormat._$color),f=r.max(0,r.min(255*g.A*i[3]+i[7],255))/255;if(t.fillStyle=`rgba(${g.R},${g.G},${g.B},${f})`,this._$thickness){const e=Z(this._$thicknessColor),s=r.max(0,r.min(255*e.A*i[3]+i[7],255))/255;t.lineWidth=this._$thickness,t.strokeStyle=`rgba(${e.R},${e.G},${e.B},${s})`}const m=c.yIndex;switch(c.mode){case"break":case"wrap":if(_++,this._$scrollV>_)continue;if(o+=this._$textHeightTable[m],h=this._$getAlignOffset(this._$objectTable[m],s),d._$underline){const s=c.textFormat._$size/12,n=Z(d._$color),a=r.max(0,r.min(255*n.A*i[3]+i[7],255))/255;t.lineWidth=r.max(1,1/r.min(e[0],e[3])),t.strokeStyle=`rgba(${n.R},${n.G},${n.B},${a})`,t.beginPath(),t.moveTo(h,l+o-s),t.lineTo(h+this._$widthTable[m],l+o-s),t.stroke()}break;case"text":{if(this._$scrollV>_)continue;let e=o-this._$heightTable[0];_e||(e+=c.textFormat._$size/12*2),t.beginPath(),t.textBaseline="top",t.font=tt(d._$font,d._$size,d._$italic,d._$bold),this._$thickness&&t.strokeText(c.text,u,l+e),t.fillText(c.text,u,l+e)}break;case"image":if(!c.loaded)continue;t.beginPath(),t.drawImage(c.image,c.hspace,l+c.y,c.width,c.height)}}}_$getAlignOffset(t,e){const i=this._$widthTable[t.yIndex],s=t.textFormat,n=s._$blockIndent+s._$leftMargin>0?s._$blockIndent+s._$leftMargin:0;switch(!0){case!this._$wordWrap&&i>e:return r.max(0,n);case"center"===s._$align:case"center"===this._$autoSize:return r.max(0,e/2-n-s._$rightMargin-i/2);case"right"===s._$align:case"right"===this._$autoSize:return r.max(0,e-n-i-s._$rightMargin-2);default:return r.max(0,n+2)}}_$remove(){this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$textData.length=0,this._$widthTable.length=0,this._$heightTable.length=0,this._$objectTable.length=0,this._$textHeightTable.length=0,this._$textAreaActive=!1,super._$remove(),$e.push(this)}_$updateProperty(t){this._$textAreaActive=!!t.textAreaActive,this._$textData.length=0,this._$widthTable.length=0,this._$heightTable.length=0,this._$objectTable.length=0,this._$textHeightTable.length=0,this._$textData.push(...t.textData),this._$widthTable.push(...t.widthTable),this._$heightTable.push(...t.heightTable),this._$objectTable.push(...t.objectTable),this._$textHeightTable.push(...t.textHeightTable),this._$wordWrap=t.wordWrap,this._$limitWidth=t.limitWidth,this._$limitHeight=t.limitHeight,this._$autoSize=t.autoSize,this._$scrollV=t.scrollV,this._$textHeight=t.textHeight,this._$verticalAlign=t.verticalAlign,this._$border=t.border,this._$border&&(this._$borderColor=t.borderColor),this._$background=t.background,this._$background&&(this._$backgroundColor=t.backgroundColor),"thickness"in t&&(this._$thickness=t.thickness,this._$thicknessColor=t.thicknessColor)}_$update(t){super._$update(t),this._$textAreaActive=!!t.textAreaActive,this._$xMin=t.xMin,this._$yMin=t.yMin,this._$xMax=t.xMax,this._$yMax=t.yMax,t.textData&&this._$updateProperty(t)}}class oe extends gt{constructor(){super(),this._$imageBitmap=null,this._$context=null,this._$smoothing=!0,this._$cacheKeys=U(),this._$cacheParams=U(0,0,0)}_$clip(t,e){const i=this._$xMax,s=this._$yMax;if(!i||!s)return;let r=e;const n=this._$matrix;1===n[0]&&0===n[1]&&0===n[2]&&1===n[3]&&0===n[4]&&0===n[5]||(r=H(e,n)),t.reset(),t.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),t.clip(),r!==e&&N(r)}_$draw(t,e,i){if(!this._$visible||!this._$imageBitmap||!this._$context)return;let n=i;const a=this._$colorTransform;1===a[0]&&1===a[1]&&1===a[2]&&1===a[3]&&0===a[4]&&0===a[5]&&0===a[6]&&0===a[7]||(n=W(i,a));const o=G(n[3]+n[7]/255,0,1,0);if(!o)return void(n!==i&&L(n));let _=e;const l=this._$matrix;1===l[0]&&0===l[1]&&0===l[2]&&1===l[3]&&0===l[4]&&0===l[5]||(_=H(e,l));const c=this._$getBounds();B(c);const $=q(c,_),u=+$.xMax,d=+$.xMin,g=+$.yMax,f=+$.yMin;B($);const m=r.ceil(r.abs(u-d)),p=r.ceil(r.abs(g-f));switch(!0){case 0===m:case 0===p:case m===-1/0:case p===-1/0:case m===s:case p===s:return}let x=+r.sqrt(_[0]*_[0]+_[1]*_[1]);if(!h.isInteger(x)){const t=x.toString(),e=t.indexOf("e");-1!==e&&(x=+t.slice(0,e)),x=+x.toFixed(4)}let b=+r.sqrt(_[2]*_[2]+_[3]*_[3]);if(!h.isInteger(b)){const t=b.toString(),e=t.indexOf("e");-1!==e&&(b=+t.slice(0,e)),b=+b.toFixed(4)}const v=this._$filters,T=null!==v&&v.length>0&&this._$canApply(v);let A=F(0,m,0,p);if(T&&v)for(let t=0;ty.width||f-A.yMin>y.height)return void B(A);if(0>d+A.xMax||0>f+A.yMax)return void B(A);if(B(A),!this._$cacheKeys.length||this._$cacheParams[0]!==x||this._$cacheParams[1]!==b||this._$cacheParams[2]!==i[7]){const t=U();t[0]=x,t[1]=b,this._$cacheKeys=rt.generateKeys(this._$instanceId,t,i),D(t),this._$cacheParams[0]=x,this._$cacheParams[1]=b,this._$cacheParams[2]=i[7]}if(t.cachePosition=rt.get(this._$cacheKeys),!t.cachePosition){const e=r.ceil(r.abs(this._$xMax-this._$xMin)),i=r.ceil(r.abs(this._$yMax-this._$yMin)),s=M.createCachePosition(e,i);t.cachePosition=s,rt.set(this._$cacheKeys,s)}this._$context.drawImage(this._$imageBitmap,0,0);const E=M.textureManager._$createFromElement(this._$imageBitmap.width,this._$imageBitmap.height,this._$context.canvas,this._$smoothing);let C=0,S=0;if(T&&v){const e=M.currentAttachment,i=M.createCacheAttachment(m,p);t._$bind(i),t.reset();const s=P(x,0,0,b,m/2,p/2),r=P(1,0,0,1,-E.width/2,-E.height/2),n=H(s,r);N(s),N(r),t.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t.drawImage(E,0,0,E.width,E.height);const a=M.getTextureFromCurrentAttachment();t._$bind(e),M.releaseAttachment(i),t.drawTextureFromRect(E,t.cachePosition);const h=this._$drawFilter(t,_,v,m,p,a);h.offsetX&&(C=h.offsetX),h.offsetY&&(S=h.offsetY),t.cachePosition=h,t.setTransform(1,0,0,1,d-C,f-S)}else t.drawTextureFromRect(E,t.cachePosition),t.setTransform(_[0],_[1],_[2],_[3],_[4],_[5]);t.cachePosition&&(t.globalAlpha=o,t.imageSmoothingEnabled=!0,t.globalCompositeOperation=this._$blendMode,t.drawInstance(d-C,f-S,u,g,i),t.cachePosition=null),_!==e&&N(_),n!==i&&L(n)}_$remove(){this._$xMin=0,this._$yMin=0,this._$xMax=0,this._$yMax=0,this._$context=null,this._$imageBitmap=null,this._$smoothing=!0,super._$remove(),de.push(this)}_$updateProperty(t){if(this._$xMin=t.xMin,this._$yMin=t.yMin,this._$xMax=t.xMax,this._$yMax=t.yMax,this._$imageBitmap=t.imageBitmap,this._$smoothing=t.smoothing,!this._$context&&this._$imageBitmap){const t=new c(this._$imageBitmap.width,this._$imageBitmap.height);this._$context=t.getContext("2d")}}_$update(t){super._$update(t),this._$updateProperty(t)}}let _e=!1;const le=new class{constructor(){this._$instances=new Map,this._$matrix=P(1,0,0,1,0,0),this._$width=0,this._$height=0,this._$stage=new ft,this._$canvas=null,this._$context=null,this._$attachment=null}get instances(){return this._$instances}get context(){return this._$context}get scaleX(){return this._$matrix[0]}stop(){rt.reset()}_$initialize(e,i){let s=0;var r,n;this._$setStage(e[s++]),n=1===e[s++],_e=n,r=e[s++],t=r,this._$canvas=i;const a=i.getContext("webgl2",{stencil:!0,premultipliedAlpha:!0,antialias:!1,depth:!1,preserveDrawingBuffer:!0});if(a){const t=new re(a,e[s++]);this._$context=t,rt.context=t}}_$setBackgroundColor(t){if(!this._$context)return;const e=t[0];if(-1===e)this._$context._$setColor(0,0,0,0);else{const t={A:(i=e)>>>24,R:(16711680&i)>>16,G:(65280&i)>>8,B:255&i};this._$context._$setColor(t.R/255,t.G/255,t.B/255,1)}var i}_$bitmapDraw(t,e,i,s){const r=this._$context;if(!r)return;r._$bind(this._$attachment),r.reset(),r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,this._$width,this._$height),r.beginPath(),t._$draw(r,e,i),r.frameBuffer.transferToMainTexture();const n=s.getContext("2d");n&&this._$canvas&&n.drawImage(this._$canvas,0,0)}_$draw(){if(!this._$width||!this._$height)return;const t=this._$context;t&&(t.reset(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,this._$width,this._$height),t.beginPath(),this._$stage._$draw(t,this._$matrix,m),this._$stage._$updated=!1,t.drawInstacedArray(),t.frameBuffer.transferToMainTexture())}_$resize(t){let e=0;const i=t[e++],s=t[e++];if(this._$width=i,this._$height=s,!this._$canvas)return;if(this._$canvas.width===i&&this._$canvas.height===s)return;const r=this._$context;if(!r)return;const n=t[e++];this._$matrix[0]=n,this._$matrix[3]=n,this._$matrix[4]=t[e++],this._$matrix[5]=t[e++],this._$stage._$updated=!0,rt.reset(),r.clearInstacedArray(),this._$canvas.width=i,this._$canvas.height=s,r._$gl.viewport(0,0,i,s);const a=r.frameBuffer;this._$attachment&&(a.unbind(),a.releaseAttachment(this._$attachment,!0)),this._$attachment=a.createCacheAttachment(i,s,!0),r.setMaxSize(i,s),r._$bind(this._$attachment)}_$setStage(t){this._$stage._$instanceId=t,this._$instances.set(t,this._$stage)}_$updateStage(){this._$stage._$updated=!0}_$createDisplayObjectContainer(t){const e=ge();let i=0;e._$instanceId=t[i++],e._$parentId=t[i++],this._$setProperty(e,t,2),this._$instances.set(e._$instanceId,e)}_$setProperty(t,e,i){t._$visible=1===e[i++],t._$depth=e[i++],t._$clipDepth=e[i++],t._$isMask=1===e[i++],1===e[i++]?(t._$maskId=e[i++],t._$maskMatrix||(t._$maskMatrix=P()),t._$maskMatrix[0]=e[i++],t._$maskMatrix[1]=e[i++],t._$maskMatrix[2]=e[i++],t._$maskMatrix[3]=e[i++],t._$maskMatrix[4]=e[i++],t._$maskMatrix[5]=e[i++]):(t._$maskId=-1,t._$maskMatrix&&(N(t._$maskMatrix),t._$maskMatrix=null),i+=7),t._$visible?(t._$matrix[0]=e[i++],t._$matrix[1]=e[i++],t._$matrix[2]=e[i++],t._$matrix[3]=e[i++],t._$matrix[4]=e[i++],t._$matrix[5]=e[i++],t._$colorTransform[0]=e[i++],t._$colorTransform[1]=e[i++],t._$colorTransform[2]=e[i++],t._$colorTransform[3]=e[i++],t._$colorTransform[4]=e[i++],t._$colorTransform[5]=e[i++],t._$colorTransform[6]=e[i++],t._$colorTransform[7]=e[i++]):(i+=6,i+=8),t._$blendMode=st(e[i++]),e[i++]?t._$scale9Grid={x:e[i++],y:e[i++],w:e[i++],h:e[i++]}:t._$scale9Grid=null,t._$blendMode=st(e[i++]),e[i++]?t._$scale9Grid={x:e[i++],y:e[i++],w:e[i++],h:e[i++]}:t._$scale9Grid=null}_$registerShapeRecodes(t,e){this._$instances.has(t)||this._$instances.set(t,pe()),this._$instances.get(t)._$recodes=e}_$createShape(t){let e=0;const i=t[e++];this._$instances.has(i)||this._$instances.set(i,pe());const s=this._$instances.get(i);s._$instanceId=i,s._$parentId=t[e++],s._$maxAlpha=t[e++],s._$canDraw=1===t[e++],s._$xMin=t[e++],s._$yMin=t[e++],s._$xMax=t[e++],s._$yMax=t[e++],s._$characterId=t[e++],s._$loaderInfoId=t[e++],this._$setProperty(s,t,10)}_$createVideo(t){const e=me();t.characterId&&(e._$characterId=t.characterId),"loaderInfoId"in t&&(e._$loaderInfoId=t.loaderInfoId||0),e._$updateProperty(t),this._$instances.set(e._$instanceId,e)}_$createTextField(t){const e=fe();e._$xMin=t.xMin||0,e._$yMin=t.yMin||0,e._$xMax=t.xMax||0,e._$yMax=t.yMax||0,t.characterId&&(e._$characterId=t.characterId),"loaderInfoId"in t&&(e._$loaderInfoId=t.loaderInfoId||0),e._$updateProperty(t),this._$instances.set(e._$instanceId,e)}},ce=[],$e=[],ue=[],de=[],ge=()=>ue.pop()||new ft,fe=()=>$e.pop()||new he,me=()=>de.pop()||new oe,pe=()=>ce.pop()||new ae;const xe=new class{constructor(){this.state="deactivate",this.queue=[],this._$options=[]}execute(){this.state="active";let t=!0;for(;this.queue.length;){const e=this.queue.shift();if(console.log(e),e){switch(t=!0,e.command){case"draw":le._$draw();break;case"setProperty":if(!le.instances.has(e.instanceId))continue;break;case"setChildren":{t=!1;const i=e.buffer,s=le.instances;if(!s.has(i[0]))continue;const r=s.get(i[0]);r._$doChanged(),r._$children=i.subarray(1)}break;case"remove":{const t=le.instances;if(!t.has(e.instanceId))continue;t.get(e.instanceId)._$remove(),t.delete(e.instanceId)}break;case"createShape":le._$createShape(e.buffer);break;case"createDisplayObjectContainer":le._$createDisplayObjectContainer(e.buffer);break;case"createTextField":le._$createTextField(e);break;case"createVideo":le._$createVideo(e);break;case"resize":le._$resize(e.buffer);break;case"initialize":le._$initialize(e.buffer,e.canvas);break;case"setBackgroundColor":le._$setBackgroundColor(e.buffer);break;case"stop":le.stop();break;case"removeCache":rt.removeCache(e.id);break;case"bitmapDraw":{const t=le.instances;if(!t.has(e.sourceId))continue;const i=t.get(e.sourceId),s=new c(e.width,e.height);le._$bitmapDraw(i,e.matrix||f,e.colorTransform||m,s);const r=s.transferToImageBitmap();globalThis.postMessage({command:"bitmapDraw",sourceId:e.sourceId,imageBitmap:r},[r])}break;default:if(e.command.indexOf("shapeRecodes")>-1){t=!1;const i=+e.command.split("@")[1];le._$registerShapeRecodes(i,e.buffer)}}e.buffer&&t&&(this._$options.length=0)}}this.state="deactivate"}};self.addEventListener("message",(t=>{return e=void 0,i=void 0,r=function*(){xe.queue.push(t.data),"deactivate"===xe.state&&xe.execute()},new((s=void 0)||(s=Promise))((function(t,n){function a(t){try{o(r.next(t))}catch(t){n(t)}}function h(t){try{o(r.throw(t))}catch(t){n(t)}}function o(e){var i;e.done?t(e.value):(i=e.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,h)}o((r=r.apply(e,i||[])).next())}));var e,i,s,r}))})();'],{type:"text/javascript"}))):null,Mr=null,Mr&&(Sr=t=>{t._$createWorkerInstance(),t._$postProperty();const e=t._$needsChildren?t._$getChildren():t._$children,i=ht();for(let t=0;t{t._$removeWorkerInstance();const e=t._$needsChildren?t._$getChildren():t._$children;for(let t=0;t{const e=navigator.userAgentData;if(e)e.getHighEntropyValues(["platform","mobile"]).then((e=>{const i=e.brands;for(let t=0;t-1,Js=e.indexOf("iPhone")>-1||e.indexOf("iPod")>-1,js=e.indexOf("Chrome")>-1,Ks=e.indexOf("Firefox")>-1,Ws=-1===e.indexOf("Chrome")&&e.indexOf("Safari")>-1,Zs=Qs||Js,t()}}))};"next2d"in window||(console.log("%c Next2D Player %c 1.18.0 %c https://next2d.app","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),window.next2d=new class{constructor(t){this._$promises=t,this._$player=new ms,this.display=bs,this.events=xs,this.filters=vs,this.geom=Ts,this.media=ys,this.net=Es,this.text=As,this.ui=Ms}get player(){return this._$player}load(t,e){Promise.all(this._$promises).then((()=>{if(ot(this._$promises),"develop"===t){const e=location.search.slice(1).split("&")[0];if(!e)return;t=`${location.origin}/${e}`}if(!t)return;"/"===t.charAt(1)&&(t=t.slice(1)),e&&"base"in e||!(t.indexOf("//")>-1)||(this._$player.base=t),this._$player.setOptions(e),this._$player._$initialize();const i=new de;i.contentLoaderInfo.addEventListener(Lt.IO_ERROR,(t=>{t.target&&t.target.removeEventListener(Lt.IO_ERROR,t.listener),alert("Error: "+t.text)})),i.contentLoaderInfo.addEventListener(It.COMPLETE,(t=>{const e=t.target,i=this._$player;if(e.removeEventListener(It.COMPLETE,t.listener),e._$data){const t=e._$data.stage;i.bgColor=t.bgColor,i._$setBackgroundColor(t.bgColor),i.stage.addChild(e.content),i.width=t.width,i.height=t.height,i.stage._$frameRate=dt(+t.fps,1,60,60)}i._$resize()})),i.load(new St(t))}))}createRootMovieClip(t=240,e=240,i=24,s=null){return r=this,n=void 0,h=function*(){yield Promise.all(this._$promises),ot(this._$promises);const r=this._$player;r.width=0|t,r.height=0|e,r.mode="create",r.stage._$frameRate=0|i,r.setOptions(s),r._$initialize();const n=r.stage.addChild(new $e);return r._$loadStatus=ms.LOAD_END,r.play(),n},new((a=void 0)||(a=Promise))((function(t,e){function i(t){try{o(h.next(t))}catch(t){e(t)}}function s(t){try{o(h.throw(t))}catch(t){e(t)}}function o(e){var r;e.done?t(e.value):(r=e.value,r instanceof a?r:new a((function(t){t(r)}))).then(i,s)}o((h=h.apply(r,n||[])).next())}));var r,n,a,h}}([new Promise((t=>{if("loading"===document.readyState){const e=()=>{window.removeEventListener("DOMContentLoaded",e),kr().then((()=>{cr()._$initializeCanvas(),t()}))};window.addEventListener("DOMContentLoaded",e)}else kr().then((()=>{cr()._$initializeCanvas(),t()}))}))]))})(); \ No newline at end of file +const on="__next2d__",Ze=Math.min(2,window.devicePixelRatio),Vt=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)},Er=document.createElement("canvas");Er.width=Er.height=1;const Tr=Er.getContext("2d");let ci=null;const _s=e=>{ci=e};let li=null;const Ds=e=>{li=e},ui=()=>li,vt=()=>ci,ft=new Float32Array([1,0,0,1,0,0]),gt=new Float32Array([1,0,0,1,0,0]),ie={x:0,y:0,pointer:"",hit:null};let hi=null;const Cn=e=>{hi=e},fi=()=>hi,Ls=(e,t=1)=>{let r="";r+="-webkit-tap-highlight-color: rgba(0,0,0,0);",r+="backface-visibility: hidden;",r+="touch-action: none;",r+="user-select: none;",r+="-webkit-user-select: none;",r+="-webkit-touch-callout: none;",t>1&&(r+=`transform: scale(${1/t});`),e.width=1,e.height=1,e.setAttribute("style",r)},di=`(function(){"use strict";let ut=2048;const Xc=t=>{ut=Math.max(2048,t/2)};let bs=4;const Yc=t=>{bs=t};let p;const Wc=t=>{p=t};let O;const jc=t=>{O=t};let Pn=!1;const It=()=>{Pn||(Pn=!0,p.enable(p.SCISSOR_TEST))},yt=()=>{Pn&&(Pn=!1,p.disable(p.SCISSOR_TEST))};let An=!1;const Yr=()=>{An||(An=!0,p.enable(p.STENCIL_TEST))},Wr=()=>{An&&(An=!1,p.disable(p.STENCIL_TEST))},jr=(t,e,r,n=null)=>{const s=+t;return isNaN(s)&&n!==null?n:Math.min(Math.max(e,isNaN(s)?0:s),r)},li=[],Hr=(...t)=>{const e=li.pop()||[];return t.length&&e.push(...t),e},ui=(t=null)=>{t&&(t.length&&(t.length=0),li.push(t))},Fn=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),fi=[],hi=(t=0,e=0,r=0,n=0)=>{const s=fi.pop()||new Float32Array(4);return s[0]=t,s[1]=e,s[2]=r,s[3]=n,s},di=t=>{fi.push(t)},pi=[],xs=(t=0,e=0,r=0,n=0,s=0,o=0,i=0,l=0,c=0)=>{const u=pi.pop()||new Float32Array(9);return u[0]=t,u[1]=e,u[2]=r,u[3]=n,u[4]=s,u[5]=o,u[6]=i,u[7]=l,u[8]=c,u},Hc=t=>{pi.push(t)},mi=[],dr=(t=0,e=0,r=0,n=0,s=0,o=0)=>{const i=mi.pop()||new Float32Array(6);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i[4]=s,i[5]=o,i},Kr=t=>{mi.push(t)},ys=t=>{const e=1/(t[0]*t[4]-t[3]*t[1]),r=t[3]*t[7]-t[4]*t[6],n=t[1]*t[6]-t[0]*t[7];return xs(t[4]*e,0-t[1]*e,0,0-t[3]*e,t[0]*e,0,r*e,n*e,1)};let pt=0,mt=0;const Kc=(t,e)=>{pt=t,mt=e},qc=t=>{const e=-819.2*t[0]-819.2*t[2]+t[4],r=819.2*t[0]-819.2*t[2]+t[4],n=-819.2*t[0]+819.2*t[2]+t[4],s=-819.2*t[1]-819.2*t[3]+t[5],o=819.2*t[1]-819.2*t[3]+t[5],i=-819.2*t[1]+819.2*t[3]+t[5];let l=n-e,c=i-s;const u=Math.sqrt(l*l+c*c);u?(l=l/u,c=c/u):(l=0,c=0);const a=(r-e)*l+(o-s)*c;return hi(e+a*l,s+a*c,r,o)};let vt=1;const Qc=t=>{vt=t},Zc=(t,e)=>{const r=t[0],n=t[1],s=t[2],o=t[3],i=t[4],l=t[5],c=e[0],u=e[1],a=e[2],h=e[3],d=e[4],g=e[5];return dr(r*c+s*u,n*c+o*u,r*a+s*h,n*a+o*h,r*d+s*g+i,n*d+o*g+l)},Jc=()=>typeof crypto?.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)}),me=Hr(),Kt=Hr(),pr=(t=!1)=>{const e=t?6:9;me.length>=e&&Kt.push(me.slice(0)),me.length=0;const r=[];for(let n=0;n=e&&r.push(s)}return Kt.length=0,r},el=()=>{for(me.length=0;Kt.length;)ui(Kt.pop())},mr=(t,e,r)=>{me.push(t,e,r)},qr=(t,e)=>{const r=me.length,n=+me[r-3],s=+me[r-2];return t===n&&e===s},tl=()=>{if(me.length<3){me.length=0;return}Kt.push(me.slice(0)),me.length=0},wn=(t,e)=>{if(!me.length){mr(t,e,!1);return}qr(t,e)||(tl(),mr(t,e,!1))},rl=(t,e)=>{me.length||wn(t,e),!qr(t,e)&&mr(t,e,!1)},gi=(t,e,r,n)=>{me.length||wn(0,0),!qr(r,n)&&(mr(t,e,!0),mr(r,n,!1))},nl=()=>{if(me.length<7)return;const t=+me[0],e=+me[1];qr(t,e)||mr(t,e,!1)};let Re=new Float32Array(64),bi=0;const vs=.5,Ms=2,sl=8,ol=(t,e,r,n,s,o,i,l)=>{const c=3*r-2*t-i,u=3*n-2*e-l,a=3*s-2*i-t,h=3*o-2*l-e;return Math.max(c*c+u*u,a*a+h*h)},il=(t,e,r,n,s,o,i,l)=>{const c=ol(t,e,r,n,s,o,i,l);if(c{Re.length{bi=t},Ss=[];let $s=0;const xi=()=>{$s=0},Se=()=>($s>=Ss.length&&Ss.push(new Float32Array(8)),Ss[$s++]),ft=(t,e,r,n,s,o,i,l,c,u,a)=>{const h=1-c,d=h*t+c*r,g=h*e+c*n,m=h*r+c*s,f=h*n+c*o,b=h*s+c*i,x=h*o+c*l,y=h*d+c*m,P=h*g+c*f,S=h*m+c*b,M=h*f+c*x,$=h*y+c*S,T=h*P+c*M;u[0]=t,u[1]=e,u[2]=d,u[3]=g,u[4]=y,u[5]=P,u[6]=$,u[7]=T,a[0]=$,a[1]=T,a[2]=S,a[3]=M,a[4]=b,a[5]=x,a[6]=i,a[7]=l},Ye=(t,e,r,n,s,o,i,l,c,u)=>{const a=(3*r+3*s-t-i)*.25,h=(3*n+3*o-e-l)*.25;c[u]=a,c[u+1]=h,c[u+2]=i,c[u+3]=l},Mt=new Float32Array(8),St=new Float32Array(8),ll=(t,e,r,n,s,o,i,l)=>{const c=il(t,e,r,n,s,o,i,l),u=c*4;al(u);let a=0;if(c<=2)ft(t,e,r,n,s,o,i,l,.5,Mt,St),Ye(Mt[0],Mt[1],Mt[2],Mt[3],Mt[4],Mt[5],Mt[6],Mt[7],Re,a),a+=4,Ye(St[0],St[1],St[2],St[3],St[4],St[5],St[6],St[7],Re,a),a+=4;else if(c<=4){xi();const h=Se(),d=Se();ft(t,e,r,n,s,o,i,l,.5,h,d);const g=Se(),m=Se(),f=Se(),b=Se();ft(h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],.5,g,m),ft(d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],.5,f,b),Ye(g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],Re,a),a+=4,Ye(m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],Re,a),a+=4,Ye(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],Re,a),a+=4,Ye(b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7],Re,a),a+=4}else{xi();const h=Se(),d=Se();ft(t,e,r,n,s,o,i,l,.5,h,d);const g=Se(),m=Se(),f=Se(),b=Se();ft(h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],.5,g,m),ft(d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],.5,f,b);const x=Se(),y=Se(),P=Se(),S=Se(),M=Se(),$=Se(),T=Se(),w=Se();ft(g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],.5,x,y),ft(m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],.5,P,S),ft(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],.5,M,$),ft(b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7],.5,T,w),Ye(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],Re,a),a+=4,Ye(y[0],y[1],y[2],y[3],y[4],y[5],y[6],y[7],Re,a),a+=4,Ye(P[0],P[1],P[2],P[3],P[4],P[5],P[6],P[7],Re,a),a+=4,Ye(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],Re,a),a+=4,Ye(M[0],M[1],M[2],M[3],M[4],M[5],M[6],M[7],Re,a),a+=4,Ye($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],Re,a),a+=4,Ye(T[0],T[1],T[2],T[3],T[4],T[5],T[6],T[7],Re,a),a+=4,Ye(w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],Re,a),a+=4}return cl(a/4),{buffer:Re,count:bi}},Qr=(t,e,r,n,s,o)=>{if(me.length||wn(0,0),qr(s,o))return;const i=me.length,l=+me[i-3],c=+me[i-2],u=ll(l,c,t,e,r,n,s,o),a=u.buffer,h=u.count;for(let d=0;d{const n=r,s=r*.5522847498307936;Qr(t+n,e+s,t+s,e+n,t,e+n),Qr(t-s,e+n,t-n,e+s,t-n,e),Qr(t-n,e-s,t-s,e-n,t,e-n),Qr(t+s,e-n,t+n,e-s,t+n,e)},fl=(t,e,r,n,s)=>{t.$clearColorR=jr(e,0,1,0),t.$clearColorG=jr(r,0,1,0),t.$clearColorB=jr(n,0,1,0),t.$clearColorA=jr(s,0,1,0)},hl=(t,e,r,n)=>{p.clearColor(t,e,r,n),p.clear(p.COLOR_BUFFER_BIT|p.STENCIL_BUFFER_BIT),p.clearColor(0,0,0,0)},$t=[],yi=t=>{let e=-1,r=$t.length;for(;Math.abs(r-e)>1;){const n=Math.floor((r+e)/2);t<=$t[n].area?r=n:e=n}return r},dl=t=>{if($t.indexOf(t)>-1)return;const e=yi(t.area);t.dirty=!0,$t.splice(e,0,t)},ae=t=>{p.deleteTexture(t.resource)},et=[],pl=t=>{if(!(et.indexOf(t)>-1)){if(et.length>10){p.deleteRenderbuffer(t.resource);return}t.dirty=!0,et.push(t)}},Ts=[];let Tt;const ml=t=>{Tt=t.createFramebuffer()};let vi=null;const gl=t=>{vi=t.createFramebuffer()};let On=null;const bl=(t,e)=>{On=t.createFramebuffer(),t.bindFramebuffer(t.FRAMEBUFFER,On),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.resource,0),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,On)};let Bs=null;const Mi=t=>{Bs=t};let Ps=!1;const As=t=>{Ps=t};let Fs=null,Zr=null,Si=null,$i=null;const xl=t=>{Zr=t.createFramebuffer(),Fs=t.createFramebuffer(),Si=t.createFramebuffer(),$i=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,$i)},be=(t,e=!0)=>{t.msaa?(dl(t.color),t.color=null,t.stencil=null):(e&&ae(t.texture),t.texture=null,pl(t.stencil),t.stencil=null),Ts.push(t)};let yl=0;const vl=()=>({id:yl++,width:0,height:0,clipLevel:0,msaa:!1,mask:!1,color:null,texture:null,stencil:null}),Ml=()=>{const t={id:0,resource:p.createRenderbuffer(),width:0,height:0,area:0,dirty:!1};return{resource:p.createRenderbuffer(),stencil:t,width:0,height:0,area:0,dirty:!1}},Sl=t=>{if(!$t.length)return Ml();const e=yi(t);if(e<$t.length){const n=$t[e];return $t.splice(e,1),n}const r=$t.shift();if(!r)throw new Error("the color buffer is void.");return r},$l=(t,e)=>{t=Math.max(256,Fn(t)),e=Math.max(256,Fn(e));const r=Sl(t*e);return(r.width({id:Tl++,resource:p.createRenderbuffer(),width:0,height:0,area:0,dirty:!1}),Pl=(t,e)=>{if(!et.length)return Bl();let r=-1,n=1/0;for(let s=0;s=t&&o.height>=e&&o.area{const r=Pl(t,e);return(r.width!==t||r.height!==e)&&(r.width=t,r.height=e,r.area=t*e,r.dirty=!1,p.bindRenderbuffer(p.RENDERBUFFER,r.resource),p.renderbufferStorage(p.RENDERBUFFER,p.STENCIL_INDEX8,t,e)),r};let Fl=0;const Ti=(t,e)=>({id:Fl++,resource:p.createTexture(),width:t,height:e,area:t*e,smooth:!1});let gr=-1;const Bi=t=>{gr=t},ws=[null,null,null],wl=(t,e=!1)=>{gr!==p.TEXTURE0&&(Bi(p.TEXTURE0),p.activeTexture(p.TEXTURE0)),ws[0]=t,p.bindTexture(p.TEXTURE_2D,t.resource),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,e?p.LINEAR:p.NEAREST),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,e?p.LINEAR:p.NEAREST),p.texStorage2D(p.TEXTURE_2D,1,p.RGBA8,t.width,t.height)},Jr=(t,e,r=!1)=>{const n=Ti(t,e);return wl(n,r),n},we=(t,e,r=!1)=>{const n=Ts.length?Ts.pop():vl();return n.width=t,n.height=e,r?(n.msaa=!0,n.texture=null,n.color=$l(t,e),n.stencil=n.color.stencil):(n.msaa=!1,n.texture=Jr(t,e),n.color=null,n.stencil=Al(t,e)),n.mask=!1,n.clipLevel=0,n},Ol=()=>{Mi(null),Ps&&(As(!1),p.bindFramebuffer(p.FRAMEBUFFER,null))},El=()=>{const t=Ti(ut,ut);return p.activeTexture(p.TEXTURE3),p.bindTexture(p.TEXTURE_2D,t.resource),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,p.NEAREST),p.texStorage2D(p.TEXTURE_2D,1,p.RGBA8,t.width,t.height),p.activeTexture(gr!==-1?gr:p.TEXTURE0),t},Os=Number.MAX_VALUE,Es=-Number.MAX_VALUE;let qt=0;const Qt=t=>{qt=t},En=[],Rl=()=>En,Cl=t=>{En[qt]=t},Ul=()=>(qt in En||Cl(we(ut,ut,!0)),En[qt]),br=[];let Rs=null;const Pi=()=>(Rs||(Rs=El()),Rs),en=[],Ai=t=>(t in en||(en[t]=new Float32Array([Os,Os,Es,Es])),en[t]),Gl=()=>{for(let t=0;t{Cs=t},Ll=()=>{br.length=0,Qt(0);const t=Rl();for(let e=0;e{if(t.clearArraysInstanced(),t.$stackAttachmentObject.length)for(let s=0;s{It(),p.scissor(t,e,r,n),p.clear(p.COLOR_BUFFER_BIT|p.STENCIL_BUFFER_BIT),yt()},Ke=(t,e,r=null,n=!1)=>{(gr===-1||e!==gr)&&(Bi(e),p.activeTexture(e));const s=ws[t];s!==null&&r!==null&&s.id===r.id||r===s||(ws[t]=r,p.bindTexture(p.TEXTURE_2D,r?r.resource:null),r&&r.smooth!==n&&(r.smooth=n,p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,n?p.LINEAR:p.NEAREST),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,n?p.LINEAR:p.NEAREST)))},$e=(t,e=!1)=>{Ke(2,p.TEXTURE2,null),Ke(1,p.TEXTURE1,null),Ke(0,p.TEXTURE0,t,e)},_l=t=>{Mi(t),Ps||(As(!0),p.bindFramebuffer(p.FRAMEBUFFER,Tt)),t.msaa?(p.bindRenderbuffer(p.RENDERBUFFER,t.color.resource),p.framebufferRenderbuffer(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.RENDERBUFFER,t.color.resource)):($e(t.texture),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,t.texture.resource,0),Ke(0,p.TEXTURE0,null)),p.bindRenderbuffer(p.RENDERBUFFER,t.stencil.resource),p.framebufferRenderbuffer(p.FRAMEBUFFER,p.STENCIL_ATTACHMENT,p.RENDERBUFFER,t.stencil.resource)},Us=()=>{const t=O.currentAttachmentObject;if(!t)return;const e=t.clipLevel;let r=0;for(let n=0;n{wi=t},Gs=()=>wi,tn=new Map,rn=new Map,Vl=t=>{!t&&Gs()?(Rn(!1),Wr(),yt()):t&&!Gs()&&(Rn(!0),Yr(),Us())},Dl=(t,e)=>{const r=Bs;if(r&&e.id===r.id)return;_l(e),(!r||r.width!==e.width||r.height!==e.height)&&(Kc(e.width,e.height),p.viewport(0,0,e.width,e.height));const n=e.msaa?e.color:e.stencil;n.dirty&&(n.dirty=!1,t.clearRect(0,0,e.width,e.height)),Vl(e.mask)},Nl=t=>{t.$stack.push(xs(...t.$matrix))},zl=t=>{if(!t.$stack.length)return;const e=t.$stack.pop();t.$matrix[0]=e[0],t.$matrix[1]=e[1],t.$matrix[3]=e[3],t.$matrix[4]=e[4],t.$matrix[6]=e[6],t.$matrix[7]=e[7],Hc(e)},Xl=(t,e,r,n,s,o,i)=>{t[0]=e,t[1]=r,t[3]=n,t[4]=s,t[6]=o,t[7]=i},Yl=(t,e,r,n,s,o,i)=>{const l=t.$matrix[0],c=t.$matrix[1],u=t.$matrix[3],a=t.$matrix[4],h=t.$matrix[6],d=t.$matrix[7];t.$matrix[0]=e*l+r*u,t.$matrix[1]=e*c+r*a,t.$matrix[3]=n*l+s*u,t.$matrix[4]=n*c+s*a,t.$matrix[6]=o*l+i*u+h,t.$matrix[7]=o*c+i*a+d},Wl=t=>{t.globalAlpha=1,t.globalCompositeOperation="normal",t.imageSmoothingEnabled=!1},jl=t=>{t.$fillStyle.fill(1),t.$strokeStyle.fill(1)},Hl=(t,e,r,n)=>{It(),p.scissor(t,e,r+1,n+1),p.clear(p.COLOR_BUFFER_BIT|p.STENCIL_BUFFER_BIT),p.scissor(t,e,r,n)},Kl=()=>{yt()},ql=(t,e,r,n,s,o,i,l,c,u,a,h,d)=>{const g=t.length-5;for(let m=3;m(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t);let nn=new Float32Array(128),xr=0;const Ql=()=>nn,Zl=()=>xr,yr=t=>{const e=t.length+xr;if(e>nn.length){const r=new Float32Array(Oi(e));r.set(nn),r.set(t,xr),nn=r}else nn.set(t,xr);xr+=t.length},We=[],Bt=[],Ei=()=>{Bt.length=0,xr=0,We.length=0};let Ls=new Float32Array(32);const Jl=t=>(Ls.length{const r=e==="fill"?O.$fillStyle:O.$strokeStyle,n=r[0],s=r[1],o=r[2],i=r[3],l=O.$matrix,c=pt,u=mt,a=l[0]/c,h=l[3]/c,d=l[6]/c,g=l[1]/u,m=l[4]/u,f=l[7]/u;let b=0;for(let P=0;P{const e=pr();if(!e.length)return;Bt.push(t);const r=Cn(e);yr(r.buffer),We.push(r.indexCount)},qe=[],tu=(t,e,r,n,s,o)=>{const i=pr();if(!i.length)return;Bt.push(t===0?"linear":"radial");const l=Cn(i);yr(l.buffer),We.push(l.indexCount),qe.push(e,r,n,s),t===1&&qe.push(o)},ru=(t,e,r)=>{const n=Math.sqrt(t*t+e*e);return{x:-(e/n)*r,y:t/n*r}},nu=(t,e,r)=>{const n={x:e.x-t.x,y:e.y-t.y},s=ru(n.x,n.y,r),o={x:t.x+s.x,y:t.y+s.y},i={x:e.x+s.x,y:e.y+s.y},l={x:t.x-s.x,y:t.y-s.y},c={x:e.x-s.x,y:e.y-s.y};return[o.x,o.y,!1,i.x,i.y,!1,c.x,c.y,!1,l.x,l.y,!1,o.x,o.y,!1]},ks=(t,e,r)=>({x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r}),su=(t,e,r,n=.5)=>{const s=ks(t,e,n),o=ks(e,r,n),i=ks(s,o,n);return[[t,s,i],[i,o,r]]},ou=(t,e,r,n=4)=>{let s=[[t,e,r]];for(let o=0;o({x:(1-t)**2*e.x+2*(1-t)*t*r.x+t**2*n.x,y:(1-t)**2*e.y+2*(1-t)*t*r.y+t**2*n.y}),au=(t,e,r,n)=>({x:2*(1-t)*(r.x-e.x)+2*t*(n.x-r.x),y:2*(1-t)*(r.y-e.y)+2*t*(n.y-r.y)}),cu=t=>{const e=Math.sqrt(t.x*t.x+t.y*t.y);return e===0?{x:0,y:0}:{x:t.x/e,y:t.y/e}},Ri=(t,e,r,n)=>{const s=[0,.5,1],o=[];for(let i=0;i{const s=ou(t,e,r,5),o=[],i=[];for(let h=0;h{const s=[];for(let i=0;i1e-4||s.push(l,c)}return s},Mr=new OffscreenCanvas(1,1).getContext("2d"),Sr=(t,e)=>{Mr.beginPath(),Mr.moveTo(e[0],e[1]);for(let r=3;r{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=n[o].length>15,c=n[i].length>15;if(l&&c)return;const u=vr(t,e,r,n[o]),a=vr(t,e,r,n[i]),h=Sr(u,n[i]);if(!h)return;const d=Sr(a,n[o]);if(!d)return;const g=Math.atan2(h[1]-e,h[0]-t);let f=Math.atan2(d[1]-e,d[0]-t)-g;f>Math.PI?f-=2*Math.PI:f<-Math.PI&&(f+=2*Math.PI);const b=Math.abs(f);if(b<.1||b>Math.PI-.1)return;const x=8,y=f/x,P=[t,e,!1];for(let S=0;S<=x;S++){const M=g+S*y,$=t+r*Math.cos(M),T=e+r*Math.sin(M);P.push($,T,!1)}n.splice(-1,0,P)},Ui=(t,e,r,n,s=!1)=>{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=n[o].length>15,c=n[i].length>15;if(l&&c)return;const u=vr(t,e,r,n[o]),a=vr(t,e,r,n[i]);if(u[0]===a[0]&&u[1]===a[1]||u[0]===a[2]&&u[1]===a[3])return;const h=Sr(u,n[i]);if(!h)return;const d=Sr(a,n[o]);d&&n.splice(-1,0,[t,e,!1,h[0],h[1],!1,d[0],d[1],!1,t,e,!1])},uu=(t,e,r)=>{for(let n=0;n<2;++n){let s=0,o=0,i=0,l=0;n===0?(s=t[0],o=t[1],i=t[3],l=t[4]):(s=t[t.length-3],o=t[t.length-2],i=t[t.length-6],l=t[t.length-5]);const c=i-s,u=l-o,a=Math.atan2(u,c),h=a+Math.PI/2,d=a-Math.PI/2,g=16,m=(d-h)/g,f=[];for(let b=0;b<=g;b++){const x=d+m*b,y=s+e*Math.cos(x),P=o+e*Math.sin(x);f.push(y,P,!1)}n===0?r.unshift(f):r.push(f)}},fu=(t,e,r)=>{for(let n=0;n<2;++n){let s=0,o=0,i=0,l=0;n===0?(s=t[0],o=t[1],i=t[3],l=t[4]):(s=t[t.length-3],o=t[t.length-2],i=t[t.length-6],l=t[t.length-5]);const c=-(i-s),u=-(l-o),a=Math.sqrt(c*c+u*u);if(a===0)continue;const h=c/a,d=u/a,g=s+e*h,m=o+e*d,f=-d,b=h,x=[g+e*h+e*f,m+e*d+e*b,!1,g+e*h-e*f,m+e*d-e*b,!1,g-e*h-e*f,m-e*d-e*b,!1,g+e*h+e*f,m+e*d+e*b,!1,g-e*h-e*f,m-e*d-e*b,!1,g-e*h+e*f,m-e*d+e*b,!1];n===0?r.unshift(x):r.push(x)}},Gi=(t,e,r,n,s,o=!1)=>{const i=o?0:s.length-1,l=o?s.length-1:s.length-2,c=s[i].length>15,u=s[l].length>15;if(c&&u)return;const a=vr(t.x,t.y,n,s[i]),h=vr(t.x,t.y,n,s[l]);if(a[0]===h[0]&&a[1]===h[1]||a[0]===h[2]&&a[1]===h[3])return;const d=Sr(a,s[l]);if(!d)return;const g=Sr(h,s[i]);if(!g)return;const m=e.x-t.x,f=e.y-t.y,b=Math.hypot(m,f),x={x:m/b,y:f/b},y=r.x-t.x,P=r.y-t.y,S=Math.hypot(y,P),M={x:y/S,y:P/S},$=x.x,T=x.y,w=M.x,E=M.y,F=$*E-T*w;if(F===0){s.splice(-1,0,[t.x,t.y,!1,d[0],d[1],!1,g[0],g[1],!1]);return}const A=((g[0]-d[0])*E-(g[1]-d[1])*w)/F,R=d[0]+A*$,v=d[1]+A*T;s.splice(-1,0,[t.x,t.y,!1,d[0],d[1],!1,R,v,!1,t.x,t.y,!1,g[0],g[1],!1,R,v,!1])},hu={x:0,y:0},du={x:0,y:0},pu={x:0,y:0},mu={x:0,y:0},gu=(t,e)=>{const r=hu;r.x=t[0],r.y=t[1];const n=du;n.x=0,n.y=0;const s=pu;s.x=0,s.y=0;const o=mu;o.x=0,o.y=0;const i=[];for(let g=3;g1)switch(O.joints){case 0:Ui(r.x,r.y,e,i);break;case 1:o.x=t[g-6],o.y=t[g-5],Gi(r,s,o,e,i);break;case 2:Ci(r.x,r.y,e,i);break}r.x=s.x,r.y=s.y}const l=t[0],c=t[1],u=t[t.length-3],a=t[t.length-2],h=1e-4;if(Math.abs(l-u)1)switch(O.joints){case 0:Ui(l,c,e,i,!0);break;case 1:r.x=l,r.y=c,s.x=t[3],s.y=t[4],o.x=t[t.length-6],o.y=t[t.length-5],Gi(r,s,o,e,i,!0);break;case 2:Ci(l,c,e,i,!0);break}else switch(O.caps){case 1:uu(t,e,i);break;case 2:fu(t,e,i);break}return i},Is=t=>{const e=O.thickness/2,r=Hr();for(let s=0;s{const i=pr(!0);if(!i.length)return;Bt.push(t===0?"linear":"radial");const l=Is(i);yr(l.buffer),We.push(l.indexCount),qe.push(e,r,n,s),t===1&&qe.push(o)},$r=new Map,Li=()=>{$r.clear()},xu=t=>{$r.set(We.length,t)},Un=()=>({id:Jc(),resource:p.createVertexArray(),vertexBuffer:p.createBuffer(),vertexLength:0});let _s;const Pt=t=>{_s&&_s.id===t.id||(_s=t,p.bindVertexArray(t.resource))},yu=()=>{const t=Un();Pt(t),p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer);const e=new Float32Array([0,0,1,0,1,1,0,0,1,1,0,1]);return p.bufferData(p.ARRAY_BUFFER,e,p.STATIC_DRAW),p.enableVertexAttribArray(0),p.vertexAttribPointer(0,2,p.FLOAT,!1,0,0),t},Gn=[],tt=new Float32Array([0,0,0,1,1,0,1,1]);let Vs;const vu=t=>{Vs=t.createBuffer()};let ki;const Mu=t=>{ki=t};let Ds;const Ln=()=>(Ds||(Ds=yu()),Ds),Su=()=>{if(Gn.length)return Gn.pop();const t=Un();return Pt(t),p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer),p.enableVertexAttribArray(0),p.enableVertexAttribArray(1),p.enableVertexAttribArray(2),p.enableVertexAttribArray(3),p.enableVertexAttribArray(4),p.enableVertexAttribArray(5),p.vertexAttribPointer(0,2,p.FLOAT,!1,68,0),p.vertexAttribPointer(1,2,p.FLOAT,!1,68,8),p.vertexAttribPointer(2,4,p.FLOAT,!1,68,16),p.vertexAttribPointer(3,3,p.FLOAT,!1,68,32),p.vertexAttribPointer(4,3,p.FLOAT,!1,68,44),p.vertexAttribPointer(5,3,p.FLOAT,!1,68,56),t},Ii=()=>{const t=Su();Pt(t);const e=Ql(),r=Zl();return p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer),t.vertexLength{Gn.indexOf(t)>-1||Gn.push(t)};let $u=0;const Tu=(t,e)=>{const r=p.createProgram(),n=p.createShader(p.VERTEX_SHADER);p.shaderSource(n,t),p.compileShader(n);const s=p.createShader(p.FRAGMENT_SHADER);return p.shaderSource(s,e),p.compileShader(s),p.attachShader(r,n),p.attachShader(r,s),p.linkProgram(r),p.detachShader(r,n),p.detachShader(r,s),p.deleteShader(n),p.deleteShader(s),{id:$u++,resource:r}},Bu=(t,e,r=!1)=>{const n=p.getProgramParameter(t,p.ACTIVE_UNIFORMS);for(let s=0;s{Vi!==t.id&&(Vi=t.id,p.useProgram(t.resource))},Au=t=>{for(const e of t.values())e.method===void 0||e.assign===void 0||(e.assign<0?e.method(e.array):e.assign>0&&(e.assign--,e.method(e.array)))};class _e{_$programObject;_$uniformMap;highp;mediump;textures;constructor(e,r,n=!1){this._$programObject=Tu(e,r),this._$uniformMap=new Map,Bu(this._$programObject.resource,this._$uniformMap,n);const s=new Float32Array(0);this.highp=this._$uniformMap.get("u_highp")?.array??s,this.mediump=this._$uniformMap.get("u_mediump")?.array??s,this.textures=this._$uniformMap.get("u_textures")?.array??s}useProgram(){Pu(this._$programObject)}bindUniform(){Au(this._$uniformMap)}}const At=new Map,Fu=()=>\` +vec2 applyMatrix(in vec2 vertex) { + mat3 matrix = mat3(a_matrix0, a_matrix1, a_matrix2); + return (matrix * vec3(vertex, 1.0)).xy; +}\`,wu=t=>\` +vec2 applyMatrix(in vec2 vertex) { + mat3 parent_matrix = mat3( + u_highp[\${t}].xyz, + u_highp[\${t+1}].xyz, + u_highp[\${t+2}].xyz + ); + mat3 ancestor_matrix = mat3( + u_highp[\${t+3}].xyz, + u_highp[\${t+4}].xyz, + u_highp[\${t+5}].xyz + ); + + vec2 parent_offset = vec2(u_highp[\${t+2}].w, u_highp[\${t+3}].w); + vec2 parent_size = vec2(u_highp[\${t+4}].w, u_highp[\${t+5}].w); + vec4 grid_min = u_highp[\${t+6}]; + vec4 grid_max = u_highp[\${t+7}]; + + vec2 position = (parent_matrix * vec3(vertex, 1.0)).xy; + position = (position - parent_offset) / parent_size; + + vec4 ga = grid_min; + vec4 gb = grid_max - grid_min; + vec4 gc = vec4(1.0) - grid_max; + + vec2 pa = position; + vec2 pb = position - grid_min.st; + vec2 pc = position - grid_max.st; + + position = (ga.pq / ga.st) * min(pa, ga.st) + + (gb.pq / gb.st) * clamp(pb, vec2(0.0), gb.st) + + (gc.pq / gc.st) * max(vec2(0.0), pc); + + position = position * parent_size + parent_offset; + position = (ancestor_matrix * vec3(position, 1.0)).xy; + + position = position + vec2(u_highp[\${t+8}].x, u_highp[\${t+8}].y); + return position / vec2(u_highp[0].w, u_highp[1].w); +}\`,Ou=()=>"layout (location = 1) in vec2 a_bezier;",Eu=()=>\`layout (location = 3) in vec3 a_matrix0; +layout (location = 4) in vec3 a_matrix1; +layout (location = 5) in vec3 a_matrix2;\`,Ru=()=>"out vec2 v_uv;",Cu=()=>"out vec2 v_bezier;",Uu=()=>\` + mat3 uv_matrix = mat3( + u_highp[0].xyz, + u_highp[1].xyz, + u_highp[2].xyz + ); + mat3 inverse_matrix = mat3( + u_highp[3].xyz, + u_highp[4].xyz, + vec3(u_highp[2].w, u_highp[3].w, u_highp[4].w) + ); + v_uv = (inverse_matrix * uv_matrix * vec3(a_vertex, 1.0)).xy;\`,Gu=()=>"v_bezier = a_bezier;",Lu=()=>"layout (location = 2) in vec4 a_color;",ku=()=>"out vec4 v_color;",Iu=()=>"v_color = a_color;",kn=(t,e,r,n)=>{const s=r?Ou():"",o=r?Cu():e?Ru():"",i=r?Gu():e?Uu():"",l=n?wu(e?5:0):Fu(),c=r?"":Lu(),u=r?"":ku(),a=r?"":Iu(),h=n?"":Eu(),d=t>1?\`uniform vec4 u_highp[\${t}];\`:"";return\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +\${s} +\${c} +\${h} + +\${d} +\${o} +\${u} +\${l} + +void main() { + \${a} + \${i} + vec2 pos = applyMatrix(a_vertex); + pos = pos * 2.0 - 1.0; + gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0); +}\`},_u=()=>\`#version 300 es +layout (location = 0) in vec2 a_vertex; +void main() { + vec2 pos = a_vertex * 2.0 - 1.0; + gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0); +}\`,Vu=()=>\`#version 300 es +precision mediump float; + +in vec4 v_color; +out vec4 o_color; + +void main() { + o_color = vec4(v_color.rgb * v_color.a, v_color.a); +}\`,Du=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump[1]; + +in vec2 v_uv; +out vec4 o_color; + +void main() { + vec2 uv = vec2(v_uv.x, u_mediump[0].y - v_uv.y) / u_mediump[0].xy; + + vec4 src = texture(u_texture, uv); + o_color = src; +}\`,Nu=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump[1]; + +in vec2 v_uv; +out vec4 o_color; + +void main() { + vec2 uv = fract(vec2(v_uv.x, -v_uv.y) / u_mediump[0].xy); + + vec4 src = texture(u_texture, uv); + o_color = src; +}\`,zu=()=>\`#version 300 es +precision mediump float; + +in vec2 v_bezier; +out vec4 o_color; + +void main() { + float f_val = v_bezier.x * v_bezier.x - v_bezier.y; + + float dx = dFdx(f_val); + float dy = dFdy(f_val); + + float dist = f_val / length(vec2(dx, dy)); + float alpha = smoothstep(0.5, -0.5, dist); + + if (alpha > 0.001) { + o_color = vec4(min(alpha, 1.0)); + } else { + discard; + } +}\`,Xu=()=>\`#version 300 es +precision mediump float; +out vec4 o_color; +void main() { + o_color = vec4(1.0); +}\`,sn=t=>{const e=\`m\${t?"y":"n"}\`;if(At.has(e))return At.get(e);const r=new _e(kn(t?9:0,!1,!0,t),zu());return At.set(e,r),r},on=(t,e)=>{const r=t.highp;r[0]=e[0],r[1]=e[1],r[2]=0,r[4]=e[2],r[5]=e[3],r[6]=0,r[8]=e[4],r[9]=e[5],r[10]=1,r[12]=e[6],r[13]=e[7],r[14]=0,r[16]=e[8],r[17]=e[9],r[18]=0,r[20]=e[10],r[21]=e[11],r[22]=1,r[3]=pt,r[7]=mt,r[11]=e[12],r[15]=e[13],r[19]=e[14],r[23]=e[15],r[24]=e[16],r[25]=e[17],r[26]=e[18],r[27]=e[19],r[28]=e[20],r[29]=e[21],r[30]=e[22],r[31]=e[23],r[32]=e[24],r[33]=e[25]};let In="normal";const Di=t=>{In=t};let Ft=600;const _t=t=>{Ft=t},Ce=()=>{Ft!==613&&(_t(613),p.blendFunc(p.ONE,p.ONE_MINUS_SRC_ALPHA))},rt=(t,e,r,n)=>{t.useProgram(),t.bindUniform(),Ce(),Pt(e),p.drawArrays(p.TRIANGLES,r,n)},Ns=()=>{const t="rmnn";if(At.has(t))return At.get(t);const e=new _e(_u(),Xu());return At.set(t,e),e},Yu=()=>{const t=O.currentAttachmentObject;if(!t)return;const e=1<{const t=O.currentAttachmentObject;if(!t)return;const e=tn.get(t.clipLevel),r=e[0],n=e[1],s=e[2],o=e[3],i=Math.ceil(Math.abs(s-r)),l=Math.ceil(Math.abs(o-n));It(),p.scissor(r,t.height-n-l,i,l);const c=Ii();let u=rn.get(t.clipLevel),a=0,h=null;const d=We.length;for(let g=0;g7&&(Yu(),u=t.clipLevel+1)}rn.set(t.clipLevel,u),_i(c),Ei(),Li(),yt()},ju=(t,e,r)=>{if(t.used){const l=t.left?.insert(e,r);return l||t.right?.insert(e,r)||null}if(e>t.w||r>t.h)return null;if(e===t.w&&r===t.h)return t.used=!0,t;const n=e+1,s=r+1,o=t.w-n,i=t.h-s;return o>i?(t.left=t.create(t.index,t.x,t.y,e,t.h),t.right=t.create(t.index,t.x+n,t.y,o,t.h)):(t.left=t.create(t.index,t.x,t.y,t.w,r),t.right=t.create(t.index,t.x,t.y+s,t.w,i)),t.used=!0,t.left.insert(e,r)},Hu=(t,e,r,n,s)=>t.left?.dispose(e,r,n,s)?(!t.left.used&&!t.right?.used&&(t.left&&t.left.release(),t.right&&t.right.release(),t.left=t.right=null,t.used=!1),!0):t.right?.dispose(e,r,n,s)?(!t.right.used&&!t.left?.used&&(t.left&&t.left.release(),t.right&&t.right.release(),t.left=t.right=null,t.used=!1),!0):e===t.x&&r===t.y&&n===t.w&&s===t.h?(t.used=!1,!0):!1,zs=[];class Xs{index;x;y;w;h;left;right;used;constructor(e,r,n,s,o){this.index=e,this.x=r,this.y=n,this.w=s,this.h=o,this.left=null,this.right=null,this.used=!1}insert(e,r){return ju(this,e,r)}dispose(e,r,n,s){return Hu(this,e,r,n,s)}create(e,r,n,s,o){const i=zs.length?zs.pop():new Xs(e,0,0,0,0);return i.index=e,i.x=r,i.y=n,i.w=s,i.h=o,i.left=null,i.right=null,i.used=!1,i}release(){this.left&&(this.left.release(),this.left=null),this.right&&(this.right.release(),this.right=null),this.used=!1,zs.push(this)}}class Ni{_$root;constructor(e,r,n){this._$root=new Xs(e,0,0,r,n)}insert(e,r){return this._$root.insert(e,r)}dispose(e,r,n,s){return this._$root.dispose(e,r,n,s)}}const Ys=(t,e)=>{const r=qt;br[r]||(br[r]=new Ni(r,ut,ut));const s=br[r].insert(t,e);if(s)return s;for(let o=0;o<10;o++){if(r===o)continue;Qt(o);const i=br[o];if(!i)return Ys(t,e);const l=i.insert(t,e);if(l)return l}return Ys(t,e)},Ku=t=>{const e=br[t.index];e&&e.dispose(t.x,t.y,t.w,t.h)},Ws=()=>\` +float isInside(in vec2 uv) { + return step(4.0, dot(step(vec4(0.0, uv.x, 0.0, uv.y), vec4(uv.x, 1.0, uv.y, 1.0)), vec4(1.0))); +}\`,zi=t=>\` + vec4 mul = u_mediump[\${t}]; + vec4 add = u_mediump[\${t+1}]; + + if (mul.x != 1.0 || mul.y != 1.0 || mul.z != 1.0 || mul.w != 1.0 + || add.x != 0.0 || add.y != 0.0 || add.z != 0.0 + ) { + src.rgb /= max(0.0001, src.a); + src = clamp(src * mul + add, 0.0, 1.0); + src.rgb *= src.a; + } +\`,Xi=t=>{const e=t?"uniform vec4 u_mediump[2];":"",r=t?zi(0):"";return\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +\${e} + +in vec2 v_coord; +out vec4 o_color; + +void main() { + vec4 src = texture(u_texture, v_coord); + \${r} + o_color = src; +}\`},qu=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; + +in vec4 v_mul; +in vec4 v_add; +in vec2 v_coord; +out vec4 o_color; + +void main() { + vec4 src = texture(u_texture, v_coord); + + if (v_mul.x != 1.0 || v_mul.y != 1.0 || v_mul.z != 1.0 || v_mul.w != 1.0 + || v_add.x != 0.0 || v_add.y != 0.0 || v_add.z != 0.0 + ) { + src.rgb /= max(0.0001, src.a); + src = clamp(src * v_mul + v_add, 0.0, 1.0); + src.rgb *= src.a; + } + + o_color = src; +}\`,Qu=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t);class Zu{buffer;offset;constructor(){this.buffer=new Float32Array(256),this.offset=0}push(...e){this.buffer.length\`#version 300 es + +layout (location = 0) in vec2 a_vertex; + +out vec2 v_coord; + +void main() { + v_coord = a_vertex; + + vec2 position = a_vertex * 2.0 - 1.0; + gl_Position = vec4(position, 0.0, 1.0); +}\`,ef=()=>\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +uniform vec4 u_highp[3]; + +out vec2 v_coord; + +void main() { + v_coord = a_vertex; + + mat3 matrix = mat3( + u_highp[0].x, u_highp[0].y, 0.0, + u_highp[0].z, u_highp[0].w, 0.0, + u_highp[1].x, u_highp[1].y, 1.0 + ); + + vec2 size = u_highp[1].zw; + vec2 viewport = vec2(u_highp[2].x, u_highp[2].y); + + vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y); + position = position * size; + position = (matrix * vec3(position, 1.0)).xy; + position /= viewport; + + position = position * 2.0 - 1.0; + gl_Position = vec4(position.x, -position.y, 0.0, 1.0); +}\`,tf=()=>\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +uniform vec4 u_highp[2]; + +out vec2 v_coord; + +void main() { + v_coord = a_vertex; + + vec2 offset = u_highp[0].xy; + vec2 size = u_highp[0].zw; + vec2 viewport = vec2(u_highp[1].x, u_highp[1].y); + + vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y); + position = position * size + offset; + position /= viewport; + + position = position * 2.0 - 1.0; + gl_Position = vec4(position.x, -position.y, 0.0, 1.0); +}\`,rf=()=>\`#version 300 es + +layout (location = 0) in vec2 a_vertex; +layout (location = 1) in vec4 a_rect; +layout (location = 2) in vec4 a_size; +layout (location = 3) in vec2 a_offset; +layout (location = 4) in vec4 a_matrix; +layout (location = 5) in vec4 a_mul; +layout (location = 6) in vec4 a_add; + +out vec2 v_coord; +out vec4 v_mul; +out vec4 v_add; + +void main() { + v_coord = a_vertex * a_rect.zw + a_rect.xy; + v_mul = a_mul; + v_add = a_add; + + vec2 position = vec2(a_vertex.x, 1.0 - a_vertex.y); + position = position * a_size.xy; + + mat3 matrix = mat3( + a_matrix.x, a_matrix.y, 0.0, + a_matrix.z, a_matrix.w, 0.0, + a_offset.x, a_offset.y, 1.0 + ); + + position = (matrix * vec3(position, 1.0)).xy; + position /= a_size.zw; + + position = position * 2.0 - 1.0; + gl_Position = vec4(position.x, -position.y, 0.0, 1.0); +}\`,nt=new Map,js=()=>{if(nt.has("i"))return nt.get("i");const e=new Ju(rf(),qu());return nt.set("i",e),e},nf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + return src + dst - dst * src.a; +}\`,sf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(dst.rgb - src.rgb, src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,of=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + vec4 c = src * dst; + + return a + b + c; +}\`,af=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(mix(src.rgb, dst.rgb, step(src.rgb, dst.rgb)), src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,cf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(mix(src.rgb, dst.rgb, step(dst.rgb, src.rgb)), src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,lf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 mul = src * dst; + vec3 c1 = 2.0 * mul.rgb; + vec3 c2 = 2.0 * (src.rgb + dst.rgb - mul.rgb) - 1.0; + vec4 c = vec4(mix(c1, c2, step(vec3(0.5), dst.rgb)), mul.a); + c.rgb *= c.a; + + return a + b + c; +}\`,uf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 mul = src * dst; + vec3 c1 = 2.0 * mul.rgb; + vec3 c2 = 2.0 * (src.rgb + dst.rgb - mul.rgb) - 1.0; + vec4 c = vec4(mix(c1, c2, step(vec3(0.5), src.rgb)), mul.a); + c.rgb *= c.a; + + return a + b + c; +}\`,ff=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 a = src - src * dst.a; + vec4 b = dst - dst * src.a; + + src.rgb /= src.a; + dst.rgb /= dst.a; + + vec4 c = vec4(abs(src.rgb - dst.rgb), src.a * dst.a); + c.rgb *= c.a; + + return a + b + c; +}\`,hf=()=>\` +vec4 blend (in vec4 src, in vec4 dst) { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + vec4 b = dst - dst * src.a; + vec4 c = vec4(src.a - dst.rgb * src.a, src.a); + + return b + c; +}\`,df=(t,e)=>{let r;switch(t){case"subtract":r=sf();break;case"multiply":r=of();break;case"lighten":r=af();break;case"darken":r=cf();break;case"overlay":r=lf();break;case"hardlight":r=uf();break;case"difference":r=ff();break;case"invert":r=hf();break;default:r=nf();break}const n="uniform vec4 u_mediump[2];",s=zi(0);return\`#version 300 es +precision mediump float; + +uniform sampler2D u_textures[2]; +\${n} + +in vec2 v_coord; +out vec4 o_color; + +\${r} + +void main() { + vec4 dst = texture(u_textures[0], v_coord); + vec4 src = texture(u_textures[1], v_coord); + \${s} + o_color = blend(src, dst); +}\`},Yi=(t,e)=>{const r=\`i\${t}y\`;if(nt.has(r))return nt.get(r);const n=new _e(Zt(),df(t));return nt.set(r,n),n},Wi=()=>{if(!O.newDrawState)return;const t=O.currentAttachmentObject,e=O.atlasAttachmentObject;O.bind(e),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,On),As(!1);const n=Ai(qt);It(),p.scissor(n[0],n[1],n[2]-n[0],n[3]-n[1]),p.blitFramebuffer(0,0,e.width,e.height,0,0,e.width,e.height,p.COLOR_BUFFER_BIT,p.NEAREST),yt(),t&&O.bind(t),O.newDrawState=!1},ji=t=>{const e=qt;Qt(t.index),Wi(),p.bindFramebuffer(p.FRAMEBUFFER,Fs);const r=Pi();p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,r.resource,0),p.bindFramebuffer(p.FRAMEBUFFER,Zr);const n=Jr(t.w,t.h);return p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,n.resource,0),p.bindFramebuffer(p.FRAMEBUFFER,null),p.bindFramebuffer(p.READ_FRAMEBUFFER,Fs),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,Zr),p.blitFramebuffer(t.x,t.y,t.x+t.w,t.y+t.h,0,0,t.w,t.h,p.COLOR_BUFFER_BIT,p.NEAREST),Qt(e),p.bindFramebuffer(p.READ_FRAMEBUFFER,Tt),p.bindFramebuffer(p.FRAMEBUFFER,Tt),n},_n=(t,e,r=!1)=>{Ke(2,p.TEXTURE2,null,r),Ke(1,p.TEXTURE1,e,r),Ke(0,p.TEXTURE0,t,r)},Jt=()=>{if(nt.has("p"))return nt.get("p");const e=new _e(tf(),Xi(!1));return nt.set("p",e),e},wt=(t,e,r)=>{const n=t.highp,s=O.$matrix;n[0]=s[6],n[1]=s[7],n[2]=e,n[3]=r,n[4]=pt,n[5]=mt},xe=t=>{t.useProgram(),t.bindUniform(),Pt(Ln()),p.drawArrays(p.TRIANGLES,0,6)};let er=null;const Hi=(t,e,r,n)=>{const s=O.currentAttachmentObject,o=O.$mainAttachmentObject;return O.bind(o),p.bindFramebuffer(p.FRAMEBUFFER,Zr),(!er||er.width!==o.width||er.height!==o.height)&&(er=Jr(o.width,o.height)),$e(er),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,er.resource,0),p.bindFramebuffer(p.FRAMEBUFFER,null),p.bindFramebuffer(p.READ_FRAMEBUFFER,Tt),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,Zr),It(),p.scissor(t,o.height-e-n,r+1,n+1),p.blitFramebuffer(0,0,o.width,o.height,0,0,o.width,o.height,p.COLOR_BUFFER_BIT,p.NEAREST),yt(),p.bindFramebuffer(p.FRAMEBUFFER,Tt),s&&O.bind(s),er},Vn=(t,e,r,n)=>{const s=O.currentAttachmentObject,o=Hi(t,e,r,n),i=we(r,n,!1);O.bind(i),O.save(),O.setTransform(1,0,0,1,-t,-e);const l=Jt();wt(l,o.width,o.height),Ce(),$e(o),xe(l);const c=i.texture;return O.restore(),be(i,!1),s&&O.bind(s),c},Tr=()=>{Ft!==610&&(_t(610),p.blendFunc(p.ONE,p.ZERO))},Ki=t=>{$e(t),Tr();const e=Jt();wt(e,t.width,t.height),xe(e),Ce()},qi=(t,e,r,n,s,o,i,l,c)=>{const u=t.textures;u[0]=0,u[1]=1;const a=t.mediump;a[0]=e,a[1]=r,a[2]=n,a[3]=s,a[4]=o,a[5]=i,a[6]=l,a[7]=c},Dn=(t=!1)=>{const e=\`m\${t?"y":"n"}\`;if(nt.has(e))return nt.get(e);const r=new _e(ef(),Xi(t));return nt.set(e,r),r},Nn=(t,e,r)=>{const n=t.highp,s=O.$matrix;n[0]=s[0],n[1]=s[1],n[2]=s[3],n[3]=s[4],n[4]=s[6],n[5]=s[7],n[6]=e,n[7]=r,n[8]=pt,n[9]=mt},pf=(t,e,r,n,s,o)=>{const i=o[0],l=o[1],c=o[2],u=O.globalAlpha,a=o[4]/255,h=o[5]/255,d=o[6]/255,g=0,m=O.$matrix;switch(O.globalCompositeOperation){case"normal":case"layer":case"add":case"screen":case"alpha":case"erase":case"copy":{if(In!==O.globalCompositeOperation||Cs!==t.index){Qt(Cs);const b=O.globalCompositeOperation;O.globalCompositeOperation=In,O.newDrawState=!0,O.drawArraysInstanced(),O.newDrawState=!0,O.globalCompositeOperation=b,Di(O.globalCompositeOperation),Fi(t.index),Qt(t.index)}const f=js();Ve.pushDisplayObjectBuffer((t.x+.5)/ut,(t.y+.5)/ut,(t.w-1)/ut,(t.h-1)/ut,t.w,t.h,pt,mt,m[6],m[7],m[0],m[1],m[3],m[4],i,l,c,u,a,h,d,g),f.count++}break;default:{const f=O.currentAttachmentObject;O.drawArraysInstanced();const b=Math.ceil(Math.abs(n-e)),x=Math.ceil(Math.abs(s-r));let y=0,P=0,S=ji(t);if(m[0]!==1||m[1]!==0||m[3]!==0||m[4]!==1){const w=we(b,x,!1),E=dr(m[0],m[1],m[3],m[4],b/2,x/2),F=dr(1,0,0,1,-t.w/2,-t.h/2),A=dr(E[0]*F[0]+E[2]*F[1],E[1]*F[0]+E[3]*F[1],E[0]*F[2]+E[2]*F[3],E[1]*F[2]+E[3]*F[3],E[0]*F[4]+E[2]*F[5]+E[4],E[1]*F[4]+E[3]*F[5]+E[5]);O.save(),O.bind(w),O.setTransform(A[0],A[1],A[2],A[3],A[4],A[5]),y=A[4],P=A[5];const R=Dn();Nn(R,S.width,S.height),$e(S,!0),xe(R),ae(S),S=w.texture,be(w,!1),f&&O.bind(f),O.restore()}(y||P)&&(m[6]-=y,m[7]-=P);const M=Vn(m[6],m[7],b,x),$=we(b,x,!1);O.bind($),_n(M,S);const T=Yi(O.globalCompositeOperation);qi(T,i,l,c,u,a,h,d,g),xe(T),f&&O.bind(f),Ki($.texture),(y||P)&&(m[6]+=y,m[7]+=P),ae(S),ae(M),be($),Di(O.globalCompositeOperation),Fi(t.index),Qt(t.index)}break}},mf=()=>{js().clear()};let Hs=0;const gf=()=>{Pt(ki),p.bindBuffer(p.ARRAY_BUFFER,Vs),Ve.buffer.length>Hs&&(Hs=Ve.buffer.length,p.bufferData(p.ARRAY_BUFFER,Hs*4,p.STREAM_DRAW)),p.bufferSubData(p.ARRAY_BUFFER,0,Ve.buffer,0,Ve.offset)},bf=t=>{t.useProgram(),t.bindUniform(),gf(),p.drawArraysInstanced(p.TRIANGLES,0,6,t.count)},xf=()=>{Ft!==611&&(_t(611),p.blendFunc(p.ONE,p.ONE))},yf=()=>{Ft!==641&&(_t(641),p.blendFunc(p.ONE_MINUS_DST_COLOR,p.ONE))},vf=()=>{Ft!==606&&(_t(606),p.blendFunc(p.ZERO,p.SRC_ALPHA))},Ks=()=>{Ft!==603&&(_t(603),p.blendFunc(p.ZERO,p.ONE_MINUS_SRC_ALPHA))},Qi=t=>{switch(t){case"add":xf();break;case"screen":yf();break;case"alpha":vf();break;case"erase":Ks();break;case"copy":Tr();break;default:Ce();break}},Mf=()=>{const t=js();t.count&&(Wi(),Qi(In),bf(t),t.clear())},Sf=()=>{const t=Un();return Pt(t),p.bindBuffer(p.ARRAY_BUFFER,t.vertexBuffer),p.bufferData(p.ARRAY_BUFFER,new Float32Array([0,0,1,0,1,1,0,0,1,1,0,1]),p.STATIC_DRAW),p.enableVertexAttribArray(0),p.vertexAttribPointer(0,2,p.FLOAT,!1,0,0),p.bindBuffer(p.ARRAY_BUFFER,Vs),p.bufferData(p.ARRAY_BUFFER,Ve.buffer.length,p.STREAM_DRAW),p.enableVertexAttribArray(1),p.vertexAttribPointer(1,4,p.FLOAT,!1,88,0),p.vertexAttribDivisor(1,1),p.enableVertexAttribArray(2),p.vertexAttribPointer(2,4,p.FLOAT,!1,88,16),p.vertexAttribDivisor(2,1),p.enableVertexAttribArray(3),p.vertexAttribPointer(3,2,p.FLOAT,!1,88,32),p.vertexAttribDivisor(3,1),p.enableVertexAttribArray(4),p.vertexAttribPointer(4,4,p.FLOAT,!1,88,40),p.vertexAttribDivisor(4,1),p.enableVertexAttribArray(5),p.vertexAttribPointer(5,4,p.FLOAT,!1,88,56),p.vertexAttribDivisor(5,1),p.enableVertexAttribArray(6),p.vertexAttribPointer(6,4,p.FLOAT,!1,88,72),p.vertexAttribDivisor(6,1),t},$f=t=>{vu(t),Mu(Sf())},Tf=()=>{const t=O.$mainAttachmentObject;O.bind(t),p.bindFramebuffer(p.READ_FRAMEBUFFER,Tt),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,null);const e=t.width,r=t.height;p.blitFramebuffer(0,0,e,r,0,0,e,r,p.COLOR_BUFFER_BIT,p.NEAREST),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,vi),p.bindFramebuffer(p.FRAMEBUFFER,Tt)},Bf=()=>{p.enable(p.BLEND),Ce()},Pf=()=>{const t=O.currentAttachmentObject;t&&(t.mask=!0,t.clipLevel++,rn.set(t.clipLevel,t.clipLevel),Gs()||(Rn(!0),Yr(),p.enable(p.SAMPLE_ALPHA_TO_COVERAGE),p.stencilFunc(p.ALWAYS,0,255),p.stencilOp(p.ZERO,p.INVERT,p.INVERT),p.colorMask(!1,!1,!1,!1)))},Af=(t,e,r,n)=>{const s=O.currentAttachmentObject;if(!s)return;tn.set(s.clipLevel,hi(t,e,r,n));const o=Math.ceil(Math.abs(r-t)),i=Math.ceil(Math.abs(n-e));It(),p.scissor(t,s.height-e-i,o,i)},Ff=()=>{const t=O.currentAttachmentObject;if(!t)return;const e=t.clipLevel,r=tn.get(e),n=r[0],s=r[1],o=r[2],i=r[3];tn.delete(e),rn.delete(e),di(r);const l=Math.ceil(Math.abs(o-n)),c=Math.ceil(Math.abs(i-s));if(It(),p.scissor(n,t.height-s-c,l,c),--t.clipLevel,!t.clipLevel){t.mask=!1,Rn(!1),p.clear(p.STENCIL_BUFFER_BIT),Wr(),yt(),rn.clear(),tn.clear();return}p.stencilMask(1<{const s=Jr(t,e,n);return p.texSubImage2D(p.TEXTURE_2D,0,0,0,t,e,p.RGBA,p.UNSIGNED_BYTE,r),s},wf=(t,e)=>{const r=qs(t.w,t.h,e),n=Jt();wt(n,t.w,t.h),Ce(),xe(n),ae(r)},Of=(t,e,r,n=!1)=>{const s=Jr(t,e,n);return p.texSubImage2D(p.TEXTURE_2D,0,0,0,p.RGBA,p.UNSIGNED_BYTE,r),s},Ef=(t,e)=>{const r=Of(t.w,t.h,e),n=Jt();wt(n,t.w,t.h),Ce(),xe(n),ae(r)},Vt=[],Rf=(t,e,r,n,s,o)=>{const i=pr();if(!i.length)return;Bt.push("bitmap");const l=Cn(i);yr(l.buffer),We.push(l.indexCount),Vt.push(t,e,r,n,s,o)},Cf=(t,e,r,n,s,o)=>{const i=pr(!0);if(!i.length)return;Bt.push("bitmap");const l=Is(i);yr(l.buffer),We.push(l.indexCount),Vt.push(t,e,r,n,s,o)},Uf=()=>{const t=pr(!0);if(!t.length)return;Bt.push("fill");const e=Is(t);yr(e.buffer),We.push(e.indexCount)},Gf=t=>{const e=t.toFixed(1);return\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump; + +in vec2 v_coord; +out vec4 o_color; + +void main() { + vec2 offset = u_mediump.xy; + float fraction = u_mediump.z; + float samples = u_mediump.w; + + vec4 color = texture(u_texture, v_coord); + + for (float i = 1.0; i < \${e}; i += 1.0) { + color += texture(u_texture, v_coord + offset * i); + color += texture(u_texture, v_coord - offset * i); + } + color += texture(u_texture, v_coord + offset * \${e}) * fraction; + color += texture(u_texture, v_coord - offset * \${e}) * fraction; + color /= samples; + + o_color = color; +}\`},De=new Map,Lf=t=>{const e=\`b\${t}\`;if(De.has(e))return De.get(e);const r=new _e(Zt(),Gf(t));return De.set(e,r),r},kf=(t,e,r,n,s,o)=>{const i=t.mediump;n?(i[0]=1/e,i[1]=0):(i[0]=0,i[1]=1/r),i[2]=s,i[3]=o},Zi=(t,e,r)=>{$e(t,!0);const n=Math.ceil(r*.5),s=1-(n-r*.5),o=1+r,i=Lf(n);kf(i,t.width,t.height,e,s,o),xe(i)},re={x:0,y:0},Br=(t,e,r)=>(t>>16)*(r?e:1)/255,Pr=(t,e,r)=>(t>>8&255)*(r?e:1)/255,Ar=(t,e,r)=>(t&255)*(r?e:1)/255,If=[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5],tr=(t,e,r=4,n=4,s=1,o=!0)=>{const i=O.currentAttachmentObject,l=Math.sqrt(e[0]*e[0]+e[1]*e[1]),c=Math.sqrt(e[2]*e[2]+e[3]*e[3]),u=vt,a=r*(l/u),h=n*(c/u),d=If[s-1],g=Math.round(a*d),m=Math.round(h*d);re.x+=g,re.y+=m;const f=t.width+g*2,b=t.height+m*2;let x=1,y=1;a>128?x=.0625:a>64?x=.125:a>32?x=.25:a>16&&(x=.5),h>128?y=.0625:h>64?y=.125:h>32?y=.25:h>16&&(y=.5);const P=Math.ceil(f*x),S=Math.ceil(b*y),M=we(P,S,!1),$=we(P,S,!1),T=[M,$];O.bind(M),O.reset(),O.setTransform(x,0,0,y,g*x,m*y),$e(t);const w=Dn();Nn(w,t.width,t.height),xe(w),o&&ae(t);const E=a*x,F=h*y;let A=0,R=M.texture;$e(R,!0),Tr();for(let v=0;v0){A=(A+1)%2;const U=T[A];O.bind(U),Zi(R,!0,E),R=U.texture}if(n>0){A=(A+1)%2;const U=T[A];O.bind(U),Zi(R,!1,F),R=U.texture}}if(Ce(),x!==1||y!==1){const v=we(f,b,!1);O.bind(v),O.setTransform(1/x,0,0,1/y,0,0),$e(R,!0),Nn(w,R.width,R.height),xe(w),R=v.texture,be(T[0]),be(T[1]),be(v,!1)}else A=(A+1)%2,be(T[A]),A=(A+1)%2,be(T[A],!1);return i&&O.bind(i),R},_f=()=>\`#version 300 es +precision mediump float; + +uniform sampler2D u_texture; +uniform vec4 u_mediump[5]; + +in vec2 v_coord; +out vec4 o_color; + +void main() { + mat4 mul = mat4(u_mediump[0], u_mediump[1], u_mediump[2], u_mediump[3]); + vec4 add = u_mediump[4]; + + vec4 color = texture(u_texture, v_coord); + + color.rgb /= max(0.0001, color.a); + color = clamp(color * mul + add, 0.0, 1.0); + color.rgb *= color.a; + + o_color = color; +}\`,Vf=()=>{if(De.has("m"))return De.get("m");const e=new _e(Zt(),_f());return De.set("m",e),e},Df=(t,e)=>{const r=t.mediump;r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[5],r[5]=e[6],r[6]=e[7],r[7]=e[8],r[8]=e[10],r[9]=e[11],r[10]=e[12],r[11]=e[13],r[12]=e[15],r[13]=e[16],r[14]=e[17],r[15]=e[18],r[16]=e[4]/255,r[17]=e[9]/255,r[18]=e[14]/255,r[19]=e[19]/255},Ji=(t,e)=>{const r=O.currentAttachmentObject,n=we(t.width,t.height,!1);O.bind(n),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t),Ce();const s=Vf();Df(s,e),xe(s);const o=n.texture;return ae(t),be(n,!1),r&&O.bind(r),o},Nf=(t,e,r=!1)=>{Ke(2,p.TEXTURE2,e,r),Ke(1,p.TEXTURE1,null),Ke(0,p.TEXTURE0,t,r)},zf=(t,e,r,n=!1)=>{Ke(2,p.TEXTURE2,r,n),Ke(1,p.TEXTURE1,e,n),Ke(0,p.TEXTURE0,t,n)},Xf=()=>{Ft!==670&&(_t(670),p.blendFunc(p.DST_ALPHA,p.ZERO))},Yf=()=>{Ft!==673&&(_t(673),p.blendFunc(p.DST_ALPHA,p.ONE_MINUS_SRC_ALPHA))},Wf=t=>\` + vec2 base_scale = u_mediump[\${t}].xy; + vec2 base_offset = u_mediump[\${t}].zw; + + vec2 uv = v_coord * base_scale - base_offset; + vec4 base = mix(vec4(0.0), texture(u_textures[1], uv), isInside(uv)); +\`,jf=()=>\` + vec4 blur = texture(u_textures[0], v_coord); +\`,Hf=t=>\` + vec2 blur_scale = u_mediump[\${t}].xy; + vec2 blur_offset = u_mediump[\${t}].zw; + + vec2 st = v_coord * blur_scale - blur_offset; + vec4 blur = mix(vec4(0.0), texture(u_textures[0], st), isInside(st)); +\`,Kf=t=>{const e=Math.floor(t/4),r=t%4;return\` + float strength = u_mediump[\${e}][\${r}]; + blur.a = clamp(blur.a * strength, 0.0, 1.0); +\`},qf=t=>\` + vec4 color = u_mediump[\${t}]; + blur = color * blur.a; +\`,Qf=t=>\` + blur = texture(u_textures[\${t?2:1}], vec2(blur.a, 0.5)); +\`,ea=(t,e,r,n,s,o)=>{const i=t?"blur.a = 1.0 - blur.a;":"",l=r?Kf(o):"",c=n?Qf(e):qf(s);return\` + \${i} + \${l} + \${c} +\`},Zf=()=>\` + vec4 blur2 = texture(u_textures[0], 1.0 - v_coord); +\`,Jf=()=>\` + vec2 pq = (1.0 - v_coord) * blur_scale - blur_offset; + vec4 blur2 = mix(vec4(0.0), texture(u_textures[0], pq), isInside(pq)); +\`,eh=t=>{const e=Math.floor(t/4),r=t%4;return\` + float strength = u_mediump[\${e}][\${r}]; + highlight_alpha *= strength; + shadow_alpha *= strength; +\`},th=t=>\` + vec4 highlight_color = u_mediump[\${t}]; + vec4 shadow_color = u_mediump[\${t+1}]; + blur = highlight_color * highlight_alpha + shadow_color * shadow_alpha; +\`,rh=t=>\` + blur = texture(u_textures[\${t?2:1}], vec2( + 0.5019607843137255 - 0.5019607843137255 * shadow_alpha + 0.4980392156862745 * highlight_alpha, + 0.5 + )); +\`,nh=(t,e,r,n,s,o,i,l,c)=>{let u=0;const a=r?Wf(u++):"",h=n?Hf(u++):jf(),d=o==="inner",g=u;let m=u*4,f;c?f=s?ea(!1,r,l,c,g,m):ta(r,n,l,c,g,m):s?(m+=4,f=ea(d,r,l,c,g,m)):(m+=8,f=ta(r,n,l,c,g,m));let b;switch(o){case"outer":b=i?"blur - blur * base.a":"base + blur - blur * base.a";break;case"full":b=i?"blur":"base - base * blur.a + blur";break;default:b="blur";break}return\`#version 300 es +precision mediump float; + +uniform sampler2D u_textures[\${t}]; +uniform vec4 u_mediump[\${e}]; + +in vec2 v_coord; +out vec4 o_color; + +\${Ws()} + +void main() { + \${a} + \${h} + \${f} + o_color = \${b}; +}\`},ta=(t,e,r,n,s,o)=>{const i=e?Jf():Zf(),l=r?eh(o):"",c=n?rh(t):th(s);return\` + \${i} + float highlight_alpha = blur.a - blur2.a; + float shadow_alpha = blur2.a - blur.a; + \${l} + highlight_alpha = clamp(highlight_alpha, 0.0, 1.0); + shadow_alpha = clamp(shadow_alpha, 0.0, 1.0); + \${c} +\`},sh=(t,e,r,n,s,o,i)=>{const g=\`f\${t?"y":"n"}\${e?"y":"n"}\${r?"y":"n"}\${n}\${s?"y":"n"}\${o?"y":"n"}\${i?"y":"n"}\`;if(De.has(g))return De.get(g);let m=1;t&&m++,i&&m++;let f=(t?4:0)+(e?4:0)+(o?1:0);i||(f+=r?4:8),f=Math.ceil(f/4);const b=new _e(Zt(),nh(m,f,t,e,r,n,s,o,i));return De.set(g,b),b},oh=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f,b,x,y,P,S,M,$,T,w)=>{let E;M?(E=t.textures,E[0]=0,E[1]=1,w&&(E[2]=2)):w&&(E=t.textures,E[0]=0,E[1]=2);const F=t.mediump;let A=0;M&&(F[A++]=e/n,F[A++]=r/s,F[A++]=o/n,F[A++]=(r-s-i)/s),$&&(F[A++]=e/l,F[A++]=r/c,F[A++]=u/l,F[A++]=(r-c-a)/c),w||(h?(F[A++]=g,F[A++]=m,F[A++]=f,F[A++]=b):(F[A++]=g,F[A++]=m,F[A++]=f,F[A++]=b,F[A++]=x,F[A++]=y,F[A++]=P,F[A++]=S)),T&&(F[A]=d)},ih=16,zn=new Map,Dt=[],ah=(t,e)=>{const r=Dt.indexOf(t);for(r!==-1&&Dt.splice(r,1);zn.size>=ih&&Dt.length>0;){const n=Dt.shift();n&&zn.delete(n)}zn.set(t,e),Dt.push(t)},ch=t=>{const e=zn.get(t);if(e){const r=Dt.indexOf(t);r!==-1&&(Dt.splice(r,1),Dt.push(t))}return e},lh=(t,e,r)=>{let n="";for(let o=1;o{const s=\`l\${("00"+t).slice(-3)}\${e?"y":"n"}\`,o=ch(s);if(o)return o;const i=Math.ceil(t*5/4),l=new _e(Zt(),lh(i,t,e));return ah(s,l),l},uh=(t,e,r,n,s,o)=>{const i=t.mediump;let l=0;for(let c=s;c>16)/255,i[l++]=(u>>8&255)/255,i[l++]=(u&255)/255,i[l++]=n[c]}for(let c=s;c{const r=Un();return Pt(r),p.bindBuffer(p.ARRAY_BUFFER,r.vertexBuffer),tt[0]=t,tt[2]=t,tt[4]=e,tt[6]=e,p.bufferData(p.ARRAY_BUFFER,tt,p.STATIC_DRAW),p.enableVertexAttribArray(0),p.vertexAttribPointer(0,2,p.FLOAT,!1,0,0),r};let Qs;const hh=(t,e)=>(Qs?(tt[0]!==t||tt[4]!==e)&&(tt[0]=t,tt[2]=t,tt[4]=e,tt[6]=e,p.bufferSubData(p.ARRAY_BUFFER,0,tt)):Qs=fh(t,e),Qs),na=(t,e,r)=>{t.useProgram(),t.bindUniform(),Pt(hh(e,r)),p.drawArrays(p.TRIANGLE_STRIP,0,4)},Zs=new Map,dh=t=>t<=4?256:t<=8?512:1024,sa=t=>{if(!Zs.has(t)){const e=we(t,1,!1);Zs.set(t,e)}return Zs.get(t)},ph=()=>sa(512);let oa=0;const ia=()=>oa,mh=t=>{oa=Math.floor(t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS)*.75)},aa=new Float32Array(256),ca=new Float32Array(256);for(let t=0;t<256;++t){const e=t/255;aa[t]=Math.pow(e,2.23333333),ca[t]=e}const gh=(t,e,r)=>{const n=O.currentAttachmentObject,s=ph();O.bind(s);const o=t.length;Tr();const i=ia();for(let l=0;l{const A=O.currentAttachmentObject,R=we(r,n,!1);O.bind(R);const v=g==="inner",U=b!==null&&x!==null&&y!==null;let L=null;if(U&&(L=gh(b,x,y)),v){O.reset(),O.setTransform(1,0,0,1,0,0),$e(t,!0);const _=Jt();wt(_,t.width,t.height),xe(_),U&&L?Nf(e,L,!0):$e(e,!0)}else U&&L?zf(e,t,L,!0):_n(e,t,!0);const D=!(v||g==="full"&&m),G=!(r===c&&n===u&&a===0&&h===0),B=f!==1;v?m?Xf():Yf():Tr();const z=sh(D,G,d,g,m,B,U);oh(z,r,n,s,o,i,l,c,u,a,h,d,f,P,S,M,$,T,w,E,F,D,G,B,U),xe(z);const k=R.texture;return be(R,!1),Ce(),A&&O.bind(A),k},la=(t,e,r=0,n=1,s=4,o=4,i=1,l=1,c=!1,u=!1)=>{const a=O.currentAttachmentObject,h=t.width,d=t.height,g=re.x,m=re.y,f=tr(t,e,s,o,l,!1),b=f.width,x=f.height,y=re.x,P=re.y,S=c?h:b,M=c?d:x,$=y-g,T=P-m,w=c?0:$,E=c?0:T,F=c?-$:0,A=c?-T:0,v=an(t,f,S,M,h,d,w,E,b,x,F,A,!0,c?"inner":"outer",u,i,null,null,null,Br(r,n,!0),Pr(r,n,!0),Ar(r,n,!0),n,0,0,0,0);return ae(t),ae(f),a&&O.bind(a),v},bh=Math.PI/180,ua=(t,e,r=4,n=45,s=0,o=1,i=4,l=4,c=1,u=1,a=!1,h=!1,d=!1)=>{const g=O.currentAttachmentObject,m=t.width,f=t.height,b=re.x,x=re.y,y=tr(t,e,i,l,u,!1),P=y.width,S=y.height,M=re.x,$=re.y,T=M-b,w=$-x,E=Math.sqrt(e[0]*e[0]+e[1]*e[1]),F=Math.sqrt(e[2]*e[2]+e[3]*e[3]),A=vt,R=n*bh,v=Math.cos(R)*r*(E/A),U=Math.sin(R)*r*(F/A),L=a?m:P+Math.max(0,Math.abs(v)-T),D=a?f:S+Math.max(0,Math.abs(U)-w),G=Math.ceil(L),B=Math.ceil(D),z=(G-L)/2,k=(B-D)/2,_=a?0:Math.max(0,T-v)+z,I=a?0:Math.max(0,w-U)+k,V=a?v-M:(v>0?Math.max(0,v-T):0)+z,X=a?U-$:(U>0?Math.max(0,U-w):0)+k;let Y="",W;a?(Y="inner",W=h||d):!h&&d?(Y="full",W=!0):(Y="outer",W=h);const K=an(t,y,G,B,m,f,_,I,P,S,V,X,!0,Y,W,c,null,null,null,Br(s,o,!0),Pr(s,o,!0),Ar(s,o,!0),o,0,0,0,0);return ae(t),ae(y),g&&O.bind(g),K},xh=Math.PI/180,fa=(t,e,r=4,n=45,s=16777215,o=1,i=0,l=1,c=4,u=4,a=1,h=1,d=0,g=!1)=>{const m=t.width,f=t.height,b=re.x,x=re.y,y=Math.sqrt(e[0]*e[0]+e[1]*e[1]),P=Math.sqrt(e[2]*e[2]+e[3]*e[3]),S=vt,M=n*xh,$=Math.cos(M)*r*(y/S),T=Math.sin(M)*r*(P/S),w=O.currentAttachmentObject,E=we(m,f,!1);O.bind(E),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t);const F=Jt();wt(F,t.width,t.height),xe(F),O.setTransform(1,0,0,1,$*2,T*2),Ks(),wt(F,t.width,t.height),xe(F),Ce();const A=E.texture;w&&O.bind(w);const R=tr(A,e,c,u,h,!1);be(E);const v=R.width,U=R.height,L=Math.ceil(v+Math.abs($)*2),D=Math.ceil(U+Math.abs(T)*2);let G="";switch(d){case 0:G="full";break;case 1:G="inner";break;case 2:G="outer";break}const B=G==="inner",z=B?m:L,k=B?f:D,_=Math.abs($),I=Math.abs(T),V=(v-m)/2,X=(U-f)/2,Y=B?0:_+V,W=B?0:I+X,K=B?-V-$:_-$,q=B?-X-T:I-T,ce=an(t,R,z,k,m,f,Y,W,v,U,K,q,!1,G,g,a,null,null,null,Br(s,o,!0),Pr(s,o,!0),Ar(s,o,!0),o,Br(i,l,!0),Pr(i,l,!0),Ar(i,l,!0),l);return re.x=b+Y,re.y=x+W,ae(t),ae(R),ce},yh=Math.PI/180,ha=(t,e,r=4,n=45,s,o,i,l=4,c=4,u=1,a=1,h=0,d=!1)=>{const g=t.width,m=t.height,f=re.x,b=re.y,x=Math.sqrt(e[0]*e[0]+e[1]*e[1]),y=Math.sqrt(e[2]*e[2]+e[3]*e[3]),P=vt,S=n*yh,M=Math.cos(S)*r*(x/P),$=Math.sin(S)*r*(y/P),T=O.currentAttachmentObject,w=we(g,m,!1);O.bind(w),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t);const E=Jt();wt(E,t.width,t.height),xe(E),O.setTransform(1,0,0,1,M*2,$*2),Ks(),wt(E,t.width,t.height),xe(E),Ce();const F=w.texture;T&&O.bind(T);const A=tr(F,e,l,c,a,!1);be(w);const R=A.width,v=A.height,U=Math.ceil(R+Math.abs(M)*2),L=Math.ceil(v+Math.abs($)*2);let D="";switch(h){case 0:D="full";break;case 1:D="inner";break;case 2:D="outer";break}const G=D==="inner",B=G?g:U,z=G?m:L,k=Math.abs(M),_=Math.abs($),I=(R-g)/2,V=(v-m)/2,X=G?0:k+I,Y=G?0:_+V,W=G?-I-M:k-M,K=G?-V-$:_-$,q=an(t,A,B,z,g,m,X,Y,R,v,W,K,!1,D,d,u,i,s,o,0,0,0,0,0,0,0,0);return re.x=f+X,re.y=b+Y,ae(t),ae(A),q},vh=Math.PI/180,da=(t,e,r=4,n=45,s,o,i,l=4,c=4,u=1,a=1,h=0,d=!1)=>{const g=t.width,m=t.height,f=re.x,b=re.y,x=tr(t,e,l,c,a,!1),y=x.width,P=x.height,S=re.x,M=re.y,$=S-f,T=M-b,w=Math.sqrt(e[0]*e[0]+e[1]*e[1]),E=Math.sqrt(e[2]*e[2]+e[3]*e[3]),F=vt,A=n*vh,R=Math.cos(A)*r*(w/F),v=Math.sin(A)*r*(E/F),U=h===1,L=U?g:y+Math.max(0,Math.abs(R)-$),D=U?m:P+Math.max(0,Math.abs(v)-T),G=Math.ceil(L),B=Math.ceil(D),z=(G-L)/2,k=(B-D)/2,_=U?0:Math.max(0,$-R)+z,I=U?0:Math.max(0,T-v)+k,V=U?R-S:(R>0?Math.max(0,R-$):0)+z,X=U?v-M:(v>0?Math.max(0,v-T):0)+k;let Y="";switch(h){case 0:Y="full";break;case 1:Y="inner";break;case 2:Y="outer";break}const W=an(t,x,G,B,g,m,_,I,y,P,V,X,!0,Y,d,u,i,s,o,0,0,0,0,0,0,0,0);return re.x=f+_,re.y=b+I,ae(t),ae(x),W},Mh=(t,e,r,n,s)=>{const o=Math.floor(e*.5),i=Math.floor(r*.5),l=e*r;let c="";const u=s?1:2;for(let d=0;d{const s=("0"+t).slice(-2),o=("0"+e).slice(-2),c=\`c\${s}\${o}\${r?"y":"n"}\${n?"y":"n"}\`;if(De.has(c))return De.get(c);const u=(n?1:2)+Math.ceil(t*e/4),a=new _e(Zt(),Mh(u,t,e,r,n));return De.set(c,a),a},$h=(t,e,r,n,s,o,i,l,c,u,a)=>{const h=t.mediump;h[0]=1/e,h[1]=1/r,h[2]=1/s,h[3]=o/255;let d=4;i||(h[d++]=l,h[d++]=c,h[d++]=u,h[d++]=a);const g=n.length;for(let m=0;m{const a=O.currentAttachmentObject,h=t.width,d=t.height,g=we(h,d,!1);O.bind(g),O.reset(),O.setTransform(1,0,0,1,0,0),$e(t,!0),Ce();const m=Sh(e,r,i,l);$h(m,h,d,n,s,o,l,Br(c,u,!1),Pr(c,u,!1),Ar(c,u,!1),u),xe(m);const f=g.texture;return ae(t),be(g,!1),a&&O.bind(a),f},Th=(t,e,r,n)=>{let s,o,i;switch(e){case 1:s="map_color.r";break;case 2:s="map_color.g";break;case 4:s="map_color.b";break;case 8:s="map_color.a";break;default:s="0.5";break}switch(r){case 1:o="map_color.r";break;case 2:o="map_color.g";break;case 4:o="map_color.b";break;case 8:o="map_color.a";break;default:o="0.5";break}switch(n){case 0:i=\` + vec4 source_color = texture(u_textures[0], uv); +\`;break;case 3:i=\` + vec4 source_color =texture(u_textures[0], mix(v_coord, uv, step(abs(uv - vec2(0.5)), vec2(0.5)))); +\`;break;case 1:i=\` + vec4 substitute_color = u_mediump[2]; + vec4 source_color = mix(substitute_color, texture(u_textures[0], uv), isInside(uv)); +\`;break;default:i=\` + vec4 source_color = texture(u_textures[0], fract(uv)); +\`;break}return\`#version 300 es +precision mediump float; + +uniform sampler2D u_textures[2]; +uniform vec4 u_mediump[\${t}]; + +in vec2 v_coord; +out vec4 o_color; + +\${Ws()} + +void main() { + vec2 uv_to_st_scale = u_mediump[0].xy; + vec2 uv_to_st_offset = u_mediump[0].zw; + vec2 scale = u_mediump[1].xy; + + vec2 st = v_coord * uv_to_st_scale - uv_to_st_offset; + vec4 map_color = texture(u_textures[1], st); + + vec2 offset = vec2(\${s}, \${o}) - 0.5; + vec2 uv = v_coord + offset * scale; + \${i} + + o_color = mix(texture(u_textures[0], v_coord), source_color, isInside(st)); +}\`},Bh=(t,e,r)=>{const n=\`d\${t}\${e}\${r}\`;if(De.has(n))return De.get(n);const s=r===1?3:2,o=new _e(Zt(),Th(s,t,e,r));return De.set(n,o),o},Ph=(t,e,r,n,s,o,i,l,c,u,a,h,d,g)=>{const m=t.textures;m[0]=0,m[1]=1;const f=t.mediump;f[0]=n/e,f[1]=s/r,f[2]=o/e,f[3]=(s-r-i)/r,f[4]=l/n,f[5]=-c/s,u===1&&(f[8]=a,f[9]=h,f[10]=d,f[11]=g)},ma=(t,e,r=0,n=0,s=0,o=0,i=0,l=0,c=0,u=0,a=2,h=0,d=0)=>{const g=O.currentAttachmentObject,m=t.width,f=t.height,b=we(m,f,!1);O.bind(b);const x=qs(r,n,e);_n(t,x);const y=Bh(i,l,a);Ph(y,r,n,r,n,s,o,c,u,a,Br(h,d,!0),Pr(h,d,!0),Ar(h,d,!0),d),Ce(),xe(y);const P=b.texture;return g&&O.bind(g),ae(t),ae(x),be(b,!1),P},Ah=(t,e,r,n)=>{const s=t.highp,o=O.$matrix;s[0]=o[0],s[1]=o[1],s[2]=o[3],s[3]=o[4],s[4]=o[6],s[5]=o[7],s[6]=r,s[7]=n,s[8]=pt,s[9]=mt;const i=t.mediump;i[0]=e[0],i[1]=e[1],i[2]=e[2],i[3]=e[3],i[4]=e[4],i[5]=e[5],i[6]=e[6],i[7]=e[7]},Xn=(t,e,r,n)=>{const s=O.currentAttachmentObject,o=t.width,i=t.height;switch(O.globalCompositeOperation){case"normal":case"layer":case"add":case"screen":case"alpha":case"erase":case"copy":{O.bind(O.$mainAttachmentObject),O.setTransform(1,0,0,1,r,n);const l=Dn(!0);Ah(l,e,o,i),$e(t),Qi(O.globalCompositeOperation),xe(l)}break;default:{const l=Vn(r,n,o,i),c=we(o,i,!1);O.bind(c),_n(l,t);const u=Yi(O.globalCompositeOperation);qi(u,e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]),xe(u),O.bind(O.$mainAttachmentObject),O.reset(),O.setTransform(1,0,0,1,r,n),Ki(c.texture),ae(l),be(c)}break}s&&O.bind(s),Ce()},ga=[],Yn=t=>{t.size&&t.clear(),ga.push(t)},Fh=()=>ga.pop()||new Map,wh=(t,e,r)=>{r.clear(),t.$timerId!==null&&clearTimeout(t.$timerId);for(const n of e.values()){for(const s of n.values())s&&t.destroy(s);Yn(n)}e.clear()},Oh=(t,e)=>{if(!(!e||typeof e!="object")&&"canvas"in e){const r=e.canvas,n=r.width,s=r.height;e.clearRect(0,0,n+1,s+1),r.width=r.height=1,t.push(r)}},Eh=(t,e,r)=>{if(!t.has(e))return;const n=t.get(e);n.has(r)&&(n.delete(r),n.size||(Yn(n),t.delete(e)))},Rh=(t,e,r)=>{if(!e.has(r))return;const n=e.get(r);for(const s of n.values())t.destroy(s);e.delete(r),Yn(n)},Ch=(t,e,r)=>{const n=t.get(e)||null;return n?(n.delete("trash"),n.get(r)||null):null},Uh=(t,e,r,n,s=null)=>{e.has(r)||e.set(r,Fh());const o=e.get(r);if(s===null){if(!o.has(n))return;t.destroy(o.get(n)),o.delete(n),o.size||(e.delete(r),Yn(o));return}o.set(n,s)},Gh=(t,e,r="")=>r?t.has(e)?t.get(e).has(r):!1:t.has(e),Lh=(t,e,r)=>{let n=2166136261,s=t*100|0;return n^=s&255,n=Math.imul(n,16777619),n^=s>>>8&255,n=Math.imul(n,16777619),n^=s>>>16&255,n=Math.imul(n,16777619),n^=s>>>24,n=Math.imul(n,16777619),s=e*100|0,n^=s&255,n=Math.imul(n,16777619),n^=s>>>8&255,n=Math.imul(n,16777619),n^=s>>>16&255,n=Math.imul(n,16777619),n^=s>>>24,n=Math.imul(n,16777619),r&&(s=r*100|0,n^=s&255,n=Math.imul(n,16777619),n^=s>>>8&255,n=Math.imul(n,16777619),n^=s>>>16&255,n=Math.imul(n,16777619),n^=s>>>24,n=Math.imul(n,16777619)),(n>>>0)%16777216},kh=(t,e,r,n)=>{let s=2166136261,o=t*100|0;return s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),o=e*100|0,s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),o=r*100|0,s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),o=n*100|0,s^=o&255,s=Math.imul(s,16777619),s^=o>>>8&255,s=Math.imul(s,16777619),s^=o>>>16&255,s=Math.imul(s,16777619),s^=o>>>24,s=Math.imul(s,16777619),(s>>>0)%16777216},Ih=(t,e,r,n)=>{if(r.has(n))return;const s=e.get(n);s&&(s.set("trash",!0),r.set(n,s),t.$timerId!==null&&clearTimeout(t.$timerId),t.$removeCache=!1,t.$timerId=setTimeout(()=>{t.$removeCache=!0,t.$timerId=null},1e3))},_h=(t,e)=>{if(e.size){for(const[r,n]of e)n.has("trash")&&(t.removeById(r),t.$removeIds.push(+r));e.clear(),t.$removeCache=!1}};class Vh{_$pool;_$store;_$trash;$timerId;$removeCache;$removeIds;constructor(){this._$pool=[],this._$store=new Map,this._$trash=new Map,this.$timerId=null,this.$removeIds=[],this.$removeCache=!1}reset(){wh(this,this._$store,this._$trash)}destroy(e=null){Oh(this._$pool,e)}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(e,r){Eh(this._$store,e,r)}removeTimer(e){Ih(this,this._$store,this._$trash,e)}removeTimerScheduledCache(){_h(this,this._$trash)}removeById(e){Rh(this,this._$store,e)}getById(e){return this._$store.get(e)}get(e,r){return Ch(this._$store,e,r)}set(e,r,n=null){Uh(this,this._$store,e,r,n)}has(e,r=""){return Gh(this._$store,e,r)}generateKeys(e,r,n){return Lh(e,r,n)}generateFilterKeys(e,r,n,s){return kh(e,r,n,s)}}const ee=new Vh,ba=new Float32Array(20),Dh=(t,e,r,n,s,o,i,l,c,u,a)=>{const h=O.currentAttachmentObject;let d=null;const g=Math.sqrt(i[0]*i[0]+i[1]*i[1]),m=Math.sqrt(i[2]*i[2]+i[3]*i[3]),f=ee.generateFilterKeys(i[0],i[1],i[2],i[3]);let b=!1;if(ee.get(e,"fKey")===f){const S=ee.get(e,"fTexture");r?ae(S):(b=!0,d=S)}let y=0,P=0;if(b)y=ee.get(e,"offsetX"),P=ee.get(e,"offsetY");else{d=ji(t);const S=Math.atan2(i[1],i[0]),M=Math.atan2(-i[2],i[3]),$=o?g*Math.cos(S):Math.cos(S),T=o?g*Math.sin(S):Math.sin(S),w=o?-m*Math.sin(M):-Math.sin(M),E=o?m*Math.cos(M):Math.cos(M),F=dr($,T,w,E,n/2,s/2),A=dr(1,0,0,1,-t.w/2,-t.h/2),R=Zc(F,A);if(Kr(F),Kr(A),R[0]!==1||R[1]!==0||R[2]!==0||R[3]!==1){const v=we(n,s,!1);O.bind(v),O.reset(),O.setTransform(R[0],R[1],R[2],R[3],R[4],R[5]),y=R[4],P=R[5],$e(d);const U=Dn();Nn(U,d.width,d.height),xe(U),ae(d),d=v.texture,be(v,!1),h&&O.bind(h)}Kr(R),re.x=0,re.y=0;for(let v=0;a.length>v;)switch(a[v++]){case 0:d=fa(d,i,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++]);break;case 1:d=tr(d,i,a[v++],a[v++],a[v++]);break;case 2:for(let L=0;L<20;++L)ba[L]=a[v++];d=Ji(d,ba);break;case 3:{const L=a[v++],D=a[v++],G=L*D,B=a.subarray(v,v+G);v+=G,d=pa(d,L,D,B,a[v++],a[v++],!!a[v++],!!a[v++],a[v++],a[v++])}break;case 4:{const L=a[v++],D=new Uint8Array(L);D.set(a.subarray(v,v+L)),v+=L,d=ma(d,D,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++])}break;case 5:d=ua(d,i,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++],!!a[v++],!!a[v++]);break;case 6:d=la(d,i,a[v++],a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++],!!a[v++]);break;case 7:{const L=a[v++],D=a[v++];let G=a[v++];const B=a.subarray(v,v+G);v+=G,G=a[v++];const z=a.subarray(v,v+G);v+=G,G=a[v++];const k=a.subarray(v,v+G);v+=G,d=ha(d,i,L,D,B,z,k,a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++])}break;case 8:{const L=a[v++],D=a[v++];let G=a[v++];const B=a.subarray(v,v+G);v+=G,G=a[v++];const z=a.subarray(v,v+G);v+=G,G=a[v++];const k=a.subarray(v,v+G);v+=G,d=da(d,i,L,D,B,z,k,a[v++],a[v++],a[v++],a[v++],a[v++],!!a[v++])}break}}if(d){const S=vt,M=u[0]*(g/S),$=u[1]*(m/S);O.reset(),O.setTransform(1,0,0,1,0,0),O.globalCompositeOperation=c,Xn(d,l,-y+M+i[4],-P+$+i[5])}b||(ee.set(e,"fKey",f),ee.set(e,"fTexture",d),ee.set(e,"offsetX",y),ee.set(e,"offsetY",P)),h&&O.bind(h)},Js=[],Nh=(t,e)=>{O.drawArraysInstanced();const r=O.$mainAttachmentObject;Js.push(r);const n=we(t,e,!1);O.$mainAttachmentObject=n,O.bind(n)},xa=new Float32Array(20),zh=(t,e,r,n,s,o,i,l)=>{O.drawArraysInstanced();const c=O.$mainAttachmentObject;let u=null;if(n&&s&&o){u=Vn(0,0,c.width,c.height),O.$mainAttachmentObject=Js.pop(),be(c),O.bind(O.$mainAttachmentObject),re.x=0,re.y=0;for(let a=0;o.length>a;)switch(o[a++]){case 0:u=fa(u,e,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++]);break;case 1:u=tr(u,e,o[a++],o[a++],o[a++]);break;case 2:for(let d=0;d<20;++d)xa[d]=o[a++];u=Ji(u,xa);break;case 3:{const d=o[a++],g=o[a++],m=d*g,f=o.subarray(a,a+m);a+=m,u=pa(u,d,g,f,o[a++],o[a++],!!o[a++],!!o[a++],o[a++],o[a++])}break;case 4:{const d=o[a++],g=new Uint8Array(d);g.set(o.subarray(a,a+d)),a+=d,u=ma(u,g,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++])}break;case 5:u=ua(u,e,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++],!!o[a++],!!o[a++]);break;case 6:u=la(u,e,o[a++],o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++],!!o[a++]);break;case 7:{const d=o[a++],g=o[a++];let m=o[a++];const f=o.subarray(a,a+m);a+=m,m=o[a++];const b=o.subarray(a,a+m);a+=m,m=o[a++];const x=o.subarray(a,a+m);a+=m,u=ha(u,e,d,g,f,b,x,o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++])}break;case 8:{const d=o[a++],g=o[a++];let m=o[a++];const f=o.subarray(a,a+m);a+=m,m=o[a++];const b=o.subarray(a,a+m);a+=m,m=o[a++];const x=o.subarray(a,a+m);a+=m,u=da(u,e,d,g,f,b,x,o[a++],o[a++],o[a++],o[a++],o[a++],!!o[a++])}break}if(i&&(ee.set(i,"fKey",l),ee.set(i,"fTexture",u)),u){const a=Math.sqrt(e[0]*e[0]+e[1]*e[1]),h=Math.sqrt(e[2]*e[2]+e[3]*e[3]),d=vt,g=s[0]*(a/d),m=s[1]*(h/d);O.reset(),O.globalCompositeOperation=t,Xn(u,r,g+e[4],m+e[5])}}else u=Vn(0,0,c.width,c.height),O.$mainAttachmentObject=Js.pop(),be(c),O.bind(O.$mainAttachmentObject),u&&(O.reset(),O.globalCompositeOperation=t,Xn(u,r,e[4],e[5]),ae(u));O.bind(O.$mainAttachmentObject)},Xh=(t,e,r,n,s,o)=>{if(ee.get(s,"fKey")!==o)return;const l=ee.get(s,"fTexture");if(!l)return;const c=Math.sqrt(e[0]*e[0]+e[1]*e[1]),u=Math.sqrt(e[2]*e[2]+e[3]*e[3]),a=vt,h=n[0]*(c/a),d=n[1]*(u/a);O.drawArraysInstanced(),O.reset(),O.globalCompositeOperation=t,Xn(l,r,h+e[4],d+e[5])},ya=t=>{const e=Ai(t.index),r=e[0],n=e[1],s=e[2],o=e[3];e[0]=Math.min(t.x,r),e[1]=Math.min(t.y,n),e[2]=Math.max(t.x+t.w+1,s),e[3]=Math.max(t.y+t.h+1,o)},Yh=t=>{const e=\`s\${t?"y":"n"}\`;if(At.has(e))return At.get(e);const r=new _e(kn(t?9:0,!1,!1,t),Vu());return At.set(e,r),r},Wh=(t,e)=>{const r=t.highp;r[0]=e[0],r[1]=e[1],r[2]=0,r[4]=e[2],r[5]=e[3],r[6]=0,r[8]=e[4],r[9]=e[5],r[10]=1,r[12]=e[6],r[13]=e[7],r[14]=0,r[16]=e[8],r[17]=e[9],r[18]=0,r[20]=e[10],r[21]=e[11],r[22]=1,r[3]=pt,r[7]=mt,r[11]=e[12],r[15]=e[13],r[19]=e[14],r[23]=e[15],r[24]=e[16],r[25]=e[17],r[26]=e[18],r[27]=e[19],r[28]=e[20],r[29]=e[21],r[30]=e[22],r[31]=e[23],r[32]=e[24],r[33]=e[25]};let Wn=0;const va=1,Ma=2,Sa=t=>{Wn=t},jh=()=>{Wn=0};let eo=!0;const to=t=>{eo=t};let ro=!1;const no=t=>{ro=t},jn=()=>{Wn!==va&&(Sa(va),p.stencilFunc(p.ALWAYS,0,255),p.stencilOpSeparate(p.FRONT,p.KEEP,p.KEEP,p.INCR_WRAP),p.stencilOpSeparate(p.BACK,p.KEEP,p.KEEP,p.DECR_WRAP)),eo&&(to(!1),p.colorMask(!1,!1,!1,!1))},Hn=()=>{Wn!==Ma&&(Sa(Ma),p.stencilFunc(p.NOTEQUAL,0,255),p.stencilOp(p.KEEP,p.ZERO,p.ZERO)),eo||(to(!0),p.colorMask(!0,!0,!0,!0))},Kn=()=>{ro||(no(!0),p.enable(p.SAMPLE_ALPHA_TO_COVERAGE))},qn=()=>{ro&&(no(!1),p.disable(p.SAMPLE_ALPHA_TO_COVERAGE))},Hh=(t,e,r,n)=>{jn();const s=!!n,o=sn(s);n&&on(o,n),Kn(),rt(o,t,e,r),qn(),Hn();const i=Yh(s);n&&Wh(i,n),rt(i,t,e,r)},Kh=(t,e,r,n,s)=>{const o=t.mediump;let i=0;for(let l=r;l{const r=O.currentAttachmentObject,n=p.getParameter(p.SCISSOR_BOX);yt();const s=e===0,o=t.length/5,i=dh(o),l=sa(i);O.bind(l);const c=s?aa:ca;Tr();const u=ia();for(let a=0;a{const s=t?"y":"n",o=e?"y":"n",i=e&&r?"y":"n",l=\`\${n}\`;return\`\${s}\${o}\${i}\${l}\`},Qh=t=>\` + vec2 focal = vec2(u_highp[\${t}][1], 0.0); + + vec2 diff = coord - focal; + float lenDiff = length(diff); + vec2 dir = diff / lenDiff; + float b = 2.0 * dot(dir, focal); + float c = dot(focal, focal) - 1.0; + float x = (-b + sqrt(max(b * b - 4.0 * c, 0.0))) * 0.5; + + float t = lenDiff / abs(x);\`,Zh=()=>"float t = length(coord);",Jh=(t,e)=>{const r=e?Qh(t):Zh();return\` + float radius = u_highp[\${t}][0]; + vec2 coord = p / radius; + \${r} +\`},ed=t=>\` + vec2 a = u_highp[\${t}].xy; + vec2 b = u_highp[\${t}].zw; + + vec2 ab = b - a; + vec2 ap = p - a; + + float t = dot(ab, ap) / dot(ab, ab);\`,td=(t,e,r,n,s)=>{const o=r?Jh(e,n):ed(e);let i;switch(s){case 0:i="1.0 - abs(fract(t * 0.5) * 2.0 - 1.0)";break;case 1:i="fract(t)";break;default:i="clamp(t, 0.0, 1.0)";break}return\`#version 300 es +precision highp float; + +uniform sampler2D u_texture; +uniform vec4 u_highp[\${t}]; + +in vec2 v_uv; +out vec4 o_color; + +void main() { + vec2 p = v_uv; + \${o} + t = \${i}; + o_color = texture(u_texture, vec2(t, 0.5)); +}\`},Ta=(t,e,r,n)=>{const s=qh(n,t,e,r);if(so.has(s))return so.get(s);const o=(n?14:5)+1,i=o-1,l=new _e(kn(o,!0,!1,n),td(o,i,t,e,r));return so.set(s,l),l},Ba=(t,e,r,n,s=0,o=null,i=null)=>{const l=t.highp;l[0]=r[0],l[1]=r[1],l[2]=r[2],l[4]=r[3],l[5]=r[4],l[6]=r[5],l[8]=r[6],l[9]=r[7],l[10]=r[8],l[12]=n[0],l[13]=n[1],l[14]=n[2],l[16]=n[3],l[17]=n[4],l[18]=n[5],l[11]=n[6],l[15]=n[7],l[19]=n[8],l[3]=pt,l[7]=mt;let c=20;i&&(l[20]=i[0],l[21]=i[1],l[22]=0,l[24]=i[2],l[25]=i[3],l[26]=0,l[28]=i[4],l[29]=i[5],l[30]=1,l[32]=i[6],l[33]=i[7],l[34]=0,l[36]=i[8],l[37]=i[9],l[38]=0,l[40]=i[10],l[41]=i[11],l[42]=1,l[31]=i[12],l[35]=i[13],l[39]=i[14],l[43]=i[15],l[44]=i[16],l[45]=i[17],l[46]=i[18],l[47]=i[19],l[48]=i[20],l[49]=i[21],l[50]=i[22],l[51]=i[23],l[52]=i[24],l[53]=i[25],c=56),e===0?(l[c++]=o[0],l[c++]=o[1],l[c++]=o[2],l[c]=o[3]):(l[c++]=819.2,l[c]=jr(s,-.975,.975,0))},Qn=()=>{jh(),to(!0),no(!1)},rd=(t,e,r,n)=>{const s=qe.shift(),o=qe.shift(),i=qe.shift(),l=qe.shift();Qn(),Wr();const c=$a(s,l);$e(c),Yr(),p.stencilMask(255),jn();const u=!!n,a=sn(u);n&&on(a,n),Kn(),rt(a,t,e,r),qn(),Hn();const h=Ta(!1,!1,i,u),d=qc(o),g=ys(O.$matrix);Ba(h,0,O.$matrix,g,0,d,n),di(d),Kr(g),rt(h,t,e,r)},nd=(t,e,r,n)=>{const s=qe.shift(),o=qe.shift(),i=qe.shift(),l=qe.shift(),c=qe.shift();Qn(),Wr();const u=$a(s,l);$e(u),Yr(),p.stencilMask(255),jn();const a=!!n,h=sn(a);n&&on(h,n),Kn(),rt(h,t,e,r),qn(),Hn(),O.save(),O.transform(o[0],o[1],o[2],o[3],o[4],o[5]);const d=O.$stack[O.$stack.length-1],g=ys(O.$matrix),m=Ta(!0,!!c,i,a);Ba(m,1,d,g,c,n),O.restore(),Kr(g),rt(m,t,e,r)},oo=new Map,sd=(t,e)=>{const r=\`b\${t?"y":"n"}\${e?"y":"n"}\`;if(oo.has(r))return oo.get(r);const n=t?Nu():Du(),s=new _e(kn(e?14:5,!0,!1,e),n);return oo.set(r,s),s},od=(t,e,r,n)=>{const s=t.highp,o=O.$stack[O.$stack.length-1];s[0]=o[0],s[1]=o[1],s[2]=o[2],s[4]=o[3],s[5]=o[4],s[6]=o[5],s[8]=o[6],s[9]=o[7],s[10]=o[8];const i=ys(O.$matrix);s[12]=i[0],s[13]=i[1],s[14]=i[2],s[16]=i[3],s[17]=i[4],s[18]=i[5],s[11]=i[6],s[15]=i[7],s[19]=i[8],s[3]=pt,s[7]=mt,n&&(s[20]=n[0],s[21]=n[1],s[22]=0,s[24]=n[2],s[25]=n[3],s[26]=0,s[28]=n[4],s[29]=n[5],s[30]=1,s[32]=n[6],s[33]=n[7],s[34]=0,s[36]=n[8],s[37]=n[9],s[38]=0,s[40]=n[10],s[41]=n[11],s[42]=1,s[31]=n[12],s[35]=n[13],s[39]=n[14],s[43]=n[15],s[44]=n[16],s[45]=n[17],s[46]=n[18],s[47]=n[19],s[48]=n[20],s[49]=n[21],s[50]=n[22],s[51]=n[23],s[52]=n[24],s[53]=n[25]);const l=t.mediump;l[0]=e,l[1]=r},id=(t,e,r,n)=>{jn();const s=!!n,o=sn(s);n&&on(o,n),Kn(),rt(o,t,e,r),qn();const i=Vt.shift(),l=Vt.shift(),c=Vt.shift(),u=Vt.shift(),a=Vt.shift(),h=Vt.shift(),d=qs(c,u,i,h);O.save(),O.transform(l[0],l[1],l[2],l[3],l[4],l[5]),Hn();const g=sd(a,s);od(g,c,u,n),rt(g,t,e,r),O.restore(),ae(d)},ad=()=>{const t=Ii();Yr(),p.stencilMask(255),Qn();let e=0,r=null;for(let n=0;n{const r=Hi(0,0,t,e);$e(r),p.bindFramebuffer(p.FRAMEBUFFER,Si),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,r.resource,0);const n=new Uint8Array(t*e*4),s=O.$mainAttachmentObject;n.byteLength>io&&(io=Fn(n.byteLength),p.bufferData(p.PIXEL_PACK_BUFFER,io,p.STREAM_READ)),p.readPixels(0,s.height-e,t,e,p.RGBA,p.UNSIGNED_BYTE,0);const o=p.fenceSync(p.SYNC_GPU_COMMANDS_COMPLETE,0);await new Promise(i=>{const l=()=>{if(p.clientWaitSync(o,p.SYNC_FLUSH_COMMANDS_BIT,0)===p.TIMEOUT_EXPIRED){requestAnimationFrame(l);return}return p.deleteSync(o),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,n),i()};l()}),p.bindFramebuffer(p.FRAMEBUFFER,Tt);for(let i=0;i0?le.float32Array4Pool.pop():new Float32Array(4)}static poolFloat32Array4(e){e.length===4&&le.float32Array4Pool.push(e)}}let st=null;const ud=t=>{st=t},fd=()=>le.getFloat32Array4(),hd=t=>{le.poolFloat32Array4(t)},dd=(t,e,r,n)=>{const s=n.x-t.x,o=n.y-t.y,i=s*s+o*o;if(i<1e-10){const h=(e.x-t.x)*(e.x-t.x)+(e.y-t.y)*(e.y-t.y),d=(r.x-t.x)*(r.x-t.x)+(r.y-t.y)*(r.y-t.y);return Math.max(h,d)}const l=(e.x-t.x)*o-(e.y-t.y)*s,c=l*l/i,u=(r.x-t.x)*o-(r.y-t.y)*s,a=u*u/i;return Math.max(c,a)},pd=(t,e,r,n)=>{const s={x:(t.x+e.x)*.5,y:(t.y+e.y)*.5},o={x:(e.x+r.x)*.5,y:(e.y+r.y)*.5},i={x:(r.x+n.x)*.5,y:(r.y+n.y)*.5},l={x:(s.x+o.x)*.5,y:(s.y+o.y)*.5},c={x:(o.x+i.x)*.5,y:(o.y+i.y)*.5},u={x:(l.x+c.x)*.5,y:(l.y+c.y)*.5};return{first:[t,s,l,u],second:[u,c,i,n]}},Aa=.25,md=8,gd=(t,e,r,n,s=Aa)=>{const o=[],i=(l,c,u,a,h)=>{if(dd(l,c,u,a)<=s||h>=md){const m={x:(c.x+u.x)*.5,y:(c.y+u.y)*.5};o.push({ctrl:m,end:a});return}const g=pd(l,c,u,a);i(g.first[0],g.first[1],g.first[2],g.first[3],h+1),i(g.second[0],g.second[1],g.second[2],g.second[3],h+1)};return i(t,e,r,n,0),o},bd=t=>{const r=Aa/(t*t);return Math.max(.0625,Math.min(4,r))};class xd{$currentPath;$vertices;$currentX;$currentY;$startX;$startY;constructor(){this.$currentPath=[],this.$vertices=[],this.$currentX=0,this.$currentY=0,this.$startX=0,this.$startY=0}beginPath(){this.$currentPath=[],this.$vertices=[],this.$currentX=0,this.$currentY=0,this.$startX=0,this.$startY=0}moveTo(e,r){this.$currentPath.length>=6&&this.$vertices.push(this.$currentPath),this.$currentPath=[e,r,!1],this.$currentX=e,this.$currentY=r,this.$startX=e,this.$startY=r}lineTo(e,r){e===this.$currentX&&r===this.$currentY||(this.$currentPath.push(e,r,!1),this.$currentX=e,this.$currentY=r)}quadraticCurveTo(e,r,n,s){this.$currentPath.push(e,r,!0),this.$currentPath.push(n,s,!1),this.$currentX=n,this.$currentY=s}$flatnessThreshold=.25;setScale(e){this.$flatnessThreshold=bd(e)}bezierCurveTo(e,r,n,s,o,i){const l={x:this.$currentX,y:this.$currentY},h=gd(l,{x:e,y:r},{x:n,y:s},{x:o,y:i},this.$flatnessThreshold);for(const d of h)this.$currentPath.push(d.ctrl.x,d.ctrl.y,!0),this.$currentPath.push(d.end.x,d.end.y,!1);this.$currentX=o,this.$currentY=i}arc(e,r,n){const s=n,o=n*.5522847498307936;this.bezierCurveTo(e+s,r+o,e+o,r+s,e,r+s),this.bezierCurveTo(e-o,r+s,e-s,r+o,e-s,r),this.bezierCurveTo(e-s,r-o,e-o,r-s,e,r-s),this.bezierCurveTo(e+o,r-s,e+s,r-o,e+s,r);const i=this.$currentPath.length;i>=3&&(this.$currentPath[i-3]=this.$startX,this.$currentPath[i-2]=this.$startY),this.$currentX=this.$startX,this.$currentY=this.$startY}closePath(){this.$currentPath.length>=3&&(this.$currentX!==this.$startX||this.$currentY!==this.$startY)&&this.$currentPath.push(this.$startX,this.$startY,!1)}get $getVertices(){const e=[...this.$vertices];return this.$currentPath.length>=9&&e.push(this.$currentPath),e}generateVertices(){const e=this.$getVertices,r=[];for(const n of e){if(n.length<9)continue;const s=[];for(let o=0;o0&&e.push(n)}if(this.$currentPath.length>=3){const r=[];for(let n=0;n0&&e.push(r)}return e}getVerticesForStroke(){const e=[...this.$vertices];return this.$currentPath.length>=6&&e.push(this.$currentPath),e}reset(){this.$currentPath=[],this.$vertices=[],this.$currentX=0,this.$currentY=0,this.$startX=0,this.$startY=0}}const yd=(t,e,r,n)=>new Float32Array([t,e,0,0,t+r,e,1,0,t,e+n,0,1,t+r,e,1,0,t+r,e+n,1,1,t,e+n,0,1]),vd=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t+1),Md=(t,e,r,n)=>{const s=vd(r),o=e.get(s);let i;return o&&o.length>0?(i=o.pop(),n&&t.queue.writeBuffer(i,0,n.buffer,n.byteOffset,n.byteLength)):n?(i=t.createBuffer({size:s,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),new Float32Array(i.getMappedRange()).set(n),i.unmap()):i=t.createBuffer({size:s,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),i},Sd=(t,e,r)=>{const n=Math.ceil(r/16)*16,s=e.get(n);return s&&s.length>0?s.pop():t.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST})},$d=32,Fa=(t,e)=>{const r=e.size;let n=t.get(r);if(n||(n=[],t.set(r,n)),n.length>=$d){e.destroy();return}n.push(e)},Td=32,wa=(t,e)=>{const r=e.size;let n=t.get(r);if(n||(n=[],t.set(r,n)),n.length>=Td){e.destroy();return}n.push(e)},Bd=(t,e)=>t.createBuffer({size:e.size,usage:e.usage|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX,label:e.label||"storage_buffer"}),Pd=(t,e,r,n)=>{const s=Math.ceil(r/256)*256;let o=null,i=1/0;for(const u of e)if(!u.inUse&&u.size>=s){const a=u.size-s;a{for(const r of t)if(r.buffer===e){r.inUse=!1;return}},Fd=(t,e,r=60)=>{for(let n=t.length-1;n>=0;n--){const s=t[n];!s.inUse&&e-s.lastUsedFrame>r&&(s.buffer.destroy(),t.splice(n,1))}},Oa=(t,e,r,n=0,s=0)=>{const o=new Uint32Array([e,r,n,s]),i=t.createBuffer({size:o.byteLength,usage:GPUBufferUsage.INDIRECT|GPUBufferUsage.COPY_DST,mappedAtCreation:!0,label:"indirect_buffer"});return new Uint32Array(i.getMappedRange()).set(o),i.unmap(),i},Ea=(t,e,r,n,s=0,o=0)=>{const i=new Uint32Array([r,n,s,o]);t.queue.writeBuffer(e,0,i)};class wd{device;buffer=null;offset=0;capacity;alignment=256;pendingDestroyBuffers=[];stagingBuffer;stagingFloat32;dirtyEnd=0;constructor(e,r=65536){this.device=e,this.capacity=r,this.stagingBuffer=new ArrayBuffer(r),this.stagingFloat32=new Float32Array(this.stagingBuffer)}resetFrame(){this.offset=0,this.dirtyEnd=0;for(const e of this.pendingDestroyBuffers)e.destroy();this.pendingDestroyBuffers.length=0}getBuffer(){return this.buffer||(this.buffer=this.device.createBuffer({size:this.capacity,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST})),this.buffer}allocate(e){this.buffer||this.getBuffer();const r=this.offset,n=e.byteLength;if(r+n>this.capacity){this.flush(),this.capacity*=2;const o=this.buffer;this.buffer=this.device.createBuffer({size:this.capacity,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),o&&this.pendingDestroyBuffers.push(o),this.stagingBuffer=new ArrayBuffer(this.capacity),this.stagingFloat32=new Float32Array(this.stagingBuffer)}this.stagingFloat32.set(e,r/4);const s=r+n;return s>this.dirtyEnd&&(this.dirtyEnd=s),this.offset=r+Math.ceil(n/this.alignment)*this.alignment,r}flush(){this.dirtyEnd>0&&this.buffer&&(this.device.queue.writeBuffer(this.buffer,0,this.stagingBuffer,0,this.dirtyEnd),this.dirtyEnd=0)}dispose(){this.buffer&&(this.buffer.destroy(),this.buffer=null);for(const e of this.pendingDestroyBuffers)e.destroy();this.pendingDestroyBuffers.length=0}}class Od{device;vertexBuffers;uniformBuffers;vertexBufferBuckets;uniformBufferBuckets;storageBufferPool;indirectBuffer;indirectBufferPool;frameIndirectBuffers;frameNumber;unitRectBuffer;frameVertexPoolBuffers;frameUniformPoolBuffers;dynamicUniform;constructor(e){this.device=e,this.vertexBuffers=new Map,this.uniformBuffers=new Map,this.vertexBufferBuckets=new Map,this.uniformBufferBuckets=new Map,this.storageBufferPool=[],this.indirectBuffer=null,this.indirectBufferPool=[],this.frameIndirectBuffers=[],this.frameNumber=0,this.unitRectBuffer=null,this.frameVertexPoolBuffers=[],this.frameUniformPoolBuffers=[],this.dynamicUniform=new wd(e)}createVertexBuffer(e,r){const n=this.device.createBuffer({size:r.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});return new Float32Array(n.getMappedRange()).set(r),n.unmap(),this.vertexBuffers.set(e,n),n}createUniformBuffer(e,r){const n=this.device.createBuffer({size:r,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return this.uniformBuffers.set(e,n),n}updateUniformBuffer(e,r){const n=this.uniformBuffers.get(e);n&&this.device.queue.writeBuffer(n,0,r.buffer,r.byteOffset,r.byteLength)}getVertexBuffer(e){return this.vertexBuffers.get(e)}getUniformBuffer(e){return this.uniformBuffers.get(e)}createRectVertices(e,r,n,s){return yd(e,r,n,s)}acquireVertexBuffer(e,r){const n=Md(this.device,this.vertexBufferBuckets,e,r);return this.frameVertexPoolBuffers.push(n),n}releaseVertexBuffer(e){Fa(this.vertexBufferBuckets,e)}acquireUniformBuffer(e){const r=Sd(this.device,this.uniformBufferBuckets,e);return this.frameUniformPoolBuffers.push(r),r}acquireAndWriteUniformBuffer(e,r){const n=r??e.byteLength,s=this.acquireUniformBuffer(n);return this.device.queue.writeBuffer(s,0,e.buffer,e.byteOffset,n),s}releaseUniformBuffer(e){wa(this.uniformBufferBuckets,e)}destroyBuffer(e){const r=this.vertexBuffers.get(e);r&&(r.destroy(),this.vertexBuffers.delete(e));const n=this.uniformBuffers.get(e);n&&(n.destroy(),this.uniformBuffers.delete(e))}dispose(){for(const e of this.vertexBuffers.values())e.destroy();this.vertexBuffers.clear();for(const e of this.uniformBuffers.values())e.destroy();this.uniformBuffers.clear();for(const e of this.vertexBufferBuckets.values())for(const r of e)r.destroy();this.vertexBufferBuckets.clear();for(const e of this.uniformBufferBuckets.values())for(const r of e)r.destroy();this.uniformBufferBuckets.clear();for(const e of this.storageBufferPool)e.buffer.destroy();this.storageBufferPool=[],this.indirectBuffer&&(this.indirectBuffer.destroy(),this.indirectBuffer=null);for(const e of this.indirectBufferPool)e.destroy();this.indirectBufferPool=[];for(const e of this.frameIndirectBuffers)e.destroy();this.frameIndirectBuffers=[],this.unitRectBuffer&&(this.unitRectBuffer.destroy(),this.unitRectBuffer=null),this.frameVertexPoolBuffers.length=0,this.frameUniformPoolBuffers.length=0,this.dynamicUniform.dispose()}getPoolStats(){let e=0;for(const n of this.vertexBufferBuckets.values())e+=n.length;let r=0;for(const n of this.uniformBufferBuckets.values())r+=n.length;return{vertexPoolSize:e,uniformPoolSize:r}}clearFrameBuffers(){for(const e of this.vertexBuffers.values())e.destroy();this.vertexBuffers.clear();for(const e of this.uniformBuffers.values())e.destroy();this.uniformBuffers.clear();for(const e of this.frameVertexPoolBuffers)Fa(this.vertexBufferBuckets,e);this.frameVertexPoolBuffers.length=0;for(const e of this.frameUniformPoolBuffers)wa(this.uniformBufferBuckets,e);this.frameUniformPoolBuffers.length=0;for(const e of this.frameIndirectBuffers)this.indirectBufferPool.push(e);this.frameIndirectBuffers.length=0,this.releaseAllStorageBuffers(),this.dynamicUniform.resetFrame(),this.frameNumber++,this.frameNumber%60===0&&Fd(this.storageBufferPool,this.frameNumber)}releaseAllStorageBuffers(){for(const e of this.storageBufferPool)e.inUse=!1}acquireStorageBuffer(e){return Pd(this.device,this.storageBufferPool,e,this.frameNumber)}releaseStorageBuffer(e){Ad(this.storageBufferPool,e)}writeStorageBuffer(e,r){this.device.queue.writeBuffer(e,0,r.buffer,r.byteOffset,r.byteLength)}getOrCreateIndirectBuffer(e,r,n=0,s=0){return this.indirectBuffer?Ea(this.device,this.indirectBuffer,e,r,n,s):this.indirectBuffer=Oa(this.device,e,r,n,s),this.indirectBuffer}createIndirectBuffer(e,r,n=0,s=0){let o=this.indirectBufferPool.pop();return o?Ea(this.device,o,e,r,n,s):o=Oa(this.device,e,r,n,s),this.frameIndirectBuffers.push(o),o}getUnitRectBuffer(){if(!this.unitRectBuffer){const e=this.createRectVertices(0,0,1,1);this.unitRectBuffer=this.device.createBuffer({size:e.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),new Float32Array(this.unitRectBuffer.getMappedRange()).set(e),this.unitRectBuffer.unmap()}return this.unitRectBuffer}getFrameNumber(){return this.frameNumber}getStoragePoolStats(){const e=this.storageBufferPool.filter(r=>r.inUse).length;return{storagePoolSize:this.storageBufferPool.length,storagePoolInUse:e}}}const Ed=(t,e)=>{const r=t.createSampler({magFilter:"linear",minFilter:"linear",mipmapFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});e.set("linear",r);const n=t.createSampler({magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});e.set("nearest",n);const s=t.createSampler({magFilter:"nearest",minFilter:"linear",mipmapFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});e.set("atlas_instanced_sampler",s);const o=t.createSampler({magFilter:"linear",minFilter:"linear",mipmapFilter:"linear",addressModeU:"repeat",addressModeV:"repeat"});e.set("repeat",o)},Rd=(t,e,r,n,s,o)=>{const i=t.createTexture({size:{width:s,height:o},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return t.queue.writeTexture({texture:i},n.buffer,{bytesPerRow:s*4,offset:n.byteOffset},{width:s,height:o}),e.set(r,i),i},Cd=(t,e,r,n)=>{const s=t.createTexture({size:{width:n.width,height:n.height},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return t.queue.copyExternalImageToTexture({source:n,flipY:!0},{texture:s,premultipliedAlpha:!0},{width:n.width,height:n.height}),e.set(r,s),s};class Ud{device;textures;samplers;constructor(e){this.device=e,this.textures=new Map,this.samplers=new Map,Ed(e,this.samplers)}createTexture(e,r,n,s="rgba8unorm"){const o=this.device.createTexture({size:{width:r,height:n},format:s,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return this.textures.set(e,o),o}createTextureFromPixels(e,r,n,s){return Rd(this.device,this.textures,e,r,n,s)}createTextureFromImageBitmap(e,r){return Cd(this.device,this.textures,e,r)}updateTexture(e,r,n,s){const o=this.textures.get(e);o&&this.device.queue.writeTexture({texture:o},r.buffer,{bytesPerRow:n*4,offset:r.byteOffset},{width:n,height:s})}getTexture(e){return this.textures.get(e)}getSampler(e){return this.samplers.get(e)}createSampler(e,r=!0){const n=this.samplers.get(e);if(n)return n;const s=this.device.createSampler({magFilter:r?"linear":"nearest",minFilter:r?"linear":"nearest",mipmapFilter:r?"linear":"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"});return this.samplers.set(e,s),s}destroyTexture(e){const r=this.textures.get(e);r&&(r.destroy(),this.textures.delete(e))}dispose(){for(const e of this.textures.values())e.destroy();this.textures.clear(),this.samplers.clear()}}const Gd=(t,e,r,n,s,o,i,l,c)=>{const u=n==="atlas"||n.startsWith("atlas_"),a=u||n.startsWith("temp_")?"rgba8unorm":e,h=i||u&&ao>1,d=h?ao:1,g=t.createTexture({size:{width:s,height:o},format:a,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST}),m=g.createView(),f={id:c.textureId++,resource:g,view:m,width:s,height:o,area:s*o,smooth:!0};let b=null;if(h){const S=t.createTexture({size:{width:s,height:o},format:a,sampleCount:d,usage:GPUTextureUsage.RENDER_ATTACHMENT}),M=S.createView();b={id:c.textureId++,resource:S,view:M,width:s,height:o,area:s*o,smooth:!0}}let x=null,y=null;if(u||n==="main"||l){const S=t.createTexture({size:{width:s,height:o},format:"stencil8",usage:GPUTextureUsage.RENDER_ATTACHMENT}),M=S.createView();if(x={id:c.stencilId++,resource:S,view:M,width:s,height:o,area:s*o,dirty:!1},h){const $=t.createTexture({size:{width:s,height:o},format:"stencil8",sampleCount:d,usage:GPUTextureUsage.RENDER_ATTACHMENT}),T=$.createView();y={id:c.stencilId++,resource:$,view:T,width:s,height:o,area:s*o,dirty:!1}}}const P={id:c.nextId++,width:s,height:o,clipLevel:0,msaa:h,mask:l,color:null,texture:f,stencil:x,msaaTexture:b,msaaStencil:y};return r.set(n,P),P},Ld=(t,e,r)=>{for(const[n,s]of t.entries())if(s.id===r.id){t.delete(n),e.push(s);break}},cn={r:0,g:0,b:0,a:0},Zn={view:null,clearValue:cn,loadOp:"clear",storeOp:"store"},kd={colorAttachments:[Zn]},Id=(t,e=0,r=0,n=0,s=0,o="clear",i=null)=>(Zn.view=t,cn.r=e,cn.g=r,cn.b=n,cn.a=s,Zn.loadOp=o,Zn.resolveTarget=i??void 0,kd),Jn={view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"load",storeOp:"store"},co={view:null,stencilClearValue:0,stencilLoadOp:"clear",stencilStoreOp:"store"},_d={colorAttachments:[Jn],depthStencilAttachment:co},Vd=(t,e,r="load",n="clear",s=null)=>(Jn.view=t,Jn.loadOp=r,Jn.resolveTarget=s??void 0,co.view=e,co.stencilLoadOp=n,_d),Dd=(t,e,r)=>\`\${t}_\${e}_\${r}\`,Nd=(t,e,r,n,s,o,i,l,c)=>{const u=Dd(r,n,s),a=e.get(u);if(a)for(let g=0;g=l){let g=1/0,m="",f=-1;for(const[b,x]of e)for(let y=0;y=0){const b=e.get(m);b[f].texture.destroy(),b.splice(f,1),b.length===0&&e.delete(m),c[0]--}}const h=t.createTexture({size:{width:r,height:n},format:s,usage:o}),d={texture:h,width:r,height:n,format:s,lastUsedFrame:i,inUse:!0};return a?a.push(d):e.set(u,[d]),c[0]++,h},zd=(t,e,r)=>{for(const n of t.values())for(let s=0;s{const s=e-r;for(const[o,i]of t){for(let l=i.length-1;l>=0;l--){const c=i[l];!c.inUse&&c.lastUsedFrame({id:t.attachmentId++,width:0,height:0,clipLevel:0,msaa:!1,mask:!1,color:null,texture:null,stencil:null,msaaTexture:null,msaaStencil:null}),qd=(t,e,r,n)=>{const s=t.createTexture({size:{width:e,height:r},format:"depth24plus-stencil8",usage:GPUTextureUsage.RENDER_ATTACHMENT});return{id:n.stencilId++,resource:s,view:s.createView(),width:e,height:r,area:e*r,dirty:!1}},Qd=(t,e,r,n,s)=>{for(let o=0;o=r&&i.height>=n)return e.splice(o,1),i.dirty=!1,i}return qd(t,r,n,s)},Zd=(t,e,r,n)=>{const s=t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST});return{resource:s,view:s.createView(),stencil:n,width:e,height:r,area:e*r,dirty:!1}},Jd=(t,e,r,n,s)=>{for(let o=0;o=r&&i.height>=n)return e.splice(o,1),i.stencil=s,i.dirty=!1,i}return Zd(t,r,n,s)},ep=(t,e,r,n,s)=>{const o=t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST}),i=o.createView();return{id:s.textureId++,resource:o,view:i,width:e,height:r,area:e*r,smooth:n}},tp=(t,e,r,n,s,o)=>{const i=\`\${r}x\${n}_smooth\`;if(e.has(i)){const l=e.get(i);if(l.length>0)return l.pop()}return ep(t,r,n,s,o)},rp=(t,e,r,n,s,o,i,l,c)=>{const u=e.length>0?e.pop():Kd(c);u.width=o,u.height=i,u.msaa=l,u.mask=!1,u.clipLevel=0;const a=Qd(t,s,o,i,c),h=Jd(t,n,o,i,a);u.color=h,u.stencil=a;const d=tp(t,r,o,i,!0,c);return u.texture=d,u},np=(t,e)=>{const r=\`\${e.width}x\${e.height}_\${e.smooth?"smooth":"nearest"}\`;t.has(r)||t.set(r,[]),t.get(r).push(e)},sp=(t,e,r,n,s)=>{s.texture&&(np(e,s.texture),s.texture=null),s.color&&(r.push(s.color),s.color=null),s.stencil&&(n.push(s.stencil),s.stencil=null),t.push(s)},ln={r:0,g:0,b:0,a:0},lo={view:null,loadOp:"clear",storeOp:"store",clearValue:ln},Ra={view:null,depthLoadOp:"clear",depthStoreOp:"store",depthClearValue:1,stencilLoadOp:"clear",stencilStoreOp:"store",stencilClearValue:0},uo={colorAttachments:[lo]},op=(t,e,r,n,s,o="clear")=>{const i=t.color?.view??t.texture?.view;if(!i)throw new Error("No color view available for render pass");return lo.view=i,lo.loadOp=o,ln.r=e,ln.g=r,ln.b=n,ln.a=s,t.stencil?.view?(Ra.view=t.stencil.view,uo.depthStencilAttachment=Ra):uo.depthStencilAttachment=void 0,uo};class ip{device;attachmentPool;texturePool;colorBufferPool;stencilBufferPool;idCounter;currentAttachment;constructor(e){this.device=e,this.attachmentPool=[],this.texturePool=new Map,this.colorBufferPool=[],this.stencilBufferPool=[],this.idCounter={attachmentId:0,textureId:0,stencilId:0},this.currentAttachment=null}getAttachmentObject(e,r,n=!1){return rp(this.device,this.attachmentPool,this.texturePool,this.colorBufferPool,this.stencilBufferPool,e,r,n,this.idCounter)}bindAttachment(e){this.currentAttachment=e}getCurrentAttachment(){return this.currentAttachment}get currentAttachmentObject(){return this.currentAttachment}unbindAttachment(){this.currentAttachment=null}releaseAttachment(e){sp(this.attachmentPool,this.texturePool,this.colorBufferPool,this.stencilBufferPool,e)}createRenderPassDescriptor(e,r,n,s,o,i="clear"){return op(e,r,n,s,o,i)}dispose(){for(const e of this.texturePool.values())for(const r of e)r.resource.destroy();this.texturePool.clear();for(const e of this.colorBufferPool)e.resource.destroy();this.colorBufferPool=[];for(const e of this.stencilBufferPool)e.resource.destroy();this.stencilBufferPool=[];for(const e of this.attachmentPool)e.texture&&e.texture.resource.destroy(),e.color&&e.color.resource.destroy(),e.stencil&&e.stencil.resource.destroy();this.attachmentPool=[]}}const Ca=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, +} + +struct FillUniforms { + color: vec4, + matrix0: vec4, + matrix1: vec4, + matrix2: vec4, +} + +@group(0) @binding(0) var uniforms: FillUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrix0.xyz, uniforms.matrix1.xyz, uniforms.matrix2.xyz); + let transformed = matrix * vec3(input.position, 1.0); + let ndc = transformed.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.bezier = input.bezier; + output.color = uniforms.color; + return output; +} +\`,Ua=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, +} + +struct FillUniforms { + color: vec4, + matrix0: vec4, + matrix1: vec4, + matrix2: vec4, +} + +@group(0) @binding(0) var uniforms: FillUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrix0.xyz, uniforms.matrix1.xyz, uniforms.matrix2.xyz); + let transformed = matrix * vec3(input.position, 1.0); + let ndc = transformed.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.bezier = input.bezier; + return output; +} +\`,Ga=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) color: vec4, +} + +struct FillUniforms { + color: vec4, + matrix0: vec4, + matrix1: vec4, + matrix2: vec4, +} + +@group(0) @binding(0) var uniforms: FillUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrix0.xyz, uniforms.matrix1.xyz, uniforms.matrix2.xyz); + let transformed = matrix * vec3(input.position, 1.0); + let ndc = transformed.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.color = uniforms.color; + return output; +} +\`,ap=\` +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, +} + +struct Uniforms { + viewportSize: vec2, + _padding0: vec2, + matrixCol0: vec3, + _padding1: f32, + matrixCol1: vec3, + _padding2: f32, + matrixCol2: vec3, + _padding3: f32, +} + +@group(0) @binding(0) var uniforms: Uniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(uniforms.matrixCol0, uniforms.matrixCol1, uniforms.matrixCol2); + let transformed = matrix * vec3(input.position, 1.0); + let pos = transformed.xy; + let ndc = pos * 2.0 - 1.0; + output.position = vec4(ndc.x, -ndc.y, 0.0, 1.0); + output.bezier = input.bezier; + return output; +} +\`,La=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) texCoord: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +struct Uniforms { + matrix: mat3x3, + color: vec4, + alpha: f32, +} + +@group(0) @binding(0) var uniforms: Uniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let pos = uniforms.matrix * vec3(input.position, 1.0); + let ndc = pos.xy * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + output.texCoord = input.texCoord; + let premultipliedColor = vec4( + uniforms.color.rgb * uniforms.color.a * uniforms.alpha, + uniforms.color.a * uniforms.alpha + ); + output.color = premultipliedColor; + return output; +} +\`,cp=\` +struct VertexInput { + @location(0) position: vec2, + @location(1) texCoord: vec2, +} + +struct InstanceInput { + @location(2) textureRect: vec4, + @location(3) textureDim: vec4, + @location(4) matrixTx: vec4, + @location(5) matrixScale: vec4, + @location(6) mulColor: vec4, + @location(7) addColor: vec4, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) mulColor: vec4, + @location(2) addColor: vec4, +} + +@vertex +fn main( + input: VertexInput, + instance: InstanceInput, + @builtin(instance_index) instanceIdx: u32 +) -> VertexOutput { + var output: VertexOutput; + let texX = instance.textureRect.x + input.texCoord.x * instance.textureRect.z; + let texY = instance.textureRect.y + input.texCoord.y * instance.textureRect.w; + output.texCoord = vec2(texX, texY); + var pos = vec2(input.position.x, 1.0 - input.position.y); + pos = pos * vec2(instance.textureDim.x, instance.textureDim.y); + let scale0 = instance.matrixScale.x; + let rotate0 = instance.matrixScale.y; + let scale1 = instance.matrixScale.z; + let rotate1 = instance.matrixScale.w; + let transformedX = pos.x * scale0 + pos.y * scale1 + instance.matrixTx.x; + let transformedY = pos.x * rotate0 + pos.y * rotate1 + instance.matrixTx.y; + var position = vec2(transformedX, transformedY) / vec2(instance.textureDim.z, instance.textureDim.w); + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); + output.mulColor = instance.mulColor; + output.addColor = instance.addColor; + return output; +} +\`,ka=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) v_uv: vec2, + @location(1) bezier: vec2, + @location(2) color: vec4, +} + +struct GradientUniforms { + inverseMatrix: mat3x3, + gradientType: f32, + focal: f32, + spread: f32, + radius: f32, + linearPoints: vec4, + color: vec4, + contextMatrix0: vec4, + contextMatrix1: vec4, + contextMatrix2: vec4, +} + +@group(0) @binding(0) var gradient: GradientUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let contextMatrix = mat3x3(gradient.contextMatrix0.xyz, gradient.contextMatrix1.xyz, gradient.contextMatrix2.xyz); + let pos = contextMatrix * vec3(input.position, 1.0); + let ndc = vec2(pos.x * 2.0 - 1.0, pos.y * 2.0 - 1.0); + output.position = vec4(ndc.x, ndc.y * yFlipSign, 0.0, 1.0); + let uvPos = gradient.inverseMatrix * vec3(input.position, 1.0); + output.v_uv = uvPos.xy; + output.bezier = input.bezier; + output.color = gradient.color; + return output; +} +\`,Ia=\` +override yFlipSign: f32 = 1.0; + +struct VertexInput { + @location(0) position: vec2, + @location(1) bezier: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, + @location(2) worldPos: vec2, +} + +struct BitmapUniforms { + bitmapMatrix: mat3x3, + width: f32, + height: f32, + repeat: f32, + _pad: f32, + color: vec4, + contextMatrix0: vec4, + contextMatrix1: vec4, + contextMatrix2: vec4, +} + +@group(0) @binding(0) var bitmap: BitmapUniforms; + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let matrix = mat3x3(bitmap.contextMatrix0.xyz, bitmap.contextMatrix1.xyz, bitmap.contextMatrix2.xyz); + let transformedPos = matrix * vec3(input.position, 1.0); + let clipX = transformedPos.x * 2.0 - 1.0; + let clipY = (transformedPos.y * 2.0 - 1.0) * yFlipSign; + output.position = vec4(clipX, clipY, 0.0, 1.0); + output.bezier = input.bezier; + output.color = bitmap.color; + output.worldPos = input.position; + return output; +} +\`,Nt=\` +fn isInside(uv: vec2) -> f32 { + let s = step(vec2(0.0), uv) * step(uv, vec2(1.0)); + return s.x * s.y; +}\`,lp=\` + const positions = array, 6>( + vec2(-1.0, -1.0), + vec2( 1.0, -1.0), + vec2(-1.0, 1.0), + vec2(-1.0, 1.0), + vec2( 1.0, -1.0), + vec2( 1.0, 1.0) + );\`,es=\` + const vertices = array, 6>( + vec2(0.0, 0.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(1.0, 1.0) + );\`,Be=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +}\`,fo=t=>\` +\${Be} + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${lp} + var texCoords = array, 6>( + vec2(0.0, \${t?"1.0":"0.0"}), + vec2(1.0, \${t?"1.0":"0.0"}), + vec2(0.0, \${t?"0.0":"1.0"}), + vec2(0.0, \${t?"0.0":"1.0"}), + vec2(1.0, \${t?"1.0":"0.0"}), + vec2(1.0, \${t?"0.0":"1.0"}) + ); + output.position = vec4(positions[vertexIndex], 0.0, 1.0); + output.texCoord = texCoords[vertexIndex]; + return output; +} +\`,up=fo(!0),fp=fo(!1),hp=fo(!1),dp=\` +struct VertexInput { + @location(0) position: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, +} + +@vertex +fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + let ndc = input.position * 2.0 - 1.0; + output.position = vec4(ndc.x, ndc.y, 0.0, 1.0); + return output; +} +\`,pp=\` +struct PositionUniforms { + offset: vec2, + size: vec2, + viewport: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: PositionUniforms; + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + output.texCoord = vec2(vertex.x, 1.0 - vertex.y); + var position = vertex * uniforms.size + uniforms.offset; + position = position / uniforms.viewport; + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); + return output; +} +\`,mp=\` +struct BitmapSyncUniforms { + nodeRect: vec4, + textureSize: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: BitmapSyncUniforms; + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + let pixelPos = vec2( + uniforms.nodeRect.x + vertex.x * uniforms.nodeRect.z, + uniforms.nodeRect.y + vertex.y * uniforms.nodeRect.w + ); + let ndc = pixelPos / uniforms.textureSize * 2.0 - 1.0; + output.position = vec4(ndc.x, -ndc.y, 0.0, 1.0); + output.texCoord = pixelPos / uniforms.textureSize; + return output; +} +\`,gp=\` +struct ScaleUniforms { + matrix: vec4, + translate: vec2, + srcSize: vec2, + dstSize: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: ScaleUniforms; +\`,bp=\` + var pos = vertex * uniforms.srcSize; + let a = uniforms.matrix.x; + let b = uniforms.matrix.y; + let c = uniforms.matrix.z; + let d = uniforms.matrix.w; + let tx = uniforms.translate.x; + let ty = uniforms.translate.y; + let transformedX = pos.x * a + pos.y * c + tx; + let transformedY = pos.x * b + pos.y * d + ty; + var position = vec2(transformedX, transformedY) / uniforms.dstSize; + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); +\`,ho=t=>\` +\${gp} + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + output.texCoord = \${t?"vec2(vertex.x, 1.0 - vertex.y)":"vertex"}; +\${bp} + return output; +} +\`,xp=ho(!1),yp=ho(!0),vp=ho(!1),_a=t=>\` +struct PositionUniforms { + offset: vec2, + size: vec2, + viewport: vec2, + padding: vec2, +} + +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, +} + +@group(0) @binding(0) var uniforms: PositionUniforms; + +@vertex +fn main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var output: VertexOutput; +\${es} + let vertex = vertices[vertexIndex]; + output.texCoord = \${t?"vec2(vertex.x, 1.0 - vertex.y)":"vertex"}; + var position = vertex * uniforms.size + uniforms.offset; + position = position / uniforms.viewport; + position = position * 2.0 - 1.0; + output.position = vec4(position.x, -position.y, 0.0, 1.0); + return output; +} +\`,Mp=_a(!1),Sp=_a(!0),$p=\` +struct FragmentInput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let f_val = input.bezier.x * input.bezier.x - input.bezier.y; + let dx = dpdx(f_val); + let dy = dpdy(f_val); + + if (input.bezier.x == 0.5 && input.bezier.y == 0.5) { + return vec4(input.color.rgb * input.color.a, input.color.a); + } + + let dist = f_val * inverseSqrt(dx * dx + dy * dy); + let coverage = smoothstep(0.5, -0.5, dist); + + if (coverage <= 0.001) { + discard; + } + + let finalAlpha = input.color.a * min(coverage, 1.0); + return vec4(input.color.rgb * finalAlpha, finalAlpha); +} +\`,Tp=\` +struct FragmentInput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let f_val = input.bezier.x * input.bezier.x - input.bezier.y; + let dx = dpdx(f_val); + let dy = dpdy(f_val); + let dist = f_val * inverseSqrt(dx * dx + dy * dy); + let alpha = smoothstep(0.5, -0.5, dist); + + if (alpha <= 0.001) { + discard; + } + + return vec4(0.0, 0.0, 0.0, min(alpha, 1.0)); +} +\`,Bp=\` +struct FragmentInput { + @builtin(position) position: vec4, + @location(0) color: vec4, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let a = input.color.a; + return vec4(input.color.r * a, input.color.g * a, input.color.b * a, a); +} +\`,Pp=\` +struct FragmentInput { + @location(0) bezier: vec2, +} + +@fragment +fn main(input: FragmentInput) -> @location(0) vec4 { + let px = dpdx(input.bezier); + let py = dpdy(input.bezier); + let f = (2.0 * input.bezier.x) * vec2(px.x, py.x) - vec2(px.y, py.y); + let alpha = 0.5 - (input.bezier.x * input.bezier.x - input.bezier.y) / length(f); + if (alpha <= 0.0) { + discard; + } + return vec4(min(alpha, 1.0)); +} +\`,Ap=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + return input.color; +} +\`,Fp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var textureData: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let textureColor = textureSampleLevel(textureData, textureSampler, input.texCoord, 0); + return textureColor * input.color; +} +\`,wp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) mulColor: vec4, + @location(2) addColor: vec4, +} + +@group(0) @binding(0) var textureSampler: sampler; +@group(0) @binding(1) var textureData: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var src = textureSample(textureData, textureSampler, input.texCoord); + src = vec4(src.rgb / max(0.0001, src.a), src.a); + src = clamp(src * input.mulColor + input.addColor, vec4(0.0), vec4(1.0)); + src = vec4(src.rgb * src.a, src.a); + return src; +} +\`,po=\` +struct GradientUniforms { + inverseMatrix: mat3x3, + gradientType: f32, + focal: f32, + spread: f32, + radius: f32, + linearPoints: vec4, +} + +@group(0) @binding(0) var gradient: GradientUniforms; +@group(0) @binding(1) var gradientSampler: sampler; +@group(0) @binding(2) var gradientTexture: texture_2d; + +override GRADIENT_TYPE: u32 = 0u; +override SPREAD_MODE: u32 = 2u; + +fn applySpread(t: f32) -> f32 { + if (SPREAD_MODE == 0u) { + return 1.0 - abs(fract(t * 0.5) * 2.0 - 1.0); + } else if (SPREAD_MODE == 1u) { + return fract(t); + } else { + return clamp(t, 0.0, 1.0); + } +} +\`,mo=\` + var t: f32; + if (GRADIENT_TYPE == 0u) { + let a = gradient.linearPoints.xy; + let b = gradient.linearPoints.zw; + let ab = b - a; + let ap = p - a; + let dotAB = dot(ab, ab); + if (dotAB < 0.0001) { + t = 0.0; + } else { + t = dot(ab, ap) / dotAB; + } + } else { + let r = gradient.radius; + let coord = p / r; + let focalRatio = gradient.focal; + + if (abs(focalRatio) < 0.001) { + t = length(coord); + } else { + let focal = vec2(focalRatio, 0.0); + let diff = coord - focal; + let lenDiff = length(diff); + + if (lenDiff < 0.0001) { + t = 0.0; + } else { + let dir = diff / lenDiff; + + // Solve quadratic equation for unit circle intersection (a=1 since dir is normalized) + let b_coef = 2.0 * dot(dir, focal); + let c_coef = dot(focal, focal) - 1.0; + let discriminant = b_coef * b_coef - 4.0 * c_coef; + let x = (-b_coef + sqrt(max(discriminant, 0.0))) * 0.5; + t = lenDiff / abs(x); + } + } + } + t = applySpread(t); + let gradientColor = textureSampleLevel(gradientTexture, gradientSampler, vec2(t, 0.5), 0); +\`,Op=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) v_uv: vec2, + @location(1) bezier: vec2, + @location(2) color: vec4, +} +\${po} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let p = input.v_uv; +\${mo} + let result = gradientColor * input.color; + return vec4(result.rgb * result.a, result.a); +} +\`,Ep=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) v_uv: vec2, + @location(1) bezier: vec2, + @location(2) color: vec4, +} +\${po} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let p = input.v_uv; +\${mo} + return vec4(gradientColor.rgb * gradientColor.a, gradientColor.a); +} +\`,Rp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} +\${po} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let p = input.texCoord; +\${mo} + let result = gradientColor * input.color; + return vec4(result.rgb * result.a, result.a); +} +\`,Cp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) bezier: vec2, + @location(1) color: vec4, + @location(2) worldPos: vec2, +} + +struct BitmapUniforms { + bitmapMatrix: mat3x3, + textureWidth: f32, + textureHeight: f32, + repeat: f32, + _pad: f32, +} + +@group(0) @binding(0) var uniforms: BitmapUniforms; +@group(0) @binding(1) var bitmapSampler: sampler; +@group(0) @binding(2) var bitmapTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let u = input.bezier.x; + let v = input.bezier.y; + if (abs(u - 0.5) > 0.001 || abs(v - 0.5) > 0.001) { + let d = u * u - v; + if (d > 0.0) { + discard; + } + } + let transformedPos = uniforms.bitmapMatrix * vec3(input.worldPos, 1.0); + var uv = vec2( + transformedPos.x / uniforms.textureWidth, + transformedPos.y / uniforms.textureHeight + ); + if (uniforms.repeat > 0.5) { + uv = fract(uv); + } + let bitmapColor = textureSampleLevel(bitmapTexture, bitmapSampler, uv, 0); + let alpha = bitmapColor.a * input.color.a; + return vec4(bitmapColor.rgb * input.color.a, alpha); +} +\`,Up=\` +\${Be} + +struct CopyUniforms { + scale: vec2, + offset: vec2, +} + +@group(0) @binding(0) var uniforms: CopyUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = input.texCoord * uniforms.scale + uniforms.offset; + return textureSampleLevel(inputTexture, textureSampler, uv, 0); +} +\`,Gp=\` +\${Be} + +struct CopyUniforms { + scale: vec2, + offset: vec2, +} + +@group(0) @binding(0) var uniforms: CopyUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = (input.texCoord - uniforms.offset) * uniforms.scale; + let clampedUv = clamp(uv, vec2(0.0), vec2(1.0)); + let color = textureSampleLevel(inputTexture, textureSampler, clampedUv, 0); + let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0; + return select(vec4(0.0, 0.0, 0.0, 0.0), color, inBounds); +} +\`,Lp=\` +\${Be} + +struct CopyUniforms { + scale: vec2, + offset: vec2, +} + +@group(0) @binding(0) var uniforms: CopyUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = input.texCoord * uniforms.scale + uniforms.offset; + let clampedUv = clamp(uv, vec2(0.0), vec2(1.0)); + let color = textureSampleLevel(inputTexture, textureSampler, clampedUv, 0); + let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0; + return select(vec4(0.0, 0.0, 0.0, 0.0), color, inBounds); +} +\`,kp=\` +\${Be} + +struct ColorTransformUniforms { + mul: vec4, + add: vec4, +} + +@group(0) @binding(0) var ct: ColorTransformUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var color = textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); + + color = vec4(color.rgb / max(vec3(0.0001), vec3(color.a)), color.a); + color = clamp(color * ct.mul + ct.add, vec4(0.0), vec4(1.0)); + color = vec4(color.rgb * color.a, color.a); + + return color; +} +\`,Ip=\` +\${Be} + +struct YFlipCTUniforms { + scale: vec2, + offset: vec2, + mul: vec4, + add: vec4, +} + +@group(0) @binding(0) var uniforms: YFlipCTUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let uv = input.texCoord * uniforms.scale + uniforms.offset; + var color = textureSampleLevel(inputTexture, textureSampler, uv, 0); + + color = vec4(color.rgb / max(vec3(0.0001), vec3(color.a)), color.a); + color = clamp(color * uniforms.mul + uniforms.add, vec4(0.0), vec4(1.0)); + color = vec4(color.rgb * color.a, color.a); + + return color; +} +\`,_p=\` +\${Be} + +struct ColorMatrixUniforms { + matrix: mat4x4, + offset: vec4, +} + +@group(0) @binding(0) var uniforms: ColorMatrixUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var color = textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); + + color = vec4(color.rgb / max(vec3(0.0001), vec3(color.a)), color.a); + var result = uniforms.matrix * color + uniforms.offset; + result = clamp(result, vec4(0.0), vec4(1.0)); + result = vec4(result.rgb * result.a, result.a); + + return result; +} +\`,Vp=\` +@fragment +fn main() -> @location(0) vec4 { + return vec4(0.0, 0.0, 0.0, 0.0); +} +\`,Dp=\` +\${Be} + +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + return textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); +} +\`,Np=\` +\${Be} + +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + return textureSampleLevel(inputTexture, textureSampler, input.texCoord, 0); +} +\`,zp=\` +struct VertexOutput { + @builtin(position) position: vec4, + @location(0) texCoord: vec2, + @location(1) color: vec4, +} + +struct BlendUniforms { + blendMode: f32, +} + +@group(0) @binding(1) var blend: BlendUniforms; +@group(0) @binding(2) var srcSampler: sampler; +@group(0) @binding(3) var srcTexture: texture_2d; +@group(0) @binding(4) var dstSampler: sampler; +@group(0) @binding(5) var dstTexture: texture_2d; + +fn blendNormal(src: vec4, dst: vec4) -> vec4 { + return src; +} + +fn blendMultiply(src: vec4, dst: vec4) -> vec4 { + return src * dst; +} + +fn blendScreen(src: vec4, dst: vec4) -> vec4 { + return src + dst - src * dst; +} + +fn blendAdd(src: vec4, dst: vec4) -> vec4 { + return min(src + dst, vec4(1.0)); +} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let src = textureSampleLevel(srcTexture, srcSampler, input.texCoord, 0); + let dst = textureSampleLevel(dstTexture, dstSampler, input.texCoord, 0); + var result: vec4; + if (blend.blendMode < 0.5) { + result = blendNormal(src, dst); + } else if (blend.blendMode < 1.5) { + result = blendMultiply(src, dst); + } else if (blend.blendMode < 2.5) { + result = blendScreen(src, dst); + } else { + result = blendAdd(src, dst); + } + return result * input.color; +} +\`,Xp=\` +\${Be} + +override IS_INNER: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct GlowUniforms { + color: vec4, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, +} + +@group(0) @binding(0) var uniforms: GlowUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let baseColor = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blurColor = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + var rawAlpha = blurColor.a; + if (IS_INNER == 1u) { + rawAlpha = 1.0 - rawAlpha; + } + let glowAlpha = clamp(rawAlpha * uniforms.strength, 0.0, 1.0); + let glowColor = vec4(uniforms.color.rgb * glowAlpha, uniforms.color.a * glowAlpha); + if (IS_INNER == 1u) { + let innerGlow = glowColor * baseColor.a; + if (IS_KNOCKOUT == 1u) { + return innerGlow; + } else { + return innerGlow + baseColor * (1.0 - glowColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + return glowColor * (1.0 - baseColor.a); + } else { + return baseColor + glowColor * (1.0 - baseColor.a); + } + } +} +\`,Yp=\` +\${Be} + +override IS_INNER: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; +override IS_HIDE_OBJECT: u32 = 0u; + +struct DropShadowUniforms { + color: vec4, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, +} + +@group(0) @binding(0) var uniforms: DropShadowUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let baseColor = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blur = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + var rawAlpha = blur.a; + if (IS_INNER == 1u) { + rawAlpha = 1.0 - rawAlpha; + } + let shadowAlpha = clamp(rawAlpha * uniforms.strength, 0.0, 1.0); + let shadowColor = vec4(uniforms.color.rgb * shadowAlpha, uniforms.color.a * shadowAlpha); + + if (IS_INNER == 1u) { + let innerShadow = shadowColor * baseColor.a; + if (IS_KNOCKOUT == 1u) { + return innerShadow; + } else { + return innerShadow + baseColor * (1.0 - shadowColor.a); + } + } else { + if (IS_HIDE_OBJECT == 1u) { + return shadowColor; + } else if (IS_KNOCKOUT == 1u) { + return shadowColor * (1.0 - baseColor.a); + } else { + return shadowColor * (1.0 - baseColor.a) + baseColor; + } + } +} +\`,Wp=\` +\${Be} + +override GLOW_TYPE: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct GradientGlowUniforms { + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, +} + +@group(0) @binding(0) var uniforms: GradientGlowUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +@group(0) @binding(4) var gradientLUT: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let base = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + var blur = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + blur.a = clamp(blur.a * uniforms.strength, 0.0, 1.0); + let glowColor = textureSampleLevel(gradientLUT, textureSampler, vec2(blur.a, 0.5), 0); + var result: vec4; + if (GLOW_TYPE == 0u) { + if (IS_KNOCKOUT == 1u) { + result = glowColor; + } else { + result = base - base * glowColor.a + glowColor; + } + } else if (GLOW_TYPE == 1u) { + if (IS_KNOCKOUT == 1u) { + result = glowColor * base.a; + } else { + result = glowColor * base.a + base * (1.0 - glowColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + result = glowColor - glowColor * base.a; + } else { + result = base + glowColor - glowColor * base.a; + } + } + return result; +} +\`,jp=\` +\${Be} + +override BEVEL_TYPE: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct GradientBevelUniforms { + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, +} + +@group(0) @binding(0) var uniforms: GradientBevelUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +@group(0) @binding(4) var gradientLUT: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let base = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blur1 = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + let mirrorUV = (1.0 - input.texCoord) * uniforms.blurScale - uniforms.blurOffset; + let blur2 = textureSampleLevel(blurTexture, textureSampler, mirrorUV, 0) * isInside(mirrorUV); + + var highlightAlpha = blur1.a - blur2.a; + var shadowAlpha = blur2.a - blur1.a; + highlightAlpha = clamp(highlightAlpha * uniforms.strength, 0.0, 1.0); + shadowAlpha = clamp(shadowAlpha * uniforms.strength, 0.0, 1.0); + + let lutCoord = 0.5019607843137255 - 0.5019607843137255 * shadowAlpha + 0.4980392156862745 * highlightAlpha; + let bevelColor = textureSampleLevel(gradientLUT, textureSampler, vec2(lutCoord, 0.5), 0); + + var result: vec4; + if (BEVEL_TYPE == 0u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor; + } else { + result = base - base * bevelColor.a + bevelColor; + } + } else if (BEVEL_TYPE == 1u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor * base.a; + } else { + result = bevelColor * base.a + base * (1.0 - bevelColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + result = bevelColor - bevelColor * base.a; + } else { + result = base + bevelColor - bevelColor * base.a; + } + } + + return result; +} +\`,Hp=\` +\${Be} + +override BEVEL_TYPE: u32 = 0u; +override IS_KNOCKOUT: u32 = 0u; + +struct BevelUniforms { + highlightColor: vec4, + shadowColor: vec4, + strength: f32, + _padding1: f32, + _padding2: f32, + _padding3: f32, + baseScale: vec2, + baseOffset: vec2, + blurScale: vec2, + blurOffset: vec2, +} + +@group(0) @binding(0) var uniforms: BevelUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var blurTexture: texture_2d; +@group(0) @binding(3) var baseTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let baseUV = input.texCoord * uniforms.baseScale - uniforms.baseOffset; + let base = textureSampleLevel(baseTexture, textureSampler, baseUV, 0) * isInside(baseUV); + + let blurUV = input.texCoord * uniforms.blurScale - uniforms.blurOffset; + let blur1 = textureSampleLevel(blurTexture, textureSampler, blurUV, 0) * isInside(blurUV); + + let mirrorUV = (1.0 - input.texCoord) * uniforms.blurScale - uniforms.blurOffset; + let blur2 = textureSampleLevel(blurTexture, textureSampler, mirrorUV, 0) * isInside(mirrorUV); + + var highlightAlpha = blur1.a - blur2.a; + var shadowAlpha = blur2.a - blur1.a; + highlightAlpha = clamp(highlightAlpha * uniforms.strength, 0.0, 1.0); + shadowAlpha = clamp(shadowAlpha * uniforms.strength, 0.0, 1.0); + + let bevelColor = uniforms.highlightColor * highlightAlpha + uniforms.shadowColor * shadowAlpha; + var result: vec4; + if (BEVEL_TYPE == 0u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor; + } else { + result = base - base * bevelColor.a + bevelColor; + } + } else if (BEVEL_TYPE == 1u) { + if (IS_KNOCKOUT == 1u) { + result = bevelColor * base.a; + } else { + result = bevelColor * base.a + base * (1.0 - bevelColor.a); + } + } else { + if (IS_KNOCKOUT == 1u) { + result = bevelColor - bevelColor * base.a; + } else { + result = base + bevelColor - bevelColor * base.a; + } + } + + return result; +} +\`,Kp=\` +\${Be} + +struct BevelBaseUniforms { + offset: vec2, + _padding: vec2, +} + +@group(0) @binding(0) var uniforms: BevelBaseUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var sourceTexture: texture_2d; +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let original = textureSampleLevel(sourceTexture, textureSampler, input.texCoord, 0); + let shiftedUV = input.texCoord - uniforms.offset; + let shifted = textureSampleLevel(sourceTexture, textureSampler, shiftedUV, 0) * isInside(shiftedUV); + return original * (1.0 - shifted.a); +} +\`;class N{static getFillVertexShader(){return Ca}static getFillMainVertexShader(){return Ca}static getFillFragmentShader(){return $p}static getStencilWriteVertexShader(){return Ua}static getStencilWriteMainVertexShader(){return Ua}static getStencilWriteFragmentShader(){return Tp}static getStencilFillVertexShader(){return Ga}static getStencilFillMainVertexShader(){return Ga}static getStencilFillFragmentShader(){return Bp}static getMaskVertexShader(){return ap}static getMaskFragmentShader(){return Pp}static getBasicVertexShader(){return La}static getBasicMainVertexShader(){return La}static getBasicFragmentShader(){return Ap}static getTextureFragmentShader(){return Fp}static getInstancedVertexShader(){return cp}static getInstancedFragmentShader(){return wp}static getGradientFillVertexShader(){return ka}static getGradientFillMainVertexShader(){return ka}static getGradientFillFragmentShader(){return Op}static getGradientFillStencilFragmentShader(){return Ep}static getGradientFragmentShader(){return Rp}static getBitmapFillVertexShader(){return Ia}static getBitmapFillMainVertexShader(){return Ia}static getBitmapFillFragmentShader(){return Cp}static getBlendFragmentShader(){return zp}static getBlurFilterVertexShader(){return up}static getBitmapSyncVertexShader(){return mp}static getBitmapSyncFragmentShader(){return Np}static getBlurFilterFragmentShader(e){const r=e.toFixed(1);return\` +\${Be} + +struct BlurUniforms { + offset: vec2, + fraction: f32, + samples: f32, +} + +@group(0) @binding(0) var uniforms: BlurUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var inputTexture: texture_2d; + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let offset = uniforms.offset; + let fraction = uniforms.fraction; + let samples = uniforms.samples; + var color = textureSample(inputTexture, textureSampler, input.texCoord); + for (var i: f32 = 1.0; i < \${r}; i += 1.0) { + color += textureSample(inputTexture, textureSampler, input.texCoord + offset * i); + color += textureSample(inputTexture, textureSampler, input.texCoord - offset * i); + } + color += textureSample(inputTexture, textureSampler, input.texCoord + offset * \${r}) * fraction; + color += textureSample(inputTexture, textureSampler, input.texCoord - offset * \${r}) * fraction; + color /= samples; + return color; +} +\`}static getTextureCopyFragmentShader(){return Up}static getBlurTextureCopyFragmentShader(){return Gp}static getFilterOutputFragmentShader(){return Lp}static getColorTransformFragmentShader(){return kp}static getYFlipColorTransformFragmentShader(){return Ip}static getColorMatrixFilterFragmentShader(){return _p}static getGlowFilterFragmentShader(){return Xp}static getDropShadowFilterFragmentShader(){return Yp}static getGradientGlowFilterFragmentShader(){return Wp}static getGradientBevelFilterFragmentShader(){return jp}static getBevelFilterFragmentShader(){return Hp}static getBevelBaseFragmentShader(){return Kp}static getConvolutionFilterFragmentShader(e,r,n=!0,s=!0){const o=Math.floor(e*.5),i=Math.floor(r*.5),l=e*r;let c="";for(let h=0;h, + rcpDivisor: f32, + bias: f32, + substituteColor: vec4, + matrix: array, \${Math.ceil(l/4)}>, +} + +@group(0) @binding(0) var uniforms: ConvolutionUniforms; +@group(0) @binding(1) var sourceSampler: sampler; +@group(0) @binding(2) var sourceTexture: texture_2d; + +\${Be} + +\${Nt} + +fn getMatrixWeight(index: i32) -> f32 { + let vecIndex = index / 4; + let component = index % 4; + let vec = uniforms.matrix[vecIndex]; + if (component == 0) { return vec.x; } + else if (component == 1) { return vec.y; } + else if (component == 2) { return vec.z; } + else { return vec.w; } +} + +fn getWeightedColor(i: i32, weight: f32) -> vec4 { + let rcpSize = uniforms.rcpSize; + let iDivX = i / \${e}; + let iModX = i - \${e} * iDivX; + let offset = vec2(f32(iModX - \${o}), f32(\${i} - iDivX)); + var uv = input.texCoord + offset * rcpSize; + var color = textureSample(sourceTexture, sourceSampler, uv); + color = vec4(color.rgb / max(0.0001, color.a), color.a); + \${a} + return color * weight; +} + +var input: VertexOutput; + +@vertex +fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { + var positions = array, 6>( + vec2(-1.0, -1.0), + vec2(1.0, -1.0), + vec2(-1.0, 1.0), + vec2(-1.0, 1.0), + vec2(1.0, -1.0), + vec2(1.0, 1.0) + ); + var texCoords = array, 6>( + vec2(0.0, 1.0), + vec2(1.0, 1.0), + vec2(0.0, 0.0), + vec2(0.0, 0.0), + vec2(1.0, 1.0), + vec2(1.0, 0.0) + ); + var output: VertexOutput; + output.position = vec4(positions[vertexIndex], 0.0, 1.0); + output.texCoord = texCoords[vertexIndex]; + return output; +} + +@fragment +fn fs_main(fragInput: VertexOutput) -> @location(0) vec4 { + input = fragInput; + let rcpDivisor = uniforms.rcpDivisor; + let bias = uniforms.bias; + var result = vec4(0.0); + \${c} + result = clamp(result * rcpDivisor + bias, vec4(0.0), vec4(1.0)); + \${u} + result = vec4(result.rgb * result.a, result.a); + return result; +} +\`}static getComplexBlendFragmentShader(){return N.getUnifiedComplexBlendFragmentShader()}static getBlendModeIndex(e){switch(e){case"subtract":return 0;case"multiply":return 1;case"lighten":return 2;case"darken":return 3;case"overlay":return 4;case"hardlight":return 5;case"difference":return 6;case"invert":return 7;default:return 1}}static getUnifiedComplexBlendFragmentShader(){return\` +\${Be} + +struct BlendUniforms { + mulColor: vec4, + addColor: vec4, + blendMode: f32, + _pad0: f32, + _pad1: f32, + _pad2: f32, +} + +@group(0) @binding(0) var uniforms: BlendUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var dstTexture: texture_2d; +@group(0) @binding(3) var srcTexture: texture_2d; + +fn blend(src: vec4, dst: vec4, mode: i32) -> vec4 { + if (src.a == 0.0) { return dst; } + if (dst.a == 0.0) { return src; } + + let a = src - src * dst.a; + let b = dst - dst * src.a; + + if (mode == 1) { + let c = src * dst; + return a + b + c; + } + + let srcRgb = src.rgb / src.a; + let dstRgb = dst.rgb / dst.a; + + var blended: vec3; + + switch (mode) { + case 0: { + blended = dstRgb - srcRgb; + } + case 2: { + blended = mix(srcRgb, dstRgb, step(srcRgb, dstRgb)); + } + case 3: { + blended = mix(srcRgb, dstRgb, step(dstRgb, srcRgb)); + } + case 4: { + let mul = srcRgb * dstRgb; + let c1 = 2.0 * mul; + let c2 = 2.0 * (srcRgb + dstRgb - mul) - 1.0; + blended = mix(c1, c2, step(vec3(0.5), dstRgb)); + } + case 5: { + let mul = srcRgb * dstRgb; + let c1 = 2.0 * mul; + let c2 = 2.0 * (srcRgb + dstRgb - mul) - 1.0; + blended = mix(c1, c2, step(vec3(0.5), srcRgb)); + } + case 6: { + blended = abs(srcRgb - dstRgb); + } + case 7: { + let ib = dst - dst * src.a; + let ic = vec4(src.a - dst.rgb * src.a, src.a); + return ib + ic; + } + default: { + blended = srcRgb; + } + } + + var c = vec4(blended, src.a * dst.a); + c = vec4(c.rgb * c.a, c.a); + return a + b + c; +} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + var dst = textureSample(dstTexture, textureSampler, input.texCoord); + var src = textureSample(srcTexture, textureSampler, input.texCoord); + let mul = uniforms.mulColor; + let add = uniforms.addColor; + if (mul.x != 1.0 || mul.y != 1.0 || mul.z != 1.0 || mul.w != 1.0 + || add.x != 0.0 || add.y != 0.0 || add.z != 0.0) { + src = vec4(src.rgb / max(vec3(0.0001), vec3(src.a)), src.a); + src = clamp(src * mul + add, vec4(0.0), vec4(1.0)); + src = vec4(src.rgb * src.a, src.a); + } + return blend(src, dst, i32(uniforms.blendMode)); +} +\`}static getDisplacementMapFilterFragmentShader(e,r,n){let s,o;switch(e){case 1:s="mapColor.r";break;case 2:s="mapColor.g";break;case 4:s="mapColor.b";break;case 8:s="mapColor.a";break;default:s="0.5";break}switch(r){case 1:o="mapColor.r";break;case 2:o="mapColor.g";break;case 4:o="mapColor.b";break;case 8:o="mapColor.a";break;default:o="0.5";break}let i,l=!1;switch(n){case 0:i=\` +sourceColor = textureSample(srcTexture, textureSampler, uv); +\`;break;case 1:l=!0,i=\` +sourceColor = mix(uniforms.substituteColor, textureSample(srcTexture, textureSampler, uv), isInside(uv)); +\`;break;case 2:i=\` +sourceColor = textureSample(srcTexture, textureSampler, fract(uv)); +\`;break;case 3:i=\` +let insideUV = step(abs(uv - vec2(0.5)), vec2(0.5)); +sourceColor = textureSample(srcTexture, textureSampler, mix(input.texCoord, uv, insideUV)); +\`;break;default:i=\` +sourceColor = textureSample(srcTexture, textureSampler, fract(uv)); +\`;break}return\` +\${Be} + +\${l?\`struct DisplacementUniforms { + uvToStScale: vec2, + uvToStOffset: vec2, + scale: vec2, + padding: vec2, + substituteColor: vec4, +}\`:\`struct DisplacementUniforms { + uvToStScale: vec2, + uvToStOffset: vec2, + scale: vec2, + padding: vec2, +}\`} + +@group(0) @binding(0) var uniforms: DisplacementUniforms; +@group(0) @binding(1) var textureSampler: sampler; +@group(0) @binding(2) var srcTexture: texture_2d; +@group(0) @binding(3) var mapTexture: texture_2d; + +\${Nt} + +@fragment +fn main(input: VertexOutput) -> @location(0) vec4 { + let stCoord = vec2(input.texCoord.x, 1.0 - input.texCoord.y); + let st = stCoord * uniforms.uvToStScale - uniforms.uvToStOffset; + let mapColor = textureSample(mapTexture, textureSampler, vec2(st.x, 1.0 - st.y)); + let offset = vec2(\${s}, \${o}) - 0.5; + let uv = input.texCoord + offset * uniforms.scale; + var sourceColor: vec4; + \${i} + return mix(textureSample(srcTexture, textureSampler, input.texCoord), sourceColor, isInside(st)); +} +\`}static getNodeClearVertexShader(){return dp}static getNodeClearFragmentShader(){return Vp}static getPositionedTextureVertexShader(){return pp}static getTextureScaleVertexShader(){return xp}static getTextureScaleBlendVertexShader(){return yp}static getComplexBlendScaleVertexShader(){return vp}static getComplexBlendVertexShader(){return fp}static getComplexBlendCopyVertexShader(){return hp}static getComplexBlendOutputVertexShader(){return Mp}static getFilterComplexBlendOutputVertexShader(){return Sp}static getPositionedTextureFragmentShader(){return Dp}}const rr={arrayStride:16,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,offset:8,format:"float32x2"}]},un={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};class qp{device;format;pipelines;bindGroupLayouts;sampleCount;shaderModuleCache=new Map;filterBindGroupLayouts=new Map;constructor(e,r){this.device=e,this.format=r,this.pipelines=new Map,this.bindGroupLayouts=new Map,this.sampleCount=ao,this.initialize()}getOrCreateShaderModule(e,r){let n=this.shaderModuleCache.get(e);return n||(n=this.device.createShaderModule({code:r}),this.shaderModuleCache.set(e,n)),n}initialize(){this.createFillPipeline(),this.createStencilFillPipelines(),this.createClipPipeline(),this.createMaskUnionPipelines(),this.createMaskPipeline(),this.createBasicPipeline(),this.createTexturePipeline(),this.createInstancedPipeline(),this.createGradientPipeline(),this.createBitmapFillPipeline(),this.createBlendPipeline(),this.createNodeClearPipeline()}lazyInitGroups=new Set;lazyGroupMap=new Map([...Array.from({length:16},(e,r)=>[\`blur_filter_\${r+1}\`,"blur_filter"]),["blur_filter","blur_filter"],["texture_copy","texture_copy"],["texture_copy_rgba8","texture_copy"],["color_transform","texture_copy"],["y_flip_color_transform","texture_copy"],["texture_erase","texture_copy"],["blur_texture_copy","texture_copy"],["filter_blend","texture_copy"],["texture_copy_bgra","texture_copy"],["filter_output","texture_copy"],["filter_output_add","texture_copy"],["filter_output_screen","texture_copy"],["filter_output_alpha","texture_copy"],["filter_output_erase","texture_copy"],["texture_copy_bgra_msaa","texture_copy"],["filter_output_msaa","texture_copy"],["filter_output_add_msaa","texture_copy"],["filter_output_screen_msaa","texture_copy"],["filter_output_alpha_msaa","texture_copy"],["filter_output_erase_msaa","texture_copy"],["positioned_texture","texture_copy"],["positioned_texture_rgba","texture_copy"],["bitmap_render_msaa","texture_copy"],["bitmap_render","texture_copy"],["texture_scale","texture_copy"],["texture_scale_blend","texture_copy"],["bitmap_sync","bitmap_sync"],["color_matrix_filter","filter"],["bevel_base","filter"],["glow_filter","filter"],["drop_shadow_filter","filter"],["bevel_filter","filter"],["gradient_glow_filter","filter"],["gradient_bevel_filter","filter"],["complex_blend","complex_blend"],["complex_blend_copy","complex_blend"],["complex_blend_scale","complex_blend"],["complex_blend_output","complex_blend"],["complex_blend_output_msaa","complex_blend"],["filter_complex_blend_output","complex_blend"],["filter_complex_blend_output_msaa","complex_blend"]]);ensureLazyGroup(e){const r=this.lazyGroupMap.get(e);if(!(!r||this.lazyInitGroups.has(r)))switch(this.lazyInitGroups.add(r),r){case"blur_filter":this.createBlurFilterPipeline();break;case"texture_copy":this.createTextureCopyPipeline();break;case"bitmap_sync":this.createBitmapSyncPipeline();break;case"filter":this.createColorMatrixFilterPipeline();break;case"complex_blend":this.createComplexBlendPipelines();break}}preloadLazyGroups(){const e=["blur_filter","texture_copy","bitmap_sync","filter","complex_blend"];for(const r of e)this.ensureLazyGroup(r)}createFillPipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0}}]});this.bindGroupLayouts.set("fill_dynamic",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("fillVertex",N.getFillVertexShader()),s=this.getOrCreateShaderModule("fillFragment",N.getFillFragmentShader()),o=rr,i=un,l=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[o]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:i}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:0,stencilWriteMask:0},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}}),c=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[o],constants:{yFlipSign:-1}},fragment:{module:s,entryPoint:"main",targets:[{format:this.format,blend:i}]},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("fill",l),this.pipelines.set("fill_bgra",c);const u=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[o],constants:{yFlipSign:-1}},fragment:{module:s,entryPoint:"main",targets:[{format:this.format,blend:i}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:255,stencilWriteMask:0},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("fill_bgra_stencil",u)}createStencilFillPipelines(){const e=rr,r=this.bindGroupLayouts.get("fill_dynamic"),n=this.device.createPipelineLayout({bindGroupLayouts:[r]}),s=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none",frontFace:"ccw"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"increment-wrap"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"decrement-wrap"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("stencil_write",s);const o=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill",o);const i=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none",frontFace:"ccw"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"increment-wrap"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"decrement-wrap"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("stencil_write_atlas",i);const l=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e],constants:{yFlipSign:-1}},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:this.format,writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none",frontFace:"ccw"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"increment-wrap"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"decrement-wrap"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount,alphaToCoverageEnabled:!0}});this.pipelines.set("stencil_write_main",l);const c=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill_atlas",c);const u=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e],constants:{yFlipSign:-1}},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:this.format,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill_main",u);const a=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilFillVertex",N.getStencilFillVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilFillFragment",N.getStencilFillFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"greater",failOp:"keep",depthFailOp:"replace",passOp:"replace"},stencilBack:{compare:"greater",failOp:"keep",depthFailOp:"replace",passOp:"replace"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("stencil_fill_masked",a)}createClipPipeline(){const e=rr,r=this.bindGroupLayouts.get("fill_dynamic"),n=this.device.createPipelineLayout({bindGroupLayouts:[r]}),s=this.device.createRenderPipeline({layout:n,vertex:{module:this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",writeMask:0}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"zero",depthFailOp:"invert",passOp:"invert"},stencilBack:{compare:"always",failOp:"zero",depthFailOp:"invert",passOp:"invert"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("clip_write",s);const o=this.getOrCreateShaderModule("stencilWriteVertex",N.getStencilWriteVertexShader()),i=this.getOrCreateShaderModule("stencilWriteFragment",N.getStencilWriteFragmentShader());for(let l=1;l<=8;l++){const c=1<1){const g={color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}};this.pipelines.set("texture_copy_bgra_msaa",this.createFullscreenQuadPipeline(r,n,s,this.format,g,this.sampleCount));const m={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};this.pipelines.set("filter_output_msaa",this.createFullscreenQuadPipeline(r,n,h,this.format,m,this.sampleCount));for(const[f,b]of d)this.pipelines.set(\`\${f}_msaa\`,this.createFullscreenQuadPipeline(r,n,h,this.format,b,this.sampleCount))}this.createPositionedTexturePipeline(),this.createTextureScalePipeline()}createPositionedTexturePipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}}]});this.bindGroupLayouts.set("positioned_texture",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("positionedTextureVertex",N.getPositionedTextureVertexShader()),s=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:this.format,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("positioned_texture",o);const i=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("positioned_texture_rgba",i);const l=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:4},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"}}});this.pipelines.set("bitmap_render_msaa",l);const c=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"}}});this.pipelines.set("bitmap_render",c)}createTextureScalePipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}}]});this.bindGroupLayouts.set("texture_scale",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("textureScaleVertex",N.getTextureScaleVertexShader()),s=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("texture_scale",o);const i=this.getOrCreateShaderModule("textureScaleBlendVertex",N.getTextureScaleBlendVertexShader()),l=this.device.createRenderPipeline({layout:r,vertex:{module:i,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("texture_scale_blend",l)}createBitmapSyncPipeline(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]});this.bindGroupLayouts.set("bitmap_sync",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("bitmapSyncVertex",N.getBitmapSyncVertexShader()),s=this.getOrCreateShaderModule("bitmapSyncFragment",N.getBitmapSyncFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:4}});this.pipelines.set("bitmap_sync",o)}createColorMatrixFilterPipeline(){const e={color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}},r={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};this.createFilterPipelineWithLayout("color_matrix_filter",N.getColorMatrixFilterFragmentShader(),1,e),this.createFilterPipelineWithLayout("bevel_base",N.getBevelBaseFragmentShader(),1,e),this.createFilterPipelineWithLayout("glow_filter",N.getGlowFilterFragmentShader(),2,r),this.createFilterPipelineWithLayout("drop_shadow_filter",N.getDropShadowFilterFragmentShader(),2,r),this.createFilterPipelineWithLayout("bevel_filter",N.getBevelFilterFragmentShader(),2,r),this.createFilterPipelineWithLayout("gradient_glow_filter",N.getGradientGlowFilterFragmentShader(),3,r),this.createFilterPipelineWithLayout("gradient_bevel_filter",N.getGradientBevelFilterFragmentShader(),3,r)}createComplexBlendPipelines(){const e=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{}}]});this.bindGroupLayouts.set("complex_blend",e);const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("complexBlendVertex",N.getComplexBlendVertexShader()),s=this.getOrCreateShaderModule("unifiedComplexBlendFragment",N.getUnifiedComplexBlendFragmentShader()),o=this.device.createRenderPipeline({layout:r,vertex:{module:n,entryPoint:"main",buffers:[]},fragment:{module:s,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}});this.pipelines.set("complex_blend",o),this.createComplexBlendCopyPipeline(),this.createComplexBlendOutputPipeline()}createComplexBlendCopyPipeline(){const e={color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}},r=this.bindGroupLayouts.get("texture_copy");if(r){const s=this.device.createPipelineLayout({bindGroupLayouts:[r]}),o=this.getOrCreateShaderModule("complexBlendCopyVertex",N.getComplexBlendCopyVertexShader()),i=this.getOrCreateShaderModule("textureCopyFragment",N.getTextureCopyFragmentShader());this.pipelines.set("complex_blend_copy",this.createFullscreenQuadPipeline(s,o,i,"rgba8unorm",e))}const n=this.bindGroupLayouts.get("texture_scale");if(n){const s=this.device.createPipelineLayout({bindGroupLayouts:[n]}),o=this.getOrCreateShaderModule("complexBlendScaleVertex",N.getComplexBlendScaleVertexShader()),i=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader());this.pipelines.set("complex_blend_scale",this.createFullscreenQuadPipeline(s,o,i,"rgba8unorm",e))}}createComplexBlendOutputPipeline(){const e=this.bindGroupLayouts.get("positioned_texture");if(!e)return;const r=this.device.createPipelineLayout({bindGroupLayouts:[e]}),n=this.getOrCreateShaderModule("positionedTextureFragment",N.getPositionedTextureFragmentShader()),s={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}},o=this.getOrCreateShaderModule("complexBlendOutputVertex",N.getComplexBlendOutputVertexShader());this.pipelines.set("complex_blend_output",this.createFullscreenQuadPipeline(r,o,n,this.format,s)),this.sampleCount>1&&this.pipelines.set("complex_blend_output_msaa",this.createFullscreenQuadPipeline(r,o,n,this.format,s,this.sampleCount));const i=this.getOrCreateShaderModule("filterComplexBlendOutputVertex",N.getFilterComplexBlendOutputVertexShader());this.pipelines.set("filter_complex_blend_output",this.createFullscreenQuadPipeline(r,i,n,this.format,s)),this.sampleCount>1&&this.pipelines.set("filter_complex_blend_output_msaa",this.createFullscreenQuadPipeline(r,i,n,this.format,s,this.sampleCount))}createFilterPipelineWithLayout(e,r,n,s){let o=this.filterBindGroupLayouts.get(n);if(!o){const u=[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}];for(let a=0;a1&&(c.multisample={count:i}),l&&(c.depthStencil=l),this.device.createRenderPipeline(c)}getPipeline(e){let r=this.pipelines.get(e);return r||(this.ensureLazyGroup(e),r=this.pipelines.get(e)),r}getFilterPipeline(e,r){const s=Object.keys(r).sort().map(h=>\`\${h}\${r[h]}\`).join("_"),o=\`\${e}_\${s}\`;let i=this.pipelines.get(o);if(i)return i;this.ensureLazyGroup(e);const l=this.shaderModuleCache.get(\`filter_\${e}\`),c=this.shaderModuleCache.get("blurFilterVertex"),u=this.bindGroupLayouts.get(e);if(!l||!c||!u)return this.pipelines.get(e);const a=this.device.createPipelineLayout({bindGroupLayouts:[u]});return i=this.device.createRenderPipeline({layout:a,vertex:{module:c,entryPoint:"main",buffers:[]},fragment:{module:l,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}],constants:r},primitive:{topology:"triangle-list",cullMode:"none"}}),this.pipelines.set(o,i),i}getGradientPipeline(e,r,n){const s=\`\${e}_t\${r}s\${n}\`;let o=this.pipelines.get(s);return o||(this.gradientPipelineLayout?(o=this.createGradientVariant(e,r,n),o?(this.pipelines.set(s,o),o):this.getPipeline(e)):this.getPipeline(e))}gradientPipelineLayout=null;gradientVertexShaderModule=null;gradientFragmentShaderModule=null;gradientStencilFragmentShaderModule=null;createGradientVariant(e,r,n){if(!this.gradientPipelineLayout)return;const s={GRADIENT_TYPE:r,SPREAD_MODE:n},o=rr,i=un,c=e.includes("stencil_atlas")||e==="gradient_fill_stencil_main"?this.gradientStencilFragmentShaderModule:this.gradientFragmentShaderModule,a=e.includes("bgra")||e==="gradient_fill_stencil_main"?this.format:"rgba8unorm",h=e.includes("bgra")||e==="gradient_fill_stencil_main",d={};h&&(d.yFlipSign=-1);let g,m=this.sampleCount;e.includes("stroke")?g={format:"stencil8",stencilFront:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"always",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:0,stencilWriteMask:0}:e==="gradient_fill_stencil"||e==="gradient_fill_stencil_atlas"?g={format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255}:e==="gradient_fill_stencil_main"?(g={format:"stencil8",stencilFront:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"not-equal",failOp:"keep",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},m=1):e==="gradient_fill_bgra_stencil"?g={format:"stencil8",stencilFront:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilBack:{compare:"equal",failOp:"keep",depthFailOp:"keep",passOp:"keep"},stencilReadMask:255,stencilWriteMask:0}:e==="gradient_fill_bgra_no_msaa"&&(m=1);const f={layout:this.gradientPipelineLayout,vertex:{module:this.gradientVertexShaderModule,entryPoint:"main",buffers:[o],constants:Object.keys(d).length>0?d:void 0},fragment:{module:c,entryPoint:"main",targets:[{format:a,blend:i}],constants:s},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:m}};return g&&(f.depthStencil=g),this.device.createRenderPipeline(f)}getBindGroupLayout(e){let r=this.bindGroupLayouts.get(e);return r||(this.ensureLazyGroup(e),r=this.bindGroupLayouts.get(e)),r}createNodeClearPipeline(){const e={arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]},r=this.device.createRenderPipeline({layout:"auto",vertex:{module:this.getOrCreateShaderModule("nodeClearVertex",N.getNodeClearVertexShader()),entryPoint:"main",buffers:[e]},fragment:{module:this.getOrCreateShaderModule("nodeClearFragment",N.getNodeClearFragmentShader()),entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"zero",operation:"add"},alpha:{srcFactor:"one",dstFactor:"zero",operation:"add"}},writeMask:GPUColorWrite.ALL}]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"stencil8",stencilFront:{compare:"always",failOp:"zero",depthFailOp:"zero",passOp:"zero"},stencilBack:{compare:"always",failOp:"zero",depthFailOp:"zero",passOp:"zero"},stencilReadMask:255,stencilWriteMask:255},multisample:{count:this.sampleCount}});this.pipelines.set("node_clear_atlas",r)}dispose(){this.pipelines.clear(),this.bindGroupLayouts.clear(),this.shaderModuleCache.clear(),this.filterBindGroupLayouts.clear()}}class Qp{device;pipelines;bindGroupLayouts;constructor(e){this.device=e,this.pipelines=new Map,this.bindGroupLayouts=new Map,this.initializeBlurPipelines()}initializeBlurPipelines(){const e=this.device.createBindGroupLayout({label:"blur_compute_bind_group_layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.COMPUTE,storageTexture:{access:"write-only",format:"rgba8unorm"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}]});this.bindGroupLayouts.set("blur_compute",e),this.createBlurComputePipeline("blur_compute_horizontal"),this.createBlurComputePipeline("blur_compute_vertical"),this.createBlurComputePipeline("blur_compute_shared_horizontal",!0),this.createBlurComputePipeline("blur_compute_shared_vertical",!0)}createBlurComputePipeline(e,r=!1){const n=this.device.createShaderModule({label:\`\${e}_shader\`,code:r?this.getSharedBlurComputeShaderCode():this.getBlurComputeShaderCode()}),s=this.device.createPipelineLayout({label:\`\${e}_layout\`,bindGroupLayouts:[this.bindGroupLayouts.get("blur_compute")]}),o=this.device.createComputePipeline({label:e,layout:s,compute:{module:n,entryPoint:"main"}});this.pipelines.set(e,o)}getBlurComputeShaderCode(){return\` +struct BlurParams { + direction: vec2, // (1,0) or (0,1) + radius: f32, // ブラー半径 + fraction: f32, // 端ピクセルのブレンド割合 + texSize: vec2, // テクスチャサイズ + samples: f32, // サンプル数 + padding: f32, // パディング(16バイトアライメント) +} + +@group(0) @binding(0) var inputTexture: texture_2d; +@group(0) @binding(1) var outputTexture: texture_storage_2d; +@group(0) @binding(2) var params: BlurParams; + +const WORKGROUP_SIZE: u32 = 16u; + +@compute @workgroup_size(16, 16, 1) +fn main( + @builtin(global_invocation_id) globalId: vec3 +) { + let texSize = vec2(u32(params.texSize.x), u32(params.texSize.y)); + let radius = i32(params.radius); + + let outCoord = globalId.xy; + + if (outCoord.x >= texSize.x || outCoord.y >= texSize.y) { + return; + } + + let direction = vec2(i32(params.direction.x), i32(params.direction.y)); + let samples = params.samples; + let fraction = params.fraction; + + var color = vec4(0.0); + + for (var i = -radius; i <= radius; i = i + 1) { + var sampleCoord = vec2(outCoord) + direction * i; + + sampleCoord.x = clamp(sampleCoord.x, 0, i32(texSize.x) - 1); + sampleCoord.y = clamp(sampleCoord.y, 0, i32(texSize.y) - 1); + + let sample = textureLoad(inputTexture, vec2(sampleCoord), 0); + + // 端ピクセルにfraction重みを適用(Fragment Shaderと同じロジック) + if (i == -radius || i == radius) { + color = color + sample * fraction; + } else { + color = color + sample; + } + } + + color = color / samples; + + textureStore(outputTexture, outCoord, color); +} +\`}getSharedBlurComputeShaderCode(){return\` +struct BlurParams { + direction: vec2, + radius: f32, + fraction: f32, + texSize: vec2, + samples: f32, + padding: f32, +} + +@group(0) @binding(0) var inputTexture: texture_2d; +@group(0) @binding(1) var outputTexture: texture_storage_2d; +@group(0) @binding(2) var params: BlurParams; + +const TILE: u32 = 16u; +const MAX_APRON: u32 = 24u; +const SHARED_W: u32 = TILE + 2u * MAX_APRON; + +var tile: array, 1024>; + +@compute @workgroup_size(16, 16, 1) +fn main( + @builtin(global_invocation_id) globalId: vec3, + @builtin(local_invocation_id) localId: vec3, + @builtin(workgroup_id) workgroupId: vec3 +) { + let texSize = vec2(u32(params.texSize.x), u32(params.texSize.y)); + let radius = u32(params.radius); + let apron = min(radius, MAX_APRON); + let isHorizontal = params.direction.x > 0.5; + let fraction = params.fraction; + let samples = params.samples; + + let threadIdx = localId.x + localId.y * TILE; + let totalThreads = TILE * TILE; + + if (isHorizontal) { + let sharedWidth = TILE + 2u * apron; + let baseX = workgroupId.x * TILE; + let y = globalId.y; + let clampedY = clamp(y, 0u, max(texSize.y, 1u) - 1u); + + // 全スレッドが協調ロード(範囲外スレッドもclampされた座標でロード) + var idx = threadIdx; + loop { + if (idx >= sharedWidth) { break; } + let gx = i32(baseX) + i32(idx) - i32(apron); + let cx = u32(clamp(gx, 0, i32(max(texSize.x, 1u)) - 1)); + tile[localId.y * SHARED_W + idx] = textureLoad(inputTexture, vec2(cx, clampedY), 0); + idx += totalThreads; + } + + // 全スレッドがバリアに到達(早期returnなし) + workgroupBarrier(); + + // 範囲内のスレッドのみ出力 + let outX = globalId.x; + if (outX < texSize.x && y < texSize.y) { + let iRadius = i32(radius); + var color = vec4(0.0); + for (var i = -iRadius; i <= iRadius; i = i + 1) { + let tileIdx = i32(localId.x) + i32(apron) + i; + let s = tile[localId.y * SHARED_W + u32(clamp(tileIdx, 0, i32(sharedWidth) - 1))]; + if (i == -iRadius || i == iRadius) { + color += s * fraction; + } else { + color += s; + } + } + textureStore(outputTexture, vec2(outX, y), color / samples); + } + } else { + let sharedHeight = TILE + 2u * apron; + let baseY = workgroupId.y * TILE; + let x = globalId.x; + let clampedX = clamp(x, 0u, max(texSize.x, 1u) - 1u); + + // 全スレッドが協調ロード(範囲外スレッドもclampされた座標でロード) + var idx = threadIdx; + loop { + if (idx >= sharedHeight) { break; } + let gy = i32(baseY) + i32(idx) - i32(apron); + let cy = u32(clamp(gy, 0, i32(max(texSize.y, 1u)) - 1)); + tile[idx * TILE + localId.x] = textureLoad(inputTexture, vec2(clampedX, cy), 0); + idx += totalThreads; + } + + // 全スレッドがバリアに到達(早期returnなし) + workgroupBarrier(); + + // 範囲内のスレッドのみ出力 + let outY = globalId.y; + if (x < texSize.x && outY < texSize.y) { + let iRadius = i32(radius); + var color = vec4(0.0); + for (var i = -iRadius; i <= iRadius; i = i + 1) { + let tileIdx = i32(localId.y) + i32(apron) + i; + let s = tile[u32(clamp(tileIdx, 0, i32(sharedHeight) - 1)) * TILE + localId.x]; + if (i == -iRadius || i == iRadius) { + color += s * fraction; + } else { + color += s; + } + } + textureStore(outputTexture, vec2(x, outY), color / samples); + } + } +} +\`}getPipeline(e){return this.pipelines.get(e)}getBindGroupLayout(e){return this.bindGroupLayouts.get(e)}destroy(){this.pipelines.clear(),this.bindGroupLayouts.clear()}}const Va=Number.MAX_VALUE,Da=-Number.MAX_VALUE;let Fr=0;const wr=t=>{Fr=t},Zp=()=>Fr,zt=[],Jp=t=>{zt[Fr]=t};let go=null;const em=t=>{go=t},Ne=()=>{if(!(Fr in zt))if(go){const t=go(Fr);Jp(t)}else return null;return zt[Fr]},bo=t=>t in zt?zt[t]:null,fn=[],Na=[],za=[],tm=()=>{for(let t=0;t{Xa=t},yo=()=>Xa,rm=()=>{fn.length=0,wr(0);for(let t=0;t{ts=t},sm=new Set(["normal","layer","add","screen","alpha","erase","copy"]),hn=[],vo=[],Mo=[],om=()=>hn,So=()=>{for(let t=0;t{const t="blend_instanced";return $o.has(t)||$o.set(t,new nm),$o.get(t)},im=(t,e,r,n,s,o,i,l,c,u,a,h)=>{const d=o[0],g=o[1],m=o[2],f=h,b=o[4]/255,x=o[5]/255,y=o[6]/255,P=0;if(sm.has(l)){(ts!==l||yo()!==t.index)&&(st&&(wr(yo()),st.drawArraysInstanced()),Ya(l),xo(t.index),wr(t.index));const S=rs();Ve.pushInstanceBuffer((t.x+.5)/a,(t.y+.5)/a,(t.w-1)/a,(t.h-1)/a,t.w,t.h,c,u,i[6],i[7],0,0,i[0],i[1],i[3],i[4],d,g,m,f,b,x,y,P),S.count++}else{st&&(wr(yo()),st.drawArraysInstanced());const S=vo.length>0?vo.pop():new Float32Array(8);S.set(o);const M=Mo.length>0?Mo.pop():new Float32Array(9);M.set(i),hn.push({node:t,x_min:e,y_min:r,x_max:n,y_max:s,color_transform:S,matrix:M,blend_mode:l,viewport_width:c,viewport_height:u,render_max_size:a,global_alpha:h}),Ya(l),xo(t.index),wr(t.index)}};let To=!1;const Bo=t=>{To=t},nr=()=>To;let Po=!1,Ao=0;const Wa=t=>{Po=t},gt=()=>Po,ja=t=>{Ao=t},Or=()=>Ao,Er=new Map,Rr=new Map,am=()=>{To=!1,Po=!1,Ao=0,Er.clear(),Rr.clear()},cm=()=>{const t=st.currentAttachmentObject;t&&(t.mask=!0,t.clipLevel++,Rr.set(t.clipLevel,t.clipLevel),nr()||Bo(!0))},lm=(t,e,r,n)=>{const s=st.currentAttachmentObject;if(!s)return;const o=s.clipLevel;let i=Er.get(o);i?(i[0]=Math.min(i[0],t),i[1]=Math.min(i[1],e),i[2]=Math.max(i[2],r),i[3]=Math.max(i[3],n)):(i=fd(),i[0]=t,i[1]=e,i[2]=r,i[3]=n,Er.set(o,i))},Ha=()=>{const t=st.currentAttachmentObject;if(!t)return;const r=(1<{const t=st.currentAttachmentObject;if(!t)return;const e=t.clipLevel,r=Er.get(e);if(r&&(Er.delete(e),hd(r)),Rr.delete(e),--t.clipLevel,!t.clipLevel){t.mask=!1,Bo(!1),Wa(!1),ja(0),t.needsStencilClear=!0,Rr.clear(),Er.clear();return}t.pendingStencilClearLevel=t.clipLevel,Ha()},fm=(t,e,r)=>{const n=t.length-5;for(let s=3;s(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),dn=t=>{let e=0;for(const o of t){const i=o.length-5;for(let l=3;l{const n=Math.sqrt(t*t+e*e);return n===0?{x:0,y:0}:{x:-(e/n)*r,y:t/n*r}},wo=(t,e,r)=>({x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r}),xm=t=>{const e=Math.sqrt(t.x*t.x+t.y*t.y);return e===0?{x:0,y:0}:{x:t.x/e,y:t.y/e}},ym=(t,e,r,n)=>({x:(1-t)**2*e.x+2*(1-t)*t*r.x+t**2*n.x,y:(1-t)**2*e.y+2*(1-t)*t*r.y+t**2*n.y}),vm=(t,e,r,n)=>({x:2*(1-t)*(r.x-e.x)+2*t*(n.x-r.x),y:2*(1-t)*(r.y-e.y)+2*t*(n.y-r.y)}),Mm=(t,e,r,n=.5)=>{const s=wo(t,e,n),o=wo(e,r,n),i=wo(s,o,n);return[[t,s,i],[i,o,r]]},Sm=(t,e,r,n=4)=>{let s=[[t,e,r]];for(let o=0;o{const s=[0,.5,1],o=[];for(const i of s){const l=ym(i,t,e,r),c=vm(i,t,e,r),u=xm({x:-c.y,y:c.x});o.push({x:l.x+u.x*n,y:l.y+u.y*n})}return o},$m=(t,e,r,n)=>{const s=Sm(t,e,r,5),o=[],i=[];for(const h of s)o.push(Ka(h[0],h[1],h[2],+n)),i.push(Ka(h[0],h[1],h[2],-n));for(let h=0;h{const n={x:e.x-t.x,y:e.y-t.y},s=bm(n.x,n.y,r),o={x:t.x+s.x,y:t.y+s.y},i={x:e.x+s.x,y:e.y+s.y},l={x:e.x-s.x,y:e.y-s.y},c={x:t.x-s.x,y:t.y-s.y};return[o.x,o.y,!1,i.x,i.y,!1,l.x,l.y,!1,c.x,c.y,!1,o.x,o.y,!1]},Ur=(t,e,r,n)=>{const s=[];for(let i=0;i1e-4||s.push(l,c)}return s},Gr=(t,e)=>{Cr.beginPath(),Cr.moveTo(e[0],e[1]);for(let r=3;r{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=Ur(t,e,r,n[o]),c=Ur(t,e,r,n[i]);if(l[0]===c[0]&&l[1]===c[1]||l[0]===c[2]&&l[1]===c[3])return;const u=Gr(l,n[i]);if(!u)return;const a=Gr(c,n[o]);a&&n.splice(-1,0,[t,e,!1,u[0],u[1],!1,a[0],a[1],!1,t,e,!1])},Qa=(t,e,r,n,s=!1)=>{const o=s?0:n.length-1,i=s?n.length-1:n.length-2,l=Ur(t,e,r,n[o]),c=Ur(t,e,r,n[i]),u=Gr(l,n[i]);if(!u)return;const a=Gr(c,n[o]);if(!a)return;const h=Math.atan2(u[1]-e,u[0]-t);let g=Math.atan2(a[1]-e,a[0]-t)-h;g>Math.PI?g-=2*Math.PI:g<-Math.PI&&(g+=2*Math.PI);const m=8,f=g/m,b=[t,e,!1];for(let x=0;x<=m;x++){const y=h+x*f,P=t+r*Math.cos(y),S=e+r*Math.sin(y);b.push(P,S,!1)}n.splice(-1,0,b)},Za=(t,e,r,n,s,o=!1)=>{const i=o?0:s.length-1,l=o?s.length-1:s.length-2,c=Ur(t.x,t.y,n,s[i]),u=Ur(t.x,t.y,n,s[l]);if(c[0]===u[0]&&c[1]===u[1]||c[0]===u[2]&&c[1]===u[3])return;const a=Gr(c,s[l]);if(!a)return;const h=Gr(u,s[i]);if(!h)return;const d=e.x-t.x,g=e.y-t.y,m=Math.hypot(d,g),f={x:d/m,y:g/m},b=r.x-t.x,x=r.y-t.y,y=Math.hypot(b,x),P={x:b/y,y:x/y},S=f.x,M=f.y,$=P.x,T=P.y,w=S*T-M*$;if(w===0){s.splice(-1,0,[t.x,t.y,!1,a[0],a[1],!1,h[0],h[1],!1]);return}const E=((h[0]-a[0])*T-(h[1]-a[1])*$)/w,F=a[0]+E*S,A=a[1]+E*M;s.splice(-1,0,[t.x,t.y,!1,a[0],a[1],!1,F,A,!1,t.x,t.y,!1,h[0],h[1],!1,F,A,!1])},Bm=(t,e,r)=>{const n=t[0],s=t[1],o=t[3],i=t[4],l=Math.atan2(s-i,n-o),c=[n,s,!1],u=8;for(let b=0;b<=u;b++){const x=l-Math.PI/2+b*Math.PI/u;c.push(n+e*Math.cos(x),s+e*Math.sin(x),!1)}r.unshift(c);const a=t[t.length-3],h=t[t.length-2],d=t[t.length-6],g=t[t.length-5],m=Math.atan2(h-g,a-d),f=[a,h,!1];for(let b=0;b<=u;b++){const x=m-Math.PI/2+b*Math.PI/u;f.push(a+e*Math.cos(x),h+e*Math.sin(x),!1)}r.push(f)},Pm=(t,e,r)=>{const n=t[0],s=t[1],o=t[3],i=t[4],l=n-o,c=s-i,u=Math.hypot(l,c);if(u>0){const x=l/u,y=c/u,P=n+x*e,S=s+y*e,M=[n-y*e,s+x*e,!1,P-y*e,S+x*e,!1,P+y*e,S-x*e,!1,n+y*e,s-x*e,!1,n-y*e,s+x*e,!1];r.unshift(M)}const a=t[t.length-3],h=t[t.length-2],d=t[t.length-6],g=t[t.length-5],m=a-d,f=h-g,b=Math.hypot(m,f);if(b>0){const x=m/b,y=f/b,P=a+x*e,S=h+y*e,M=[a-y*e,h+x*e,!1,P-y*e,S+x*e,!1,P+y*e,S-x*e,!1,a+y*e,h-x*e,!1,a-y*e,h+x*e,!1];r.push(M)}},Oo=(t,e)=>{const r=dm;r.x=t[0],r.y=t[1];const n=pm;n.x=0,n.y=0;const s=mm;s.x=0,s.y=0;const o=gm;o.x=0,o.y=0;const i=[];for(let g=3;g1)switch(st.joints){case 0:qa(r.x,r.y,e,i);break;case 1:o.x=t[g-6],o.y=t[g-5],Za(r,s,o,e,i);break;case 2:Qa(r.x,r.y,e,i);break}r.x=s.x,r.y=s.y}const l=t[0],c=t[1],u=t[t.length-3],a=t[t.length-2],h=1e-4;if(Math.abs(l-u)1)switch(st.joints){case 0:qa(l,c,e,i,!0);break;case 1:r.x=l,r.y=c,s.x=t[3],s.y=t[4],o.x=t[t.length-6],o.y=t[t.length-5],Za(r,s,o,e,i,!0);break;case 2:Qa(l,c,e,i,!0);break}else if(i.length>0)switch(st.caps){case 1:Bm(t,e,i);break;case 2:Pm(t,e,i);break}return i},Am=(t,e)=>{const r=e/2,n=[];for(const s of t){if(s.length<6)continue;const o=Oo(s,r);for(const i of o)n.push(i)}return n},Ja=new Map;let ec=0;const Fm=()=>{Ja.clear(),ec=0},tc=new WeakMap,Eo=t=>{let e=tc.get(t);return e||(e=t.createView(),tc.set(t,e)),e},wm=6,Om=22,pn=new Map,mn=new Map,ns=(t,e,r)=>{const n=\`\${e}_\${r}\`,s=pn.get(n);return s&&s.length>0?s.pop():t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:wm})},Ot=t=>{const e=\`\${t.width}_\${t.height}\`;let r=pn.get(e);r||(r=[],pn.set(e,r)),r.push(t)},Ro=(t,e,r)=>{const n=\`\${e}_\${r}\`,s=mn.get(n);return s&&s.length>0?s.pop():t.createTexture({size:{width:e,height:r},format:"rgba8unorm",usage:Om})},Xt=t=>{const e=\`\${t.width}_\${t.height}\`;let r=mn.get(e);r||(r=[],mn.set(e,r)),r.push(t)},Em=()=>{for(const[,t]of pn)for(const e of t)e.destroy();pn.clear();for(const[,t]of mn)for(const e of t)e.destroy();mn.clear()},rc=new Map,Rm=()=>{for(const t of rc.values())t.texture?.resource&&t.texture.resource.destroy();rc.clear()},Lr=new Map;let gn=0;const Cm=60,nc=(t,e,r)=>\`\${e}_\${r}_\${t.join(",")}\`,sc=(t,e,r)=>{const n=nc(t,e,r),s=Lr.get(n);return s?(s.lastUsedFrame=gn,s):null},oc=(t,e,r,n,s)=>{const o=nc(t,e,r);Lr.set(o,{texture:n,view:s,lastUsedFrame:gn})},Um=()=>{gn++;for(const[t,e]of Lr)gn-e.lastUsedFrame>Cm&&(Ot(e.texture),Lr.delete(t))},Gm=()=>{for(const t of Lr.values())Ot(t.texture);Lr.clear(),gn=0};let Co=null;const Lm=()=>{Co?.texture?.resource&&Co.texture.resource.destroy(),Co=null},km=(t,e,r,n,s,o)=>{const i=e.getPipeline("stencil_write_atlas");i&&(t.setPipeline(i),t.setStencilReference(0),t.setVertexBuffer(0,r),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0));const l=e.getPipeline("stencil_fill_atlas");l&&(t.setPipeline(l),t.setStencilReference(0),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0))},Im=(t,e,r,n,s,o)=>{const i=e.getPipeline("stencil_write_main");i&&(t.setPipeline(i),t.setStencilReference(0),t.setVertexBuffer(0,r),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0));const l=e.getPipeline("stencil_fill_main");l&&(t.setPipeline(l),t.setStencilReference(0),t.setBindGroup(0,s,[o]),t.draw(n,1,0,0))},_m=(t,e,r,n,s,o,i,l=!1,c=1)=>{let u;if(i)u="fill";else if(l){if(nr())return;u="fill_bgra_stencil"}else u="fill_bgra";const a=e.getPipeline(u);if(!a){console.error(\`[WebGPU] \${u} pipeline not found\`);return}t.setPipeline(a),t.setVertexBuffer(0,r),t.setBindGroup(0,s,[o]),l&&!i&&!nr()&&t.setStencilReference(Or()),t.draw(n,1,0,0)},Uo=t=>t<=4?256:t<=8?512:1024,ic=(t,e,r)=>{const n=t.length/5,s=Uo(n),o=new Uint8Array(s*4);for(let i=0;i{const n=t.length/5;let s=0,o=0;for(let x=0;x=e&&o===0){o=x;break}}if(o===0&&(o=n-1),s===o){const x=s*5;return{r:t[x+1],g:t[x+2],b:t[x+3],a:t[x+4]}}const i=t[s*5],l=t[o*5],c=(e-i)/(l-i),u=t[s*5+1],a=t[s*5+2],h=t[s*5+3],d=t[s*5+4],g=t[o*5+1],m=t[o*5+2],f=t[o*5+3],b=t[o*5+4];return r===0?{r:Go(ot(kr(u/255),kr(g/255),c))*255,g:Go(ot(kr(a/255),kr(m/255),c))*255,b:Go(ot(kr(h/255),kr(f/255),c))*255,a:ot(d,b,c)}:{r:ot(u,g,c),g:ot(a,m,c),b:ot(h,f,c),a:ot(d,b,c)}},ot=(t,e,r)=>t+(e-t)*r,kr=t=>Math.pow(t,2.23333333),Go=t=>Math.pow(t,.45454545),ac=(t,e,r)=>{const s=new Uint8Array(1024),o=t.length,i=[];for(let l=0;l>16&255)/255,g:(c>>8&255)/255,b:(c&255)/255,a:r[l]})}for(let l=0;l<256;l++){const c=l/255;let u=0,a=o-1;for(let P=0;P=c){u=P,a=P+1;break}const h=i[u],d=i[a];let g=0;d.offset!==h.offset&&(g=(c-h.offset)/(d.offset-h.offset));const m=ot(h.r,d.r,g),f=ot(h.g,d.g,g),b=ot(h.b,d.b,g),x=ot(h.a,d.a,g),y=l*4;s[y+0]=Math.round(m*x*255),s[y+1]=Math.round(f*x*255),s[y+2]=Math.round(b*x*255),s[y+3]=Math.round(x*255)}return s},cc=(t,e,r)=>{const n=t[0],s=t[1],o=t[2],i=t[3],l=t[4],c=t[5];if(r===0){const y=-819.2*n-819.2*o+l,P=819.2*n-819.2*o+l,S=-819.2*n+819.2*o+l,M=-819.2*s-819.2*i+c,$=819.2*s-819.2*i+c,T=-819.2*s+819.2*i+c;let w=S-y,E=T-M;const F=Math.sqrt(w*w+E*E);F?(w=w/F,E=E/F):(w=0,E=0);const A=(P-y)*w+($-M)*E,R=new Float32Array([y+A*w,M+A*E,P,$]);return{inverseMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),linearPoints:R}}const u=n*i-s*o;if(Math.abs(u)<1e-10)return{inverseMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),linearPoints:null};const a=1/u,h=i*a,d=-s*a,g=-o*a,m=n*a,f=(o*c-i*l)*a,b=(s*l-n*c)*a;return{inverseMatrix:new Float32Array([h,d,0,g,m,0,f,b,1]),linearPoints:null}};let Lo=null;const j=new Float32Array(36),Ue=new Float32Array(16);let ko=null,lc=null;const ss=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Dm=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f,b=!1,x=1)=>{const y=dn(s);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer);let S,M;const $=sc(c,a,h);if($)S=$.texture,M=$.view;else{const V=ic(c,a,h),X=c.length/5,Y=Uo(X);S=ns(t,Y,1),t.queue.writeTexture({texture:S},V,{bytesPerRow:Y*4,rowsPerImage:1},{width:Y,height:1}),M=S.createView(),oc(c,a,h,S,M)}const T=cc(u,o,l),w=i[3]>0?i[3]:1,E=o[0],F=o[1],A=o[3],R=o[4],v=o[6],U=o[7];j[0]=T.inverseMatrix[0],j[1]=T.inverseMatrix[3],j[2]=0,j[3]=0,j[4]=T.inverseMatrix[1],j[5]=T.inverseMatrix[4],j[6]=0,j[7]=0,j[8]=T.inverseMatrix[6],j[9]=T.inverseMatrix[7],j[10]=1,j[11]=0,j[12]=l,j[13]=Math.max(-.975,Math.min(.975,d)),j[14]=a,j[15]=819.2,T.linearPoints?(j[16]=T.linearPoints[0],j[17]=T.linearPoints[1],j[18]=T.linearPoints[2],j[19]=T.linearPoints[3]):(j[16]=0,j[17]=0,j[18]=0,j[19]=0),j[20]=1,j[21]=1,j[22]=1,j[23]=w,j[24]=E/g,j[25]=F/m,j[26]=0,j[27]=0,j[28]=A/g,j[29]=R/m,j[30]=0,j[31]=0,j[32]=v/g,j[33]=U/m,j[34]=1,j[35]=0;const L=r.acquireAndWriteUniformBuffer(j);Lo||(Lo=t.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}));const D=Lo,G=n.getBindGroupLayout("gradient_fill");if(!G)return console.error("[WebGPU] gradient_fill bind group layout not found"),null;ss[0].resource.buffer=L,ss[1].resource=D,ss[2].resource=M;const B=t.createBindGroup({layout:G,entries:ss}),z=()=>{const V=n.getBindGroupLayout("fill_dynamic");if(!V)return null;Ue[0]=1,Ue[1]=1,Ue[2]=1,Ue[3]=w,Ue[4]=E/g,Ue[5]=F/m,Ue[6]=0,Ue[7]=0,Ue[8]=A/g,Ue[9]=R/m,Ue[10]=0,Ue[11]=0,Ue[12]=v/g,Ue[13]=U/m,Ue[14]=1,Ue[15]=0;const X=r.dynamicUniform.allocate(Ue),Y=r.dynamicUniform.getBuffer();return(!ko||lc!==Y)&&(ko=t.createBindGroup({layout:V,entries:[{binding:0,resource:{buffer:Y,size:256}}]}),lc=Y),{bindGroup:ko,offset:X}};if(f){const V=n.getPipeline("stencil_write_atlas");if(V){const Y=z();e.setPipeline(V),e.setStencilReference(0),e.setVertexBuffer(0,P),Y&&e.setBindGroup(0,Y.bindGroup,[Y.offset]),e.draw(y.indexCount,1,0,0)}const X=n.getGradientPipeline("gradient_fill_stencil_atlas",l,a);return X&&(e.setPipeline(X),e.setStencilReference(0),e.setBindGroup(0,B),e.draw(y.indexCount,1,0,0)),null}if(b&&nr())return null;const k=n.getPipeline("stencil_write_main");if(k){const V=z();e.setPipeline(k),e.setStencilReference(0),e.setVertexBuffer(0,P),V&&e.setBindGroup(0,V.bindGroup,[V.offset]),e.draw(y.indexCount,1,0,0)}const _=b?"gradient_fill_bgra_stencil_masked":"gradient_fill_stencil_main",I=n.getGradientPipeline(_,l,a);return I&&(e.setPipeline(I),e.setStencilReference(b?Or():0),e.setBindGroup(0,B),e.draw(y.indexCount,1,0,0)),null},uc=(t,e)=>{const r=t[0],n=t[1],s=t[2],o=t[3],i=t[4],l=t[5],c=e[0],u=e[1],a=e[3],h=e[4],d=e[6],g=e[7],m=c*r+a*n,f=c*s+a*o,b=u*r+h*n,x=u*s+h*o,y=c*i+a*l+d,P=u*i+h*l+g,S=m*x-f*b;if(Math.abs(S)<1e-10)return new Float32Array([1,0,0,0,1,0,0,0,1]);const M=1/S,$=x*M,T=-f*M,w=-b*M,E=m*M,F=(f*P-x*y)*M,A=(b*y-m*P)*M,R=$*c+T*u,v=$*a+T*h,U=w*c+E*u,L=w*a+E*h,D=$*d+T*g+F,G=w*d+E*g+A;return new Float32Array([R,U,0,v,L,0,D,G,1])},fc=new Map,Z=new Float32Array(32),Ge=new Float32Array(16);let Io=null,hc=null;const os=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Nm=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f,b=!1,x=1)=>{const y=dn(s);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer),S=ns(t,u,a);t.queue.writeTexture({texture:S},l.buffer,{bytesPerRow:u*4,rowsPerImage:a,offset:l.byteOffset},{width:u,height:a});const M=uc(c,o),$=i[0],T=i[1],w=i[2],E=i[3],F=o[0],A=o[1],R=o[3],v=o[4],U=o[6],L=o[7];Z[0]=M[0],Z[1]=M[1],Z[2]=M[2],Z[3]=0,Z[4]=M[3],Z[5]=M[4],Z[6]=M[5],Z[7]=0,Z[8]=M[6],Z[9]=M[7],Z[10]=M[8],Z[11]=0,Z[12]=u,Z[13]=a,Z[14]=h?1:0,Z[15]=0,Z[16]=$,Z[17]=T,Z[18]=w,Z[19]=E,Z[20]=F/g,Z[21]=A/m,Z[22]=0,Z[23]=0,Z[24]=R/g,Z[25]=v/m,Z[26]=0,Z[27]=0,Z[28]=U/g,Z[29]=L/m,Z[30]=1,Z[31]=0;const D=r.acquireAndWriteUniformBuffer(Z),G=\`bitmap_\${d?"s":"n"}_\${h?"r":"c"}\`;let B=fc.get(G);B||(B=t.createSampler({magFilter:d?"linear":"nearest",minFilter:d?"linear":"nearest",addressModeU:h?"repeat":"clamp-to-edge",addressModeV:h?"repeat":"clamp-to-edge"}),fc.set(G,B));const z=n.getBindGroupLayout("bitmap_fill");if(!z)return console.error("[WebGPU] bitmap_fill bind group layout not found"),Ot(S),null;os[0].resource.buffer=D,os[1].resource=B,os[2].resource=S.createView();const k=t.createBindGroup({layout:z,entries:os}),_=()=>{const I=n.getBindGroupLayout("fill_dynamic");if(!I)return null;Ge[0]=$,Ge[1]=T,Ge[2]=w,Ge[3]=E,Ge[4]=F/g,Ge[5]=A/m,Ge[6]=0,Ge[7]=0,Ge[8]=R/g,Ge[9]=v/m,Ge[10]=0,Ge[11]=0,Ge[12]=U/g,Ge[13]=L/m,Ge[14]=1,Ge[15]=0;const V=r.dynamicUniform.allocate(Ge),X=r.dynamicUniform.getBuffer();return(!Io||hc!==X)&&(Io=t.createBindGroup({layout:I,entries:[{binding:0,resource:{buffer:X,size:256}}]}),hc=X),{bindGroup:Io,offset:V}};if(f&&b){const I=n.getPipeline("stencil_write");if(I){const X=_();X&&(e.setPipeline(I),e.setStencilReference(0),e.setVertexBuffer(0,P),e.setBindGroup(0,X.bindGroup,[X.offset]),e.draw(y.indexCount,1,0,0))}const V=n.getPipeline("bitmap_fill_stencil");V&&(e.setPipeline(V),e.setStencilReference(0),e.setBindGroup(0,k),e.draw(y.indexCount,1,0,0))}else{let I;if(f)I="bitmap_fill";else if(b){if(nr())return Ot(S),null;I="bitmap_fill_bgra_stencil"}else I="bitmap_fill_bgra";const V=n.getPipeline(I);if(!V)return console.error(\`[WebGPU] \${I} pipeline not found\`),Ot(S),null;e.setPipeline(V),e.setVertexBuffer(0,P),e.setBindGroup(0,k),b&&!f&&!nr()&&e.setStencilReference(Or()),e.draw(y.indexCount,1,0,0)}return S},dc=(t,e,r)=>{const n=t.length-5;for(let s=3;s(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),Xm=(t,e)=>{const r=e/2,n=[];for(const c of t){const u=Oo(c,r);for(const a of u)n.push(a)}let s=0;for(const c of n){const u=c.length-5;for(let a=3;a{const y=Xm(s,o);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer);let S,M;const $=sc(u,h,d);if($)S=$.texture,M=$.view;else{const _=ic(u,h,d),I=u.length/5,V=Uo(I);S=ns(t,V,1),t.queue.writeTexture({texture:S},_,{bytesPerRow:V*4,rowsPerImage:1},{width:V,height:1}),M=S.createView(),oc(u,h,d,S,M)}const T=cc(a,i,c),w=l[3]>0?l[3]:1,E=i[0],F=i[1],A=i[3],R=i[4],v=i[6],U=i[7];H[0]=T.inverseMatrix[0],H[1]=T.inverseMatrix[3],H[2]=0,H[3]=0,H[4]=T.inverseMatrix[1],H[5]=T.inverseMatrix[4],H[6]=0,H[7]=0,H[8]=T.inverseMatrix[6],H[9]=T.inverseMatrix[7],H[10]=1,H[11]=0,H[12]=c,H[13]=Math.max(-.975,Math.min(.975,g)),H[14]=h,H[15]=819.2,T.linearPoints?(H[16]=T.linearPoints[0],H[17]=T.linearPoints[1],H[18]=T.linearPoints[2],H[19]=T.linearPoints[3]):(H[16]=0,H[17]=0,H[18]=0,H[19]=0),H[20]=1,H[21]=1,H[22]=1,H[23]=w,H[24]=E/m,H[25]=F/f,H[26]=0,H[27]=0,H[28]=A/m,H[29]=R/f,H[30]=0,H[31]=0,H[32]=v/m,H[33]=U/f,H[34]=1,H[35]=0;const L=r.acquireAndWriteUniformBuffer(H);Vo||(Vo=t.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}));const D=Vo,G=n.getBindGroupLayout("gradient_fill");if(!G)return console.error("[WebGPU] gradient_fill bind group layout not found"),null;is[0].resource.buffer=L,is[1].resource=D,is[2].resource=M;const B=t.createBindGroup({layout:G,entries:is}),z=x?b?"gradient_stroke_atlas":"gradient_stroke_bgra":b?"gradient_fill":"gradient_fill_bgra",k=n.getGradientPipeline(z,c,h);return k?(e.setPipeline(k),e.setVertexBuffer(0,P),e.setBindGroup(0,B),e.draw(y.indexCount,1,0,0),null):(console.error(\`[WebGPU] \${z} pipeline not found\`),null)};let Do=new Float32Array(32);const Wm=t=>(t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t),jm=(t,e)=>{const r=e/2,n=[];for(const c of t){const u=Oo(c,r);for(const a of u)n.push(a)}let s=0;for(const c of n){const u=c.length-5;for(let a=3;a{const y=jm(s,o);if(y.indexCount===0)return null;const P=r.acquireVertexBuffer(y.buffer.byteLength,y.buffer),S=ns(t,a,h);t.queue.writeTexture({texture:S},c.buffer,{bytesPerRow:a*4,rowsPerImage:h,offset:c.byteOffset},{width:a,height:h});const M=uc(u,i),$=1,T=1,w=1,E=l[3]>0?l[3]:1,F=i[0],A=i[1],R=i[3],v=i[4],U=i[6],L=i[7];J[0]=M[0],J[1]=M[1],J[2]=M[2],J[3]=0,J[4]=M[3],J[5]=M[4],J[6]=M[5],J[7]=0,J[8]=M[6],J[9]=M[7],J[10]=M[8],J[11]=0,J[12]=a,J[13]=h,J[14]=d?1:0,J[15]=0,J[16]=$,J[17]=T,J[18]=w,J[19]=E,J[20]=F/m,J[21]=A/f,J[22]=0,J[23]=0,J[24]=R/m,J[25]=v/f,J[26]=0,J[27]=0,J[28]=U/m,J[29]=L/f,J[30]=1,J[31]=0;const D=r.acquireAndWriteUniformBuffer(J),G=\`bitmap_\${g?"s":"n"}_\${d?"r":"c"}\`;let B=pc.get(G);B||(B=t.createSampler({magFilter:g?"linear":"nearest",minFilter:g?"linear":"nearest",addressModeU:d?"repeat":"clamp-to-edge",addressModeV:d?"repeat":"clamp-to-edge"}),pc.set(G,B));const z=n.getBindGroupLayout("bitmap_fill");if(!z)return console.error("[WebGPU] bitmap_fill bind group layout not found"),Ot(S),null;as[0].resource.buffer=D,as[1].resource=B,as[2].resource=S.createView();const k=t.createBindGroup({layout:z,entries:as}),_=x?b?"bitmap_stroke_atlas":"bitmap_stroke_bgra":b?"bitmap_fill":"bitmap_fill_bgra",I=n.getPipeline(_);return I?(e.setPipeline(I),e.setVertexBuffer(0,P),e.setBindGroup(0,k),e.draw(y.indexCount,1,0,0),S):(console.error(\`[WebGPU] \${_} pipeline not found\`),Ot(S),null)},mc=new Float32Array([-1,-1,.5,.5,1,-1,.5,.5,-1,1,.5,.5,-1,1,.5,.5,1,-1,.5,.5,1,1,.5,.5]),Km=new Float32Array([1,1,1,1,.5,0,0,0,0,.5,0,0,.5,.5,1,0]),qm=(t,e,r,n,s)=>{if(!s)return;const o=s.clipLevel,i=1<{const a=s.clipLevel,h=s.width,d=s.height,g=l[0],m=l[1],f=l[2],b=l[3]*c;if(o.length===0)return;const x=dn(o);if(x.indexCount===0)return;const y=r.acquireVertexBuffer(x.buffer.byteLength,x.buffer),P=i[0],S=i[1],M=i[3],$=i[4],T=i[6],w=i[7];Le[0]=g,Le[1]=m,Le[2]=f,Le[3]=b,Le[4]=P/h,Le[5]=S/d,Le[6]=0,Le[7]=0,Le[8]=M/h,Le[9]=$/d,Le[10]=0,Le[11]=0,Le[12]=T/h,Le[13]=w/d,Le[14]=1,Le[15]=0;const E=r.dynamicUniform.allocate(Le);let F=Rr.get(a)??a,A;u?A=\`clip_write_main_\${Math.min(8,Math.max(1,F))}\`:A="clip_write";const R=n.getPipeline(A);if(!R){console.error(\`[WebGPU] \${A} pipeline not found\`);return}const v=n.getBindGroupLayout("fill_dynamic");if(!v)return;const U=t.createBindGroup({layout:v,entries:[{binding:0,resource:{buffer:r.dynamicUniform.getBuffer(),size:256}}]});e.setPipeline(R),e.setStencilReference(0),e.setVertexBuffer(0,y),e.setBindGroup(0,U,[E]),e.draw(x.indexCount,1,0,0),F++,F>8&&(qm(t,e,r,n,s),F=a+1),Rr.set(a,F)};let No=null,gc=null;const Zm=(t,e,r,n,s,o,i,l)=>{const c=rs();if(c.count===0)return r;r&&(r.end(),r=null);const u=gt(),a=Or(),g=(F=>{switch(F){case"add":return"instanced_add";case"screen":return"instanced_screen";case"alpha":return"instanced_alpha";case"erase":return"instanced_erase";case"copy":return"instanced_copy";default:return"instanced"}})(ts),m=l.getPipeline(g),f=l.getPipeline("instanced_masked"),b=u&&f&&(n.msaaStencil?.view||n.stencil?.view),x=b?f:m;if(!x)return console.error("[WebGPU] Instanced pipeline not found"),null;let y;if(b){const F=n.msaa&&n.msaaTexture?.view,A=F?n.msaaTexture.view:n.texture.view,R=F&&n.msaaStencil?.view?n.msaaStencil.view:n.stencil.view,v=F?n.texture.view:null,U=o.createStencilRenderPassDescriptor(A,R,"load","load",v);y=e.beginRenderPass(U)}else{const F=n.msaa&&n.msaaTexture?.view,A=F?n.msaaTexture.view:n.texture.view,R=F?n.texture.view:null,v=o.createRenderPassDescriptor(A,0,0,0,0,"load",R);y=e.beginRenderPass(v)}y.setPipeline(x),b&&y.setStencilReference(a);const P=new Float32Array(Ve.buffer.buffer,Ve.buffer.byteOffset,Ve.offset),S=s.acquireVertexBuffer(P.byteLength,P),M=s.getUnitRectBuffer(),$=Ne()||o.getAttachment("atlas");if(!$)return console.error("[WebGPU] Atlas attachment not found"),y.end(),null;const T=i.createSampler("atlas_instanced_sampler",!1),w=l.getBindGroupLayout("instanced");if(!w)return console.error("[WebGPU] Instanced bind group layout not found"),y.end(),null;const E=$.texture.view;return(!No||gc!==E)&&(No=t.createBindGroup({layout:w,entries:[{binding:0,resource:T},{binding:1,resource:E}]}),gc=E),y.setVertexBuffer(0,M),y.setVertexBuffer(1,S),y.setBindGroup(0,No),y.draw(6,c.count,0,0),y.end(),c.clear(),null};let zo=null,bc=null;const Jm=(t,e,r,n,s,o,i,l,c=!0,u=!0)=>{const a=rs();if(a.count===0)return r;r&&(r.end(),r=null);const h=gt(),d=Or(),f=(R=>{switch(R){case"add":return"instanced_add";case"screen":return"instanced_screen";case"alpha":return"instanced_alpha";case"erase":return"instanced_erase";case"copy":return"instanced_copy";default:return"instanced"}})(ts),b=l.getPipeline(f),x=l.getPipeline("instanced_masked"),y=h&&x&&(n.msaaStencil?.view||n.stencil?.view),P=y?x:b;if(!P)return console.error("[WebGPU] Instanced pipeline not found"),null;let S;if(y){const R=n.msaa&&n.msaaTexture?.view,v=R?n.msaaTexture.view:n.texture.view,U=R&&n.msaaStencil?.view?n.msaaStencil.view:n.stencil.view,L=R?n.texture.view:null,D=o.createStencilRenderPassDescriptor(v,U,"load","load",L);S=e.beginRenderPass(D)}else{const R=n.msaa&&n.msaaTexture?.view,v=R?n.msaaTexture.view:n.texture.view,U=R?n.texture.view:null,L=o.createRenderPassDescriptor(v,0,0,0,0,"load",U);S=e.beginRenderPass(L)}S.setPipeline(P),y&&S.setStencilReference(d);const M=new Float32Array(Ve.buffer.buffer,Ve.buffer.byteOffset,Ve.offset);let $;u?($=s.acquireStorageBuffer(M.byteLength),s.writeStorageBuffer($,M)):$=s.acquireVertexBuffer(M.byteLength,M);const T=s.getUnitRectBuffer(),w=Ne()||o.getAttachment("atlas");if(!w)return console.error("[WebGPU] Atlas attachment not found"),S.end(),null;const E=i.createSampler("atlas_instanced_sampler",!1),F=l.getBindGroupLayout("instanced");if(!F)return console.error("[WebGPU] Instanced bind group layout not found"),S.end(),null;const A=w.texture.view;if((!zo||bc!==A)&&(zo=t.createBindGroup({layout:F,entries:[{binding:0,resource:E},{binding:1,resource:A}]}),bc=A),S.setVertexBuffer(0,T),S.setVertexBuffer(1,$),S.setBindGroup(0,zo),c){const R=s.createIndirectBuffer(6,a.count,0,0);S.drawIndirect(R,0)}else S.draw(6,a.count,0,0);return S.end(),a.clear(),null},je=new Float32Array(12),bn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],Xo=(t,e,r,n,s)=>{const{device:o,commandEncoder:i,frameBufferManager:l,pipelineManager:c,textureManager:u}=s,a=Math.max(t.width,e.width),h=Math.max(t.height,e.height),d=l.createTemporaryAttachment(a,h),g=c.getPipeline("complex_blend"),m=c.getBindGroupLayout("complex_blend");if(!g||!m)return console.error(\`[WebGPU ComplexBlend] Pipeline not found for blend mode: \${r}\`),t;const f=u.createSampler("complex_blend_sampler",!0),b=N.getBlendModeIndex(r);je[0]=n[0],je[1]=n[1],je[2]=n[2],je[3]=n[3],je[4]=n[4],je[5]=n[5],je[6]=n[6],je[7]=n[7],je[8]=b,je[9]=0,je[10]=0,je[11]=0;const x=s.bufferManager?s.bufferManager.acquireAndWriteUniformBuffer(je):o.createBuffer({size:48,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});s.bufferManager||o.queue.writeBuffer(x,0,je),bn[0].resource.buffer=x,bn[1].resource=f,bn[2].resource=e.texture.view,bn[3].resource=t.texture.view;const y=o.createBindGroup({layout:m,entries:bn}),P=l.createRenderPassDescriptor(d.texture.view,0,0,0,0,"clear"),S=i.beginRenderPass(P);return S.setPipeline(g),S.setBindGroup(0,y),S.draw(6,1,0,0),S.end(),d},xn=new Float32Array(4),it=new Float32Array(6),Oe=new Float32Array(8),Qe=new Float32Array(12),at=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],e0=(t,e,r,n,s,o,i,l,c,u,a,h,d,g)=>{const m=d.getPipeline("complex_blend_copy"),f=d.getBindGroupLayout("texture_copy");if(!m||!f)return;xn[0]=c/i,xn[1]=u/l,xn[2]=s/i,xn[3]=o/l;const b=g.acquireAndWriteUniformBuffer(xn),x=h.createSampler("complex_blend_copy_sampler",!1);at[0].resource.buffer=b,at[1].resource=x,at[2].resource=r;const y=t.createBindGroup({layout:f,entries:at}),P=a.createRenderPassDescriptor(n.texture.view,0,0,0,0,"clear"),S=e.beginRenderPass(P);S.setPipeline(m),S.setBindGroup(0,y),S.draw(6,1,0,0),S.end()},t0=(t,e,r,n,s,o,i,l,c,u)=>{const a=n.msaa&&n.msaaTexture?.view,h=a?"complex_blend_output_msaa":"complex_blend_output",d=c.getPipeline(h),g=c.getBindGroupLayout("positioned_texture");if(!d||!g)return;Oe[0]=s,Oe[1]=o,Oe[2]=r.width,Oe[3]=r.height,Oe[4]=n.width,Oe[5]=n.height,Oe[6]=0,Oe[7]=0;const m=u.acquireAndWriteUniformBuffer(Oe),f=l.createSampler("complex_blend_output_sampler",!1);at[0].resource.buffer=m,at[1].resource=f,at[2].resource=r.texture.view;const b=t.createBindGroup({layout:g,entries:at}),x=a?n.msaaTexture.view:n.texture.view,y=a?n.texture.view:null,P=i.createRenderPassDescriptor(x,0,0,0,0,"load",y),S=e.beginRenderPass(P);S.setPipeline(d),S.setBindGroup(0,b),S.draw(6,1,0,0),S.end()},r0=(t,e,r,n,s,o,i)=>{const l=om();if(l.length===0)return;if(!r||!r.texture){So();return}const c=Ne()||n.getAttachment("atlas");if(!c||!c.texture){So();return}for(const u of l){const{node:a,x_min:h,y_min:d,x_max:g,y_max:m,color_transform:f,matrix:b,blend_mode:x,global_alpha:y}=u,P=Math.ceil(Math.abs(g-h)),S=Math.ceil(Math.abs(m-d));if(P<=0||S<=0)continue;const M=Math.max(0,Math.floor(b[6])),$=Math.max(0,Math.floor(b[7]));if(M>=r.width||$>=r.height)continue;const T=b[0]!==1||b[1]!==0||b[3]!==0||b[4]!==1,w=T?P:a.w,E=T?S:a.h,F=Math.min(w,r.width-M),A=Math.min(E,r.height-$);if(F<=0||A<=0)continue;let R;if(T){R=n.createTemporaryAttachment(w,E);const L=o.getPipeline("complex_blend_scale"),D=o.getBindGroupLayout("texture_scale");if(L&&D){const G=w/2,B=E/2,z=a.w/2,k=a.h/2;it[0]=b[0],it[1]=b[1],it[2]=b[3],it[3]=b[4],it[4]=-z*b[0]-k*b[3]+G,it[5]=-z*b[1]-k*b[4]+B;const _=n.createTemporaryAttachment(a.w,a.h);e.copyTextureToTexture({texture:c.texture.resource,origin:{x:a.x,y:a.y,z:0}},{texture:_.texture.resource,origin:{x:0,y:0,z:0}},{width:a.w,height:a.h}),Qe[0]=it[0],Qe[1]=it[1],Qe[2]=it[2],Qe[3]=it[3],Qe[4]=it[4],Qe[5]=it[5],Qe[6]=a.w,Qe[7]=a.h,Qe[8]=w,Qe[9]=E,Qe[10]=0,Qe[11]=0;const I=i.acquireAndWriteUniformBuffer(Qe,48),V=s.createSampler("scale_sampler",!0);at[0].resource.buffer=I,at[1].resource=V,at[2].resource=_.texture.view;const X=t.createBindGroup({layout:D,entries:at}),Y=n.createRenderPassDescriptor(R.texture.view,0,0,0,0,"clear"),W=e.beginRenderPass(Y);W.setPipeline(L),W.setBindGroup(0,X),W.draw(6,1,0,0),W.end(),n.releaseTemporaryAttachment(_)}else e.copyTextureToTexture({texture:c.texture.resource,origin:{x:a.x,y:a.y,z:0}},{texture:R.texture.resource,origin:{x:0,y:0,z:0}},{width:Math.min(a.w,w),height:Math.min(a.h,E)})}else R=n.createTemporaryAttachment(w,E),e.copyTextureToTexture({texture:c.texture.resource,origin:{x:a.x,y:a.y,z:0}},{texture:R.texture.resource,origin:{x:0,y:0,z:0}},{width:w,height:E});const v=n.createTemporaryAttachment(w,E);e0(t,e,r.texture.view,v,M,$,r.width,r.height,w,E,n,s,o,i),Oe[0]=f[0],Oe[1]=f[1],Oe[2]=f[2],Oe[3]=y,Oe[4]=f[4],Oe[5]=f[5],Oe[6]=f[6],Oe[7]=0;const U=Xo(R,v,x,Oe,{device:t,commandEncoder:e,bufferManager:i,frameBufferManager:n,pipelineManager:o,textureManager:s});t0(t,e,U,r,M,$,n,s,o,i),n.releaseTemporaryAttachment(R),n.releaseTemporaryAttachment(v),n.releaseTemporaryAttachment(U)}So()},ne={x:0,y:0},xc=[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5],n0=(t,e,r,n,s)=>{const o=Math.sqrt(t[0]*t[0]+t[1]*t[1]),i=Math.sqrt(t[2]*t[2]+t[3]*t[3]),l=e*(o/s),c=r*(i/s),u=xc[Math.min(n-1,xc.length-1)],a=Math.round(l*u),h=Math.round(c*u);let d=1,g=1;return l>128?d=.0625:l>64?d=.125:l>32?d=.25:l>16&&(d=.5),c>128?g=.0625:c>64?g=.125:c>32?g=.25:c>16&&(g=.5),{baseBlurX:l,baseBlurY:c,offsetX:a,offsetY:h,bufferScaleX:d,bufferScaleY:g}},s0=(t,e,r,n)=>{const s=Math.ceil(e*.5),o=1-(s-e*.5),i=1+e,l=t?1/r:0,c=t?0:1/n;return{offsetX:l,offsetY:c,fraction:o,samples:i,halfBlur:s}},ht=new Float32Array(8),cs=[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null}}],o0={label:"blur_compute_pass_h"},i0={label:"blur_compute_pass_v"},yc=(t,e,r,n,s,o,i,l)=>{const c=Math.ceil(i*.5),a=c>=8&&c<=24?o?"blur_compute_shared_horizontal":"blur_compute_shared_vertical":o?"blur_compute_horizontal":"blur_compute_vertical",h=r.getPipeline(a),d=r.getBindGroupLayout("blur_compute");if(!h||!d)return;const g=1-(c-i*.5),m=1+i;ht[0]=o?1:0,ht[1]=o?0:1,ht[2]=c,ht[3]=g,ht[4]=n.width,ht[5]=n.height,ht[6]=m,ht[7]=0;const f=l?l.acquireAndWriteUniformBuffer(ht):(()=>{const S=t.createBuffer({size:ht.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return t.queue.writeBuffer(S,0,ht),S})();cs[0].resource=n.texture.view,cs[1].resource=s.texture.view,cs[2].resource.buffer=f;const b=t.createBindGroup({layout:d,entries:cs}),x=e.beginComputePass(o?o0:i0);x.setPipeline(h),x.setBindGroup(0,b);const y=Math.ceil(s.width/16),P=Math.ceil(s.height/16);x.dispatchWorkgroups(y,P,1),x.end()},a0=(t,e,r,n)=>{const i=Math.max(t,e),l=Math.min(r,n);return i>=4&&l>=128},ye=new Float32Array(4),ct=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],sr=(t,e,r,n,s,o,i)=>{const{device:l,commandEncoder:c,frameBufferManager:u,pipelineManager:a,textureManager:h}=i,d=n0(e,r,n,s,o),{baseBlurX:g,baseBlurY:m,offsetX:f,offsetY:b,bufferScaleX:x,bufferScaleY:y}=d;ne.x+=f,ne.y+=b;const P=t.width+f*2,S=t.height+b*2,M=Math.ceil(P*x),$=Math.ceil(S*y),T=u.createTemporaryAttachment(M,$),w=u.createTemporaryAttachment(M,$),E=h.createSampler("blur_sampler",!0);c0(l,c,u,a,t,T,E,x,y,f*x,b*y,i.bufferManager);const F=g*x,A=m*y,R=i.computePipelineManager&&a0(g,m,M,$),v=[T,w];let U=0;for(let D=0;D0){const G=U;U=(U+1)%2,R?yc(l,c,i.computePipelineManager,v[G],v[U],!0,F,i.bufferManager):vc(l,c,u,a,v[G],v[U],E,!0,F,i.bufferManager)}if(n>0){const G=U;U=(U+1)%2,R?yc(l,c,i.computePipelineManager,v[G],v[U],!1,A,i.bufferManager):vc(l,c,u,a,v[G],v[U],E,!1,A,i.bufferManager)}}let L=v[U];if(x!==1||y!==1){const D=u.createTemporaryAttachment(P,S);l0(l,c,u,a,L,D,E,1/x,1/y,i.bufferManager),u.releaseTemporaryAttachment(T),u.releaseTemporaryAttachment(w),L=D}else{const D=(U+1)%2;u.releaseTemporaryAttachment(v[D])}return L},c0=(t,e,r,n,s,o,i,l,c,u,a,h)=>{const d=n.getPipeline("texture_copy_rgba8"),g=n.getBindGroupLayout("texture_copy");if(!d||!g){console.error("[WebGPU BlurFilter] texture_copy_rgba8 pipeline not found");return}const m=s.width*l,f=s.height*c,b=1,x=1,y=0,P=0;ye[0]=b,ye[1]=x,ye[2]=y,ye[3]=P;const S=h?h.acquireAndWriteUniformBuffer(ye):t.createBuffer({size:ye.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});h||t.queue.writeBuffer(S,0,ye),ct[0].resource.buffer=S,ct[1].resource=i,ct[2].resource=s.texture.view;const M=t.createBindGroup({layout:g,entries:ct}),$=r.createRenderPassDescriptor(o.texture.view,0,0,0,0,"clear"),T=e.beginRenderPass($);T.setPipeline(d),T.setBindGroup(0,M),T.setViewport(u,a,m,f,0,1),T.setScissorRect(Math.floor(u),Math.floor(a),Math.ceil(m),Math.ceil(f)),T.draw(6,1,0,0),T.end()},vc=(t,e,r,n,s,o,i,l,c,u)=>{const a=s0(l,c,s.width,s.height),{offsetX:h,offsetY:d,fraction:g,samples:m,halfBlur:f}=a,b=Math.max(1,Math.min(16,f)),x=n.getPipeline(\`blur_filter_\${b}\`),y=n.getBindGroupLayout("blur_filter");if(!x||!y){console.error(\`[WebGPU BlurFilter] blur_filter_\${b} pipeline not found\`);return}ye[0]=h,ye[1]=d,ye[2]=g,ye[3]=m;const P=u?u.acquireAndWriteUniformBuffer(ye):t.createBuffer({size:ye.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});u||t.queue.writeBuffer(P,0,ye),ct[0].resource.buffer=P,ct[1].resource=i,ct[2].resource=s.texture.view;const S=t.createBindGroup({layout:y,entries:ct}),M=r.createRenderPassDescriptor(o.texture.view,0,0,0,0,"clear"),$=e.beginRenderPass(M);$.setPipeline(x),$.setBindGroup(0,S),$.draw(6,1,0,0),$.end()},l0=(t,e,r,n,s,o,i,l,c,u)=>{const a=n.getPipeline("texture_copy_rgba8"),h=n.getBindGroupLayout("texture_copy");if(!a||!h){console.error("[WebGPU BlurFilter] texture_copy_rgba8 pipeline not found");return}ye[0]=1,ye[1]=1,ye[2]=0,ye[3]=0;const d=u?u.acquireAndWriteUniformBuffer(ye):t.createBuffer({size:ye.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});u||t.queue.writeBuffer(d,0,ye),ct[0].resource.buffer=d,ct[1].resource=i,ct[2].resource=s.texture.view;const g=t.createBindGroup({layout:h,entries:ct}),m=r.createRenderPassDescriptor(o.texture.view,0,0,0,0,"clear"),f=e.beginRenderPass(m);f.setPipeline(a),f.setBindGroup(0,g),f.draw(6,1,0,0),f.end()},de=new Float32Array(20),ls=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Mc=(t,e,r)=>{const{device:n,commandEncoder:s,frameBufferManager:o,pipelineManager:i,textureManager:l}=r,c=o.createTemporaryAttachment(t.width,t.height),u=i.getPipeline("color_matrix_filter"),a=i.getBindGroupLayout("color_matrix_filter");if(!u||!a)return console.error("[WebGPU ColorMatrixFilter] Pipeline not found"),t;const h=l.createSampler("color_matrix_sampler",!0);de[0]=e[0],de[1]=e[5],de[2]=e[10],de[3]=e[15],de[4]=e[1],de[5]=e[6],de[6]=e[11],de[7]=e[16],de[8]=e[2],de[9]=e[7],de[10]=e[12],de[11]=e[17],de[12]=e[3],de[13]=e[8],de[14]=e[13],de[15]=e[18],de[16]=e[4]/255,de[17]=e[9]/255,de[18]=e[14]/255,de[19]=e[19]/255;const d=r.bufferManager?r.bufferManager.acquireAndWriteUniformBuffer(de):n.createBuffer({size:de.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});r.bufferManager||n.queue.writeBuffer(d,0,de),ls[0].resource.buffer=d,ls[1].resource=h,ls[2].resource=t.texture.view;const g=n.createBindGroup({layout:a,entries:ls}),m=o.createRenderPassDescriptor(c.texture.view,0,0,0,0,"clear"),f=s.beginRenderPass(m);return f.setPipeline(u),f.setBindGroup(0,g),f.draw(6,1,0,0),f.end(),c},Pe=new Float32Array(16),yn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],u0=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},Sc=(t,e,r,n,s,o,i,l,c,u,a,h)=>{const{device:d,commandEncoder:g,frameBufferManager:m,pipelineManager:f,textureManager:b}=h,x=ne.x,y=ne.y,P=t.width,S=t.height,M=sr(t,e,s,o,l,a,h),$=M.width,T=M.height,w=ne.x,E=ne.y,F=c?P:$,A=c?S:T,R=w-x,v=E-y,U=c?0:R,L=c?0:v,D=c?-R:0,G=c?-v:0,B=F/P,z=A/S,k=U/P,_=L/S,I=F/$,V=A/T,X=D/$,Y=G/T,W=m.createTemporaryAttachment(F,A),K=f.getFilterPipeline("glow_filter",{IS_INNER:c?1:0,IS_KNOCKOUT:u?1:0}),q=f.getBindGroupLayout("glow_filter");if(!K||!q)return console.error("[WebGPU GlowFilter] Pipeline not found"),m.releaseTemporaryAttachment(M),t;const ce=b.createSampler("glow_sampler",!0),[te,se,ue,Fe]=u0(r,n);Pe[0]=te,Pe[1]=se,Pe[2]=ue,Pe[3]=Fe,Pe[4]=B,Pe[5]=z,Pe[6]=k,Pe[7]=_,Pe[8]=I,Pe[9]=V,Pe[10]=X,Pe[11]=Y,Pe[12]=i,Pe[13]=c?1:0,Pe[14]=u?1:0,Pe[15]=0;const ge=h.bufferManager?h.bufferManager.acquireAndWriteUniformBuffer(Pe):d.createBuffer({size:Pe.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});h.bufferManager||d.queue.writeBuffer(ge,0,Pe),yn[0].resource.buffer=ge,yn[1].resource=ce,yn[2].resource=M.texture.view,yn[3].resource=t.texture.view;const Q=d.createBindGroup({layout:q,entries:yn}),Ct=m.createRenderPassDescriptor(W.texture.view,0,0,0,0,"clear"),Je=g.beginRenderPass(Ct);return Je.setPipeline(K),Je.setBindGroup(0,Q),Je.draw(6,1,0,0),Je.end(),m.releaseTemporaryAttachment(M),W},f0=Math.PI/180,Ae=new Float32Array(16),vn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],h0=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},$c=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m)=>{const{device:f,commandEncoder:b,frameBufferManager:x,pipelineManager:y,textureManager:P}=m,S=ne.x,M=ne.y,$=t.width,T=t.height,w=sr(t,e,i,l,u,g,m),E=w.width,F=w.height,A=ne.x,R=ne.y,v=A-S,U=R-M,L=Math.sqrt(e[0]*e[0]+e[1]*e[1]),D=Math.sqrt(e[2]*e[2]+e[3]*e[3]),G=n*f0,B=Math.cos(G)*r*(L/g),z=Math.sin(G)*r*(D/g),k=a?$:E+Math.max(0,Math.abs(B)-v),_=a?T:F+Math.max(0,Math.abs(z)-U),I=Math.ceil(k),V=Math.ceil(_),X=(I-k)/2,Y=(V-_)/2,W=a?0:Math.max(0,v-B)+X,K=a?0:Math.max(0,U-z)+Y,q=a?B-A:(B>0?Math.max(0,B-v):0)+X,ce=a?z-R:(z>0?Math.max(0,z-U):0)+Y,te=x.createTemporaryAttachment(I,V),se=a;let ue=h,Fe=d;a?ue=h||d:!h&&d&&(ue=!0,Fe=!0);const ge=y.getFilterPipeline("drop_shadow_filter",{IS_INNER:se?1:0,IS_KNOCKOUT:ue?1:0,IS_HIDE_OBJECT:Fe?1:0}),Q=y.getBindGroupLayout("drop_shadow_filter");if(!ge||!Q)return console.error("[WebGPU DropShadowFilter] Pipeline not found"),x.releaseTemporaryAttachment(w),t;const Ct=P.createSampler("drop_shadow_sampler",!0),[Je,Ut,lr,ur]=h0(s,o),Yt=I/$,Gt=V/T,Lt=W/$,Wt=K/T,fr=I/E,jt=V/F,hr=q/E,Ht=ce/F;Ae[0]=Je,Ae[1]=Ut,Ae[2]=lr,Ae[3]=ur,Ae[4]=Yt,Ae[5]=Gt,Ae[6]=Lt,Ae[7]=Wt,Ae[8]=fr,Ae[9]=jt,Ae[10]=hr,Ae[11]=Ht,Ae[12]=c,Ae[13]=se?1:0,Ae[14]=ue?1:0,Ae[15]=Fe?1:0;const lt=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(Ae):f.createBuffer({size:Ae.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(lt,0,Ae),vn[0].resource.buffer=lt,vn[1].resource=Ct,vn[2].resource=w.texture.view,vn[3].resource=t.texture.view;const zr=f.createBindGroup({layout:Q,entries:vn}),Bn=x.createRenderPassDescriptor(te.texture.view,0,0,0,0,"clear"),kt=b.beginRenderPass(Bn);return kt.setPipeline(ge),kt.setBindGroup(0,zr),kt.draw(6,1,0,0),kt.end(),x.releaseTemporaryAttachment(w),te},d0=Math.PI/180,dt=new Float32Array(8),pe=new Float32Array(20),us=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Mn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],Tc=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},Bc=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f)=>{const{device:b,commandEncoder:x,frameBufferManager:y,pipelineManager:P,textureManager:S}=f,M=ne.x,$=ne.y,T=t.width,w=t.height,E=Math.sqrt(e[0]*e[0]+e[1]*e[1]),F=Math.sqrt(e[2]*e[2]+e[3]*e[3]),A=n*d0,R=Math.cos(A)*r*(E/m),v=Math.sin(A)*r*(F/m),U=y.createTemporaryAttachment(T,w);x.copyTextureToTexture({texture:t.texture.resource,origin:{x:0,y:0,z:0}},{texture:U.texture.resource,origin:{x:0,y:0,z:0}},{width:T,height:w});const L=P.getPipeline("texture_erase"),D=P.getBindGroupLayout("texture_copy");if(L&&D){const fg=S.createSampler("erase_sampler",!0),hg=R*2/T,dg=v*2/w;dt[0]=1,dt[1]=1,dt[2]=hg,dt[3]=dg,dt[4]=0,dt[5]=0,dt[6]=0,dt[7]=0;const zc=f.bufferManager?f.bufferManager.acquireAndWriteUniformBuffer(dt):b.createBuffer({size:dt.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});f.bufferManager||b.queue.writeBuffer(zc,0,dt),us[0].resource.buffer=zc,us[1].resource=fg,us[2].resource=t.texture.view;const pg=b.createBindGroup({layout:D,entries:us}),mg=y.createRenderPassDescriptor(U.texture.view,0,0,0,0,"load"),gs=x.beginRenderPass(mg);gs.setPipeline(L),gs.setBindGroup(0,pg),gs.draw(6,1,0,0),gs.end()}const G=sr(U,e,c,u,h,m,f);y.releaseTemporaryAttachment(U);const B=G.width,z=G.height,k=Math.abs(R),_=Math.abs(v),I=d===1,V=Math.ceil(B+k*2),X=Math.ceil(z+_*2),Y=I?T:V,W=I?w:X,K=(B-T)/2,q=(z-w)/2,ce=I?0:Math.floor(k+K),te=I?0:Math.floor(_+q),se=Math.floor(I?-K-R:k-R),ue=Math.floor(I?-q-v:_-v),Fe=Y/T,ge=W/w,Q=ce/T,Ct=te/w,Je=Y/B,Ut=W/z,lr=se/B,ur=ue/z,Yt=y.createTemporaryAttachment(Y,W),Gt=P.getFilterPipeline("bevel_filter",{BEVEL_TYPE:d,IS_KNOCKOUT:g?1:0}),Lt=P.getBindGroupLayout("bevel_filter");if(!Gt||!Lt)return console.error("[WebGPU BevelFilter] Pipeline not found"),y.releaseTemporaryAttachment(G),t;const Wt=S.createSampler("bevel_sampler",!0),[fr,jt,hr,Ht]=Tc(s,o),[lt,zr,Bn,kt]=Tc(i,l);pe[0]=fr,pe[1]=jt,pe[2]=hr,pe[3]=Ht,pe[4]=lt,pe[5]=zr,pe[6]=Bn,pe[7]=kt,pe[8]=a,pe[9]=I?1:0,pe[10]=g?1:0,pe[11]=d,pe[12]=Fe,pe[13]=ge,pe[14]=Q,pe[15]=Ct,pe[16]=Je,pe[17]=Ut,pe[18]=lr,pe[19]=ur;const ps=f.bufferManager?f.bufferManager.acquireAndWriteUniformBuffer(pe):b.createBuffer({size:pe.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});f.bufferManager||b.queue.writeBuffer(ps,0,pe),Mn[0].resource.buffer=ps,Mn[1].resource=Wt,Mn[2].resource=G.texture.view,Mn[3].resource=t.texture.view;const ci=b.createBindGroup({layout:Lt,entries:Mn}),Xr=y.createRenderPassDescriptor(Yt.texture.view,0,0,0,0,"clear"),ms=x.beginRenderPass(Xr);return ms.setPipeline(Gt),ms.setBindGroup(0,ci),ms.draw(6,1,0,0),ms.end(),y.releaseTemporaryAttachment(G),ne.x=M+ce,ne.y=$+te,Yt},fs=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],p0=(t,e)=>{const r=(t>>16&255)/255,n=(t>>8&255)/255,s=(t&255)/255;return[r,n,s,e]},Pc=new Map,Ac=(t,e,r,n,s,o,i,l,c,u,a)=>{const{device:h,commandEncoder:d,frameBufferManager:g,textureManager:m}=a,f=t.width,b=t.height,x=g.createTemporaryAttachment(f,b),y=\`\${e},\${r},\${i},\${l}\`;let P=Pc.get(y);if(!P){const B=N.getConvolutionFilterFragmentShader(e,r,i,l),z=h.createShaderModule({code:B}),k=h.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}}]}),_=h.createPipelineLayout({bindGroupLayouts:[k]});P={pipeline:h.createRenderPipeline({layout:_,vertex:{module:z,entryPoint:"vs_main",buffers:[]},fragment:{module:z,entryPoint:"fs_main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}}),bindGroupLayout:k},Pc.set(y,P)}const S=m.createSampler("convolution_sampler",!0),M=e*r,$=Math.ceil(M/4),[T,w,E,F]=p0(c,u),A=new Float32Array($*4);for(let B=0;B{const{device:f,commandEncoder:b,frameBufferManager:x,pipelineManager:y,textureManager:P}=m,S=ne.x,M=ne.y,$=t.width,T=t.height,w=Math.sqrt(e[0]*e[0]+e[1]*e[1]),E=Math.sqrt(e[2]*e[2]+e[3]*e[3]),F=n*m0,A=Math.cos(F)*r*(w/g),R=Math.sin(F)*r*(E/g),v=y.getPipeline("bevel_base"),U=y.getBindGroupLayout("bevel_base");if(!v||!U)return console.error("[WebGPU GradientBevelFilter] bevel_base pipeline not found"),t;const L=x.createTemporaryAttachment($,T),D=P.createSampler("bevel_base_sampler",!0);or[0]=2*A/$,or[1]=2*R/T,or[2]=0,or[3]=0;const G=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(or):f.createBuffer({size:or.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(G,0,or),hs[0].resource.buffer=G,hs[1].resource=D,hs[2].resource=t.texture.view;const B=f.createBindGroup({layout:U,entries:hs}),z=x.createRenderPassDescriptor(L.texture.view,0,0,0,0,"clear"),k=b.beginRenderPass(z);k.setPipeline(v),k.setBindGroup(0,B),k.draw(6,1,0,0),k.end();const _=sr(L,e,l,c,a,g,m);x.releaseTemporaryAttachment(L);const I=_.width,V=_.height,X=h===1,Y=Math.abs(A),W=Math.abs(R),K=(I-$)/2,q=(V-T)/2,ce=Math.ceil(I+Y*2),te=Math.ceil(V+W*2),se=X?$:ce,ue=X?T:te,Fe=X?0:Y+K,ge=X?0:W+q,Q=X?-K-A:Y-A,Ct=X?-q-R:W-R,Je=ac(i,s,o),Ut=f.createTexture({size:{width:256,height:1},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});f.queue.writeTexture({texture:Ut},Je.buffer,{bytesPerRow:256*4,offset:Je.byteOffset},{width:256,height:1});const lr=Ut.createView(),ur=se/$,Yt=ue/T,Gt=Fe/$,Lt=ge/T,Wt=se/I,fr=ue/V,jt=Q/I,hr=Ct/V,Ht=x.createTemporaryAttachment(se,ue),lt=y.getFilterPipeline("gradient_bevel_filter",{BEVEL_TYPE:h,IS_KNOCKOUT:d?1:0}),zr=y.getBindGroupLayout("gradient_bevel_filter");if(!lt||!zr)return console.error("[WebGPU GradientBevelFilter] Pipeline not found"),x.releaseTemporaryAttachment(_),t;const Bn=P.createSampler("gradient_bevel_sampler",!0);ze[0]=u,ze[1]=X?1:0,ze[2]=d?1:0,ze[3]=h,ze[4]=ur,ze[5]=Yt,ze[6]=Gt,ze[7]=Lt,ze[8]=Wt,ze[9]=fr,ze[10]=jt,ze[11]=hr;const kt=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(ze):f.createBuffer({size:ze.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(kt,0,ze),Ir[0].resource.buffer=kt,Ir[1].resource=Bn,Ir[2].resource=_.texture.view,Ir[3].resource=t.texture.view,Ir[4].resource=lr;const ps=f.createBindGroup({layout:zr,entries:Ir}),ci=x.createRenderPassDescriptor(Ht.texture.view,0,0,0,0,"clear"),Xr=b.beginRenderPass(ci);return Xr.setPipeline(lt),Xr.setBindGroup(0,ps),Xr.draw(6,1,0,0),Xr.end(),m.frameTextures.push(Ut),x.releaseTemporaryAttachment(_),ne.x=S+Fe,ne.y=M+ge,Ht},g0=Math.PI/180,Xe=new Float32Array(12),_r=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null},{binding:4,resource:null}],wc=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m)=>{const{device:f,commandEncoder:b,frameBufferManager:x,pipelineManager:y,textureManager:P}=m,S=ne.x,M=ne.y,$=t.width,T=t.height,w=sr(t,e,l,c,a,g,m),E=w.width,F=w.height,A=ne.x,R=ne.y,v=A-S,U=R-M,L=Math.sqrt(e[0]*e[0]+e[1]*e[1]),D=Math.sqrt(e[2]*e[2]+e[3]*e[3]),G=n*g0,B=Math.cos(G)*r*(L/g),z=Math.sin(G)*r*(D/g),k=h===1,_=k?$:E+Math.max(0,Math.abs(B)-v),I=k?T:F+Math.max(0,Math.abs(z)-U),V=Math.ceil(_),X=Math.ceil(I),Y=(V-_)/2,W=(X-I)/2,K=k?0:Math.max(0,v-B)+Y,q=k?0:Math.max(0,U-z)+W,ce=k?B-A:(B>0?Math.max(0,B-v):0)+Y,te=k?z-R:(z>0?Math.max(0,z-U):0)+W,se=ac(i,s,o),ue=f.createTexture({size:{width:256,height:1},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});f.queue.writeTexture({texture:ue},se.buffer,{bytesPerRow:256*4,offset:se.byteOffset},{width:256,height:1});const Fe=ue.createView(),ge=V/$,Q=X/T,Ct=K/$,Je=q/T,Ut=V/E,lr=X/F,ur=ce/E,Yt=te/F,Gt=x.createTemporaryAttachment(V,X),Lt=y.getFilterPipeline("gradient_glow_filter",{GLOW_TYPE:h,IS_KNOCKOUT:d?1:0}),Wt=y.getBindGroupLayout("gradient_glow_filter");if(!Lt||!Wt)return console.error("[WebGPU GradientGlowFilter] Pipeline not found"),x.releaseTemporaryAttachment(w),t;const fr=P.createSampler("gradient_glow_sampler",!0);Xe[0]=u,Xe[1]=k?1:0,Xe[2]=d?1:0,Xe[3]=h,Xe[4]=ge,Xe[5]=Q,Xe[6]=Ct,Xe[7]=Je,Xe[8]=Ut,Xe[9]=lr,Xe[10]=ur,Xe[11]=Yt;const jt=m.bufferManager?m.bufferManager.acquireAndWriteUniformBuffer(Xe):f.createBuffer({size:Xe.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});m.bufferManager||f.queue.writeBuffer(jt,0,Xe),_r[0].resource.buffer=jt,_r[1].resource=fr,_r[2].resource=w.texture.view,_r[3].resource=t.texture.view,_r[4].resource=Fe;const hr=f.createBindGroup({layout:Wt,entries:_r}),Ht=x.createRenderPassDescriptor(Gt.texture.view,0,0,0,0,"clear"),lt=b.beginRenderPass(Ht);return lt.setPipeline(Lt),lt.setBindGroup(0,hr),lt.draw(6,1,0,0),lt.end(),m.frameTextures.push(ue),x.releaseTemporaryAttachment(w),ne.x=S+K,ne.y=M+q,Gt},He=new Float32Array(12),Sn=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:null}],b0=(t,e)=>{const r=(t>>16&255)/255*e,n=(t>>8&255)/255*e,s=(t&255)/255*e;return[r,n,s,e]},Oc=new Map,Ec=(t,e,r,n,s,o,i,l,c,u,a,h,d,g,m,f)=>{const{device:b,commandEncoder:x,frameBufferManager:y,textureManager:P}=f,S=t.width,M=t.height,$=n,T=s,w=y.createTemporaryAttachment(S,M),E=b.createTexture({size:{width:n,height:s},format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});b.queue.writeTexture({texture:E},r.buffer,{bytesPerRow:n*4,offset:r.byteOffset},{width:n,height:s});const F=\`\${l},\${c},\${h}\`;let A=Oc.get(F);if(!A){const z=N.getDisplacementMapFilterFragmentShader(l,c,h),k=b.createShaderModule({code:N.getBlurFilterVertexShader()}),_=b.createShaderModule({code:z}),I=b.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{}}]}),V=b.createPipelineLayout({bindGroupLayouts:[I]});A={pipeline:b.createRenderPipeline({layout:V,vertex:{module:k,entryPoint:"main",buffers:[]},fragment:{module:_,entryPoint:"main",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"none"}}),bindGroupLayout:I},Oc.set(F,A)}const R=P.createSampler("displacement_sampler",!0),v=h===1,U=v?48:32;if(He[0]=$/n,He[1]=T/s,He[2]=o/n,He[3]=(T-s-i)/s,He[4]=u/$,He[5]=a/T,He[6]=0,He[7]=0,v){const[z,k,_,I]=b0(d,g);He[8]=z,He[9]=k,He[10]=_,He[11]=I}const L=f.bufferManager?f.bufferManager.acquireAndWriteUniformBuffer(He,U):b.createBuffer({size:U,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});f.bufferManager||b.queue.writeBuffer(L,0,He,0,U/4),Sn[0].resource.buffer=L,Sn[1].resource=R,Sn[2].resource=t.texture.view,Sn[3].resource=E.createView();const D=b.createBindGroup({layout:A.bindGroupLayout,entries:Sn}),G=y.createRenderPassDescriptor(w.texture.view,0,0,0,0,"clear"),B=x.beginRenderPass(G);return B.setPipeline(A.pipeline),B.setBindGroup(0,D),B.draw(6,1,0,0),B.end(),f.frameTextures.push(E),w},bt=new Float32Array(4),Te=new Float32Array(6),Ee=new Float32Array(6),oe=new Float32Array(8),Ze=new Float32Array(12),ve=new Float32Array(20),fe=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],x0=new Set(["normal","layer","add","screen","alpha","erase","copy"]),y0=new Float32Array([1,-1,0,1]),v0=t=>t[0]===1&&t[1]===1&&t[2]===1&&t[3]===1&&t[4]===0&&t[5]===0&&t[6]===0&&t[7]===0,M0=(t,e,r)=>{const n=t.frameBufferManager.createTemporaryAttachment(e.width,e.height),s=t.pipelineManager.getPipeline("color_transform"),o=t.pipelineManager.getBindGroupLayout("texture_copy");if(!s||!o||!e.texture||!n.texture)return e;oe[0]=r[0],oe[1]=r[1],oe[2]=r[2],oe[3]=r[3],oe[4]=r[4],oe[5]=r[5],oe[6]=r[6],oe[7]=0;const i=t.bufferManager.acquireAndWriteUniformBuffer(oe),l=t.textureManager.createSampler("color_transform_sampler",!1);fe[0].resource.buffer=i,fe[1].resource=l,fe[2].resource=e.texture.view;const c=t.device.createBindGroup({layout:o,entries:fe}),u=t.frameBufferManager.createRenderPassDescriptor(n.texture.view,0,0,0,0,"clear"),a=t.commandEncoder.beginRenderPass(u);return a.setPipeline(s),a.setBindGroup(0,c),a.draw(6,1,0,0),a.end(),n},S0=(t,e,r)=>{const n=r.createTemporaryAttachment(t.w,t.h),s=Ne()||r.getAttachment("atlas");return s&&s.texture&&n.texture?e.copyTextureToTexture({texture:s.texture.resource,origin:{x:t.x,y:t.y,z:0}},{texture:n.texture.resource,origin:{x:0,y:0,z:0}},{width:t.w,height:t.h}):console.error("[WebGPU Filter] getTextureFromNode: FAILED - missing atlas or textures"),n},$0=t=>x0.has(t),T0=(t,e,r,n,s,o)=>{const i=t.frameBufferManager.createTemporaryAttachment(s,o),l=t.pipelineManager.getPipeline("complex_blend_copy"),c=t.pipelineManager.getBindGroupLayout("texture_copy");if(!l||!c||!e.texture||!i.texture)return i;const u=s/e.width,a=o/e.height,h=r/e.width,d=n/e.height;bt[0]=u,bt[1]=a,bt[2]=h,bt[3]=d;const g=t.bufferManager.acquireAndWriteUniformBuffer(bt),m=t.textureManager.createSampler("filter_copy_sampler",!1);fe[0].resource.buffer=g,fe[1].resource=m,fe[2].resource=e.texture.view;const f=t.device.createBindGroup({layout:c,entries:fe}),b=t.frameBufferManager.createRenderPassDescriptor(i.texture.view,0,0,0,0,"clear"),x=t.commandEncoder.beginRenderPass(b);return x.setPipeline(l),x.setBindGroup(0,f),x.draw(6,1,0,0),x.end(),i},B0=(t,e,r,n,s)=>{const o=r.msaa&&r.msaaTexture?.view,i=o?"filter_complex_blend_output_msaa":"filter_complex_blend_output",l=t.pipelineManager.getPipeline(i),c=t.pipelineManager.getBindGroupLayout("positioned_texture");if(!l||!c||!e.texture||!r.texture)return;oe[0]=n,oe[1]=s,oe[2]=e.width,oe[3]=e.height,oe[4]=r.width,oe[5]=r.height,oe[6]=0,oe[7]=0;const u=t.bufferManager.acquireAndWriteUniformBuffer(oe),a=t.textureManager.createSampler("filter_blend_output_sampler",!1);fe[0].resource.buffer=u,fe[1].resource=a,fe[2].resource=e.texture.view;const h=t.device.createBindGroup({layout:c,entries:fe}),d=o?r.msaaTexture.view:r.texture.view,g=o?r.texture.view:null,m=t.frameBufferManager.createRenderPassDescriptor(d,0,0,0,0,"load",g),f=t.commandEncoder.beginRenderPass(m);f.setPipeline(l),f.setBindGroup(0,h),f.draw(6,1,0,0),f.end()},P0=(t,e,r,n,s,o,i,l)=>{const c=t.mainAttachment||t.frameBufferManager.getAttachment("main");if(!c||!c.texture||!e.texture)return;let u=s,a=o,h=e.width,d=e.height,g=0,m=0;if(u<0&&(g=-u/e.width,h+=u,u=0),a<0&&(m=-a/e.height,d+=a,a=0),h<=0||d<=0)return;const f=c.width,b=c.height;if(u+h>f&&(h=f-u),a+d>b&&(d=b-a),$0(n)){const x=c.msaa&&c.msaaTexture?.view;let y;switch(n){case"add":y=x?"filter_output_add_msaa":"filter_output_add";break;case"screen":y=x?"filter_output_screen_msaa":"filter_output_screen";break;case"alpha":y=x?"filter_output_alpha_msaa":"filter_output_alpha";break;case"erase":y=x?"filter_output_erase_msaa":"filter_output_erase";break;case"copy":y=x?"texture_copy_bgra_msaa":"texture_copy_bgra";break;default:y=x?"filter_output_msaa":"filter_output";break}let P=t.pipelineManager.getPipeline(y),S=t.pipelineManager.getBindGroupLayout("texture_copy");if((!P||!S)&&(y=x?"filter_output_msaa":"filter_output",P=t.pipelineManager.getPipeline(y),S=t.pipelineManager.getBindGroupLayout("texture_copy"),!P||!S))return;const M=t.textureManager.createSampler("filter_output_sampler",!0),$=h/e.width,T=d/e.height;bt[0]=$,bt[1]=T,bt[2]=g,bt[3]=m;const w=t.bufferManager.acquireAndWriteUniformBuffer(bt);fe[0].resource.buffer=w,fe[1].resource=M,fe[2].resource=e.texture.view;const E=t.device.createBindGroup({layout:S,entries:fe}),F=x?c.msaaTexture.view:c.texture.view,A=x?c.texture.view:null,R=t.frameBufferManager.createRenderPassDescriptor(F,0,0,0,0,"load",A),v=Math.max(0,u),U=Math.max(0,a),L=Math.max(1,h),D=Math.max(1,d),G=Math.max(0,Math.floor(v)),B=Math.max(0,Math.floor(U)),z=Math.max(1,Math.min(Math.ceil(v+L)-G,f-G)),k=Math.max(1,Math.min(Math.ceil(U+D)-B,b-B));if(z<=0||k<=0||G>=f||B>=b)return;const _=t.commandEncoder.beginRenderPass(R);_.setPipeline(P),_.setBindGroup(0,E),_.setViewport(v,U,L,D,0,1),_.setScissorRect(G,B,z,k),_.draw(6,1,0,0),_.end()}else{const x=T0(t,c,u,a,h,d);oe[0]=r[0],oe[1]=r[1],oe[2]=r[2],oe[3]=r[3],oe[4]=r[4],oe[5]=r[5],oe[6]=r[6],oe[7]=0;const y=Xo(e,x,n,oe,{device:t.device,commandEncoder:t.commandEncoder,bufferManager:t.bufferManager,frameBufferManager:t.frameBufferManager,pipelineManager:t.pipelineManager,textureManager:t.textureManager,frameTextures:t.frameTextures});B0(t,y,c,u,a),t.frameBufferManager.releaseTemporaryAttachment(x),t.frameBufferManager.releaseTemporaryAttachment(y)}},A0=(t,e,r,n,s,o,i,l,c,u,a,h)=>{ne.x=0,ne.y=0;let d=S0(t,u.commandEncoder,u.frameBufferManager);if(d.texture){const B=u.frameBufferManager.createTemporaryAttachment(t.w,t.h),z=u.pipelineManager.getPipeline("texture_copy_rgba8"),k=u.pipelineManager.getBindGroupLayout("texture_copy");if(z&&k&&B.texture){const _=u.textureManager.createSampler("filter_flip_sampler",!1),I=u.bufferManager.acquireAndWriteUniformBuffer(y0);fe[0].resource.buffer=I,fe[1].resource=_,fe[2].resource=d.texture.view;const V=u.device.createBindGroup({layout:k,entries:fe}),X=u.frameBufferManager.createRenderPassDescriptor(B.texture.view,0,0,0,0,"clear"),Y=u.commandEncoder.beginRenderPass(X);Y.setPipeline(z),Y.setBindGroup(0,V),Y.draw(6,1,0,0),Y.end(),u.frameBufferManager.releaseTemporaryAttachment(d),d=B}}const g=le.getDevicePixelRatio(),m=Math.sqrt(s[0]*s[0]+s[1]*s[1]),f=Math.sqrt(s[2]*s[2]+s[3]*s[3]),b=Math.atan2(s[1],s[0]),x=Math.atan2(-s[2],s[3]),y=n?m*Math.cos(b):Math.cos(b),P=n?m*Math.sin(b):Math.sin(b),S=n?-f*Math.sin(x):-Math.sin(x),M=n?f*Math.cos(x):Math.cos(x);Te[0]=y,Te[1]=P,Te[2]=S,Te[3]=M,Te[4]=e/2,Te[5]=r/2,Ee[0]=1,Ee[1]=0,Ee[2]=0,Ee[3]=1,Ee[4]=-t.w/2,Ee[5]=-t.h/2;const $=Te[0]*Ee[0]+Te[2]*Ee[1],T=Te[1]*Ee[0]+Te[3]*Ee[1],w=Te[0]*Ee[2]+Te[2]*Ee[3],E=Te[1]*Ee[2]+Te[3]*Ee[3],F=Te[0]*Ee[4]+Te[2]*Ee[5]+Te[4],A=Te[1]*Ee[4]+Te[3]*Ee[5]+Te[5];let R=0,v=0;if($!==1||T!==0||w!==0||E!==1){const B=u.frameBufferManager.createTemporaryAttachment(e,r),k=u.pipelineManager.getPipeline("texture_scale"),_=u.pipelineManager.getBindGroupLayout("texture_scale");if(k&&_){Ze[0]=$,Ze[1]=T,Ze[2]=w,Ze[3]=E,Ze[4]=F,Ze[5]=A,Ze[6]=t.w,Ze[7]=t.h,Ze[8]=e,Ze[9]=r,Ze[10]=0,Ze[11]=0;const I=u.bufferManager.acquireAndWriteUniformBuffer(Ze,48),V=u.textureManager.createSampler("filter_scale_sampler",!0);fe[0].resource.buffer=I,fe[1].resource=V,fe[2].resource=d.texture.view;const X=u.device.createBindGroup({layout:_,entries:fe}),Y=u.frameBufferManager.createRenderPassDescriptor(B.texture.view,0,0,0,0,"clear"),W=u.commandEncoder.beginRenderPass(Y);W.setPipeline(k),W.setBindGroup(0,X),W.draw(6,1,0,0),W.end(),R=F,v=A,u.frameBufferManager.releaseTemporaryAttachment(d),d=B}}for(let B=0;c.length>B;)switch(c[B++]){case 0:{const k=c[B++],_=c[B++],I=c[B++],V=c[B++],X=c[B++],Y=c[B++],W=c[B++],K=c[B++],q=c[B++],ce=c[B++],te=c[B++],se=!!c[B++],ue=Bc(d,s,k,_,I,V,X,Y,W,K,q,ce,te,se,g,u);d!==ue&&u.frameBufferManager.releaseTemporaryAttachment(d),d=ue}break;case 1:{const k=c[B++],_=c[B++],I=c[B++],V=sr(d,s,k,_,I,g,u);d!==V&&u.frameBufferManager.releaseTemporaryAttachment(d),d=V}break;case 2:{ve[0]=c[B++],ve[1]=c[B++],ve[2]=c[B++],ve[3]=c[B++],ve[4]=c[B++],ve[5]=c[B++],ve[6]=c[B++],ve[7]=c[B++],ve[8]=c[B++],ve[9]=c[B++],ve[10]=c[B++],ve[11]=c[B++],ve[12]=c[B++],ve[13]=c[B++],ve[14]=c[B++],ve[15]=c[B++],ve[16]=c[B++],ve[17]=c[B++],ve[18]=c[B++],ve[19]=c[B++];const k=Mc(d,ve,u);d!==k&&u.frameBufferManager.releaseTemporaryAttachment(d),d=k}break;case 3:{const k=c[B++],_=c[B++],I=k*_,V=new Float32Array(I);for(let se=0;set?t[0]===1&&t[1]===1&&t[2]===1&&t[3]===1&&t[4]===0&&t[5]===0&&t[6]===0&&t[7]===0:!0,Cc=(t,e,r)=>{const n=t.frameBufferManager.createTemporaryAttachment(e.width,e.height),s=t.pipelineManager.getPipeline("color_transform"),o=t.pipelineManager.getBindGroupLayout("texture_copy");if(!s||!o||!e.texture||!n.texture)return e;ie[0]=r[0],ie[1]=r[1],ie[2]=r[2],ie[3]=r[3],ie[4]=r[4],ie[5]=r[5],ie[6]=r[6],ie[7]=0;const i=t.bufferManager.acquireAndWriteUniformBuffer(ie),l=t.textureManager.createSampler("container_ct_sampler",!1);Ie[0].resource.buffer=i,Ie[1].resource=l,Ie[2].resource=e.texture.view;const c=t.device.createBindGroup({layout:o,entries:Ie}),u=t.frameBufferManager.createRenderPassDescriptor(n.texture.view,0,0,0,0,"clear"),a=t.commandEncoder.beginRenderPass(u);return a.setPipeline(s),a.setBindGroup(0,c),a.draw(6,1,0,0),a.end(),n},Yo=(t,e,r,n,s,o)=>{const i=t.frameBufferManager.createTemporaryAttachment(s,o),l=t.pipelineManager.getPipeline("complex_blend_copy"),c=t.pipelineManager.getBindGroupLayout("texture_copy");if(!l||!c||!e.texture||!i.texture)return i;const u=s/e.width,a=r/e.width,h=-(o/e.height),d=(n+o)/e.height;xt[0]=u,xt[1]=h,xt[2]=a,xt[3]=d;const g=t.bufferManager.acquireAndWriteUniformBuffer(xt),m=t.textureManager.createSampler("container_copy_sampler",!1);Ie[0].resource.buffer=g,Ie[1].resource=m,Ie[2].resource=e.texture.view;const f=t.device.createBindGroup({layout:c,entries:Ie}),b=t.frameBufferManager.createRenderPassDescriptor(i.texture.view,0,0,0,0,"clear"),x=t.commandEncoder.beginRenderPass(b);return x.setPipeline(l),x.setBindGroup(0,f),x.draw(6,1,0,0),x.end(),i},Uc=(t,e,r,n,s,o,i)=>{if(!r.texture||!e.texture)return;let l=s,c=o,u=e.width,a=e.height,h=0,d=0;if(l<0&&(h=-l/e.width,u+=l,l=0),c<0&&(d=-c/e.height,a+=c,c=0),u<=0||a<=0)return;const g=r.width,m=r.height;if(l+u>g&&(u=g-l),c+a>m&&(a=m-c),F0.has(n)){const f=r.msaa&&r.msaaTexture?.view;let b;switch(n){case"add":b=f?"filter_output_add_msaa":"filter_output_add";break;case"screen":b=f?"filter_output_screen_msaa":"filter_output_screen";break;case"alpha":b=f?"filter_output_alpha_msaa":"filter_output_alpha";break;case"erase":b=f?"filter_output_erase_msaa":"filter_output_erase";break;case"copy":b=f?"texture_copy_bgra_msaa":"texture_copy_bgra";break;default:b=f?"filter_output_msaa":"filter_output";break}const x=t.pipelineManager.getPipeline(b),y=t.pipelineManager.getBindGroupLayout("texture_copy");if(!x||!y)return;const P=t.textureManager.createSampler("container_output_sampler",!0),S=u/e.width,M=a/e.height;xt[0]=S,xt[1]=M,xt[2]=h,xt[3]=d;const $=i.acquireAndWriteUniformBuffer(xt);Ie[0].resource.buffer=$,Ie[1].resource=P,Ie[2].resource=e.texture.view;const T=t.device.createBindGroup({layout:y,entries:Ie}),w=f?r.msaaTexture.view:r.texture.view,E=f?r.texture.view:null,F=t.frameBufferManager.createRenderPassDescriptor(w,0,0,0,0,"load",E),A=Math.max(0,l),R=Math.max(0,c),v=Math.max(1,u),U=Math.max(1,a),L=Math.max(0,Math.floor(A)),D=Math.max(0,Math.floor(R)),G=Math.max(1,Math.min(Math.ceil(A+v)-L,g-L)),B=Math.max(1,Math.min(Math.ceil(R+U)-D,m-D));if(G<=0||B<=0||L>=g||D>=m)return;const z=t.commandEncoder.beginRenderPass(F);z.setPipeline(x),z.setBindGroup(0,T),z.setViewport(A,R,v,U,0,1),z.setScissorRect(L,D,G,B),z.draw(6,1,0,0),z.end()}else{const f=Yo(t,r,l,c,u,a);ie[0]=ir[0],ie[1]=ir[1],ie[2]=ir[2],ie[3]=ir[3],ie[4]=ir[4]/255,ie[5]=ir[5]/255,ie[6]=ir[6]/255,ie[7]=0;const b=Xo(e,f,n,ie,{device:t.device,commandEncoder:t.commandEncoder,bufferManager:t.bufferManager,frameBufferManager:t.frameBufferManager,pipelineManager:t.pipelineManager,textureManager:t.textureManager,frameTextures:t.frameTextures}),x=r.msaa&&r.msaaTexture?.view,y=x?"filter_complex_blend_output_msaa":"filter_complex_blend_output",P=t.pipelineManager.getPipeline(y),S=t.pipelineManager.getBindGroupLayout("positioned_texture");if(P&&S&&b.texture&&r.texture){ie[0]=l,ie[1]=c,ie[2]=b.width,ie[3]=b.height,ie[4]=r.width,ie[5]=r.height,ie[6]=0,ie[7]=0;const M=i.acquireAndWriteUniformBuffer(ie),$=t.textureManager.createSampler("container_blend_output_sampler",!1);Ie[0].resource.buffer=M,Ie[1].resource=$,Ie[2].resource=b.texture.view;const T=t.device.createBindGroup({layout:S,entries:Ie}),w=x?r.msaaTexture.view:r.texture.view,E=x?r.texture.view:null,F=t.frameBufferManager.createRenderPassDescriptor(w,0,0,0,0,"load",E),A=t.commandEncoder.beginRenderPass(F);A.setPipeline(P),A.setBindGroup(0,T),A.draw(6,1,0,0),A.end()}t.frameBufferManager.releaseTemporaryAttachment(f),t.frameBufferManager.releaseTemporaryAttachment(b)}},w0=(t,e,r,n,s)=>{ne.x=0,ne.y=0;for(let o=0;r.length>o;)switch(r[o++]){case 0:{const l=Bc(t,e,r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],r[o++],!!r[o++],n,s);t!==l&&s.frameBufferManager.releaseTemporaryAttachment(t),t=l}break;case 1:{const l=sr(t,e,r[o++],r[o++],r[o++],n,s);t!==l&&s.frameBufferManager.releaseTemporaryAttachment(t),t=l}break;case 2:{Me[0]=r[o++],Me[1]=r[o++],Me[2]=r[o++],Me[3]=r[o++],Me[4]=r[o++],Me[5]=r[o++],Me[6]=r[o++],Me[7]=r[o++],Me[8]=r[o++],Me[9]=r[o++],Me[10]=r[o++],Me[11]=r[o++],Me[12]=r[o++],Me[13]=r[o++],Me[14]=r[o++],Me[15]=r[o++],Me[16]=r[o++],Me[17]=r[o++],Me[18]=r[o++],Me[19]=r[o++];const l=Mc(t,Me,s);t!==l&&s.frameBufferManager.releaseTemporaryAttachment(t),t=l}break;case 3:{const l=r[o++],c=r[o++],u=l*c,a=new Float32Array(u);for(let d=0;d{if(i&&s&&l&&c){let f=Yo(g,t,0,0,t.width,t.height);g.frameBufferManager.releaseTemporaryAttachment(t);const b=le.getDevicePixelRatio();if(f=w0(f,s,c,b,g),u&&(ee.set(u,"fKey",a),ee.set(u,"fTexture",f)),f){let x=f,y=null;Rc(o)||(y=Cc(g,f,o),x=y);const P=Math.sqrt(s[0]*s[0]+s[1]*s[1]),S=Math.sqrt(s[2]*s[2]+s[3]*s[3]),M=l[0]*(P/b),$=l[1]*(S/b),T=M+s[4],w=$+s[5];Uc(g,x,e,n,T,w,m),y&&g.frameBufferManager.releaseTemporaryAttachment(y),u||g.frameBufferManager.releaseTemporaryAttachment(f)}}else{let f=Yo(g,t,0,0,t.width,t.height);if(g.frameBufferManager.releaseTemporaryAttachment(t),!Rc(o)){const b=Cc(g,f,o);g.frameBufferManager.releaseTemporaryAttachment(f),f=b}Uc(g,f,e,n,s[4],s[5],m),g.frameBufferManager.releaseTemporaryAttachment(f)}},$n=new Float32Array([1,1,0,0]),Wo=[],Gc=new Float32Array([0,0,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,1,0,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,1,0,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,.5,.5,1,1,1,1,1,0,0,0,1,0,0,0,1]),Lc=new Float32Array([0,0,1,0,0,1,1,0,1,1,0,1]),Et=new Float32Array(8),ke=new Float32Array(16);let jo=null,kc=null,ds=null;const Ic={view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"},E0={colorAttachments:[Ic]},he=[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null}],Tn={r:0,g:0,b:0,a:0},Ho={view:null,clearValue:Tn,loadOp:"clear",storeOp:"store",resolveTarget:void 0},_c={view:null,stencilClearValue:0,stencilLoadOp:"clear",stencilStoreOp:"store"},Ko={colorAttachments:[Ho]},ar={view:null,resolveTarget:void 0,loadOp:"load",storeOp:"store"},Vr={view:null,stencilLoadOp:"load",stencilStoreOp:"store"},Rt={colorAttachments:[ar]};class R0{$stack;$matrix;$clearColorR;$clearColorG;$clearColorB;$clearColorA;$mainAttachmentObject;$stackAttachmentObject;globalAlpha;globalCompositeOperation;imageSmoothingEnabled;$fillStyle;$strokeStyle;maskBounds;thickness;caps;joints;miterLimit;device;canvasContext;preferredFormat;commandEncoder=null;renderPassEncoder=null;mainTexture=null;mainTextureView=null;frameStarted=!1;frameTextures=[];pooledTextures=[];pooledRenderTextures=[];currentRenderTarget=null;viewportWidth=0;viewportHeight=0;pathCommand;bufferManager;textureManager;frameBufferManager;pipelineManager;computePipelineManager;attachmentManager;newDrawState=!1;$containerLayerStack=[];containerLayerContentSizes=[];inMaskMode=!1;nodeAreaCleared=!1;currentNodeScissor=null;nodeRenderPassAtlasIndex=-1;fillDynamicBindGroup=null;fillDynamicBindGroupBuffer=null;nodeClearQuadBuffer=null;useOptimizedInstancing=!0;$uniformData8=new Float32Array(8);$scissorRect={x:0,y:0,w:0,h:0};$filterConfig;constructor(e,r,n,s=1){this.device=e,this.canvasContext=r,this.preferredFormat=n,le.setDevice(e),le.setDevicePixelRatio(s);const o=e.limits.maxTextureDimension2D,i=Math.max(2048,o/2);le.setRenderMaxSize(i),this.$stack=le.createArray(),this.$stackAttachmentObject=le.createArray(),this.$matrix=le.createFloat32Array(9),this.$matrix.set([1,0,0,0,1,0,0,0,1]),this.$clearColorR=0,this.$clearColorG=0,this.$clearColorB=0,this.$clearColorA=0,this.thickness=1,this.caps=0,this.joints=2,this.miterLimit=0,this.$mainAttachmentObject=null,this.globalAlpha=1,this.globalCompositeOperation="normal",this.imageSmoothingEnabled=!1,this.$fillStyle=new Float32Array([1,1,1,1]),this.$strokeStyle=new Float32Array([1,1,1,1]),this.maskBounds={xMin:0,yMin:0,xMax:0,yMax:0},r.configure({device:e,format:n,alphaMode:"premultiplied"}),this.viewportWidth=r.canvas.width,this.viewportHeight=r.canvas.height,this.pathCommand=new xd,this.bufferManager=new Od(e),this.textureManager=new Ud(e),this.frameBufferManager=new Hd(e,n),this.pipelineManager=new qp(e,n),this.pipelineManager.preloadLazyGroups(),this.computePipelineManager=new Qp(e),this.attachmentManager=new ip(e),em(l=>{const c=le.getRenderMaxSize();return this.frameBufferManager.createAttachment(\`atlas_\${l}\`,c,c,!1,!0)}),this.$filterConfig={device:this.device,commandEncoder:null,bufferManager:this.bufferManager,frameBufferManager:this.frameBufferManager,pipelineManager:this.pipelineManager,textureManager:this.textureManager,computePipelineManager:this.computePipelineManager,frameTextures:this.frameTextures},ud(this)}clearTransferBounds(){this.beginFrame()}updateBackgroundColor(e,r,n,s){this.$clearColorR=e,this.$clearColorG=r,this.$clearColorB=n,this.$clearColorA=s}fillBackgroundColor(){if(!this.$mainAttachmentObject||!this.$mainAttachmentObject.texture)return;this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder();const e=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view;Ho.view=e?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,Ho.resolveTarget=e?this.$mainAttachmentObject.texture.view:void 0,Tn.r=this.$clearColorR,Tn.g=this.$clearColorG,Tn.b=this.$clearColorB,Tn.a=this.$clearColorA;const r=e&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil?.view;r?(_c.view=r,Ko.depthStencilAttachment=_c):Ko.depthStencilAttachment=void 0,this.renderPassEncoder=this.commandEncoder.beginRenderPass(Ko),this.renderPassEncoder.end(),this.renderPassEncoder=null}resize(e,r,n=!0){this.clearArraysInstanced();for(const o of this.frameTextures)o.destroy();this.frameTextures.length=0;for(const o of this.pooledTextures)Ot(o);this.pooledTextures.length=0;for(const o of this.pooledRenderTextures)Xt(o);this.pooledRenderTextures.length=0,Em(),this.frameStarted=!1,this.commandEncoder=null,this.renderPassEncoder=null,this.currentRenderTarget=null,am();const s=this.canvasContext.canvas;if(s&&"width"in s&&"height"in s&&(s.width=e,s.height=r),this.$stackAttachmentObject.length){for(let o=0;o0?Wo.pop():new Float32Array(9);e.set(this.$matrix),this.$stack.push(e)}restore(){const e=this.$stack.pop();e&&(this.$matrix.set(e),Wo.push(e))}setTransform(e,r,n,s,o,i){this.$matrix[0]=e,this.$matrix[1]=r,this.$matrix[3]=n,this.$matrix[4]=s,this.$matrix[6]=o,this.$matrix[7]=i}transform(e,r,n,s,o,i){const l=this.$matrix,c=l[0],u=l[1],a=l[3],h=l[4],d=l[6],g=l[7];l[0]=e*c+r*a,l[1]=e*u+r*h,l[3]=n*c+s*a,l[4]=n*u+s*h,l[6]=o*c+i*a+d,l[7]=o*u+i*h+g}reset(){this.$matrix.set([1,0,0,0,1,0,0,0,1]),this.$stack.length=0,this.$stackAttachmentObject.length=0,this.globalAlpha=1,this.globalCompositeOperation="normal",this.imageSmoothingEnabled=!1}beginPath(){this.pathCommand.beginPath()}moveTo(e,r){this.pathCommand.moveTo(e,r)}lineTo(e,r){this.pathCommand.lineTo(e,r)}quadraticCurveTo(e,r,n,s){this.pathCommand.quadraticCurveTo(e,r,n,s)}fillStyle(e,r,n,s){this.$fillStyle[0]=e,this.$fillStyle[1]=r,this.$fillStyle[2]=n,this.$fillStyle[3]=s}strokeStyle(e,r,n,s){this.$strokeStyle[0]=e,this.$strokeStyle[1]=r,this.$strokeStyle[2]=n,this.$strokeStyle[3]=s}closePath(){this.pathCommand.closePath()}arc(e,r,n){this.pathCommand.arc(e,r,n)}bezierCurveTo(e,r,n,s,o,i){this.pathCommand.bezierCurveTo(e,r,n,s,o,i)}ensureFillRenderPass(){if(this.frameStarted||this.beginFrame(),this.ensureCommandEncoder(),this.renderPassEncoder){this.currentRenderTarget&&this.ensureNodeAreaCleared();return}{const e=this.getCurrentTextureView(),r=Ne(),n=r?.msaa&&r?.msaaTexture?.view,s=n?r.msaaTexture.view:e,o=n?e:null;if(this.currentRenderTarget&&r?.stencil?.view){const i=n&&r?.msaaStencil?.view?r.msaaStencil.view:r.stencil.view,l=this.frameBufferManager.createStencilRenderPassDescriptor(s,i,"load","clear",o);this.renderPassEncoder=this.commandEncoder.beginRenderPass(l)}else if(!this.currentRenderTarget&&(gt()||nr())&&this.$mainAttachmentObject?.stencil?.view){const i=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view,l=i?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,c=i&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil.view,u=i?this.$mainAttachmentObject.texture.view:null,a=this.frameBufferManager.createStencilRenderPassDescriptor(l,c,"load","load",u);this.renderPassEncoder=this.commandEncoder.beginRenderPass(a),gt()&&this.renderPassEncoder.setStencilReference(Or())}else if(!this.currentRenderTarget&&this.$mainAttachmentObject){const i=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view,l=i?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,c=i?this.$mainAttachmentObject.texture.view:null;if(this.$mainAttachmentObject.stencil?.view){const u=i&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil.view,a=this.frameBufferManager.createStencilRenderPassDescriptor(l,u,"load","clear",c);this.renderPassEncoder=this.commandEncoder.beginRenderPass(a)}else{const u=this.frameBufferManager.createRenderPassDescriptor(l,0,0,0,0,"load",c);this.renderPassEncoder=this.commandEncoder.beginRenderPass(u)}}else{const i=this.frameBufferManager.createRenderPassDescriptor(s,0,0,0,0,"load",o);this.renderPassEncoder=this.commandEncoder.beginRenderPass(i)}}this.currentRenderTarget&&this.ensureNodeAreaCleared()}fill(){const e=this.pathCommand.$getVertices;if(e.length===0)return;this.ensureFillRenderPass();const r=this.viewportWidth,n=this.viewportHeight,s=dn(e);if(s.indexCount===0)return;const o=this.bufferManager.acquireVertexBuffer(s.buffer.byteLength,s.buffer),i=this.writeFillUniform(this.$fillStyle[0],this.$fillStyle[1],this.$fillStyle[2],this.$fillStyle[3],this.$matrix[0],this.$matrix[1],this.$matrix[3],this.$matrix[4],this.$matrix[6],this.$matrix[7],r,n),l=this.getOrCreateFillDynamicBindGroup(),c=Ne();if(this.currentRenderTarget&&c?.stencil?.view)this.fillWithStencil(o,s.indexCount,l,i);else if(!this.currentRenderTarget&&!this.inMaskMode&&!gt()&&this.$mainAttachmentObject?.stencil?.view)this.fillWithStencilMain(o,s.indexCount,l,i);else{const u=(this.inMaskMode||gt())&&!!this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget;this.fillSimple(o,s.indexCount,u,l,i)}}getOrCreateFillDynamicBindGroup(){const e=this.bufferManager.dynamicUniform.getBuffer();if(!this.fillDynamicBindGroup||this.fillDynamicBindGroupBuffer!==e){const r=this.pipelineManager.getBindGroupLayout("fill_dynamic");if(!r)throw new Error("[WebGPU] fill_dynamic bind group layout not found");this.fillDynamicBindGroup=this.device.createBindGroup({layout:r,entries:[{binding:0,resource:{buffer:e,size:256}}]}),this.fillDynamicBindGroupBuffer=e}return this.fillDynamicBindGroup}writeFillUniform(e,r,n,s,o,i,l,c,u,a,h,d){return ke[0]=e,ke[1]=r,ke[2]=n,ke[3]=s,ke[4]=o/h,ke[5]=i/d,ke[6]=0,ke[7]=0,ke[8]=l/h,ke[9]=c/d,ke[10]=0,ke[11]=0,ke[12]=u/h,ke[13]=a/d,ke[14]=1,ke[15]=0,this.bufferManager.dynamicUniform.allocate(ke)}fillWithStencil(e,r,n,s){km(this.renderPassEncoder,this.pipelineManager,e,r,n,s)}fillWithStencilMain(e,r,n,s){Im(this.renderPassEncoder,this.pipelineManager,e,r,n,s)}fillSimple(e,r,n,s,o){const i=this.$mainAttachmentObject?.clipLevel??1;_m(this.renderPassEncoder,this.pipelineManager,e,r,s,o,!!this.currentRenderTarget,n,i)}bindAttachment(e){this.attachmentManager.bindAttachment(e);const r=e.color?.view??e.texture?.view;r&&(this.currentRenderTarget=r)}unbindAttachment(){this.attachmentManager.unbindAttachment(),this.currentRenderTarget=null}getAttachmentObject(e,r,n=!1){return this.attachmentManager.getAttachmentObject(e,r,n)}releaseAttachment(e){this.attachmentManager.releaseAttachment(e)}stroke(){const e=this.pathCommand.getVerticesForStroke();if(e.length===0)return;this.ensureFillRenderPass();const r=this.viewportWidth,n=this.viewportHeight,s=Am(e,this.thickness);if(s.length===0)return;const o=dn(s);if(o.indexCount===0)return;const i=this.bufferManager.acquireVertexBuffer(o.buffer.byteLength,o.buffer),l=this.writeFillUniform(this.$strokeStyle[0],this.$strokeStyle[1],this.$strokeStyle[2],this.$strokeStyle[3],this.$matrix[0],this.$matrix[1],this.$matrix[3],this.$matrix[4],this.$matrix[6],this.$matrix[7],r,n),c=this.getOrCreateFillDynamicBindGroup(),u=Ne();if(this.currentRenderTarget&&u?.stencil?.view)this.fillWithStencil(i,o.indexCount,c,l);else if(!this.currentRenderTarget&&!this.inMaskMode&&!gt()&&this.$mainAttachmentObject?.stencil?.view)this.fillWithStencilMain(i,o.indexCount,c,l);else{const a=(this.inMaskMode||gt())&&!!this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget;this.fillSimple(i,o.indexCount,a,c,l)}this.pathCommand.reset()}gradientFill(e,r,n,s,o,i){const l=this.pathCommand.$getVertices;if(l.length===0)return;this.ensureFillRenderPass();const c=this.viewportWidth,u=this.viewportHeight,h=!!((this.inMaskMode||gt())&&this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget),d=!!this.currentRenderTarget,g=Dm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.$matrix,this.$fillStyle,e,r,n,s,o,i,c,u,d,h,this.$mainAttachmentObject?.clipLevel??1);g&&this.addFrameTexture(g),this.beginPath()}bitmapFill(e,r,n,s,o,i){const l=this.pathCommand.$getVertices;if(l.length===0)return;this.ensureFillRenderPass();const c=Ne(),u=!!(this.currentRenderTarget&&c?.stencil?.view),a=!!((this.inMaskMode||gt())&&this.$mainAttachmentObject?.stencil?.view&&!this.currentRenderTarget),h=u||a,d=this.$mainAttachmentObject?.clipLevel??1,g=Nm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.$matrix,this.$fillStyle,e,r,n,s,o,i,this.viewportWidth,this.viewportHeight,!!this.currentRenderTarget,!!h,d);g&&this.addFrameTexture(g),this.beginPath()}gradientStroke(e,r,n,s,o,i){const l=this.pathCommand.getVerticesForStroke();if(l.length===0)return;this.ensureFillRenderPass();const c=Ne(),u=!!(this.currentRenderTarget&&c?.stencil?.view),a=!!(!this.currentRenderTarget&&this.$mainAttachmentObject?.stencil?.view),h=u||a,d=Ym(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.thickness,this.$matrix,this.$strokeStyle,e,r,n,s,o,i,this.viewportWidth,this.viewportHeight,!!this.currentRenderTarget,h);d&&this.addFrameTexture(d),this.pathCommand.reset()}bitmapStroke(e,r,n,s,o,i){const l=this.pathCommand.getVerticesForStroke();if(l.length===0)return;this.ensureFillRenderPass();const c=Ne(),u=!!(this.currentRenderTarget&&c?.stencil?.view),a=!!(!this.currentRenderTarget&&this.$mainAttachmentObject?.stencil?.view),h=u||a,d=Hm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,l,this.thickness,this.$matrix,this.$strokeStyle,e,r,n,s,o,i,this.viewportWidth,this.viewportHeight,!!this.currentRenderTarget,h);d&&this.addFrameTexture(d),this.pathCommand.reset()}clip(){let e=this.frameBufferManager.getCurrentAttachment();const r=!e||e===this.$mainAttachmentObject;if(!e&&this.$mainAttachmentObject&&(e=this.$mainAttachmentObject),!e||!e.stencil)return;const n=this.pathCommand.$getVertices;if(n.length!==0){if(!this.renderPassEncoder)if(this.ensureCommandEncoder(),r&&this.$mainAttachmentObject?.stencil?.view){const s=this.$mainAttachmentObject.msaa&&this.$mainAttachmentObject.msaaTexture?.view,o=s?this.$mainAttachmentObject.msaaTexture.view:this.$mainAttachmentObject.texture.view,i=s&&this.$mainAttachmentObject.msaaStencil?.view?this.$mainAttachmentObject.msaaStencil.view:this.$mainAttachmentObject.stencil.view,l=this.frameBufferManager.createStencilRenderPassDescriptor(o,i,"load","load");this.renderPassEncoder=this.commandEncoder.beginRenderPass(l)}else return;Qm(this.device,this.renderPassEncoder,this.bufferManager,this.pipelineManager,e,n,this.$matrix,this.$fillStyle,this.globalAlpha,r)}}bind(e){this.frameBufferManager.setCurrentAttachment(e),this.viewportWidth=e.width,this.viewportHeight=e.height}get currentAttachmentObject(){return this.frameBufferManager.getCurrentAttachment()||this.$mainAttachmentObject}get atlasAttachmentObject(){return Ne()}useGrid(e){Ja.set(ec,e)}beginNodeRendering(e){this.nodeAreaCleared=!1,this.frameStarted||this.beginFrame();const r=bo(e.index)||Ne();if(r&&r.texture){if(this.renderPassEncoder&&this.nodeRenderPassAtlasIndex===e.index)this.currentRenderTarget=r.texture.view,this.viewportWidth=r.width,this.viewportHeight=r.height;else{this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.currentRenderTarget=r.texture.view,this.viewportWidth=r.width,this.viewportHeight=r.height,this.ensureCommandEncoder();const l=r.msaa&&r.msaaTexture?.view,c=l?r.msaaTexture.view:r.texture.view,u=l?r.texture.view:null;if(r.stencil?.view){const a=l&&r.msaaStencil?.view?r.msaaStencil.view:r.stencil.view,h=this.frameBufferManager.createStencilRenderPassDescriptor(c,a,"load","load",u);this.renderPassEncoder=this.commandEncoder.beginRenderPass(h)}else{const a=this.frameBufferManager.createRenderPassDescriptor(c,0,0,0,0,"load",u);this.renderPassEncoder=this.commandEncoder.beginRenderPass(a)}this.nodeRenderPassAtlasIndex=e.index}let n=Math.max(0,e.x),s=Math.max(0,e.y),o=Math.min(e.w,r.width-n),i=Math.min(e.h,r.height-s);if(n=Math.min(n,r.width),s=Math.min(s,r.height),o=Math.max(0,Math.min(o,r.width-n)),i=Math.max(0,Math.min(i,r.height-s)),this.$scissorRect.x=n,this.$scissorRect.y=s,this.$scissorRect.w=o,this.$scissorRect.h=i,this.currentNodeScissor=this.$scissorRect,o>0&&i>0){const l=Math.min(o+1,r.width-n),c=Math.min(i+1,r.height-s);this.renderPassEncoder.setScissorRect(n,s,l,c)}}}ensureNodeAreaCleared(){this.nodeAreaCleared||(this.nodeAreaCleared=!0,this.clearNodeArea())}clearNodeArea(){if(!this.renderPassEncoder)return;const e=this.pipelineManager.getPipeline("node_clear_atlas");if(!e)return;if(!this.nodeClearQuadBuffer){const n=this.device.createBuffer({size:Lc.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});new Float32Array(n.getMappedRange()).set(Lc),n.unmap(),this.nodeClearQuadBuffer=n}const r=this.nodeClearQuadBuffer;this.renderPassEncoder.setPipeline(e),this.renderPassEncoder.setVertexBuffer(0,r),this.renderPassEncoder.draw(6),this.currentNodeScissor&&this.renderPassEncoder.setScissorRect(this.currentNodeScissor.x,this.currentNodeScissor.y,this.currentNodeScissor.w,this.currentNodeScissor.h)}endNodeRendering(){this.currentRenderTarget=null,this.currentNodeScissor=null,this.viewportWidth=this.canvasContext.canvas.width,this.viewportHeight=this.canvasContext.canvas.height}drawFill(){Fm()}drawDisplayObject(e,r,n,s,o,i){const l=le.getRenderMaxSize();im(e,r,n,s,o,i,this.$matrix,this.globalCompositeOperation,this.viewportWidth,this.viewportHeight,l,this.globalAlpha)}drawArraysInstanced(){this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,this.ensureCommandEncoder(),this.$mainAttachmentObject&&(this.useOptimizedInstancing?this.renderPassEncoder=Jm(this.device,this.commandEncoder,this.renderPassEncoder,this.$mainAttachmentObject,this.bufferManager,this.frameBufferManager,this.textureManager,this.pipelineManager,!0,!0):this.renderPassEncoder=Zm(this.device,this.commandEncoder,this.renderPassEncoder,this.$mainAttachmentObject,this.bufferManager,this.frameBufferManager,this.textureManager,this.pipelineManager),this.processComplexBlendQueue())}setOptimizedInstancing(e){this.useOptimizedInstancing=e}isOptimizedInstancingEnabled(){return this.useOptimizedInstancing}processComplexBlendQueue(){this.ensureCommandEncoder(),r0(this.device,this.commandEncoder,this.$mainAttachmentObject,this.frameBufferManager,this.textureManager,this.pipelineManager,this.bufferManager)}clearArraysInstanced(){rs().clear()}drawPixels(e,r){const n=bo(e.index)||Ne();if(!n||!n.texture)return;const s=e.w,o=e.h;if(this.renderPassEncoder&&(this.ensureNodeAreaCleared(),this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,n.msaa&&n.msaaTexture?.view)this.drawPixelsToMsaa(n,e,r,s,o);else{const i=s*4;this.device.queue.writeTexture({texture:n.texture.resource,origin:{x:e.x,y:e.y,z:0}},r,{bytesPerRow:i,rowsPerImage:o,offset:0},{width:s,height:o,depthOrArrayLayers:1})}}drawPixelsToMsaa(e,r,n,s,o){const i=Ro(this.device,s,o),l=s*4;this.device.queue.writeTexture({texture:i},n,{bytesPerRow:l,rowsPerImage:o},{width:s,height:o});const c=this.pipelineManager.getPipeline("bitmap_render_msaa");if(!c){Xt(i);return}const u=this.pipelineManager.getBindGroupLayout("positioned_texture");if(!u){Xt(i);return}const a=this.$uniformData8;a[0]=r.x,a[1]=r.y,a[2]=s,a[3]=o,a[4]=e.width,a[5]=e.height,a[6]=0,a[7]=0;const h=this.bufferManager.acquireAndWriteUniformBuffer(a),d=this.textureManager.createSampler("linear_sampler",!0),g=Eo(i);he[0].resource.buffer=h,he[1].resource=d,he[2].resource=g;const m=this.device.createBindGroup({layout:u,entries:he});this.ensureCommandEncoder(),ar.view=e.msaaTexture.view,ar.resolveTarget=e.texture.view;const f=e.msaaStencil?.view;f?(Vr.view=f,Rt.depthStencilAttachment=Vr):Rt.depthStencilAttachment=void 0;const b=this.commandEncoder.beginRenderPass(Rt);b.setViewport(0,0,e.width,e.height,0,1),b.setScissorRect(r.x,r.y,s,o),b.setPipeline(c),b.setBindGroup(0,m),b.draw(6),b.end(),this.pooledRenderTextures.push(i)}drawElement(e,r,n=!1){const s=bo(e.index)||Ne();if(!s||!s.texture)return;const o=e.w,i=e.h;this.renderPassEncoder&&(this.ensureNodeAreaCleared(),this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,s.msaa&&s.msaaTexture?.view?this.drawElementToMsaa(s,e,r,o,i,n):this.drawElementToTexture(s,e,r,o,i,n)}drawElementToMsaa(e,r,n,s,o,i){const l=Ro(this.device,s,o);this.device.queue.copyExternalImageToTexture({source:n,flipY:i},{texture:l,premultipliedAlpha:!0},{width:s,height:o});const c=this.pipelineManager.getPipeline("bitmap_render_msaa");if(!c){Xt(l);return}const u=this.pipelineManager.getBindGroupLayout("positioned_texture");if(!u){Xt(l);return}const a=this.$uniformData8;a[0]=r.x,a[1]=r.y,a[2]=s,a[3]=o,a[4]=e.width,a[5]=e.height,a[6]=0,a[7]=0;const h=this.bufferManager.acquireAndWriteUniformBuffer(a),d=this.textureManager.createSampler("linear_sampler",!0),g=Eo(l);he[0].resource.buffer=h,he[1].resource=d,he[2].resource=g;const m=this.device.createBindGroup({layout:u,entries:he});this.ensureCommandEncoder(),ar.view=e.msaaTexture.view,ar.resolveTarget=e.texture.view;const f=e.msaaStencil?.view;f?(Vr.view=f,Rt.depthStencilAttachment=Vr):Rt.depthStencilAttachment=void 0;const b=this.commandEncoder.beginRenderPass(Rt);b.setViewport(0,0,e.width,e.height,0,1),b.setScissorRect(r.x,r.y,s,o),b.setPipeline(c),b.setBindGroup(0,m),b.draw(6),b.end(),this.pooledRenderTextures.push(l)}drawElementToTexture(e,r,n,s,o,i){const l=Ro(this.device,s,o);this.device.queue.copyExternalImageToTexture({source:n,flipY:i},{texture:l,premultipliedAlpha:!0},{width:s,height:o});const c=this.pipelineManager.getPipeline("bitmap_render");if(!c){Xt(l);return}const u=this.pipelineManager.getBindGroupLayout("positioned_texture");if(!u){Xt(l);return}const a=this.$uniformData8;a[0]=r.x,a[1]=r.y,a[2]=s,a[3]=o,a[4]=e.width,a[5]=e.height,a[6]=0,a[7]=0;const h=this.bufferManager.acquireAndWriteUniformBuffer(a),d=this.textureManager.createSampler("linear_sampler",!0),g=Eo(l);he[0].resource.buffer=h,he[1].resource=d,he[2].resource=g;const m=this.device.createBindGroup({layout:u,entries:he});this.ensureCommandEncoder(),ar.view=e.texture.view,ar.resolveTarget=void 0;const f=e.stencil?.view;f?(Vr.view=f,Rt.depthStencilAttachment=Vr):Rt.depthStencilAttachment=void 0;const b=this.commandEncoder.beginRenderPass(Rt);b.setViewport(0,0,e.width,e.height,0,1),b.setScissorRect(r.x,r.y,s,o),b.setPipeline(c),b.setBindGroup(0,m),b.draw(6),b.end(),this.pooledRenderTextures.push(l)}applyFilter(e,r,n,s,o,i,l,c,u,a,h){this.drawArraysInstanced(),this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.nodeRenderPassAtlasIndex=-1,this.ensureCommandEncoder(),this.$filterConfig.commandEncoder=this.commandEncoder,this.$filterConfig.mainAttachment=this.$mainAttachmentObject,A0(e,s,o,i,l,c,u,a,h,this.$filterConfig,this.mainTextureView,this.bufferManager)}containerBeginLayer(e,r){this.drawArraysInstanced(),this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null);const n=this.$mainAttachmentObject;this.$containerLayerStack.push(n),this.containerLayerContentSizes.push({width:e,height:r});const s=this.frameBufferManager.createAttachment("container_layer",e,r,n.msaa,!0);this.$mainAttachmentObject=s,this.bind(s)}containerEndLayer(e,r,n,s,o,i,l,c){this.drawArraysInstanced(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder();const u=this.$mainAttachmentObject,a=this.containerLayerContentSizes.pop()||{width:u.width,height:u.height};this.$mainAttachmentObject=this.$containerLayerStack.pop(),this.$filterConfig.commandEncoder=this.commandEncoder,this.$filterConfig.mainAttachment=void 0,O0(u,this.$mainAttachmentObject,"container_layer",e,r,n,s,o,i,l,c,a.width,a.height,this.$filterConfig,this.bufferManager),this.bind(this.$mainAttachmentObject)}containerDrawCachedFilter(e,r,n,s,o,i){if(ee.get(o,"fKey")!==i)return;const c=ee.get(o,"fTexture");if(!c||!c.texture)return;this.drawArraysInstanced(),this.frameStarted||this.beginFrame(),this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder();const u=this.$mainAttachmentObject;if(!u||!u.texture)return;let a=c,h=null;if(!(n[0]===1&&n[1]===1&&n[2]===1&&n[3]===1&&n[4]===0&&n[5]===0&&n[6]===0&&n[7]===0)){h=this.frameBufferManager.createTemporaryAttachment(c.width,c.height);const V=this.pipelineManager.getPipeline("color_transform"),X=this.pipelineManager.getBindGroupLayout("texture_copy");if(V&&X&&h.texture){Et[0]=n[0],Et[1]=n[1],Et[2]=n[2],Et[3]=n[3],Et[4]=n[4],Et[5]=n[5],Et[6]=n[6],Et[7]=0;const Y=Et,W=this.bufferManager.acquireAndWriteUniformBuffer(Y),K=this.textureManager.createSampler("cached_ct_sampler",!1);he[0].resource.buffer=W,he[1].resource=K,he[2].resource=c.texture.view;const q=this.device.createBindGroup({layout:X,entries:he}),ce=this.frameBufferManager.createRenderPassDescriptor(h.texture.view,0,0,0,0,"clear"),te=this.commandEncoder.beginRenderPass(ce);te.setPipeline(V),te.setBindGroup(0,q),te.draw(6,1,0,0),te.end(),a=h}}const g=le.getDevicePixelRatio(),m=Math.sqrt(r[0]*r[0]+r[1]*r[1]),f=Math.sqrt(r[2]*r[2]+r[3]*r[3]),b=s[0]*(m/g),x=s[1]*(f/g),y=Math.floor(b+r[4]),P=Math.floor(x+r[5]),S=u.msaa&&u.msaaTexture?.view;let M;switch(e){case"add":M=S?"filter_output_add_msaa":"filter_output_add";break;case"screen":M=S?"filter_output_screen_msaa":"filter_output_screen";break;case"alpha":M=S?"filter_output_alpha_msaa":"filter_output_alpha";break;case"erase":M=S?"filter_output_erase_msaa":"filter_output_erase";break;default:M=S?"filter_output_msaa":"filter_output";break}const $=this.pipelineManager.getPipeline(M),T=this.pipelineManager.getBindGroupLayout("texture_copy");if(!$||!T)return;const w=this.textureManager.createSampler("cached_filter_sampler",!0),E=this.bufferManager.acquireAndWriteUniformBuffer($n);he[0].resource.buffer=E,he[1].resource=w,he[2].resource=a.texture.view;const F=this.device.createBindGroup({layout:T,entries:he}),A=S?u.msaaTexture.view:u.texture.view,R=S?u.texture.view:null,v=this.frameBufferManager.createRenderPassDescriptor(A,0,0,0,0,"load",R),U=Math.max(0,y),L=Math.max(0,P),D=Math.max(1,a.width),G=Math.max(1,a.height),B=u.width,z=u.height,k=Math.max(1,Math.min(D,B-U)),_=Math.max(1,Math.min(G,z-L));if(k<=0||_<=0||U>=B||L>=z){h&&this.frameBufferManager.releaseTemporaryAttachment(h);return}const I=this.commandEncoder.beginRenderPass(v);I.setPipeline($),I.setBindGroup(0,F),I.setViewport(U,L,D,G,0,1),I.setScissorRect(U,L,k,_),I.draw(6,1,0,0),I.end(),h&&this.frameBufferManager.releaseTemporaryAttachment(h),this.bind(u)}ensureMainTexture(){this.mainTexture||(this.mainTexture=this.canvasContext.getCurrentTexture(),this.mainTextureView=this.mainTexture.createView())}getCurrentTextureView(){return this.currentRenderTarget?this.currentRenderTarget:(this.ensureMainTexture(),this.mainTextureView)}ensureCommandEncoder(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}beginFrame(){this.frameStarted||(this.ensureMainTexture(),this.ensureCommandEncoder(),this.frameStarted=!0,this.frameBufferManager.beginFrame())}addFrameTexture(e){this.pooledTextures.push(e)}endFrame(){if(this.frameStarted){if(this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.bufferManager.dynamicUniform.flush(),this.commandEncoder)try{const e=this.commandEncoder.finish();this.device.queue.submit([e])}catch(e){console.error("Failed to submit frame commands:",e)}this.frameBufferManager.flushPendingReleases(),this.bufferManager.clearFrameBuffers();for(const e of this.frameTextures)e.destroy();this.frameTextures.length=0;for(const e of this.pooledTextures)Ot(e);this.pooledTextures.length=0;for(const e of this.pooledRenderTextures)Xt(e);this.pooledRenderTextures.length=0,Um(),this.fillDynamicBindGroup=null,this.fillDynamicBindGroupBuffer=null,this.commandEncoder=null,this.renderPassEncoder=null,this.currentRenderTarget=null,this.nodeRenderPassAtlasIndex=-1,this.mainTexture=null,this.mainTextureView=null,this.frameStarted=!1}}submit(){this.endFrame()}createNode(e,r){const n=Zp();if(!fn[n]){const i=le.getRenderMaxSize();fn[n]=new Ni(n,i,i)}const o=fn[n].insert(e,r);return o||(wr(n+1),this.createNode(e,r))}removeNode(e){const r=e.index,n=fn[r];n&&n.dispose(e.x,e.y,e.w,e.h)}transferMainCanvas(){if(!this.$mainAttachmentObject||!this.$mainAttachmentObject.texture){this.endFrame();return}this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null),this.ensureCommandEncoder(),this.ensureMainTexture();const e=this.pipelineManager.getPipeline("texture_copy_bgra"),r=this.pipelineManager.getBindGroupLayout("texture_copy");if(!e||!r){console.error("[WebGPU] texture_copy_bgra pipeline not found"),this.endFrame();return}const n=this.$mainAttachmentObject.texture.view;if(!jo||kc!==n){ds||(ds=this.device.createBuffer({size:$n.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.device.queue.writeBuffer(ds,0,$n.buffer,$n.byteOffset,$n.byteLength));const i=this.textureManager.createSampler("transfer_sampler",!1);he[0].resource={buffer:ds},he[1].resource=i,he[2].resource=n,jo=this.device.createBindGroup({layout:r,entries:he}),kc=n}const s=jo;Ic.view=this.mainTextureView;const o=this.commandEncoder.beginRenderPass(E0);o.setPipeline(e),o.setBindGroup(0,s),o.draw(6,1,0,0),o.end(),this.endFrame()}async createImageBitmap(e,r){const n=Ne();if(!n)throw new Error("[WebGPU] Atlas attachment not found");this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null);const o=Math.ceil(e*4/256)*256,i=o*r,l=this.device.createBuffer({size:i,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),c=this.device.createCommandEncoder();if(!n.texture)throw new Error("Attachment texture is null");c.copyTextureToBuffer({texture:n.texture.resource,mipLevel:0,origin:{x:0,y:0,z:0}},{buffer:l,bytesPerRow:o,rowsPerImage:r},{width:e,height:r,depthOrArrayLayers:1}),this.device.queue.submit([c.finish()]),await l.mapAsync(GPUMapMode.READ);const u=l.getMappedRange(),a=new Uint8Array(u),h=new Uint8Array(e*r*4);for(let m=0;m1&&i){const u=\`clip_clear_main_\${Math.min(8,Math.max(1,r))}\`,a=this.pipelineManager.getPipeline(u);if(a){const h=this.frameBufferManager.createStencilRenderPassDescriptor(o,i,"load","load"),d=this.commandEncoder.beginRenderPass(h),g=this.bufferManager.acquireVertexBuffer(Gc.byteLength,Gc);d.setPipeline(a),d.setStencilReference(0),d.setVertexBuffer(0,g),d.draw(6,1,0,0),d.end()}}}}const C0=4;let C;const Vc=t=>{C=t};let qo;const U0=t=>{qo=t};let Qo=0;const G0=()=>Qo;let Zo=0;const L0=()=>Zo;let Jo=!1;const k0=(t,e)=>{Jo=!0,Qo=t,Zo=e},I0=()=>Jo,_0=()=>{qo.width=Qo,qo.height=Zo,Jo=!1},V0=[],Dc=(...t)=>{const e=V0.pop()||[];return t.length&&e.push(...t),e},Dr=(t,e=1)=>({R:(t&16711680)>>16,G:(t&65280)>>8,B:t&255,A:e*255}),D0=async(t,e)=>{if(U0(t),"gpu"in navigator){const r=navigator.gpu,n=await r.requestAdapter();if(!n)throw new Error("WebGPU adapter not available");const s=await n.requestDevice();if(!s)throw new Error("WebGPU device not available");const o=t.getContext("webgpu");if(!o)throw new Error("WebGPU context not available");const i=r.getPreferredCanvasFormat();Vc(new R0(s,o,i,e))}else{const r=t.getContext("webgl2",{stencil:!0,premultipliedAlpha:!0,antialias:!1,depth:!1});if(!r)throw new Error("webgl2 is not supported.");Vc(new ld(r,C0,e))}},N0=(t,e,r=!0)=>{G0()===t&&L0()===e||(k0(t,e),C.resize(t,e,r),r&&ee.reset())},z0=0,X0=1,Y0=2,W0=3,j0=4,H0=5,K0=6,q0=7,Q0=8,Z0=9,J0=10,eg=11,tg=12,rg=13,ng=14,ei=(t,e=!1)=>{let r=0;for(;t.length>r;)switch(t[r++]){case Z0:C.beginPath();break;case z0:C.moveTo(t[r++],t[r++]);break;case Y0:C.lineTo(t[r++],t[r++]);break;case X0:C.quadraticCurveTo(t[r++],t[r++],t[r++],t[r++]);break;case H0:if(e){r+=4;break}C.fillStyle(t[r++]/255,t[r++]/255,t[r++]/255,t[r++]/255);break;case q0:C.fill();break;case K0:if(e){r+=8;break}C.thickness=t[r++],C.caps=t[r++],C.joints=t[r++],C.miterLimit=t[r++],C.strokeStyle(t[r++]/255,t[r++]/255,t[r++]/255,t[r++]/255);break;case Q0:if(e)break;C.stroke();break;case tg:C.closePath();break;case j0:C.arc(t[r++],t[r++],t[r++]);break;case W0:C.bezierCurveTo(t[r++],t[r++],t[r++],t[r++],t[r++],t[r++]);break;case J0:{if(e){r+=1;const a=t[r++];r+=a*5,r+=9,C.fill();break}const n=t[r++],s=Dc(),o=t[r++];for(let a=0;a{switch(t){case 0:return"copy";case 1:return"add";case 2:return"alpha";case 3:return"darken";case 4:return"difference";case 5:return"erase";case 6:return"hardlight";case 7:return"invert";case 8:return"layer";case 9:return"lighten";case 10:return"multiply";case 11:return"normal";case 12:return"overlay";case 13:return"screen";case 14:return"subtract";default:return"normal"}},ti=(t,e)=>{const r=t.subarray(e,e+6);e+=6;const n=t.subarray(e,e+8);e+=8;const s=t.subarray(e,e+4);e+=4;const o=t[e++],i=t[e++],l=t[e++],c=t[e++],u=!!t[e++],a=!!t[e++],h=!!t[e++],d=\`\${t[e++]}\`,g=t[e++],m=t[e++],f=t[e++],b=\`\${t[e++]}\`;let x;if(t[e++]){if(x=ee.get(d,\`\${g}\`),!x)return e}else{const M=u?new Float32Array(28):null;M&&(M.set(t.subarray(e,e+24)),e+=24),C.useGrid(M);const $=t[e++],T=t.subarray(e,e+$);if(h&&!u){const w=Math.ceil(Math.abs(l-o)),E=Math.ceil(Math.abs(c-i));x=C.createNode(w,E),ee.set(d,\`\${g}\`,x);const F=C.currentAttachmentObject,A=C.atlasAttachmentObject;A&&C.bind(A),C.reset(),C.beginNodeRendering(x);const R=A?A.height-x.y-E:0;C.setTransform(1,0,0,1,x.x,R),a?(ei(T),C.drawFill()):C.drawPixels(x,new Uint8Array(T)),C.endNodeRendering(),F&&C.bind(F)}else{const w=Math.ceil(Math.abs(l-o)*m),E=Math.ceil(Math.abs(c-i)*f);x=C.createNode(w,E),ee.set(d,\`\${g}\`,x);const F=C.currentAttachmentObject,A=C.atlasAttachmentObject;A&&C.bind(A),C.reset(),C.beginNodeRendering(x);const R=A?A.height-x.y-E:0;C.setTransform(m,0,0,f,-o*m+x.x,-i*f+R),M&&(M[24]=x.x,M[25]=R),ei(T),C.drawFill(),C.endNodeRendering(),F&&C.bind(F)}e+=$}const P=t[e++];if(!!t[e++]){const M=!!t[e++],$=t.subarray(e,e+4);e+=4;const T=t[e++],w=t.subarray(e,e+T),E=Math.ceil(Math.abs(s[2]-s[0])),F=Math.ceil(Math.abs(s[3]-s[1]));return C.applyFilter(x,b,M,E,F,h,r,n,cr(P),$,w),e+=T,e}if(C.globalAlpha=Math.min(Math.max(0,n[3]+n[7]/255),1),C.imageSmoothingEnabled=!0,C.globalCompositeOperation=cr(P),h&&!u)C.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),C.drawDisplayObject(x,s[0],s[1],s[2],s[3],n);else{const M=Math.atan2(r[1],r[0]),$=Math.atan2(-r[2],r[3]);if(M||$){const T=o*m,w=i*f,E=Math.cos(M),F=Math.sin(M),A=Math.cos($),R=Math.sin($);C.setTransform(E,F,-R,A,T*E-w*R+r[4],T*F+w*A+r[5])}else C.setTransform(1,0,0,1,s[0],s[1]);C.drawDisplayObject(x,s[0],s[1],s[2],s[3],n)}return e},ri=(t,e)=>{const r=t.subarray(e,e+6);e+=6,C.reset(),C.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]);const s=!!t[e++]?new Float32Array(28):null;C.useGrid(s),s&&(s.set(t.subarray(e,e+24)),e+=24);const o=t[e++],i=t.subarray(e,e+o);return ei(i,!0),e+=o,C.clip(),e},Nc=(t,e,r)=>{const n=t.widthTable[e.line]||0,s=e.textFormat,o=s.leftMargin||0;if(!r.wordWrap&&n>r.rawWidth)return Math.max(0,o);const i=s.rightMargin||0;return s.align==="center"||r.autoSize==="center"?Math.max(0,r.rawWidth/2-o-i-n/2-2):s.align==="right"||r.autoSize==="right"?Math.max(0,r.rawWidth-o-n-i-4):Math.max(0,o)},sg=t=>{let e="";return t.italic&&(e+="italic "),t.bold&&(e+="bold "),\`\${e}\${t.size}px '\${t.font}','sans-serif'\`},og=(t,e,r,n)=>{const s=new OffscreenCanvas(e.width,e.height),o=s.getContext("2d");if(!o)return s;const i=Math.min(1,Math.max(r,n));if(e.background||e.border){if(o.beginPath(),o.moveTo(0,0),o.lineTo(e.width,0),o.lineTo(e.width,e.height),o.lineTo(0,e.height),o.lineTo(0,0),e.background){const M=Dr(e.backgroundColor);o.fillStyle=\`rgba(\${M.R},\${M.G},\${M.B},\${M.A})\`,o.fill()}if(e.border){const M=Dr(e.borderColor);o.lineWidth=i,o.strokeStyle=\`rgba(\${M.R},\${M.G},\${M.B},\${M.A})\`,o.stroke()}}if(!t)return s;o.save(),o.beginPath(),o.moveTo(2,2),o.lineTo(e.width-2,2),o.lineTo(e.width-2,e.height-2),o.lineTo(2,e.height-2),o.lineTo(2,2),o.clip();let l=2;if(e.scrollX>0){const M=(e.textWidth+4-e.rawWidth)/e.rawWidth;l+=-e.scrollX*M}let c=2;if(e.scrollY>0){const M=(e.textHeight+2-e.rawHeight)/e.rawHeight;c+=-e.scrollY*M}if(o.setTransform(r,0,0,n,l*r,c*n),o.beginPath(),e.selectIndex>-1&&e.focusIndex>-1){const M=t.textTable.length-1;let $=0,T=0;e.focusIndex<=e.selectIndex?($=Math.min(e.focusIndex,M),T=Math.min(e.selectIndex,M)):($=Math.min(e.selectIndex,M),T=Math.min(e.focusIndex-1,M));const w=t.textTable[$],E=t.lineTable[w.line],F=Nc(t,E,e);let A=0;if($&&w.mode==="text"){let v=$;for(;v;){const U=t.textTable[--v];if(U.mode!=="text")break;A+=U.w}}o.fillStyle="#b4d7ff";let R=0;for(let v=$;v<=T;++v){const U=t.textTable[v];if(U.mode==="text"&&(R+=U.w,v!==T))continue;let L=0;const D=U.mode==="text"?U.line:U.line-1;for(let G=0;G0){const M=(e.textWidth-u)/u;a=e.scrollX*M}const h=u+a,d=e.rawHeight;let g=0;if(e.scrollY>0){const M=(e.textHeight-d)/d;g=e.scrollY*M}const m=d+g;let f=0,b=0,x=0,y=0,P=!1,S=-1;for(let M=0;M-1&&S>e.stopIndex))break;if(P&&$.mode==="text")continue;const T=$.textFormat;if(e.autoSize==="none"){if(b>m)break;if($.mode==="text"&&(a>f+$.w||f>h)){f+=$.w;continue}}const w=Dr(T.color||0);if(o.fillStyle=\`rgba(\${w.R},\${w.G},\${w.B},\${w.A})\`,e.focusVisible&&e.focusIndex===M){const F=f+x+.1;let A=$.line,R=$.y,v=t.ascentTable[A];$.mode!=="text"&&(R=$.mode==="break"?$.h:t.ascentTable[A-1],A>0?(A=$.line-1,v=t.ascentTable[A]):v=$.h),A>0&&t.ascentTable[A]===0&&A++;for(let U=0;Ub+t.heightTable[E]){P=!0;continue}y=t.ascentTable[E],x=Nc(t,$,e),P=!1;break;case"text":{o.beginPath(),o.font=sg(T);const F=f+x,A=b+y;if(T.underline){const R=Dr(T.color||0);o.lineWidth=i,o.strokeStyle=\`rgba(\${R.R},\${R.G},\${R.B},\${R.A})\`,o.beginPath(),o.moveTo(F,A+2),o.lineTo(F+$.w,A+2),o.stroke()}e.thickness&&o.strokeText($.text,F,A),o.fillText($.text,F,A),f+=$.w}break}}if(e.focusVisible&&e.focusIndex>=t.textTable.length){const M=t.textTable[e.focusIndex-1];if(M){const $=Dr(M.textFormat.color||0);o.strokeStyle=\`rgba(\${$.R},\${$.G},\${$.B},\${$.A})\`;const T=f+x+.1,w=b+y;o.beginPath(),M.mode==="text"?o.moveTo(T,w-M.y):o.moveTo(T,w+M.h),o.lineTo(T,w),o.stroke()}}return o.restore(),s},ig=new TextDecoder,ni=(t,e)=>{const r=t.subarray(e,e+6);e+=6;const n=t.subarray(e,e+8);e+=8;const s=t.subarray(e,e+4);e+=4;const o=t[e++],i=t[e++],l=t[e++],c=t[e++],u=\`\${t[e++]}\`,a=t[e++],h=!!t[e++],d=t[e++],g=t[e++],m=\`\${t[e++]}\`;let f;if(t[e++]){if(f=ee.get(u,\`\${a}\`),!f)return e}else{const M=Math.ceil(Math.abs(l-o)*d),$=Math.ceil(Math.abs(c-i)*g),T=!!t[e++];f=T?ee.get(u,\`\${a}\`):C.createNode(M,$),T||ee.set(u,\`\${a}\`,f);const w=t[e++],E=new Uint8Array(t.subarray(e,e+w));e+=w;let F="none";switch(t[e++]){case 0:F="center";break;case 1:F="left";break;case 2:F="none";break;case 3:F="right";break}const A={width:M,height:$,autoSize:F,stopIndex:t[e++],scrollX:t[e++],scrollY:t[e++],textWidth:t[e++],textHeight:t[e++],rawWidth:t[e++],rawHeight:t[e++],focusIndex:t[e++],selectIndex:t[e++],focusVisible:!!t[e++],thickness:t[e++],thicknessColor:t[e++],wordWrap:!!t[e++],border:!!t[e++],borderColor:t[e++],background:!!t[e++],backgroundColor:t[e++],defaultColor:t[e++],defaultSize:t[e++]},R=og(JSON.parse(ig.decode(E)),A,d,g),v=C.currentAttachmentObject,U=C.atlasAttachmentObject;U&&C.bind(U),C.reset(),C.beginNodeRendering(f);const L=U?U.height-f.y-$:0;C.setTransform(1,0,0,1,f.x,L),C.drawElement(f,R),C.endNodeRendering(),v&&C.bind(v)}const x=t[e++];if(!!t[e++]){const M=!!t[e++],$=t.subarray(e,e+4);e+=4;const T=t[e++],w=t.subarray(e,e+T),E=Math.ceil(Math.abs(s[2]-s[0])),F=Math.ceil(Math.abs(s[3]-s[1]));return C.applyFilter(f,m,!!Math.max(+h,+M),E,F,!1,r,n,cr(x),$,w),e+=T,e}C.globalAlpha=Math.min(Math.max(0,n[3]+n[7]/255),1),C.imageSmoothingEnabled=!0,C.globalCompositeOperation=cr(x);const P=Math.atan2(r[1],r[0]),S=Math.atan2(-r[2],r[3]);if(P||S){const M=o*d,$=i*g,T=Math.cos(P),w=Math.sin(P),E=Math.cos(S),F=Math.sin(S);C.setTransform(T,w,-F,E,M*T-$*F+r[4],M*w+$*E+r[5])}else C.setTransform(1,0,0,1,s[0],s[1]);return C.drawDisplayObject(f,s[0],s[1],s[2],s[3],n),e},si=(t,e,r)=>{const n=t.subarray(e,e+6);e+=6;const s=t.subarray(e,e+8);e+=8;const o=t.subarray(e,e+4);e+=4;const i=t[e++],l=t[e++],c=t[e++],u=t[e++],a=\`\${t[e++]}\`,h="0",d=!!t[e++],g=\`\${t[e++]}\`;let m;if(t[e++]){if(m=ee.get(a,\`\${h}\`),!m)return e}else{const y=Math.abs(c-i),P=Math.abs(u-l),S=!!t[e++];if(m=S?ee.get(a,\`\${h}\`):C.createNode(y,P),S||ee.set(a,\`\${h}\`,m),r&&r.length){const M=C.currentAttachmentObject,$=C.atlasAttachmentObject;$&&C.bind($),C.reset(),C.beginNodeRendering(m);const T=$?$.height-m.y-P:0;C.setTransform(1,0,0,1,m.x,T);const w=r.shift();C.drawElement(m,w,!0),C.endNodeRendering(),M&&C.bind(M)}}const b=t[e++];if(!!t[e++]){const y=!!t[e++],P=t.subarray(e,e+4);e+=4;const S=t[e++],M=t.subarray(e,e+S),$=Math.ceil(Math.abs(o[2]-o[0])),T=Math.ceil(Math.abs(o[3]-o[1]));return C.applyFilter(m,g,!!Math.max(+d,+y),$,T,!0,n,s,cr(b),P,M),e+=S,e}return C.globalAlpha=Math.min(Math.max(0,s[3]+s[7]/255),1),C.imageSmoothingEnabled=!0,C.globalCompositeOperation=cr(b),C.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),C.drawDisplayObject(m,o[0],o[1],o[2],o[3],s),e},oi=(t,e)=>{const r=t[e++];for(let n=0;n{let n=0,s=!0;const o=cr(t[e++]),i=!!t[e++];let l=0,c=0,u=!1,a="",h="",d=null,g=null,m=null,f=null;if(i)if(l=t[e++],c=t[e++],u=!!t[e++],u){const y=!!t[e++];if(a=\`\${t[e++]}\`,h=\`\${t[e++]}\`,y)return d=t.subarray(e,e+4),e+=4,m=t.subarray(e,e+6),e+=6,f=t.subarray(e,e+8),e+=8,C.containerDrawCachedFilter(o,m,f,d,a,h),e;d=t.subarray(e,e+4),e+=4,m=t.subarray(e,e+6),e+=6,f=t.subarray(e,e+8),e+=8;const P=t[e++];g=t.subarray(e,e+P),e+=P}else m=t.subarray(e,e+6),e+=6,f=t.subarray(e,e+8),e+=8;i&&C.containerBeginLayer(l,c);const b=!!t[e++];if(b){switch(C.drawArraysInstanced(),C.save(),C.beginMask(),C.setMaskBounds(t[e++],t[e++],t[e++],t[e++]),t[e++]){case 0:e=oi(t,e);break;case 1:e=ri(t,e);break}C.endMask()}const x=t[e++];for(let y=0;x>y;y++){const P=t[e++],S=t[e++];if(n&&P>n&&(s&&(C.restore(),C.leaveMask()),n=0,s=!0),!s)continue;if(S){if(n=S,s=!!t[e++],!s)continue;switch(C.drawArraysInstanced(),C.save(),C.beginMask(),C.setMaskBounds(t[e++],t[e++],t[e++],t[e++]),t[e++]){case 0:e=oi(t,e);break;case 1:e=ri(t,e);break}C.endMask();continue}if(!t[e++])continue;switch(t[e++]){case 0:e=ii(t,e,r);break;case 1:e=ti(t,e);break;case 2:e=ni(t,e);break;case 3:e=si(t,e,r);break}}return(n||b)&&(C.restore(),C.leaveMask()),i&&C.containerEndLayer(o,m,f,u,d,g,a,h),e};let Nr=-1;const ag=(t,e)=>{C.clearTransferBounds();let r=0;const n=t[r++];for(Nr!==n&&(Nr=n,Nr===-1?C.updateBackgroundColor(0,0,0,0):C.updateBackgroundColor((Nr>>16&255)/255,(Nr>>8&255)/255,(Nr&255)/255,1)),C.reset(),C.setTransform(1,0,0,1,0,0),C.fillBackgroundColor();t.length>r;){if(!t[r++])continue;const s=t[r++];switch(s){case 0:r=ii(t,r,e);break;case 1:r=ti(t,r);break;case 2:r=ni(t,r);break;case 3:r=si(t,r,e);break;default:console.error("unknown type",s);break}}C.drawArraysInstanced(),I0()&&_0(),C.transferMainCanvas()},cg=t=>{for(let e=0;e{C.clearTransferBounds();let i=1;C.reset(),C.setTransform(1,0,0,1,0,0);const l=C.$clearColorR,c=C.$clearColorG,u=C.$clearColorB,a=C.$clearColorA;for(C.updateBackgroundColor((n>>16&255)/255,(n>>8&255)/255,(n&255)/255,s),C.fillBackgroundColor();t.length>i;){if(!t[i++])continue;const d=t[i++];switch(d){case 0:i=ii(t,i,o);break;case 1:i=ti(t,i);break;case 2:i=ni(t,i);break;case 3:i=si(t,i,o);break;default:console.error("unknown type",d);break}}C.drawArraysInstanced();const h=await C.createImageBitmap(e,r);return C.updateBackgroundColor(l,c,u,a),h};class ug{state;queue;constructor(){this.state="deactivate",this.queue=[]}async execute(){for(this.state="active";this.queue.length;){const e=this.queue.shift();if(e)switch(e.command){case"render":ag(e.buffer.subarray(0,e.length),e.imageBitmaps),globalThis.postMessage({message:"render",buffer:e.buffer},[e.buffer.buffer]);break;case"resize":N0(e.buffer[0],e.buffer[1],!!e.buffer[2]);break;case"initialize":await D0(e.canvas,e.devicePixelRatio);break;case"removeCache":cg(e.buffer);break;case"cacheClear":ee.reset();break;case"capture":{const r=await lg(e.buffer.subarray(0,e.length),e.width,e.height,e.bgColor,e.bgAlpha,e.imageBitmaps);globalThis.postMessage({message:"capture",buffer:e.buffer,imageBitmap:r},[e.buffer.buffer,r])}break}}this.state="deactivate"}}const ai=new ug;self.addEventListener("message",async t=>{ai.queue.push(t.data),ai.state==="deactivate"&&await ai.execute()})})(); +`,Fn=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",di],{type:"text/javascript;charset=utf-8"});function Ns(e){let t;try{if(t=Fn&&(self.URL||self.webkitURL).createObjectURL(Fn),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(di),{name:e?.name})}}const Ce=new Ns,Ys=e=>{const t=e.transferControlToOffscreen();Ce.postMessage({command:"initialize",canvas:t,devicePixelRatio:window.devicePixelRatio},[t])};class ze{static get AT_TARGET(){return 2}static get BUBBLING_PHASE(){return 3}static get CAPTURING_PHASE(){return 1}}let x=class{type;bubbles;listener;target;currentTarget;eventPhase;_$stopImmediatePropagation;_$stopPropagation;constructor(t,r=!1){this.type=`${t}`,this.bubbles=r,this.target=null,this.currentTarget=null,this.eventPhase=ze.AT_TARGET,this.listener=null,this._$stopImmediatePropagation=!1,this._$stopPropagation=!1}static get ADDED(){return"added"}static get ADDED_TO_STAGE(){return"addedToStage"}static get CHANGE(){return"change"}static get COMPLETE(){return"complete"}static get ENDED(){return"ended"}static get ENTER_FRAME(){return"enterFrame"}static get FRAME_LABEL(){return"frameLabel"}static get INPUT(){return"input"}static get OPEN(){return"open"}static get REMOVED(){return"removed"}static get REMOVED_FROM_STAGE(){return"removedFromStage"}static get RESIZE(){return"resize"}static get SCROLL(){return"scroll"}stopImmediatePropagation(){this._$stopImmediatePropagation=!0}stopPropagation(){this._$stopPropagation=!0}};const q=new Map,Kt=[],Qt=()=>Kt.length?Kt.pop():[],Pe=e=>{10>Kt.length&&(e.length=0,Kt.push(e))};let Ai=null;const We=e=>{Ai=e},jt=()=>Ai;class V extends x{constructor(t,r=!0){return super(t,r),new Proxy(this,{get:(n,i)=>{if(i in n)return n[i];const s=jt();if(s)switch(s.type){case V.KEY_DOWN:case V.KEY_UP:return i in s?$event[i]:void 0;default:return}}})}static get KEY_DOWN(){return"keydown"}static get KEY_UP(){return"keyup"}}const Ws=(e,t,r,n=!1,i=0)=>{let s;switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:(!q.size||!q.has(t))&&q.set(t,Qt()),s=q.get(t);break;default:e._$events||(e._$events=new Map),(!e._$events.size||!e._$events.has(t))&&e._$events.set(t,Qt()),s=e._$events.get(t);break}const a=s.length;let o=0;for(;o1&&s.sort((c,u)=>{switch(!0){case c.priority>u.priority:return-1;case c.priority{switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:return!!(q.size&&q.has(t));default:return!!(e._$events&&e._$events.size&&e._$events.has(t))}},Ks=(e,t,r,n=!1)=>{let i;switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:if(!q.size||!q.has(t))return;i=q.get(t);break;default:if(!e._$events||!e._$events.size||!e._$events.has(t))return;i=e._$events.get(t);break}if(i){for(let s=0;s1&&i.sort((s,a)=>{switch(!0){case s.priority>a.priority:return-1;case s.priority{let n;switch(t){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:if(!q.size||!q.has(t))return;n=q.get(t);break;default:if(!e._$events||!e._$events.size||!e._$events.has(t))return;n=e._$events.get(t);break}if(!n)return;const i=Qt();for(let s=0;s1&&i.sort((s,a)=>{switch(!0){case s.priority>a.priority:return-1;case s.priority{if(e.hasEventListener(t))return!0;if("parent"in e){let r=e.parent;for(;r;){if(r.hasEventListener(t))return!0;if(!("parent"in r))break;r=r.parent}}return!1},zs=(e,t)=>{switch(t.type){case x.ENTER_FRAME:case V.KEY_DOWN:case V.KEY_UP:{if(!q.size||!q.has(t.type))return!1;const r=q.get(t.type);if(!r.length)return!1;for(let n=0;n-1;--i){const s=n[i];for(let a=0;a{if(i in n)return n[i];const s=jt();if(s)switch(s.type){case Ne.FOCUS_IN:case Ne.FOCUS_OUT:return i in s?$event[i]:void 0;default:return}}})}static get FOCUS_IN(){return"focusin"}static get FOCUS_OUT(){return"focusout"}}class Gt extends x{status;responseHeaders;responseURL;constructor(t,r=!1,n=0,i="",s=[]){super(t,r),this.status=n|0,this.responseHeaders=s,this.responseURL=i}static get HTTP_STATUS(){return"httpStatus"}}class Re extends x{text;constructor(t,r=!1,n=""){super(t,r),this.text=`${n}`}static get IO_ERROR(){return"ioError"}}class S extends x{constructor(t,r=!0){return super(t,r),new Proxy(this,{get:(n,i)=>{if(i in n)return n[i];const s=jt();if(s)switch(s.type){case S.POINTER_DOWN:case S.POINTER_MOVE:case S.POINTER_UP:case S.POINTER_LEAVE:case S.POINTER_OVER:case S.POINTER_OUT:return i in s?$event[i]:void 0;default:return}}})}static get DOUBLE_CLICK(){return"dblclick"}static get POINTER_DOWN(){return"pointerdown"}static get POINTER_LEAVE(){return"pointerleave"}static get POINTER_MOVE(){return"pointermove"}static get POINTER_OUT(){return"pointerout"}static get POINTER_OVER(){return"pointerover"}static get POINTER_UP(){return"pointerup"}static get POINTER_CANCEL(){return"pointercancel"}}class Z extends x{bytesLoaded;bytesTotal;constructor(t,r=!1,n=0,i=0){super(t,r),this.bytesLoaded=n|0,this.bytesTotal=i|0}static get PROGRESS(){return"progress"}}class Ae extends x{static get PLAY(){return"play"}static get PLAYING(){return"playing"}static get PAUSE(){return"pause"}static get SEEK(){return"seek"}}class ye extends x{static get UPDATE(){return"jobupdate"}static get STOP(){return"jobstop"}}class qe extends x{constructor(t,r=!0){return super(t,r),new Proxy(this,{get:(n,i)=>{if(i in n)return n[i];const s=jt();if(s&&s.type===qe.WHEEL)return i in s?$event[i]:void 0}})}static get WHEEL(){return"wheel"}}const pi=[],er=e=>{e.size&&e.clear(),pi.push(e)},Hs=()=>pi.pop()||new Map,Js=(e,t,r)=>{r.clear(),e.$timerId!==null&&clearTimeout(e.$timerId);for(const n of t.values()){for(const i of n.values())i&&e.destroy(i);er(n)}t.clear()},Zs=(e,t)=>{if(!(!t||typeof t!="object")&&"canvas"in t){const r=t.canvas,n=r.width,i=r.height;t.clearRect(0,0,n+1,i+1),r.width=r.height=1,e.push(r)}},qs=(e,t,r)=>{if(!e.has(t))return;const n=e.get(t);n.has(r)&&(n.delete(r),n.size||(er(n),e.delete(t)))},js=(e,t,r)=>{if(!t.has(r))return;const n=t.get(r);for(const i of n.values())e.destroy(i);t.delete(r),er(n)},ea=(e,t,r)=>{const n=e.get(t)||null;return n?(n.delete("trash"),n.get(r)||null):null},ta=(e,t,r,n,i=null)=>{t.has(r)||t.set(r,Hs());const s=t.get(r);if(i===null){if(!s.has(n))return;e.destroy(s.get(n)),s.delete(n),s.size||(t.delete(r),er(s));return}s.set(n,i)},ra=(e,t,r="")=>r?e.has(t)?e.get(t).has(r):!1:e.has(t),na=(e,t,r)=>{let n=2166136261,i=e*100|0;return n^=i&255,n=Math.imul(n,16777619),n^=i>>>8&255,n=Math.imul(n,16777619),n^=i>>>16&255,n=Math.imul(n,16777619),n^=i>>>24,n=Math.imul(n,16777619),i=t*100|0,n^=i&255,n=Math.imul(n,16777619),n^=i>>>8&255,n=Math.imul(n,16777619),n^=i>>>16&255,n=Math.imul(n,16777619),n^=i>>>24,n=Math.imul(n,16777619),r&&(i=r*100|0,n^=i&255,n=Math.imul(n,16777619),n^=i>>>8&255,n=Math.imul(n,16777619),n^=i>>>16&255,n=Math.imul(n,16777619),n^=i>>>24,n=Math.imul(n,16777619)),(n>>>0)%16777216},ia=(e,t,r,n)=>{let i=2166136261,s=e*100|0;return i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),s=t*100|0,i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),s=r*100|0,i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),s=n*100|0,i^=s&255,i=Math.imul(i,16777619),i^=s>>>8&255,i=Math.imul(i,16777619),i^=s>>>16&255,i=Math.imul(i,16777619),i^=s>>>24,i=Math.imul(i,16777619),(i>>>0)%16777216},sa=(e,t,r,n)=>{if(r.has(n))return;const i=t.get(n);i&&(i.set("trash",!0),r.set(n,i),e.$timerId!==null&&clearTimeout(e.$timerId),e.$removeCache=!1,e.$timerId=setTimeout(()=>{e.$removeCache=!0,e.$timerId=null},1e3))},aa=(e,t)=>{if(t.size){for(const[r,n]of t)n.has("trash")&&(e.removeById(r),e.$removeIds.push(+r));t.clear(),e.$removeCache=!1}};class oa{_$pool;_$store;_$trash;$timerId;$removeCache;$removeIds;constructor(){this._$pool=[],this._$store=new Map,this._$trash=new Map,this.$timerId=null,this.$removeIds=[],this.$removeCache=!1}reset(){Js(this,this._$store,this._$trash)}destroy(t=null){Zs(this._$pool,t)}getCanvas(){return this._$pool.pop()||document.createElement("canvas")}remove(t,r){qs(this._$store,t,r)}removeTimer(t){sa(this,this._$store,this._$trash,t)}removeTimerScheduledCache(){aa(this,this._$trash)}removeById(t){js(this,this._$store,t)}getById(t){return this._$store.get(t)}get(t,r){return ea(this._$store,t,r)}set(t,r,n=null){ta(this,this._$store,t,r,n)}has(t,r=""){return ra(this._$store,t,r)}generateKeys(t,r,n){return na(t,r,n)}generateFilterKeys(t,r,n,i){return ia(t,r,n,i)}}const O=new oa,ca=e=>{const t=O.getCanvas();t.width=e.width,t.height=e.height;const r=t.getContext("2d",{willReadFrequently:!0});r.drawImage(e,0,0);const n=r.getImageData(0,0,e.width,e.height),i=new Uint8Array(n.data.buffer);return O.destroy(r),i},la=e=>{const t=O.getCanvas();t.width=e.width,t.height=e.height;const r=t.getContext("2d");r.setTransform(1,0,0,1,0,0),r.drawImage(e,0,0);const n=r.getImageData(0,0,e.width,e.height),i=new Uint8Array(n.data.buffer);return O.destroy(r),i};class _e{width;height;buffer;constructor(t=0,r=0){this.width=t|0,this.height=r|0,this.buffer=null}set image(t){if(!t){this.width=0,this.height=0,this.buffer=null;return}this.buffer=ca(t),this.width=t.width,this.height=t.height}set canvas(t){if(!t){this.width=0,this.height=0,this.buffer=null;return}this.buffer=la(t),this.width=t.width,this.height=t.height}clone(){const t=new _e(this.width,this.height);return this.buffer!==null&&(t.buffer=this.buffer.slice()),t}}class ua{static get ADD(){return"add"}static get ALPHA(){return"alpha"}static get DARKEN(){return"darken"}static get DIFFERENCE(){return"difference"}static get ERASE(){return"erase"}static get HARDLIGHT(){return"hardlight"}static get INVERT(){return"invert"}static get LAYER(){return"layer"}static get LIGHTEN(){return"lighten"}static get MULTIPLY(){return"multiply"}static get NORMAL(){return"normal"}static get OVERLAY(){return"overlay"}static get SCREEN(){return"screen"}static get SUBTRACT(){return"subtract"}}const j=e=>{e.changed=!0;let t=e.parent;for(;t&&!t.changed;)t.changed=!0,t=t.parent},ha=(e,t)=>{const r=U.multiply(e._$colorTransform,t._$colorTransform);e._$colorTransform[0]=r[0],e._$colorTransform[1]=r[1],e._$colorTransform[2]=r[2],e._$colorTransform[3]=r[3],e._$colorTransform[4]=r[4],e._$colorTransform[5]=r[5],e._$colorTransform[6]=r[6],e._$colorTransform[7]=r[7],U.release(r)},mi=[],En=(e=1,t=0,r=0,n=1,i=0,s=0)=>{const a=mi.pop()||new Float32Array(6);return a[0]=e,a[1]=t,a[2]=r,a[3]=n,a[4]=i,a[5]=s,a},fa=e=>{mi.push(e)},gi=[],Pn=(e=1,t=1,r=1,n=1,i=0,s=0,a=0,o=0)=>{const c=gi.pop()||new Float32Array(8);return c[0]=e,c[1]=t,c[2]=r,c[3]=n,c[4]=i,c[5]=s,c[6]=a,c[7]=o,c},da=e=>{gi.push(e)},Ee=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)};class U{_$colorTransform;constructor(t=1,r=1,n=1,i=1,s=0,a=0,o=0,c=0){this._$colorTransform=Pn(t,r,n,i,s,a,o,c)}get rawData(){return this._$colorTransform}get alphaMultiplier(){return this._$colorTransform[3]}set alphaMultiplier(t){this._$colorTransform[3]=Ee(t,0,1,1)}get alphaOffset(){return this._$colorTransform[7]}set alphaOffset(t){this._$colorTransform[7]=Ee(t,-255,255,0)}get blueMultiplier(){return this._$colorTransform[2]}set blueMultiplier(t){this._$colorTransform[2]=Ee(t,0,1,1)}get blueOffset(){return this._$colorTransform[6]}set blueOffset(t){this._$colorTransform[6]=Ee(t,-255,255,0)}get greenMultiplier(){return this._$colorTransform[1]}set greenMultiplier(t){this._$colorTransform[1]=Ee(t,0,1,1)}get greenOffset(){return this._$colorTransform[5]}set greenOffset(t){this._$colorTransform[5]=Ee(t,-255,255,0)}get redMultiplier(){return this._$colorTransform[0]}set redMultiplier(t){this._$colorTransform[0]=Ee(t,0,1,1)}get redOffset(){return this._$colorTransform[4]}set redOffset(t){this._$colorTransform[4]=Ee(t,-255,255,0)}clone(){return new U(...this._$colorTransform)}concat(t){ha(this,t)}static multiply(t,r){return Pn(t[0]*r[0],t[1]*r[1],t[2]*r[2],t[3]*r[3],t[0]*r[4]+t[4],t[1]*r[5]+t[5],t[2]*r[6]+t[6],t[3]*r[7]+t[7])}static release(t){da(t)}}const Aa=e=>new T(e._$matrix[0],e._$matrix[1],e._$matrix[2],e._$matrix[3],e._$matrix[4],e._$matrix[5]),pa=(e,t)=>{const r=e._$matrix,n=t._$matrix;let i=r[0]*n[0],s=0,a=0,o=r[3]*n[3],c=r[4]*n[0]+n[4],u=r[5]*n[3]+n[5];(r[1]||r[2]||n[1]||n[2])&&(i+=r[1]*n[2],o+=r[2]*n[1],s+=r[0]*n[1]+r[1]*n[3],a+=r[2]*n[0]+r[3]*n[2],c+=r[5]*n[2],u+=r[4]*n[1]),r[0]=i,r[1]=s,r[2]=a,r[3]=o,r[4]=c,r[5]=u},ma=(e,t)=>{e._$matrix[0]=t._$matrix[0],e._$matrix[1]=t._$matrix[1],e._$matrix[2]=t._$matrix[2],e._$matrix[3]=t._$matrix[3],e._$matrix[4]=t._$matrix[4],e._$matrix[5]=t._$matrix[5]},ga=(e,t,r,n=0,i=0,s=0)=>{e.identity(),e.rotate(n),e.scale(t,r),e.translate(i,s)},ba=(e,t,r,n=0,i=0,s=0)=>{const a=e._$matrix;if(a[0]=t/1638.4,a[3]=r/1638.4,n){const o=Math.cos(n),c=Math.sin(n);a[1]=c*a[3],a[2]=-c*a[0],a[0]*=o,a[3]*=o}else a[1]=0,a[2]=0;a[4]=i+t/2,a[5]=s+r/2},xa=(e,t)=>new se(e.x+t.x,e.y+t.y),ya=e=>new se(e.x,e.y),$a=(e,t)=>{e.x=t.x,e.y=t.y},va=(e,t)=>Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)),wa=(e,t)=>e.x===t.x&&e.y===t.y,Ma=(e,t,r)=>new se(e.x+(t.x-e.x)*(1-r),e.y+(t.y-e.y)*(1-r)),Ba=(e,t)=>{const r=t/e.length;e.x*=r,e.y*=r},Ta=(e,t,r)=>{e.x+=t,e.y+=r},Sa=(e,t)=>new se(e*Math.cos(t),e*Math.sin(t)),Ia=(e,t,r)=>{e.x=t,e.y=r},Ca=(e,t)=>new se(e.x-t.x,e.y-t.y);class se{x;y;constructor(t=0,r=0){this.x=t,this.y=r}get length(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}add(t){return xa(this,t)}clone(){return ya(this)}copyFrom(t){$a(this,t)}static distance(t,r){return va(t,r)}equals(t){return wa(this,t)}static interpolate(t,r,n){return Ma(t,r,n)}normalize(t){Ba(this,t)}offset(t,r){Ta(this,t,r)}static polar(t,r){return Sa(t,r)}setTo(t,r){Ia(this,t,r)}subtract(t){return Ca(this,t)}}const Fa=(e,t)=>new se(t.x*e._$matrix[0]+t.y*e._$matrix[2],t.x*e._$matrix[1]+t.y*e._$matrix[3]),Ea=e=>{e._$matrix[0]=1,e._$matrix[1]=0,e._$matrix[2]=0,e._$matrix[3]=1,e._$matrix[4]=0,e._$matrix[5]=0},Pa=e=>{const t=e._$matrix[0],r=e._$matrix[1],n=e._$matrix[2],i=e._$matrix[3],s=e._$matrix[4],a=e._$matrix[5];if(r===0&&n===0)e._$matrix[0]=1/t,e._$matrix[1]=0,e._$matrix[2]=0,e._$matrix[3]=1/i,e._$matrix[4]=-e._$matrix[0]*s,e._$matrix[5]=-e._$matrix[3]*a;else{const o=t*i-r*n;if(o){const c=1/o;e._$matrix[0]=i*c,e._$matrix[1]=-r*c,e._$matrix[2]=-n*c,e._$matrix[3]=t*c,e._$matrix[4]=-(e._$matrix[0]*s+e._$matrix[2]*a),e._$matrix[5]=-(e._$matrix[1]*s+e._$matrix[3]*a)}}},Ra=(e,t)=>{const r=e._$matrix,n=r[0],i=r[1],s=r[2],a=r[3],o=r[4],c=r[5];r[0]=n*Math.cos(t)-i*Math.sin(t),r[1]=n*Math.sin(t)+i*Math.cos(t),r[2]=s*Math.cos(t)-a*Math.sin(t),r[3]=s*Math.sin(t)+a*Math.cos(t),r[4]=o*Math.cos(t)-c*Math.sin(t),r[5]=o*Math.sin(t)+c*Math.cos(t)},Oa=(e,t,r)=>{const n=e._$matrix;n[0]*=t,n[2]*=t,n[4]*=t,n[1]*=r,n[3]*=r,n[5]*=r},ka=(e,t,r,n,i,s,a)=>{const o=e._$matrix;o[0]=t,o[1]=r,o[2]=n,o[3]=i,o[4]=s,o[5]=a},Ua=(e,t)=>{const r=t.x,n=t.y,i=e._$matrix;return new se(r*i[0]+n*i[2]+i[4],r*i[1]+n*i[3]+i[5])},Ga=(e,t,r)=>{e.tx+=t,e.ty+=r};class T{_$matrix;constructor(t=1,r=0,n=0,i=1,s=0,a=0){this._$matrix=En(t,r,n,i,s,a)}get a(){return this._$matrix[0]}set a(t){this._$matrix[0]=t}get b(){return this._$matrix[1]}set b(t){this._$matrix[1]=t}get c(){return this._$matrix[2]}set c(t){this._$matrix[2]=t}get d(){return this._$matrix[3]}set d(t){this._$matrix[3]=t}get tx(){return this._$matrix[4]}set tx(t){this._$matrix[4]=t}get ty(){return this._$matrix[5]}set ty(t){this._$matrix[5]=t}get rawData(){return this._$matrix}clone(){return Aa(this)}concat(t){pa(this,t)}copyFrom(t){ma(this,t)}createBox(t,r,n=0,i=0,s=0){ga(this,t,r,n,i,s)}createGradientBox(t,r,n=0,i=0,s=0){ba(this,t,r,n,i,s)}deltaTransformPoint(t){return Fa(this,t)}identity(){Ea(this)}invert(){Pa(this)}rotate(t){Ra(this,t)}scale(t,r){Oa(this,t,r)}setTo(t,r,n,i,s,a){ka(this,t,r,n,i,s,a)}transformPoint(t){return Ua(this,t)}translate(t,r){Ga(this,t,r)}static multiply(t,r){const n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],u=r[0],h=r[1],l=r[2],f=r[3],A=r[4],d=r[5];return En(n*u+s*h,i*u+a*h,n*l+s*f,i*l+a*f,n*A+s*d+o,i*A+a*d+c)}static release(t){fa(t)}}const _a=e=>new be(e.x,e.y,e.width,e.height),Da=(e,t,r)=>e.x<=t&&e.y<=r&&e.right>t&&e.bottom>r,La=(e,t)=>e.x<=t.x&&e.y<=t.y&&e.right>t.x&&e.bottom>t.y,Na=(e,t)=>e.x<=t.x&&e.y<=t.y&&e.right>=t.right&&e.bottom>=t.bottom,Ya=(e,t)=>{e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height},Wa=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,Va=(e,t,r)=>{e.x-=t,e.width+=2*t,e.y-=r,e.height+=2*r},Ka=(e,t)=>{e.x-=t.x,e.width+=2*t.x,e.y-=t.y,e.height+=2*t.y},Qa=(e,t)=>{const r=Math.max(e.x,t.x),n=Math.max(e.y,t.y),i=Math.min(e.right,t.right),s=Math.min(e.bottom,t.bottom),a=i-r,o=s-n;return a>0&&o>0?new be(r,n,a,o):new be(0,0,0,0)},Xa=(e,t)=>{const r=Math.max(e.x,t.x),n=Math.max(e.y,t.y),i=Math.min(e.right,t.right),s=Math.min(e.bottom,t.bottom);return i-r>0&&s-n>0},za=e=>e.width<=0||e.height<=0,Ha=(e,t,r)=>{e.x+=t,e.y+=r},Ja=(e,t)=>{e.x+=t.x,e.y+=t.y},Za=e=>{e.x=e.y=e.width=e.height=0},qa=(e,t,r,n,i)=>{e.x=t,e.y=r,e.width=n,e.height=i},ja=(e,t)=>e.isEmpty()?t.clone():t.isEmpty()?e.clone():new be(Math.min(e.x,t.x),Math.min(e.y,t.y),Math.max(e.right-t.left,t.right-e.left),Math.max(e.bottom-t.top,t.bottom-e.top));class be{x;y;width;height;constructor(t=0,r=0,n=0,i=0){this.x=t,this.y=r,this.width=n,this.height=i}get bottom(){return this.y+this.height}set bottom(t){this.height=t-this.y}get bottomRight(){return new se(this.right,this.bottom)}set bottomRight(t){this.right=t.x,this.bottom=t.y}get left(){return this.x}set left(t){this.width=this.right-t,this.x=t}get right(){return this.x+this.width}set right(t){this.width=t-this.x}get size(){return new se(this.width,this.height)}set size(t){this.width=t.x,this.height=t.y}get top(){return this.y}set top(t){this.height=this.bottom-t,this.y=t}get topLeft(){return new se(this.x,this.y)}set topLeft(t){this.left=t.x,this.top=t.y}clone(){return _a(this)}contains(t,r){return Da(this,t,r)}containsPoint(t){return La(this,t)}containsRect(t){return Na(this,t)}copyFrom(t){Ya(this,t)}equals(t){return Wa(this,t)}inflate(t,r){Va(this,t,r)}inflatePoint(t){Ka(this,t)}intersection(t){return Qa(this,t)}intersects(t){return Xa(this,t)}isEmpty(){return za(this)}offset(t,r){Ha(this,t,r)}offsetPoint(t){Ja(this,t)}setEmpty(){Za(this)}setTo(t,r,n,i){qa(this,t,r,n,i)}union(t){return ja(this,t)}}const tr=e=>{if(e.placeObject)return e.placeObject;const t=e.placeId;if(t===-1)return null;const r=e.parent;if(!r)return null;const n=r.loaderInfo;if(!n||!n.data)return null;const i=n.data.characters[r.characterId],s=r.isTimelineEnabled?r.currentFrame:1,a=i.placeMap[s];if(!a||!(t in a))return null;const o=a[t],c=i.placeObjects[o];return c?(e.placeObject=c,c):null},bt=new se,bi=0,xi=1,eo=2,to=3,xt=new Float32Array([1,0,0,1,0,0]);let ro=0;const yi=()=>ro++,$i=[],Pr=[],vi=[],no=[],je=(e=0,t=0,r=0,n=0,i=0,s=0)=>{const a=vi.pop()||new Float32Array(6);return a[0]=e,a[1]=t,a[2]=r,a[3]=n,a[4]=i,a[5]=s,a},Ft=e=>{vi.push(e)},_t=(e=1,t=1,r=1,n=1,i=0,s=0,a=0,o=0)=>{const c=no.pop()||new Float32Array(8);return c[0]=e,c[1]=t,c[2]=r,c[3]=n,c[4]=i,c[5]=s,c[6]=a,c[7]=o,c},wi=[],io=()=>wi.pop()||new Map,so=e=>{e.clear(),wi.push(e)},z=(...e)=>{const t=$i.pop()||[];return e.length&&t.push(...e),t},oe=e=>{e.length&&(e.length=0),$i.push(e)},re=(e,t,r,n)=>{const i=Pr.length?Pr.pop():new Float32Array(4);return i[0]=e,i[1]=t,i[2]=r,i[3]=n,i},k=e=>{Pr.push(e)},ao=e=>{let t=null;switch(e.method.toUpperCase()){case"GET":if(e.data){const n=e.url.split("?");n[1]=n.length===1?e.data.toString():`${n[1]}&${e.data.toString()}`,e.url=n.join("?")}break;case"PUT":case"POST":e.data&&(t=e.data.toString());break}const r=new XMLHttpRequest;if(r.open(e.method,e.url,!0),r.responseType=e.format,r.withCredentials=e.withCredentials,e.event){const n=Object.keys(e.event);for(let i=0;i{const t=z();if(e){const r=e.trim().split(` +`);for(let n=0;nIe?(Ie.fillStyle=e,+`0x${Ie.fillStyle.slice(1)}`):0,me=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)},kr=[],Ur=[],Ue=new Map;let Mi=null;const Bi=e=>{Mi=e},lo=()=>Mi,_=e=>{if(e.$matrix)return e.$matrix.rawData;const t=tr(e);if(!t||!t.matrix)return null;if(!t.typedMatrix){const r=t.matrix;t.typedMatrix=je(r[0],r[1],r[2],r[3],r[4],r[5])}return t.typedMatrix},uo=e=>{const t=_(e);let r=t||xt,n=e.parent;for(;n;){const i=_(n);i&&(r=T.multiply(i,r)),n=n.parent}return new T(r[0],r[1],r[2],r[3],r[4],r[5])},Ve=e=>{if(e.$colorTransform)return e.$colorTransform.rawData;const t=tr(e);if(!t||!t.colorTransform)return null;if(!t.typedColorTransform){const r=t.colorTransform;t.typedColorTransform=_t(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7])}return t.typedColorTransform},ho=e=>{if(e.$alpha!==null)return e.$alpha;if(e.$colorTransform){const r=e.$colorTransform.rawData;return r[3]+r[7]/255}const t=Ve(e);return t?t[3]+t[7]/255:1},fo=(e,t)=>{if(t=me(t,0,1),e.$alpha===t)return;e.$alpha=t;let r=e.$colorTransform;if(!r){const n=Ve(e);r=n?new U(...n):new U}r.alphaMultiplier=t,r.alphaOffset=0,e.$colorTransform=r,j(e)};class Fe{$updated;constructor(){this.$updated=!0}canApplyFilter(){return!0}getBounds(t){return t}}const F=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)},Gr=document.createElement("canvas");Gr.width=Gr.height=1;const Sr=Gr.getContext("2d"),Oe=e=>Sr?(Sr.fillStyle=e,+`0x${Sr.fillStyle.slice(1)}`):0,cn=Math.PI/180,ln=e=>{switch(e){case"full":return 0;case"inner":return 1;case"outer":return 2;default:return 0}},Ti=e=>e.strength>0&&e.distance!==0&&e.blurX>0&&e.blurY>0&&e.quality>0,Si=e=>e.blurX>0&&e.blurY>0&&e.quality>0,Ao=[.5,1.05,1.4,1.55,1.75,1.9,2,2.15,2.2,2.3,2.5,3,3,3.5,3.5],it=(e,t)=>{if(!Si(e))return t;const r=Ao[e.quality-1],n=Math.round(e.blurX*r),i=Math.round(e.blurY*r);return t[0]-=n,t[2]+=n,t[1]-=i,t[3]+=i,t},po=(e,t)=>{if(!Ti(e)||e.type==="inner")return t;it(e,t);const r=e.angle*cn,n=e.distance,i=Math.abs(Math.cos(r)*n),s=Math.abs(Math.sin(r)*n);return t[0]-=i,t[2]+=i,t[1]-=s,t[3]+=s,t},mo=e=>[e.$filterType,e.distance,e.angle,e.highlightColor,e.highlightAlpha,e.shadowColor,e.shadowAlpha,e.blurX,e.blurY,e.strength,e.quality,e.type,e.knockout],go=e=>new Float32Array([e.$filterType,e.distance,e.angle,e.highlightColor,e.highlightAlpha,e.shadowColor,e.shadowAlpha,e.blurX,e.blurY,e.strength,e.quality,ln(e.type),+e.knockout]);class rr extends Fe{$filterType=0;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$highlightColor;_$highlightAlpha;_$shadowColor;_$shadowAlpha;_$strength;_$type;_$knockout;constructor(t=4,r=45,n=16777215,i=1,s=0,a=1,o=4,c=4,u=1,h=1,l="inner",f=!1){super(),this._$distance=4,this._$angle=45,this._$highlightColor=16777215,this._$highlightAlpha=1,this._$blurX=4,this._$blurY=4,this._$quality=1,this._$shadowColor=0,this._$shadowAlpha=1,this._$strength=1,this._$type="inner",this._$knockout=!1,this.blurX=o,this.blurY=c,this.quality=h,this.distance=t,this.angle=r,this.highlightColor=n,this.highlightAlpha=i,this.shadowColor=s,this.shadowAlpha=a,this.strength=u,this.type=l,this.knockout=f}get angle(){return this._$angle}set angle(t){t=F(t%360,-360,360,45),t!==this._$angle&&(this._$angle=t,this.$updated=!0)}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get distance(){return this._$distance}set distance(t){t=F(+t,-255,255,4),t!==this._$distance&&(this._$distance=t,this.$updated=!0)}get highlightAlpha(){return this._$highlightAlpha}set highlightAlpha(t){t=F(+t,0,1,0),t!==this._$highlightAlpha&&(this._$highlightAlpha=t,this.$updated=!0)}get highlightColor(){return this._$highlightColor}set highlightColor(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,16777215),t!==this._$highlightColor&&(this._$highlightColor=t,this.$updated=!0)}get knockout(){return this._$knockout}set knockout(t){t=!!t,t!==this._$knockout&&(this._$knockout=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}get shadowAlpha(){return this._$shadowAlpha}set shadowAlpha(t){t=F(t,0,1,0),t!==this._$shadowAlpha&&(this._$shadowAlpha=t,this.$updated=!0)}get shadowColor(){return this._$shadowColor}set shadowColor(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,0),t!==this._$shadowColor&&(this._$shadowColor=t,this.$updated=!0)}get strength(){return this._$strength}set strength(t){t=F(t|0,0,255,0),t!==this._$strength&&(this._$strength=t,this.$updated=!0)}get type(){return this._$type}set type(t){if(t=`${t}`.toLowerCase(),t!==this._$type){switch(t){case"inner":case"outer":case"full":break;default:return}this._$type=t,this.$updated=!0}}clone(){return new rr(this._$distance,this._$angle,this._$highlightColor,this._$highlightAlpha,this._$shadowColor,this._$shadowAlpha,this._$blurX,this._$blurY,this._$strength,this._$quality,this._$type,this._$knockout)}toArray(){return mo(this)}toNumberArray(){return go(this)}canApplyFilter(){return Ti(this)}getBounds(t){return po(this,t)}}const bo=e=>[e.$filterType,e.blurX,e.blurY,e.quality],xo=e=>new Float32Array([e.$filterType,e.blurX,e.blurY,e.quality]);class nr extends Fe{$filterType=1;_$blurX;_$blurY;_$quality;constructor(t=4,r=4,n=1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this.blurX=t,this.blurY=r,this.quality=n}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}clone(){return new nr(this._$blurX,this._$blurY,this._$quality)}toArray(){return bo(this)}toNumberArray(){return xo(this)}canApplyFilter(){return Si(this)}getBounds(t){return it(this,t)}}const yo=e=>[e.$filterType,e.matrix],$o=e=>new Float32Array([e.$filterType,...e.matrix]);class ir extends Fe{$filterType=2;_$matrix;constructor(t=null){super(),this._$matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],t&&t.length===20&&(this.matrix=t)}get matrix(){return this._$matrix}set matrix(t){if(this._$matrix!==t&&!(!Array.isArray(t)||t.length!==20)){for(let r=0;r<20;r++)if(t[r]!==this._$matrix[r]){this.$updated=!0;break}this.$updated&&(this._$matrix=t)}}clone(){return new ir(this._$matrix)}toArray(){return yo(this)}toNumberArray(){return $o(this)}}const vo=e=>e.matrix!==null&&e.matrixX*e.matrixY===e.matrix.length,wo=e=>[e.$filterType,e.matrixX,e.matrixY,e.matrix,e.divisor,e.bias,e.preserveAlpha,e.clamp,e.color,e.alpha],Mo=e=>{const t=e.matrix||[];return new Float32Array([e.$filterType,e.matrixX,e.matrixY,...t,e.divisor,e.bias,+e.preserveAlpha,+e.clamp,e.color,e.alpha])};class sr extends Fe{$filterType=3;_$matrixX;_$matrixY;_$matrix;_$divisor;_$bias;_$preserveAlpha;_$clamp;_$color;_$alpha;constructor(t=0,r=0,n=null,i=1,s=0,a=!0,o=!0,c=0,u=0){super(),this._$matrixX=0,this._$matrixY=0,this._$matrix=null,this._$divisor=1,this._$bias=0,this._$preserveAlpha=!0,this._$clamp=!0,this._$color=0,this._$alpha=0,this.matrixX=t,this.matrixY=r,this.matrix=n,this.divisor=i,this.bias=s,this.preserveAlpha=a,this.clamp=o,this.color=c,this.alpha=u}get alpha(){return this._$alpha}set alpha(t){t=F(+t,0,1,0),t!==this._$alpha&&(this._$alpha=t,this.$updated=!0)}get bias(){return this._$bias}set bias(t){t|=0,t!==this._$bias&&(this._$bias=t,this.$updated=!0)}get clamp(){return this._$clamp}set clamp(t){t=!!t,t!==this._$clamp&&(this._$clamp=t,this.$updated=!0)}get color(){return this._$color}set color(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,0),t!==this._$color&&(this._$color=t,this.$updated=!0)}get divisor(){return this._$divisor}set divisor(t){t|=0,t!==this._$divisor&&(this._$divisor=t,this.$updated=!0)}get matrix(){return this._$matrix}set matrix(t){this._$matrix!==t&&(this._$matrix=t,this.$updated=!0)}get matrixX(){return this._$matrixX}set matrixX(t){t=F(t|0,0,15,0)|0,t!==this._$matrixX&&(this._$matrixX=t,this.$updated=!0)}get matrixY(){return this._$matrixY}set matrixY(t){t=F(t|0,0,15,0)|0,t!==this._$matrixY&&(this._$matrixY=t,this.$updated=!0)}get preserveAlpha(){return this._$preserveAlpha}set preserveAlpha(t){t=!!t,t!==this._$preserveAlpha&&(this._$preserveAlpha=t,this.$updated=!0)}clone(){return new sr(this._$matrixX,this._$matrixY,this._$matrix?this._$matrix.slice():null,this._$divisor,this._$bias,this._$preserveAlpha,this._$clamp,this._$color,this._$alpha)}toArray(){return wo(this)}toNumberArray(){return Mo(this)}canApplyFilter(){return vo(this)}}const Bo=e=>e.bitmapBuffer!==null&&e.componentX>0&&e.componentY>0&&e.scaleX!==0&&e.scaleY!==0,To=e=>[e.$filterType,e.bitmapBuffer?Array.from(e.bitmapBuffer):null,e.bitmapWidth,e.bitmapHeight,e.mapPointX,e.mapPointY,e.componentX,e.componentY,e.scaleX,e.scaleY,e.mode,e.color,e.alpha],So=e=>{let t=2;switch(e.mode){case"clamp":t=0;break;case"color":t=1;break;case"wrap":t=2;break;case"ignore":t=3;break;default:t=2;break}const r=e.bitmapBuffer||new Uint8Array,n=[e.$filterType,r.length];for(let i=0;i[e.$filterType,e.distance,e.angle,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,e.inner,e.knockout,e.hideObject],Co=e=>new Float32Array([e.$filterType,e.distance,e.angle,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,+e.inner,+e.knockout,+e.hideObject]),Ii=e=>e.alpha>0&&e.strength!==0&&e.blurX>0&&e.blurY>0&&e.quality>0,Fo=(e,t)=>{if(!Ii(e)||e.inner)return t;it(e,t);const r=e.angle*cn,n=e.distance,i=Math.cos(r)*n,s=Math.sin(r)*n;return t[0]=Math.min(t[0],i),i>0&&(t[2]+=i),t[1]=Math.min(t[1],s),s>0&&(t[3]+=s),t};class or extends Fe{$filterType=5;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$color;_$alpha;_$strength;_$inner;_$knockout;_$hideObject;constructor(t=4,r=45,n=0,i=1,s=4,a=4,o=1,c=1,u=!1,h=!1,l=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$distance=4,this._$angle=45,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this._$hideObject=!1,this.blurX=s,this.blurY=a,this.quality=c,this.distance=t,this.angle=r,this.color=n,this.alpha=i,this.strength=o,this.inner=u,this.knockout=h,this.hideObject=l}get alpha(){return this._$alpha}set alpha(t){t=F(+t,0,1,0),t!==this._$alpha&&(this._$alpha=t,this.$updated=!0)}get angle(){return this._$angle}set angle(t){t=F(t%360,-360,360,45),t!==this._$angle&&(this._$angle=t,this.$updated=!0)}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get color(){return this._$color}set color(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,0),t!==this._$color&&(this._$color=t,this.$updated=!0)}get distance(){return this._$distance}set distance(t){t=F(+t,-255,255,4),t!==this._$distance&&(this._$distance=t,this.$updated=!0)}get hideObject(){return this._$hideObject}set hideObject(t){t=!!t,t!==this._$hideObject&&(this._$hideObject=t,this.$updated=!0)}get inner(){return this._$inner}set inner(t){t=!!t,t!==this._$inner&&(this._$inner=t,this.$updated=!0)}get knockout(){return this._$knockout}set knockout(t){t=!!t,t!==this._$knockout&&(this._$knockout=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}get strength(){return this._$strength}set strength(t){t=F(t|0,0,255,0),t!==this._$strength&&(this._$strength=t,this.$updated=!0)}clone(){return new or(this._$distance,this._$angle,this._$color,this._$alpha,this._$blurX,this._$blurY,this._$strength,this._$quality,this._$inner,this._$knockout,this._$hideObject)}toArray(){return Io(this)}toNumberArray(){return Co(this)}canApplyFilter(){return Ii(this)}getBounds(t){return Fo(this,t)}}const Eo=e=>[e.$filterType,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,e.inner,e.knockout],Po=e=>new Float32Array([e.$filterType,e.color,e.alpha,e.blurX,e.blurY,e.strength,e.quality,+e.inner,+e.knockout]),Ci=e=>e.alpha>0&&e.strength!==0&&e.blurX>0&&e.blurY>0&&e.quality>0,Ro=(e,t)=>!Ci(e)||e.inner?t:it(e,t);class cr extends Fe{$filterType=6;_$blurX;_$blurY;_$quality;_$color;_$alpha;_$strength;_$inner;_$knockout;constructor(t=0,r=1,n=4,i=4,s=1,a=1,o=!1,c=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$color=0,this._$alpha=1,this._$strength=1,this._$inner=!1,this._$knockout=!1,this.blurX=n,this.blurY=i,this.quality=a,this.color=t,this.alpha=r,this.strength=s,this.inner=o,this.knockout=c}get alpha(){return this._$alpha}set alpha(t){t=F(+t,0,1,0),t!==this._$alpha&&(this._$alpha=t,this.$updated=!0)}get blurX(){return this._$blurX}set blurX(t){t=F(+t,0,255,0),t!==this._$blurX&&(this._$blurX=t,this.$updated=!0)}get blurY(){return this._$blurY}set blurY(t){t=F(+t,0,255,0),t!==this._$blurY&&(this._$blurY=t,this.$updated=!0)}get color(){return this._$color}set color(t){t=F(typeof t=="string"?Oe(t):t,0,16777215,4),t!==this._$color&&(this._$color=t,this.$updated=!0)}get inner(){return this._$inner}set inner(t){t=!!t,t!==this._$inner&&(this._$inner=t,this.$updated=!0)}get knockout(){return this._$knockout}set knockout(t){t=!!t,t!==this._$knockout&&(this._$knockout=t,this.$updated=!0)}get quality(){return this._$quality}set quality(t){t=F(t|0,0,15,1),t!==this._$quality&&(this._$quality=t,this.$updated=!0)}get strength(){return this._$strength}set strength(t){t=F(t|0,0,255,0),t!==this._$strength&&(this._$strength=t,this.$updated=!0)}clone(){return new cr(this._$color,this._$alpha,this._$blurX,this._$blurY,this._$strength,this._$quality,this._$inner,this._$knockout)}toArray(){return Eo(this)}toNumberArray(){return Po(this)}canApplyFilter(){return Ci(this)}getBounds(t){return Ro(this,t)}}const Fi=e=>e.strength>0&&e.distance>0&&e.alphas!==null&&e.ratios!==null&&e.colors!==null&&e.blurX>0&&e.blurY>0&&e.quality>0,Oo=e=>[e.$filterType,e.distance,e.angle,e.colors,e.alphas,e.ratios,e.blurX,e.blurY,e.strength,e.quality,e.type,e.knockout],ko=e=>{const t=e.colors?e.colors:[],r=e.alphas?e.alphas:[],n=e.ratios?e.ratios:[];return new Float32Array([e.$filterType,e.distance,e.angle,t.length,...t,r.length,...r,n.length,...n,e.blurX,e.blurY,e.strength,e.quality,ln(e.type),+e.knockout])},Uo=(e,t)=>{if(!Fi(e)||e.type==="inner")return t;it(e,t);const r=e.angle*cn,n=e.distance,i=Math.abs(Math.cos(r)*n),s=Math.abs(Math.sin(r)*n);return t[0]-=i,t[2]+=i,t[1]-=s,t[3]+=s,t};class lr extends Fe{$filterType=7;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$colors;_$alphas;_$ratios;_$strength;_$type;_$knockout;constructor(t=4,r=45,n=null,i=null,s=null,a=4,o=4,c=1,u=1,h="inner",l=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="inner",this._$knockout=!1,this.blurX=a,this.blurY=o,this.quality=u,this.distance=t,this.angle=r,this.colors=n,this.alphas=i,this.ratios=s,this.strength=c,this.type=h,this.knockout=l}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(Array.isArray(t))for(let r=0;r[e.$filterType,e.distance,e.angle,e.colors,e.alphas,e.ratios,e.blurX,e.blurY,e.strength,e.quality,e.type,e.knockout],Ei=e=>e.strength>0&&e.distance>0&&e.alphas!==null&&e.ratios!==null&&e.colors!==null&&e.blurX>0&&e.blurY>0&&e.quality>0,_o=e=>{const t=e.colors?e.colors:[],r=e.alphas?e.alphas:[],n=e.ratios?e.ratios:[];return new Float32Array([e.$filterType,e.distance,e.angle,t.length,...t,r.length,...r,n.length,...n,e.blurX,e.blurY,e.strength,e.quality,ln(e.type),+e.knockout])},Do=(e,t)=>!Ei(e)||e.type==="inner"?t:it(e,t);class ur extends Fe{$filterType=8;_$blurX;_$blurY;_$quality;_$distance;_$angle;_$colors;_$alphas;_$ratios;_$strength;_$type;_$knockout;constructor(t=4,r=45,n=null,i=null,s=null,a=4,o=4,c=1,u=1,h="outer",l=!1){super(),this._$blurX=4,this._$blurY=4,this._$quality=1,this._$distance=4,this._$angle=45,this._$colors=null,this._$alphas=null,this._$ratios=null,this._$strength=1,this._$type="outer",this._$knockout=!1,this.blurX=a,this.blurY=o,this.quality=u,this.distance=t,this.angle=r,this.colors=n,this.alphas=i,this.ratios=s,this.strength=c,this.type=h,this.knockout=l}get alphas(){return this._$alphas}set alphas(t){if(t!==this._$alphas){if(Array.isArray(t))for(let r=0;r{const t=z();for(let r=0;r{if(e.$filters)return e.$filters;const t=tr(e);return t&&t.surfaceFilterList?(t.filters||(t.filters=Lo(t.surfaceFilterList)),t.filters):null},Yo=(e,t)=>{e.$filters=t,j(e)},Wo=e=>{if(e.$blendMode)return e.$blendMode;const t=tr(e);return t&&t.blendMode?t.blendMode:"normal"},Vo=(e,t)=>{e.$blendMode!==t&&(e.$blendMode=t,j(e))},Ko=180/Math.PI,Qo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);return t?Math.atan2(t[1],t[0])*Ko:0},Xo=Math.PI/180,zo=(e,t)=>{if(t=me(t%360,-360,360,0),e.$rotation===t)return;let r=e.$matrix;if(!r){const s=_(e);e.$matrix=r=s?new T(...s):new T}const n=Math.sqrt(r.a*r.a+r.b*r.b),i=Math.sqrt(r.c*r.c+r.d*r.d);if(t===0)r.a=n,r.b=0,r.c=0,r.d=i;else{let s=Math.atan2(r.b,r.a),a=Math.atan2(-r.c,r.d);const o=t*Xo;a=a+o-s,s=o,r.b=n*Math.sin(s),r.b===1||r.b===-1?r.a=0:r.a=n*Math.cos(s),r.c=-i*Math.sin(a),r.c===1||r.c===-1?r.d=0:r.d=i*Math.cos(a)}e.$scaleX=null,e.$scaleY=null,e.$rotation=t,j(e)},Ho=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);if(!t)return 1;const n=(Math.abs(t[0])>=1e-12?Math.sign(t[0]):Math.sign(t[1]))||1,i=Math.hypot(t[0],t[1]);return Math.round(i*n*1e4)/1e4},Pi=(e,t)=>{t=me(t,-Number.MAX_VALUE,Number.MAX_VALUE,1);const r=Math.round(t*1e4)/1e4;if(e.$scaleX===r)return;let n=e.$matrix;if(!n){const i=_(e);e.$matrix=n=i?new T(...i):new T}if(n.b===0||isNaN(n.b))n.a=r;else{const s=Math.atan2(n.b,n.a),a=Math.hypot(n.a,n.b),o=(Math.abs(n.a)>=1e-12?Math.sign(n.a):Math.sign(n.b))||1,h=(a*o>=0?s:s-Math.PI)+(r<0?Math.PI:0),l=Math.abs(r);n.a=l*Math.cos(h),n.b=l*Math.sin(h)}e.$scaleX=r,e.$rotation=null,j(e)},Jo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);if(!t)return 1;const r=1e-12,n=Math.hypot(t[0],t[1]),i=(Math.abs(t[0])>=r?Math.sign(t[0]):Math.sign(t[1]))||1;return Math.round((t[0]*t[3]-t[1]*t[2])/(n*i)*1e4)/1e4},Ri=(e,t)=>{t=me(t,-Number.MAX_VALUE,Number.MAX_VALUE,1);const r=Math.round(t*1e4)/1e4;if(e.$scaleY===r)return;let n=e.$matrix;if(!n){const i=_(e);e.$matrix=n=i?new T(...i):new T}if(n.c===0||isNaN(n.c))n.d=r;else{const i=Math.max(0,Math.abs(r)),s=1e-12;let a=Math.atan2(n.b,n.a);(n.a<0||Math.abs(n.a)Math.PI&&(a-=2*Math.PI);const o=a+(r<0?Math.PI:0);n.c=-i*Math.sin(o),n.d=i*Math.cos(o)}e.$scaleY=r,e.$rotation=null,j(e)},Zo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);return t?t[4]:0},qo=(e,t)=>{let r=e.$matrix;if(!r){const n=_(e);e.$matrix=r=n?new T(...n):new T}e.$x!==t&&(e.$x=r.tx=t,j(e))},jo=e=>{const t=e.$matrix?e.$matrix.rawData:_(e);return t?t[5]:0},ec=(e,t)=>{let r=e.$matrix;if(!r){const n=_(e);e.$matrix=r=n?new T(...n):new T}e.$y!==t&&(e.$y=r.ty=t,j(e))},he=(e,t,r,n,i)=>{const s=i[0],a=i[1],o=i[2],c=i[3],u=i[4],h=i[5],l=r*s+n*o+u,f=r*s+t*o+u,A=e*s+n*o+u,d=e*s+t*o+u,y=r*a+n*c+h,g=r*a+t*c+h,p=e*a+n*c+h,$=e*a+t*c+h;return re(Math.min(l,f,A,d),Math.min(y,g,p,$),Math.max(l,f,A,d),Math.max(y,g,p,$))},Oi=e=>{const t=e.graphics;return re(t.xMin,t.yMin,t.xMax,t.yMax)},wt=(e,t=null)=>{const r=Oi(e),n=_(e);if(!n){if(t){const s=he(r[0],r[1],r[2],r[3],t);return k(r),s}return r}const i=he(r[0],r[1],r[2],r[3],t?T.multiply(t,n):n);return k(r),i},ki=e=>re(0,0,e.videoWidth,e.videoHeight),Mt=(e,t=null)=>{const r=ki(e),n=_(e);if(!n){if(t){const s=he(r[0],r[1],r[2],r[3],t);return k(r),s}return r}const i=he(r[0],r[1],r[2],r[3],t?T.multiply(t,n):n);return k(r),i},Ui=e=>re(e.xMin,e.yMin,e.xMax,e.yMax),Bt=(e,t=null)=>{const r=Ui(e),n=_(e);if(!n){if(t){const s=he(r[0],r[1],r[2],r[3],t);return k(r),s}return r}const i=he(r[0],r[1],r[2],r[3],t?T.multiply(t,n):n);return k(r),i},yt=(e,t=null)=>{const r=e.children;if(!r.length)return re(0,0,0,0);const n=_(e),i=n?t?T.multiply(t,n):n:t,s=Number.MAX_VALUE;let a=s,o=-s,c=s,u=-s;for(let h=0;h{switch(!0){case e.isContainerEnabled:return yt(e);case e.isShape:return wt(e);case e.isText:return Bt(e);case e.isVideo:return Mt(e);default:return re(0,0,0,0)}},tc=e=>{const t=Gi(e),r=Math.abs(t[2]-t[0]);switch(k(t),!0){case r===0:case r===1/0:case r===-1/0:return 0;default:return Math.round(r*100)/100}},_i=(e,t=null)=>{const r=e.children;if(!r.length)return re(0,0,0,0);const n=_(e);let i=t;n&&(i=t?T.multiply(t,n):n);const s=Number.MAX_VALUE;let a=s,o=-s,c=s,u=-s;for(let h=0;h{switch(!0){case e.isContainerEnabled:return _i(e);case e.isShape:return Oi(e);case e.isText:return Ui(e);case e.isVideo:return ki(e);default:return re(0,0,0,0)}},rc=(e,t)=>{if(t=+t,isNaN(t)||0>t)return;const r=tt(e);let n=Math.abs(r[2]-r[0]);switch(!0){case n===0:case n===1/0:case n===-1/0:return;default:n=Math.round(n*100)/100;break}Pi(e,t/n)},nc=(e,t)=>{const r=e.concatenatedMatrix,n=new se(t.x*r.a+t.y*r.c+r.tx,t.x*r.b+t.y*r.d+r.ty);return T.release(r.rawData),n},ic=(e,t)=>{const r=e.concatenatedMatrix;r.invert();const n=new se(t.x*r.a+t.y*r.c+r.tx,t.x*r.b+t.y*r.d+r.ty);return T.release(r.rawData),n},sc=e=>{const t=Gi(e),r=Math.abs(t[3]-t[1]);switch(k(t),!0){case r===0:case r===1/0:case r===-1/0:return 0;default:return Math.round(r*100)/100}},ac=(e,t)=>{if(t=+t,isNaN(t)||0>t)return;const r=tt(e);let n=Math.abs(r[3]-r[1]);switch(!0){case n===0:case n===1/0:case n===-1/0:return;default:n=Math.round(n*100)/100;break}Ri(e,t/n)},oc=e=>{const t=e.parent;t&&t.removeChild(e)},cc=(e,t=null)=>{const r=e.concatenatedMatrix,n=tt(e),i=he(n[0],n[1],n[2],n[3],r.rawData);if(k(n),T.release(r.rawData),!t){const c=new be(i[0],i[1],Math.abs(i[2]-i[0]),Math.abs(i[3]-i[1]));return k(i),c}const s=t.concatenatedMatrix;s.invert();const a=he(i[0],i[1],i[2],i[3],s.rawData);k(i),T.release(s.rawData);const o=new be(a[0],a[1],Math.abs(a[2]-a[0]),Math.abs(a[3]-a[1]));return k(a),o},lc=(e,t)=>{const r=tt(e),n=e.concatenatedMatrix,i=he(r[0],r[1],r[2],r[3],n.rawData);k(r),T.release(n.rawData);const s=tt(t),a=t.concatenatedMatrix,o=he(s[0],s[1],s[2],s[3],a.rawData);k(s),T.release(a.rawData);const c=Math.max(i[0],o[0]),u=Math.max(i[1],o[1]),h=Math.min(i[2],o[2]),l=Math.min(i[3],o[3]);return k(i),k(o),h-c>=0&&l-u>=0};class Xt{_$bitmapData;_$matrix;_$repeat;_$smooth;constructor(t,r=null,n=!0,i=!1){this._$bitmapData=t,this._$matrix=r,this._$repeat=n,this._$smooth=i}clone(){return new Xt(this._$bitmapData.clone(),this._$matrix?this._$matrix.clone():null,this._$repeat,this._$smooth)}toArray(){return z(this._$bitmapData,this._$matrix,this._$repeat,this._$smooth)}}class zt{_$type;_$colors;_$alphas;_$ratios;_$matrix;_$spreadMethod;_$interpolationMethod;_$focalPointRatio;_$colorStops;constructor(t,r,n,i,s=null,a="pad",o="rgb",c=0){this._$type=t,this._$colors=r,this._$alphas=n,this._$ratios=i,this._$matrix=s,this._$spreadMethod=a,this._$interpolationMethod=o,this._$focalPointRatio=c,this._$colorStops=z()}get colorStops(){if(!this._$colorStops.length){const t=Math.min(Math.min(this._$alphas.length,this._$colors.length),this._$ratios.length);for(let r=0;r>>16&255,G:i>>>8&255,B:i&255,A:this._$alphas[r]*255&255}}}return this._$colorStops}toArray(){return z(this._$type,this.colorStops,this._$matrix?this._$matrix.rawData:xt,this._$spreadMethod,this._$interpolationMethod,this._$focalPointRatio)}clone(){return new zt(this._$type,this._$colors.slice(),this._$alphas.slice(),this._$ratios.slice(),this._$matrix?this._$matrix.clone():null,this._$spreadMethod,this._$interpolationMethod,this._$focalPointRatio)}}const uc=(e,t=0,r=0)=>{e.xMin=Math.min(e.xMin,t),e.xMax=Math.max(e.xMax,t),e.yMin=Math.min(e.yMin,r),e.yMax=Math.max(e.yMax,r)},Rn=(e,t=0,r=0,n=0,i=0,s=0,a="none")=>{e.xMin=Math.min(e.xMin,Math.min(t,n)),e.xMax=Math.max(e.xMax,Math.max(t,n)),e.yMin=Math.min(e.yMin,Math.min(r,i)),e.yMax=Math.max(e.yMax,Math.max(r,i));const o=n-t,c=i-r,u=Math.sqrt(o*o+c*c);if(!u)return;const h=o/u,l=c/u,f=-l,A=h,d=s/2,y=Math.min(t+f*d,t-f*d,n+f*d,n-f*d),g=Math.max(t+f*d,t-f*d,n+f*d,n-f*d),p=Math.min(r+A*d,r-A*d,i+A*d,i-A*d),$=Math.max(r+A*d,r-A*d,i+A*d,i-A*d);if(e.xMin=Math.min(e.xMin,y),e.xMax=Math.max(e.xMax,g),e.yMin=Math.min(e.yMin,p),e.yMax=Math.max(e.yMax,$),a==="round"||a==="square"){const w=t+d*-h,I=r+d*-l,P=Math.min(w+d*h+d*f,w-d*h+d*f,w+d*h-d*f,w-d*h-d*f),W=Math.max(w+d*h+d*f,w-d*h+d*f,w+d*h-d*f,w-d*h-d*f),C=Math.min(I+d*l+d*A,I+d*l-d*A,I-d*l-d*A,I-d*l+d*A),R=Math.max(I+d*l+d*A,I+d*l-d*A,I-d*l-d*A,I-d*l+d*A);e.xMin=Math.min(e.xMin,P),e.xMax=Math.max(e.xMax,W),e.yMin=Math.min(e.yMin,C),e.yMax=Math.max(e.yMax,R)}},ot=(e,t,r=0,n=0,i=0,s="none",...a)=>{for(let o=0;o{e.isConfirmed=!1,t&&n&&n.push(...s),r&&i&&i.push(...s)},hc=(e,t,r,n,i)=>{t=+t||0,r=+r||0,n=+n||0,i=+i||0,n=Math.round(n),i=Math.round(i);const s=n/2,a=i/2,o=t+s,c=r+a,u=t+n,h=r+i,l=4/3*(Math.SQRT2-1),f=l*s,A=l*a;return e.moveTo(o,r).cubicCurveTo(o+f,r,u,c-A,u,c).cubicCurveTo(u,c+A,o+f,h,o,h).cubicCurveTo(o-f,h,t,c+A,t,c).cubicCurveTo(t,c-A,o-f,r,o,r)},fc=(e,t,r,n,i)=>{t=+t||0,r=+r||0,n=+n||0,i=+i||0;const s=Math.round(t+n),a=Math.round(r+i);return e.moveTo(t,r).lineTo(t,a).lineTo(s,a).lineTo(s,r).lineTo(t,r)},dc=(e,t,r,n,i,s,a=NaN)=>{t=+t||0,r=+r||0,n=+n||0,i=+i||0,s=+s||0,a=+a||s,n=Math.round(n),i=Math.round(i),s=Math.round(s),a=Math.round(a);const o=s/2,c=a/2,u=4/3*(Math.SQRT2-1),h=u*o,l=u*c,f=t+o,A=t+n,d=A-o,y=r+c,g=r+i,p=g-c;return e.moveTo(f,r).lineTo(d,r).cubicCurveTo(d+h,r,A,y-l,A,y).lineTo(A,p).cubicCurveTo(A,p+l,d+h,g,d,g).lineTo(f,g).cubicCurveTo(f-h,g,t,p+l,t,p).lineTo(t,y).cubicCurveTo(t,y-l,f-h,r,f,r)},Lt=e=>{if(!e)return[];const t=z();for(let r=0;rl.ratio-f.ratio);for(let l=0;l0&&r>0}beginBitmapFill(t,r=null,n=!0,i=!1){return this._$hasFillEnabled&&this.endFill(),this._$fills||(this._$fills=z()),this._$maxAlpha=1,this._$hasFillEnabled=!0,this._$isBeginning=!0,this._$fills.push(M.BEGIN_PATH),this._$fillType=M.BITMAP_FILL,this._$fillBitmap=new Xt(t,r,n,i),this}beginFill(t=0,r=1){this._$hasFillEnabled&&this.endFill(),this._$fills||(this._$fills=z()),typeof t=="string"&&(t=Or(t)),t=me(t,0,16777215,0),r=me(r,0,1,1),this._$maxAlpha=Math.max(this._$maxAlpha,r),this._$hasFillEnabled=!0,this._$isBeginning=!0,this._$fills.push(M.BEGIN_PATH),this._$fillType=M.FILL_STYLE;const n=t>>>16&255,i=t>>>8&255,s=t&255;return this._$fillColor=n<<24|i<<16|s<<8|r*255,this}beginGradientFill(t,r,n,i,s=null,a="pad",o="rgb",c=0){this._$hasFillEnabled&&this.endFill(),this._$fills||(this._$fills=z());for(let u=0;uthis._$fills.length)return this;switch(this.$recodes||(this.$recodes=z()),(this._$fills[2]!==this._$fills[this._$fills.length-2]||this._$fills[3]!==this._$fills[this._$fills.length-1])&&this._$fills.push(M.LINE_TO,this._$fills[2],this._$fills[3]),this.$recodes.push(...this._$fills),oe(this._$fills),this._$fills=null,this._$fillType){case M.FILL_STYLE:this.$recodes.push(this._$fillType,this._$fillColor>>>24&255,this._$fillColor>>>16&255,this._$fillColor>>>8&255,this._$fillColor&255,M.END_FILL);break;case M.GRADIENT_FILL:this._$fillGradient&&this.$recodes.push(this._$fillType,...this._$fillGradient.toArray());break;case M.BITMAP_FILL:this._$fillBitmap&&this.$recodes.push(this._$fillType,...this._$fillBitmap.toArray());break}return this._$fillType=0,this._$fillColor=0,this._$fillGradient=null,this._$fillBitmap=null,this._$hasFillEnabled=!1,this}endLine(){if(!this._$hasLineEnabled||!this._$lines)return this;switch(this.$recodes||(this.$recodes=z()),this.$recodes.push(...this._$lines),oe(this._$lines),this._$lines=null,this._$lineType){case M.STROKE_STYLE:this.$recodes.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,this._$lineColor>>>24&255,this._$lineColor>>>16&255,this._$lineColor>>>8&255,this._$lineColor&255,M.END_STROKE);break;case M.GRADIENT_STROKE:this._$lineGradient&&this.$recodes.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$lineGradient.toArray());break;case M.BITMAP_STROKE:this._$fillBitmap&&this.$recodes.push(this._$lineType,this._$lineWidth,this._$caps,this._$joints,this._$miterLimit,...this._$fillBitmap.toArray());break}return this._$lineType=0,this._$lineWidth=0,this._$lineGradient=null,this._$lineColor=0,this._$caps="none",this._$joints="round",this._$miterLimit=0,this._$hasLineEnabled=!1,this}lineBitmapStyle(t,r=null,n=!0,i=!1){return this._$hasLineEnabled?(this._$lines||(this._$lines=z()),this._$maxAlpha=1,this._$hasLineEnabled=!0,this._$isBeginning=!0,this._$lines.push(M.BEGIN_PATH),this._$lineType=M.BITMAP_STROKE,this._$fillBitmap=new Xt(t,r,n,i),this):this}lineGradientStyle(t,r,n,i,s=null,a="pad",o="rgb",c=0){if(!this._$hasLineEnabled)return this;this._$lines||(this._$lines=z());for(let u=0;u>>16&255,c=r>>>8&255,u=r&255;return this._$lineColor=o<<24|c<<16|u<<8|n*255,this._$lineWidth=t,this._$caps=`${i}`,this._$joints=`${s}`,this._$joints==="miter"&&(this._$miterLimit=a),this}lineTo(t,r){return t=+t||0,r=+r||0,this._$positionX===t&&this._$positionY===r?this:(ot(this,this._$hasLineEnabled,this._$positionX,this._$positionY,this._$lineWidth,this._$caps,t,r),ct(this,this._$hasFillEnabled,this._$hasLineEnabled,this._$fills,this._$lines,M.LINE_TO,t,r),this._$positionX=t,this._$positionY=r,this)}moveTo(t,r){t=+t||0,r=+r||0,this._$positionX=t,this._$positionY=r,ot(this,this._$hasLineEnabled,this._$positionX,this._$positionY,this._$lineWidth,this._$caps,t,r);let n=!1;return this._$hasFillEnabled&&this._$fills&&this._$fills[this._$fills.length-3]===M.MOVE_TO&&(n=!0,this._$fills[this._$fills.length-2]=t,this._$fills[this._$fills.length-1]=r),this._$hasLineEnabled&&this._$lines&&this._$lines[this._$lines.length-3]===M.MOVE_TO&&(n=!0,this._$lines[this._$lines.length-2]=t,this._$lines[this._$lines.length-1]=r),n||ct(this,this._$hasFillEnabled,this._$hasLineEnabled,this._$fills,this._$lines,M.MOVE_TO,t,r),this}get buffer(){if(this.isConfirmed&&this._$buffer)return this._$buffer;this._$hasLineEnabled&&this.endLine(),this._$hasFillEnabled&&this.endFill();const t=Lt(this.$recodes);return this._$buffer=new Float32Array(t),oe(t),this.isConfirmed=!0,this._$buffer}set buffer(t){this._$buffer=t,this.isConfirmed=!0,this._$isBeginning=!0,this._$maxAlpha=1}}const Ac=(e,t,r)=>{for(let n=0;n{const i=e.graphics,s=i.xMax-i.xMin,a=i.yMax-i.yMin;if(s<=0||a<=0)return!1;const o=_(e),c=o?T.multiply(r,o):r;t.beginPath(),t.setTransform(c[0],c[1],c[2],c[3],c[4],c[5]);let u=!1;return i.buffer.length?u=Ac(t,i.buffer,n):(t.moveTo(0,0),t.lineTo(s,0),t.lineTo(s,a),t.lineTo(0,a),t.lineTo(0,0),u=t.isPointInPath(n.x,n.y)),c!==r&&T.release(c),u},Yt=(e,t,r,n)=>{const i=Math.ceil(Math.abs(e.xMax-e.xMin)),s=Math.ceil(Math.abs(e.yMax-e.yMin));if(i<=0||s<=0)return!1;const a=_(e),o=a?T.multiply(r,a):r;return t.setTransform(o[0],o[1],o[2],o[3],o[4],o[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),o!==r&&T.release(o),t.isPointInPath(n.x,n.y)},Wt=(e,t,r,n)=>{const i=e.videoWidth,s=e.videoHeight;if(i<=0||s<=0)return!1;const a=_(e),o=a?T.multiply(r,a):r;return t.beginPath(),t.setTransform(o[0],o[1],o[2],o[3],o[4],o[5]),t.beginPath(),t.moveTo(0,0),t.lineTo(i,0),t.lineTo(i,s),t.lineTo(0,s),t.lineTo(0,0),o!==r&&T.release(o),t.isPointInPath(n.x,n.y)},He=(e,t,r,n,i=!0)=>{const s=e.children;if(!s.length)return!1;const a=_(e),o=a?T.multiply(r,a):r,c=z(),u=z(),h=io();let l=0,f=0;for(let g=0;gl&&(f=0,l=0),f&&h.set(p.instanceId,f),u.push(p))}}const A=e.mouseChildren&&i;if(e.isSprite&&e.hitArea){const g=He(e.hitArea,t,o,n,A);return g&&A&&e.mouseEnabled&&(e.buttonMode&&e.useHandCursor&&(n.pointer="pointer"),n.hit||(n.hit=e)),g}let d=!1;const y=e.mask;if(y){let g=!1;switch(!0){case y.isContainerEnabled:g=He(y,t,o,n,A);break;case y.isShape:g=Nt(y,t,o,n);break;case y.isText:g=Yt(y,t,o,n);break;case y.isVideo:g=Wt(y,t,o,n);break}if(!g)return!1}for(;u.length;){const g=u.pop();if(!g||g.isMask)continue;if(h.has(g.instanceId)){const $=h.get(g.instanceId);if(!$)continue;const w=c[$];if(!w)continue;let I=!1;switch(!0){case w.isContainerEnabled:I=He(w,t,o,n,A);break;case w.isShape:I=Nt(w,t,o,n);break;case w.isText:I=Yt(w,t,o,n);break;case w.isVideo:I=Wt(w,t,o,n);break}if(!I)continue}let p=!1;switch(!0){case g.isContainerEnabled:p=He(g,t,o,n,A);break;case g.isShape:p=Nt(g,t,o,n);break;case g.isText:p=Yt(g,t,o,n);break;case g.isVideo:p=Wt(g,t,o,n);break}if(p){if(d=!0,!A)break;if(g.isInteractive&&g.mouseEnabled){if(n.pointer==="auto")switch(!0){case g.isText:g.type==="input"&&(n.pointer="text");break;case g.isSprite:g.buttonMode&&g.useHandCursor&&(n.pointer="pointer");break;default:n.pointer="pointer";break}n.hit||(n.hit=g);break}}}return oe(c),oe(u),so(h),o!==r&&T.release(o),d},Ge={x:0,y:0,pointer:"",hit:null},pc=(e,t,r,n=!1)=>{if(n){const h=e.parent,l=h?h.concatenatedMatrix.rawData:xt;switch(Ie.setTransform(1,0,0,1,0,0),Ie.beginPath(),Ge.x=t,Ge.y=r,Ge.hit=null,!0){case e.isContainerEnabled:return He(e,Ie,l,Ge);case e.isShape:return Nt(e,Ie,l,Ge);case e.isText:return Yt(e,Ie,l,Ge);case e.isVideo:return Wt(e,Ie,l,Ge);default:return!1}}const i=tt(e),s=_(e),a=he(i[0],i[1],i[2],i[3],s||xt);k(i);const o=new be(a[0],a[1],Math.abs(a[2]-a[0]),Math.abs(a[3]-a[1]));k(a);const c=e.parent,u=c?c.globalToLocal(new se(t,r)):new se(t,r);return o.containsPoint(u)},mc=e=>{const t=_(e);return t?new T(t[0],t[1],t[2],t[3],t[4],t[5]):new T},gc=e=>{const t=Ve(e);return t?new U(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]):new U};class hr extends nt{instanceId;dictionaryId;isSprite;isInteractive;isContainerEnabled;isTimelineEnabled;isShape;isVideo;isText;placeId;placeObject;characterId;clipDepth;name;startFrame;endFrame;changed;$added;$addedToStage;uniqueKey;$matrix;$colorTransform;$filters;$blendMode;$scaleX;$scaleY;$rotation;$x;$y;$alpha;$cache;_$scale9Grid;_$visible;_$variables;isMask;parent;constructor(){super(),this.instanceId=yi(),this.dictionaryId=-1,this.uniqueKey="",this.isSprite=!1,this.isContainerEnabled=!1,this.isTimelineEnabled=!1,this.isShape=!1,this.isVideo=!1,this.isText=!1,this.isInteractive=!1,this.placeId=-1,this.placeObject=null,this.characterId=-1,this.clipDepth=0,this.name="",this.startFrame=1,this.endFrame=0,this.parent=null,this.isMask=!1,this.changed=!0,this.$added=!1,this.$addedToStage=!1,this.$matrix=null,this.$colorTransform=null,this.$filters=null,this.$blendMode=null,this._$visible=!0,this._$scale9Grid=null,this._$variables=null,this.$x=null,this.$y=null,this.$alpha=null,this.$scaleX=null,this.$scaleY=null,this.$rotation=null,this.$cache=null}get concatenatedMatrix(){return uo(this)}get alpha(){return ho(this)}set alpha(t){fo(this,t)}get blendMode(){return Wo(this)}set blendMode(t){Vo(this,t)}get filters(){return No(this)}set filters(t){Yo(this,t)}get dropTarget(){return lo()}get height(){return sc(this)}set height(t){ac(this,t)}get loaderInfo(){return Dt.has(this)?Dt.get(this):null}get colorTransform(){return gc(this)}set colorTransform(t){this.$colorTransform=t}get matrix(){return mc(this)}set matrix(t){this.$matrix=t}get mouseX(){return this.globalToLocal(bt).x}get mouseY(){return this.globalToLocal(bt).y}get root(){return we.has(this)?we.get(this):null}get rotation(){return this.$rotation===null?Qo(this):this.$rotation}set rotation(t){zo(this,t)}get scale9Grid(){return this._$scale9Grid}set scale9Grid(t){this._$scale9Grid!==t&&(this._$scale9Grid=t,j(this))}get scaleX(){return this.$scaleX===null?Ho(this):this.$scaleX}set scaleX(t){Pi(this,t)}get scaleY(){return this.$scaleY===null?Jo(this):this.$scaleY}set scaleY(t){Ri(this,t)}get visible(){return this._$visible}set visible(t){t=!!t,this._$visible!==t&&(this._$visible=t,j(this))}get width(){return tc(this)}set width(t){rc(this,t)}get x(){return this.$x===null?Zo(this):this.$x}set x(t){qo(this,t)}get y(){return this.$y===null?jo(this):this.$y}set y(t){ec(this,t)}getBounds(t=null){return cc(this,t)}globalToLocal(t){return ic(this,t)}hitTestObject(t){return lc(this,t)}hitTestPoint(t,r,n=!1){return pc(this,t,r,n)}localToGlobal(t){return nc(this,t)}getLocalVariable(t){if(!this._$variables)return null;if(this._$variables.has(t))return this._$variables.get(t)}setLocalVariable(t,r){this._$variables||(this._$variables=new Map),this._$variables.set(t,r)}hasLocalVariable(t){return this._$variables?this._$variables.has(t):!1}deleteLocalVariable(t){this._$variables&&this._$variables.has(t)&&(this._$variables.delete(t),this._$variables.size||(this._$variables=null))}getGlobalVariable(t){return Ue.has(t)?Ue.get(t):null}setGlobalVariable(t,r){Ue.set(t,r)}hasGlobalVariable(t){return Ue.has(t)}deleteGlobalVariable(t){Ue.has(t)&&Ue.delete(t)}clearGlobalVariable(){return Ue.clear()}remove(){oc(this)}$syncLoaderInfo(t){Dt.set(this,t)}}const Di=e=>{const t=e.children;for(let r=0;r{e.$addedToStage||!ge.has(e.instanceId)||(e.$addedToStage=!0,e.willTrigger(x.ADDED_TO_STAGE)&&e.dispatchEvent(new x(x.ADDED_TO_STAGE)))},Ni=e=>{const t=e.children;for(let r=0;r{e.$added||(e.$added=!0,e.willTrigger(x.ADDED)&&e.dispatchEvent(new x(x.ADDED,!0)))},On=(e,t,r=-1)=>{const n=t.parent;n&&n.removeChild(t);const i=e.children;return 0>r?i.push(t):i.splice(r,0,t),e.$container=null,t.parent=e,ge.has(e.instanceId)&&(we.set(t,e.root),ge.add(t.instanceId),t.isContainerEnabled&&Di(t)),bc(t),ge.has(e.instanceId)&&(Li(t),t.isContainerEnabled&&Ni(t)),j(t),t},Yi=e=>{const t=e.children;for(let r=0;r{e.$added&&(e.$added=!1,e.willTrigger(x.REMOVED)&&e.dispatchEvent(new x(x.REMOVED,!0)))},Wi=e=>{!e.$addedToStage||!ge.has(e.instanceId)||(e.$addedToStage=!1,e.willTrigger(x.REMOVED_FROM_STAGE)&&e.dispatchEvent(new x(x.REMOVED_FROM_STAGE)),e.uniqueKey&&O.has(e.uniqueKey)&&O.removeTimer(e.uniqueKey))},un=e=>{const t=e.children;for(let r=0;r{const r=t.parent;if(r&&r.instanceId!==e.instanceId)return;const n=e.children,i=n.indexOf(t);i>-1&&n.splice(i,1),e.$container=null,t.hasEventListener(x.ENTER_FRAME)&&t.removeAllEventListener(x.ENTER_FRAME),t.hasEventListener(V.KEY_DOWN)&&t.removeAllEventListener(V.KEY_DOWN),t.hasEventListener(V.KEY_UP)&&t.removeAllEventListener(V.KEY_UP),xc(t),ge.has(e.instanceId)&&(Wi(t),t.isContainerEnabled&&un(t)),ge.has(e.instanceId)&&(we.delete(t),ge.delete(t.instanceId),t.isVideo&&t.pause(),t.isContainerEnabled&&Yi(t)),t.parent=null,j(e)},Vi=(e,t)=>{const r=e.children;return t in r?r[t]:null},yc=(e,t)=>{const r=Vi(e,t);r&&hn(e,r)},$c=(e,t)=>{if(e.instanceId===t.instanceId)return!0;const r=e.children;for(let n=0;n{if(!t)return null;const r=e.children;for(let n=0;n{const r=e.children.slice();if(r.length)for(let n=0;n{const n=e.getChildIndex(t);if(n===-1||n===r)return;const i=e.children;i.splice(n,1),i.splice(r,0,t),j(e)},Bc=(e,t,r)=>{const n=e.getChildIndex(t),i=e.getChildIndex(r);if(n===-1||i===-1)return;const s=e.children;s[n]=r,s[i]=t,j(e)},Tc=(e,t,r)=>{const n=e.children,i=n[t],s=n[r];!i||!s||(n[t]=s,n[r]=i,j(e))};class fn extends hr{mouseEnabled;isInteractive;constructor(){super(),this.isInteractive=!0,this.mouseEnabled=!0}}class dn extends fn{_$children;_$mask;mouseChildren;$container;isContainerEnabled;constructor(){super(),this.isContainerEnabled=!0,this.mouseChildren=!0,this._$mask=null,this._$children=z(),this.$container=null}get children(){return this._$children}get numChildren(){return this.children.length}get mask(){return this._$mask}set mask(t){t!==this._$mask&&(this._$mask&&(this._$mask.isMask=!1,this._$mask=null),t&&(t.isMask=!0,this._$mask=t),j(this))}addChild(t){return On(this,t)}addChildAt(t,r){return On(this,t,r)}contains(t){return $c(this,t)}getChildAt(t){return Vi(this,t)}getChildByName(t){return vc(this,t)}getChildIndex(t){return this.children.indexOf(t)}removeChild(t){hn(this,t)}removeChildAt(t){yc(this,t)}removeChildren(...t){wc(this,t)}setChildIndex(t,r){Mc(this,t,r)}swapChildren(t,r){Bc(this,t,r)}swapChildrenAt(t,r){Tc(this,t,r)}}class Ki extends nt{name;frame;constructor(t,r){super(),this.name=`${t}`,this.frame=r|0}}class Sc extends nt{id;content;data;url;format;constructor(){super(),this.id=yi(),this.url="",this.content=null,this.data=null,this.format="json"}}const Ic=(e,t=!1,r=null)=>{const n=e.parent?e.parent.globalToLocal(bt):e.globalToLocal(bt);e.$lockCenter=t,e.$offsetX=e.x-n.x,e.$offsetY=e.y-n.y,e.$boundedRect=r,Bi(e)},Cc=e=>{e.$lockCenter=!1,e.$offsetX=0,e.$offsetY=0,e.$boundedRect=null,Bi(null)};class An extends dn{buttonMode;useHandCursor;isSprite;hitArea;_$soundTransform;$offsetX=0;$offsetY=0;$lockCenter=!1;$boundedRect=null;constructor(){super(),this.isSprite=!0,this.buttonMode=!1,this.useHandCursor=!0,this.hitArea=null,this.$offsetX=0,this.$offsetY=0,this.$lockCenter=!1,this.$boundedRect=null,this._$soundTransform=null}get soundTransform(){return this._$soundTransform}set soundTransform(t){this._$soundTransform=t}startDrag(t=!1,r=null){Ic(this,t,r)}stopDrag(){Cc(this)}}const Qi=e=>{e.isBitmap=!1,e.$bitmapBuffer=null,e.graphics.clear(),e.uniqueKey!==""&&O.has(e.uniqueKey)&&(O.removeById(e.uniqueKey),O.$removeIds.push(+e.uniqueKey)),j(e)},Xi=(e,t,r,n)=>{Qi(e),e.isBitmap=!0,e.$bitmapBuffer=n,e.graphics.xMin=0,e.graphics.yMin=0,e.graphics.xMax=t,e.graphics.yMax=r},Fc=(e,t)=>{const r=new Image;r.crossOrigin="anonymous",r.addEventListener("load",()=>{const n=r.width,i=r.height,s=O.getCanvas();s.width=n,s.height=i;const a=s.getContext("2d",{willReadFrequently:!0});a.drawImage(r,0,0,n,i),Xi(e,n,i,new Uint8Array(a.getImageData(0,0,n,i).data)),O.destroy(a),e.hasEventListener(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE))}),r.src=t},Ec=(e,t)=>{const r=e.graphics,n=Math.ceil(Math.abs(t.bounds.xMax-t.bounds.xMin)),i=Math.ceil(Math.abs(t.bounds.yMax-t.bounds.yMin));switch(!0){case t.bitmapId>0:{const a=e.loaderInfo.data?.characters[t.bitmapId];if(!a)break;e.isBitmap=!0,a.imageBuffer||(a.imageBuffer=new Uint8Array(a.buffer),a.buffer=null);const o=Math.ceil(Math.abs(a.bounds.xMax-a.bounds.xMin)),c=Math.ceil(Math.abs(a.bounds.yMax-a.bounds.yMin));if(t.grid){if(t.recodes){const u=t.recodes.slice(0);u.splice(-6,6);const h=new _e(o,c);h.buffer=a.imageBuffer,u.push(M.BITMAP_FILL,h,null,!0,!1,9);const l=Lt(u);r.buffer=new Float32Array(l),oe(u),oe(l)}}else if(n===o&&i===c)e.setBitmapBuffer(Math.ceil(Math.abs(a.bounds.xMax-a.bounds.xMin)),Math.ceil(Math.abs(a.bounds.yMax-a.bounds.yMin)),a.imageBuffer);else{const u=new _e(o,c);if(u.buffer=a.imageBuffer,t.recodes)if(t.recodes[t.recodes.length-10]===M.BITMAP_STROKE){const l=t.recodes.slice(0);l.splice(-5,5),l.push(u,null,!0,!1);const f=Lt(l);r.buffer=new Float32Array(f),oe(l),oe(f)}else r.beginBitmapFill(u).drawRect(0,0,n,i)}}break;case t.inBitmap:{e.isBitmap=!0;const s=t.recodes,a=s[s.length-4];if(n===a.width&&i===a.height)e.setBitmapBuffer(a.width,a.height,a.buffer);else{const o=new _e(a.width,a.height);o.buffer=a.buffer,r.beginBitmapFill(o).drawRect(0,0,n,i)}}break;case"buffer"in t:t.imageBuffer||(t.imageBuffer=new Uint8Array(t.buffer),t.buffer=null),e.setBitmapBuffer(Math.ceil(Math.abs(r.xMax-r.xMin)),Math.ceil(Math.abs(r.yMax-r.yMin)),t.imageBuffer);break;default:t.recodes&&(t.recodeBuffer=new Float32Array(Lt(t.recodes)),oe(t.recodes),t.recodes=null),t.recodeBuffer&&(r.buffer=t.recodeBuffer);break}r.xMin=t.bounds.xMin,r.xMax=t.bounds.xMax,r.yMin=t.bounds.yMin,r.yMax=t.bounds.yMax,t.grid&&(e.scale9Grid=new be(t.grid.x,t.grid.y,t.grid.w,t.grid.h))},Pc=(e,t)=>new Promise(r=>{const n=()=>{e.removeEventListener(x.COMPLETE,n),r()};e.addEventListener(x.COMPLETE,n),e.src=t});class $t extends hr{_$graphics;_$src;isShape;cacheKey;cacheParams;isBitmap;$bitmapBuffer;constructor(){super(),this.isShape=!0,this.cacheKey=0,this.cacheParams=z(0,0,0),this._$graphics=null,this._$src="",this.$bitmapBuffer=null,this.isBitmap=!1}static get namespace(){return"next2d.display.Shape"}get namespace(){return"next2d.display.Shape"}get graphics(){return this._$graphics||(this._$graphics=new M,co.set(this._$graphics,this)),this._$graphics}get src(){return this._$src}set src(t){this._$src!==t&&(this._$src=t,Fc(this,t))}load(t){return Pc(this,t)}get bitmapData(){const t=new _e(this.width,this.height);return this.$bitmapBuffer&&(t.buffer=this.$bitmapBuffer),t}clearBitmapBuffer(){Qi(this)}setBitmapBuffer(t,r,n){Xi(this,t,r,n)}$sync(t,r=null){r&&super.$syncLoaderInfo(r),Ec(this,t)}}let zi=null;const kn=e=>{zi=e},ke=()=>zi,de=document.createElement("textarea");de.tabIndex=-1;let Me="";Me+="position: fixed;";Me+="top: 0;";Me+="left: 0;";Me+="font-size: 16px;";Me+="border: 0;";Me+="resize: none;";Me+="opacity: 0;";Me+="z-index: -1;";Me+="pointer-events: none;";de.setAttribute("style",Me);const _r=document.createElement("canvas");_r.width=_r.height=1;const De=_r.getContext("2d");let Hi=0;const Et=()=>Hi,dt=e=>{Hi=e},Rc=e=>De?(De.fillStyle=e,+`0x${De.fillStyle.slice(1)}`):0,et=e=>isNaN(+e)?Rc(`${e}`):+e,Oc=(e,t=1)=>({R:(e&16711680)>>16,G:(e&65280)>>8,B:e&255,A:t*255}),pt=(e,t,r,n=null)=>{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)};let Ji;const Ht=()=>Ji,Zi=e=>{Ji=e},Je={x:0,y:0};class ue{align;bold;color;font;italic;leading;leftMargin;letterSpacing;rightMargin;size;underline;constructor(t=null,r=null,n=null,i=null,s=null,a=null,o=null,c=null,u=null,h=null,l=null){this.font=t,this.size=r,this.color=n,this.bold=i,this.italic=s,this.underline=a,this.align=o,this.leftMargin=c,this.rightMargin=u,this.leading=h,this.letterSpacing=l}clone(){return new ue(this.font,this.size,this.color,this.bold,this.italic,this.underline,this.align,this.leftMargin,this.rightMargin,this.leading,this.letterSpacing)}toObject(){return{font:this.font,size:this.size,color:et(this.color),bold:this.bold,italic:this.italic,underline:this.underline,align:this.align,leftMargin:this.leftMargin,rightMargin:this.rightMargin,leading:this.leading,letterSpacing:this.letterSpacing}}}const kc=e=>{e.align="left",e.bold=!1,e.color=0,e.font="Times New Roman",e.italic=!1,e.leading=0,e.leftMargin=0,e.letterSpacing=0,e.rightMargin=0,e.size=12,e.underline=!1},Uc=e=>{let t="";if(e.font&&(t+=`font-family: ${e.font};`),e.size&&(t+=`font-size: ${e.size}px;`),e.color){const r=Oc(et(e.color)),n=r.R.toString(16).padStart(2,"0"),i=r.G.toString(16).padStart(2,"0"),s=r.B.toString(16).padStart(2,"0");t+=`color: #${n}${i}${s};`}return e.bold&&(t+="font-weight: bold;"),e.italic&&(t+="font-style: italic;"),e.underline&&(t+="text-decoration: underline;"),e.align&&(t+=`text-align: ${e.align};`),e.leftMargin&&(t+=`margin-left: ${e.leftMargin}px;`),e.rightMargin&&(t+=`margin-right: ${e.rightMargin}px;`),e.leading&&(t+=`margin-bottom: ${e.leading}px;`),e.letterSpacing&&(t+=`letter-spacing: ${e.letterSpacing}px;`),t};class Gc{_$textWidth;_$textHeight;heightTable;ascentTable;widthTable;textTable;lineTable;constructor(){this._$textWidth=-1,this._$textHeight=-1,this.widthTable=[],this.heightTable=[],this.ascentTable=[],this.textTable=[],this.lineTable=[]}get textWidth(){if(this._$textWidth!==-1)return this._$textWidth;this._$textWidth=0;for(let t=0;t{let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t});function Dc(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=_c.get(e))!==null&&t!==void 0?t:e}function qi(e){const t=typeof atob=="function"?atob(e):typeof Buffer.from=="function"?Buffer.from(e,"base64").toString("binary"):new Buffer(e,"base64").toString("binary"),r=t.length&-2,n=new Uint16Array(r/2);for(let i=0,s=0;i=X.ZERO&&e<=X.NINE}function Yc(e){return e>=X.UPPER_A&&e<=X.UPPER_F||e>=X.LOWER_A&&e<=X.LOWER_F}function Wc(e){return e>=X.UPPER_A&&e<=X.UPPER_Z||e>=X.LOWER_A&&e<=X.LOWER_Z||Dr(e)}function Vc(e){return e===X.EQUALS||Wc(e)}var ne;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(ne||(ne={}));var $e;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})($e||($e={}));class Kc{constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n,this.state=ne.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=$e.Strict,this.runConsumed=0}startEntity(t){this.decodeMode=t,this.state=ne.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(t,r){switch(this.state){case ne.EntityStart:return t.charCodeAt(r)===X.NUM?(this.state=ne.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=ne.NamedEntity,this.stateNamedEntity(t,r));case ne.NumericStart:return this.stateNumericStart(t,r);case ne.NumericDecimal:return this.stateNumericDecimal(t,r);case ne.NumericHex:return this.stateNumericHex(t,r);case ne.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|Gn)===X.LOWER_X?(this.state=ne.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=ne.NumericDecimal,this.stateNumericDecimal(t,r))}stateNumericHex(t,r){for(;r>14;for(;r>7;if(this.runConsumed===0){const c=i&le.JUMP_TABLE;if(t.charCodeAt(r)!==c)return this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}for(;this.runConsumed=t.length)return-1;const c=this.runConsumed-1,u=n[this.treeIndex+1+(c>>1)],h=c%2===0?u&255:u>>8&255;if(t.charCodeAt(r)!==h)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(o>>1),i=n[this.treeIndex],s=(i&le.VALUE_LENGTH)>>14}if(r>=t.length)break;const a=t.charCodeAt(r);if(a===X.SEMI&&s!==0&&(i&le.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,s,this.consumed+this.excess);if(this.treeIndex=Qc(n,i,this.treeIndex+Math.max(1,s),a),this.treeIndex<0)return this.result===0||this.decodeMode===$e.Attribute&&(s===0||Vc(a))?0:this.emitNotTerminatedNamedEntity();if(i=n[this.treeIndex],s=(i&le.VALUE_LENGTH)>>14,s!==0){if(a===X.SEMI)return this.emitNamedEntityData(this.treeIndex,s,this.consumed+this.excess);this.decodeMode!==$e.Strict&&(i&le.FLAG13)===0&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}r++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var t;const{result:r,decodeTree:n}=this,i=(n[r]&le.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,i,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){const{decodeTree:i}=this;return this.emitCodePoint(r===1?i[t]&~(le.VALUE_LENGTH|le.FLAG13):i[t+1],n),r===3&&this.emitCodePoint(i[t+2],n),n}end(){var t;switch(this.state){case ne.NamedEntity:return this.result!==0&&(this.decodeMode!==$e.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case ne.NumericDecimal:return this.emitNumericEntity(0,2);case ne.NumericHex:return this.emitNumericEntity(0,3);case ne.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case ne.EntityStart:return 0}}}function Qc(e,t,r,n){const i=(t&le.BRANCH_LENGTH)>>7,s=t&le.JUMP_TABLE;if(i===0)return s!==0&&n===s?r:-1;if(s){const u=n-s;return u<0||u>=i?-1:e[r+u]-1}const a=i+1>>1;let o=0,c=i-1;for(;o<=c;){const u=o+c>>>1,h=u>>1,f=e[r+h]>>(u&1)*8&255;if(fn)c=u-1;else return e[r+a+u]}return-1}var E;(function(e){e[e.Tab=9]="Tab",e[e.NewLine=10]="NewLine",e[e.FormFeed=12]="FormFeed",e[e.CarriageReturn=13]="CarriageReturn",e[e.Space=32]="Space",e[e.ExclamationMark=33]="ExclamationMark",e[e.Number=35]="Number",e[e.Amp=38]="Amp",e[e.SingleQuote=39]="SingleQuote",e[e.DoubleQuote=34]="DoubleQuote",e[e.Dash=45]="Dash",e[e.Slash=47]="Slash",e[e.Zero=48]="Zero",e[e.Nine=57]="Nine",e[e.Semi=59]="Semi",e[e.Lt=60]="Lt",e[e.Eq=61]="Eq",e[e.Gt=62]="Gt",e[e.Questionmark=63]="Questionmark",e[e.UpperA=65]="UpperA",e[e.LowerA=97]="LowerA",e[e.UpperF=70]="UpperF",e[e.LowerF=102]="LowerF",e[e.UpperZ=90]="UpperZ",e[e.LowerZ=122]="LowerZ",e[e.LowerX=120]="LowerX",e[e.OpeningSquareBracket=91]="OpeningSquareBracket"})(E||(E={}));var m;(function(e){e[e.Text=1]="Text",e[e.BeforeTagName=2]="BeforeTagName",e[e.InTagName=3]="InTagName",e[e.InSelfClosingTag=4]="InSelfClosingTag",e[e.BeforeClosingTagName=5]="BeforeClosingTagName",e[e.InClosingTagName=6]="InClosingTagName",e[e.AfterClosingTagName=7]="AfterClosingTagName",e[e.BeforeAttributeName=8]="BeforeAttributeName",e[e.InAttributeName=9]="InAttributeName",e[e.AfterAttributeName=10]="AfterAttributeName",e[e.BeforeAttributeValue=11]="BeforeAttributeValue",e[e.InAttributeValueDq=12]="InAttributeValueDq",e[e.InAttributeValueSq=13]="InAttributeValueSq",e[e.InAttributeValueNq=14]="InAttributeValueNq",e[e.BeforeDeclaration=15]="BeforeDeclaration",e[e.InDeclaration=16]="InDeclaration",e[e.InProcessingInstruction=17]="InProcessingInstruction",e[e.BeforeComment=18]="BeforeComment",e[e.CDATASequence=19]="CDATASequence",e[e.InSpecialComment=20]="InSpecialComment",e[e.InCommentLike=21]="InCommentLike",e[e.BeforeSpecialS=22]="BeforeSpecialS",e[e.BeforeSpecialT=23]="BeforeSpecialT",e[e.SpecialStartSequence=24]="SpecialStartSequence",e[e.InSpecialTag=25]="InSpecialTag",e[e.InEntity=26]="InEntity"})(m||(m={}));function Se(e){return e===E.Space||e===E.NewLine||e===E.Tab||e===E.FormFeed||e===E.CarriageReturn}function Pt(e){return e===E.Slash||e===E.Gt||Se(e)}function Xc(e){return e>=E.LowerA&&e<=E.LowerZ||e>=E.UpperA&&e<=E.UpperZ}var ve;(function(e){e[e.NoValue=0]="NoValue",e[e.Unquoted=1]="Unquoted",e[e.Single=2]="Single",e[e.Double=3]="Double"})(ve||(ve={}));const te={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97]),XmpEnd:new Uint8Array([60,47,120,109,112])};class zc{constructor({xmlMode:t=!1,decodeEntities:r=!0},n){this.cbs=n,this.state=m.Text,this.buffer="",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=m.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=t,this.decodeEntities=r,this.entityDecoder=new Kc(t?Nc:Lc,(i,s)=>this.emitCodePoint(i,s))}reset(){this.state=m.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=m.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(t){this.offset+=this.buffer.length,this.buffer=t,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=m.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&t===E.Amp&&this.startEntity()}stateSpecialStartSequence(t){const r=this.sequenceIndex===this.currentSequence.length;if(!(r?Pt(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.isSpecial=!1;else if(!r){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=m.InTagName,this.stateInTagName(t)}stateInSpecialTag(t){if(this.sequenceIndex===this.currentSequence.length){if(t===E.Gt||Se(t)){const r=this.index-this.currentSequence.length;if(this.sectionStart=0)this.state=this.baseState,r===0&&(this.index-=1);else{if(t=t||(this.state===m.InCommentLike?this.currentSequence===te.CdataEnd?this.cbs.oncdata(this.sectionStart,t,0):this.cbs.oncomment(this.sectionStart,t,0):this.state===m.InTagName||this.state===m.BeforeAttributeName||this.state===m.BeforeAttributeValue||this.state===m.AfterAttributeName||this.state===m.InAttributeName||this.state===m.InAttributeValueSq||this.state===m.InAttributeValueDq||this.state===m.InAttributeValueNq||this.state===m.InClosingTagName||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,r){this.baseState!==m.Text&&this.baseState!==m.InSpecialTag?(this.sectionStart0&&a.has(this.stack[0]);){const o=this.stack.shift();(n=(r=this.cbs).onclosetag)===null||n===void 0||n.call(r,o,!0)}this.isVoidElement(t)||(this.stack.unshift(t),this.htmlMode&&(Nn.has(t)?this.foreignContext.unshift(!0):Yn.has(t)&&this.foreignContext.unshift(!1))),(s=(i=this.cbs).onopentagname)===null||s===void 0||s.call(i,t),this.cbs.onopentag&&(this.attribs={})}endOpenTag(t){var r,n;this.startIndex=this.openTagStart,this.attribs&&((n=(r=this.cbs).onopentag)===null||n===void 0||n.call(r,this.tagname,this.attribs,t),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(t){this.endIndex=t,this.endOpenTag(!1),this.startIndex=t+1}onclosetag(t,r){var n,i,s,a,o,c,u,h;this.endIndex=r;let l=this.getSlice(t,r);if(this.lowerCaseTagNames&&(l=l.toLowerCase()),this.htmlMode&&(Nn.has(l)||Yn.has(l))&&this.foreignContext.shift(),this.isVoidElement(l))this.htmlMode&&l==="br"&&((a=(s=this.cbs).onopentagname)===null||a===void 0||a.call(s,"br"),(c=(o=this.cbs).onopentag)===null||c===void 0||c.call(o,"br",{},!0),(h=(u=this.cbs).onclosetag)===null||h===void 0||h.call(u,"br",!1));else{const f=this.stack.indexOf(l);if(f!==-1)for(let A=0;A<=f;A++){const d=this.stack.shift();(i=(n=this.cbs).onclosetag)===null||i===void 0||i.call(n,d,A!==f)}else this.htmlMode&&l==="p"&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=r+1}onselfclosingtag(t){this.endIndex=t,this.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=t+1):this.onopentagend(t)}closeCurrentTag(t){var r,n;const i=this.tagname;this.endOpenTag(t),this.stack[0]===i&&((n=(r=this.cbs).onclosetag)===null||n===void 0||n.call(r,i,!t),this.stack.shift())}onattribname(t,r){this.startIndex=t;const n=this.getSlice(t,r);this.attribname=this.lowerCaseAttributeNames?n.toLowerCase():n}onattribdata(t,r){this.attribvalue+=this.getSlice(t,r)}onattribentity(t){this.attribvalue+=Un(t)}onattribend(t,r){var n,i;this.endIndex=r,(i=(n=this.cbs).onattribute)===null||i===void 0||i.call(n,this.attribname,this.attribvalue,t===ve.Double?'"':t===ve.Single?"'":t===ve.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(t){const r=t.search(Zc);let n=r<0?t:t.substr(0,r);return this.lowerCaseTagNames&&(n=n.toLowerCase()),n}ondeclaration(t,r){this.endIndex=r;const n=this.getSlice(t,r);if(this.cbs.onprocessinginstruction){const i=this.getInstructionName(n);this.cbs.onprocessinginstruction(`!${i}`,`!${n}`)}this.startIndex=r+1}onprocessinginstruction(t,r){this.endIndex=r;const n=this.getSlice(t,r);if(this.cbs.onprocessinginstruction){const i=this.getInstructionName(n);this.cbs.onprocessinginstruction(`?${i}`,`?${n}`)}this.startIndex=r+1}oncomment(t,r,n){var i,s,a,o;this.endIndex=r,(s=(i=this.cbs).oncomment)===null||s===void 0||s.call(i,this.getSlice(t,r-n)),(o=(a=this.cbs).oncommentend)===null||o===void 0||o.call(a),this.startIndex=r+1}oncdata(t,r,n){var i,s,a,o,c,u,h,l,f,A;this.endIndex=r;const d=this.getSlice(t,r-n);!this.htmlMode||this.options.recognizeCDATA?((s=(i=this.cbs).oncdatastart)===null||s===void 0||s.call(i),(o=(a=this.cbs).ontext)===null||o===void 0||o.call(a,d),(u=(c=this.cbs).oncdataend)===null||u===void 0||u.call(c)):((l=(h=this.cbs).oncomment)===null||l===void 0||l.call(h,`[CDATA[${d}]]`),(A=(f=this.cbs).oncommentend)===null||A===void 0||A.call(f)),this.startIndex=r+1}onend(){var t,r;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let n=0;n=this.buffers[0].length;)this.shiftBuffer();let n=this.buffers[0].slice(t-this.bufferOffset,r-this.bufferOffset);for(;r-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),n+=this.buffers[0].slice(0,r-this.bufferOffset);return n}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(t){var r,n;if(this.ended){(n=(r=this.cbs).onerror)===null||n===void 0||n.call(r,new Error(".write() after done!"));return}this.buffers.push(t),this.tokenizer.running&&(this.tokenizer.write(t),this.writeIndex++)}end(t){var r,n;if(this.ended){(n=(r=this.cbs).onerror)===null||n===void 0||n.call(r,new Error(".end() after done!"));return}t&&this.write(t),this.ended=!0,this.tokenizer.end()}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex0?this.children[this.children.length-1]:null}get childNodes(){return this.children}set childNodes(t){this.children=t}}class rs extends mn{constructor(){super(...arguments),this.type=G.CDATA}get nodeType(){return 4}}class Nr extends mn{constructor(){super(...arguments),this.type=G.Root}get nodeType(){return 9}}class ns extends mn{constructor(t,r,n=[],i=t==="script"?G.Script:t==="style"?G.Style:G.Tag){super(n),this.name=t,this.attribs=r,this.type=i}get nodeType(){return 1}get tagName(){return this.name}set tagName(t){this.name=t}get attributes(){return Object.keys(this.attribs).map(t=>{var r,n;return{name:t,value:this.attribs[t],namespace:(r=this["x-attribsNamespace"])===null||r===void 0?void 0:r[t],prefix:(n=this["x-attribsPrefix"])===null||n===void 0?void 0:n[t]}})}}function el(e){return jc(e)}function tl(e){return e.type===G.CDATA}function rl(e){return e.type===G.Text}function nl(e){return e.type===G.Comment}function il(e){return e.type===G.Directive}function sl(e){return e.type===G.Root}function is(e,t=!1){let r;if(rl(e))r=new Lr(e.data);else if(nl(e))r=new es(e.data);else if(el(e)){const n=t?Cr(e.children):[],i=new ns(e.name,{...e.attribs},n);n.forEach(s=>s.parent=i),e.namespace!=null&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]={...e["x-attribsNamespace"]}),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]={...e["x-attribsPrefix"]}),r=i}else if(tl(e)){const n=t?Cr(e.children):[],i=new rs(n);n.forEach(s=>s.parent=i),r=i}else if(sl(e)){const n=t?Cr(e.children):[],i=new Nr(n);n.forEach(s=>s.parent=i),e["x-mode"]&&(i["x-mode"]=e["x-mode"]),r=i}else if(il(e)){const n=new ts(e.name,e.data);e["x-name"]!=null&&(n["x-name"]=e["x-name"],n["x-publicId"]=e["x-publicId"],n["x-systemId"]=e["x-systemId"]),r=n}else throw new Error(`Not implemented yet: ${e.type}`);return r.startIndex=e.startIndex,r.endIndex=e.endIndex,e.sourceCodeLocation!=null&&(r.sourceCodeLocation=e.sourceCodeLocation),r}function Cr(e){const t=e.map(r=>is(r,!0));for(let r=1;r{let t="";return e.italic&&(t="italic "),e.bold&&(t+="bold "),`${t}${e.size}px '${e.font}',sans-serif`},Yr=(e,t)=>{dt(0);const r=e.lineTable.length;De.font=ss(t);const n=De.measureText(""),i={mode:"break",text:"",x:0,y:0,w:0,h:n.fontBoundingBoxAscent+n.fontBoundingBoxDescent,line:r,textFormat:t.toObject()};e.heightTable[r]=0,e.ascentTable[r]=0,e.widthTable[r]=0,e.lineTable.push(i),e.textTable.push(i)},cl=e=>{const t=e.heightTable.length-1;for(let r=1;r0)continue;const i=e.lineTable[r];i&&(e.heightTable[r]=i.h=e.heightTable[r-1])}},as=e=>{let t=0;return e.leftMargin&&(t+=e.leftMargin),e.rightMargin&&(t+=e.rightMargin),t},ll=(e,t,r,n)=>{let i=r.lineTable.length-1;const s=n.width-as(t)-4;for(let a=0;as){dt(l),i++,u.line=i;const A={mode:"wrap",text:"",x:0,y:0,w:0,h:0,line:i,textFormat:o.toObject()};let d=1,y=!0;const g=/[0-9a-zA-Z?!;:.,?!。、;:〜]/g;for(;;){const p=r.textTable.length-d;if(0>=p){y=!1,d=0;break}const $=r.textTable[p];if(!$){y=!1,d=0;break}if($.mode!=="text"){y=!1;break}if($.text===" "){d--;break}if(!$.text.match(g)){d--;break}d++}if(r.widthTable[i]=0,r.heightTable[i]=0,r.ascentTable[i]=0,d>0&&y){const p=r.textTable.length-d;r.textTable.splice(p,0,A),r.lineTable.push(A);const $=i-1;r.widthTable[$]=0,r.heightTable[$]=0,r.ascentTable[$]=0;for(let w=0;w{const t=e.trim().split(";"),r=[];for(let n=0;n{for(let n=0;nt.size&&(t.size=1));break;case"color":t.color=et(i.value);break;case"letterSpacing":t.letterSpacing=parseInt(i.value);break;case"leading":t.leading=parseInt(i.value);break;case"leftMargin":t.leftMargin=parseInt(i.value);break;case"rightMargin":t.rightMargin=parseInt(i.value);break;case"underline":t.underline=!0;break;case"bold":t.bold=!0;break;case"italic":t.italic=!0;break}}},Vr=(e,t,r,n)=>{for(let i=0;i{const n=new Gc;if(!e)return n;const i=e.trim().replace(/\r?\n/g,"").replace(/\t/g,""),s=t.clone();return r.subFontSize&&r.subFontSize>0&&s.size&&(s.size-=r.subFontSize,1>s.size&&(s.size=1)),Yr(n,s),Vr(ol(i),s,n,r),cl(n),n},H=(e,t=0)=>(e.$textData||(e.$textData=hl(e.htmlText,e.defaultTextFormat,{width:e.width,multiline:e.multiline,wordWrap:e.wordWrap,subFontSize:t,textFormats:e.$textFormats})),e.$textData),K=e=>{e.changed=!0;const t=e.parent;t&&!t.changed&&K(t)},Kr=e=>{e.$textData=null,K(e),e.uniqueKey!==""&&O.has(e.uniqueKey)&&(O.removeById(e.uniqueKey),O.$removeIds.push(+e.uniqueKey))},fl=e=>{if(K(e),e.autoSize==="none"){e.xMin=e.bounds.xMin,e.yMin=e.bounds.yMin,e.xMax=e.bounds.xMax,e.yMax=e.bounds.yMax;return}const t=e.defaultTextFormat,r=e.textWidth+4+as(t);if(e.wordWrap)e.xMin=e.bounds.xMin,e.xMax=e.bounds.xMax;else switch(e.autoSize){case"left":e.xMax=r+e.xMin;break;case"center":e.xMax=r+e.xMin;break;case"right":e.xMax=e.bounds.xMax-(e.bounds.xMax-e.bounds.xMin-(r-e.bounds.xMin));break}e.yMax=e.textHeight+e.bounds.yMin+4},dl=e=>{let t=0;const r=H(e);for(let i=0;in&&e.textWidth+4>e.width;)Kr(e),H(e,n++);if(e.height&&e.textHeight)for(;t>n&&e.textHeight+4>e.height;)Kr(e),H(e,n++);K(e)},Be=e=>{Kr(e),H(e),e.autoSize==="none"&&e.autoFontSize&&dl(e),fl(e)},Al=(e,t)=>{const r=H(e);if(2>r.textTable.length)return;let n=2,i=0;for(let f=1;f=t){i=f;break}A.mode==="break"&&(d=!0,n=2),d&&i++}const s=r.textTable[i];if(!s)return;e.$scrollX=e.$scrollY=0;const a=s.line;let o=0;for(let f=0;f<=a;++f)o+=r.heightTable[f];const c=Math.abs(e.yMax-e.yMin);let u=0;for(let f=a;f>-1;--f){const A=r.heightTable[f];if(cc){const f=(e.textHeight-c)/c;e.$scrollY=Math.max(0,Math.min((o-u)/f,c))}const h=Math.abs(e.xMax-e.xMin);let l=0;for(let f=i;f>0;--f){const A=r.textTable[f];if(A.mode==="text"){if(hh){const f=(e.textWidth-h)/h;e.$scrollX=Math.max(0,Math.min((n-l)/f,h+.5))}K(e)},fe=()=>{const e=Ht();e!==void 0&&clearTimeout(e),Zi(void 0)},pl=window.devicePixelRatio,ml=e=>{const t=e.localToGlobal(new se),r=e.$textData;if(r){const i=r.textTable[e.focusIndex];if(i){for(let a=e.focusIndex-1;a>-1;--a){const o=r.textTable[a];if(!o||o.line!==i.line)break;t.x+=o.w}const s=i.mode==="break"?i.line-1:i.line;for(let a=0;a{e.focusVisible=!e.focusVisible,K(e),Zi(setTimeout(()=>pe(e),500)),ml(e)},gl=(e,t)=>{e.willTrigger(t)&&e.dispatchEvent(new Ne(t)),de.value="",e.focus?(setTimeout(()=>{de.focus()},300),Ht()===void 0&&(e.focusIndex===-1&&(e.focusIndex=1,e.selectIndex=-1),pe(e))):(e.focusIndex=-1,e.selectIndex=-1,e.focusVisible=!1,fe(),de.blur()),K(e)},bl=(e,t,r,n)=>e/n*r+t,xl=(e,t,r,n)=>(e/=n)*e*r+t,yl=(e,t,r,n)=>-(e/=n)*(e-2)*r+t,$l=(e,t,r,n)=>(e/=n/2)<1?e*e*r/2+t:-((e-=1)*(e-2)-1)*r/2+t,vl=(e,t,r,n)=>(e/=n)*e*e*r+t,wl=(e,t,r,n)=>(e/=n,(--e*e*e+1)*r+t),Ml=(e,t,r,n)=>(e/=n/2)<1?e*e*e*r/2+t:((e-=2)*e*e+2)*r/2+t,Bl=(e,t,r,n)=>(e/=n)*e*e*e*r+t,Tl=(e,t,r,n)=>(e/=n,(--e*e*e*e-1)*-r+t),Sl=(e,t,r,n)=>(e/=n/2)<1?e*e*e*e*r/2+t:((e-=2)*e*e*e-2)*-r/2+t,Il=(e,t,r,n)=>(e/=n)*e*e*e*e*r+t,Cl=(e,t,r,n)=>(e/=n,(--e*e*e*e*e+1)*r+t),Fl=(e,t,r,n)=>(e/=n/2)<1?e*e*e*e*e*r/2+t:((e-=2)*e*e*e*e+2)*r/2+t,El=(e,t,r,n)=>-r*Math.cos(e/n*(Math.PI/2))+r+t,Pl=(e,t,r,n)=>r*Math.sin(e/n*(Math.PI/2))+t,Rl=(e,t,r,n)=>-r/2*(Math.cos(Math.PI*e/n)-1)+t,Ol=(e,t,r,n)=>r*Math.pow(2,10*(e/n-1))+t,kl=(e,t,r,n)=>r*(-Math.pow(2,-10*e/n)+1)+t,Ul=(e,t,r,n)=>(e/=n/2)<1?r/2*Math.pow(2,10*(e-1))+t:r/2*(-Math.pow(2,-10*(e-1))+2)+t,Gl=(e,t,r,n)=>(1-Math.sqrt(1-(e/=n)*e))*r+t,_l=(e,t,r,n)=>(e/=n,Math.sqrt(1- --e*e)*r+t),Dl=(e,t,r,n)=>(e/=n*2)<1?(Math.sqrt(1-e*e)-1)/-2*r+t:(Math.sqrt(1-(e-=2)*e)+1)/2*r+t,Ll=(e,t,r,n)=>(2.70158*(e/=n)*e*e-1.70158*e*e)*r+t,Nl=(e,t,r,n)=>(1+2.70158*Math.pow((e/=n)-1,3)+1.70158*Math.pow(e-1,2))*r+t,Yl=(e,t,r,n)=>{let i=1.70158;return(e/=n/2)<1?e*e*(((i*=1.525)+1)*e-i)*r/2+t:((e-=2)*e*(((i*=1.525)+1)*e+i)+2)*r/2+t},Wl=(e,t,r,n)=>(e/=n)===0?t:e===1?r+t:-Math.pow(2,(e*=10)-10)*Math.sin((e-10.75)*(2*Math.PI/3))*r+t,Vl=(e,t,r,n)=>(e/=n)===0?t:e===1?r+t:(Math.pow(2,-10*e)*Math.sin((e*10-.75)*(2*Math.PI/3))+1)*r+t,Kl=(e,t,r,n)=>(e/=n)===0?t:e===1?r+t:e<.5?-(Math.pow(2,20*e-10)*Math.sin((20*e-11.125)*(2*Math.PI/4.5)))/2*r+t:(Math.pow(2,-20*e+10)*Math.sin((20*e-11.125)*(2*Math.PI/4.5))/2+1)*r+t,Ql=(e,t,r,n)=>(e/=n)<1/2.75?7.5625*e*e*r+t:e<2/2.75?(7.5625*(e-=1.5/2.75)*e+.75)*r+t:e<2.5/2.75?(7.5625*(e-=2.25/2.75)*e+.9375)*r+t:(7.5625*(e-=2.625/2.75)*e+.984375)*r+t,Xl=(e,t,r,n)=>r-Ye.outBounce(n-e,0,r,n)+t,zl=(e,t,r,n)=>e{cancelAnimationFrame(e.$timerId),e.hasEventListener(ye.STOP)&&e.dispatchEvent(new ye(ye.STOP)),e.entries=null,e.stopFlag=!0},os=e=>{const t=[];for(const[r,n]of Object.entries(e))t.push({name:r,value:typeof n=="number"?n:os(n)});return t},cs=(e,t,r,n,i)=>{for(let s=0;se.currentTime?t[o]=e.ease(e.currentTime,c,n[o]-c,e.duration):t[o]=n[o]}},ls=(e,t)=>e.stopFlag||!e.entries?-1:(e.currentTime=(t-e.startTime)/1e3,cs(e,e.target,e.from,e.to,e.entries),e.hasEventListener(ye.UPDATE)&&e.dispatchEvent(new ye(ye.UPDATE)),e.currentTime>=e.duration?(e.hasEventListener(ye.COMPLETE)&&e.dispatchEvent(new ye(ye.COMPLETE)),e.nextJob&&e.nextJob.start(),-1):requestAnimationFrame(r=>{ls(e,r)})),Vn=e=>{e.stopFlag||(e.entries=os(e.from),e.entries&&(e.startTime=performance.now(),e.$timerId=ls(e,e.startTime)))},Jl=e=>{cancelAnimationFrame(e.$timerId),e.stopFlag=!1,e.delay?setTimeout(()=>{Vn(e)},e.delay*1e3):Vn(e)};class Zl extends nt{target;entries;startTime;stopFlag;$timerId;delay;duration;ease;from;to;currentTime;nextJob;constructor(t,r,n,i=0,s=1,a=null){super(),this.target=t,this.from=r,this.to=n,this.delay=i,this.duration=s,this.ease=a||Ye.linear,this.currentTime=0,this.nextJob=null,this.entries=null,this.startTime=0,this.stopFlag=!1,this.$timerId=-1}chain(t){return this.nextJob=t,t}start(){Jl(this)}stop(){Hl(this)}}class gn{static add(t,r,n,i=0,s=1,a=null){return new Zl(t,r,n,i,s,a)}}const ql=(e,t)=>{if(!e.scrollEnabled||e.autoSize!=="none"||e.yScrollShape.hasLocalVariable("job"))return;const r=e.width;if(t=pt(t,0,r,0),e.scrollX!==t){if(e.textWidth>r){K(e);const n=e.xScrollShape;n.width=r*r/e.textWidth;const i=e.parent;if(i){n.hasLocalVariable("job")&&n.getLocalVariable("job").stop(),n.alpha=.9,n.x=e.x+1+(r-1-n.width)/(r-1)*(t-1),n.y=e.y+e.height-n.height-.5,i.addChildAt(n,i.getChildIndex(e)+1);const s=gn.add(n,{alpha:.9},{alpha:0},.5,.2,Ye.outQuad);s.addEventListener(x.COMPLETE,a=>{const o=a.target.target;o.deleteLocalVariable("job"),o.parent&&o.parent.removeChild(o)}),s.start(),n.setLocalVariable("job",s)}e.$scrollX=t}e.willTrigger(x.SCROLL)&&e.dispatchEvent(new x(x.SCROLL,!0))}},jl=(e,t)=>{if(!e.scrollEnabled||e.autoSize!=="none"||!e.multiline&&!e.wordWrap||e.xScrollShape.hasLocalVariable("job"))return;const r=e.height;if(t=pt(t,0,r,0),e.scrollY!==t){if(e.textHeight>r){K(e);const n=e.yScrollShape;n.height=r*r/e.textHeight;const i=e.parent;if(i){n.hasLocalVariable("job")&&n.getLocalVariable("job").stop(),n.alpha=.9,n.x=e.x+e.width-n.width-.5,n.y=e.y+.5+(r-1-n.height)/(r-1)*(t-1),i.addChildAt(n,i.getChildIndex(e)+1);const s=gn.add(n,{alpha:.9},{alpha:0},.5,.2,Ye.outQuad);s.addEventListener(x.COMPLETE,a=>{const o=a.target.target;o.deleteLocalVariable("job"),o.parent&&o.parent.removeChild(o)}),s.start(),n.setLocalVariable("job",s),e.$scrollY=t}}e.willTrigger(x.SCROLL)&&e.dispatchEvent(new x(x.SCROLL,!0))}},eu=e=>{let t="";const r=H(e);for(let n=1;n{let r="";const n=H(e);for(let i=1;it)break;s.line===t&&s.mode==="text"&&(r+=s.text)}}return r},ru=(e,t,r,n)=>{if(0>r||r>n)return;const i=e.text,s=r?i.slice(0,r):"";e.text=s+t+i.slice(n,i.length)},nu=async e=>{if(e.focusIndex===-1||e.selectIndex===-1)return;let t="";const r=Math.min(e.focusIndex,e.selectIndex),n=Math.max(e.focusIndex,e.selectIndex)+1,i=H(e);for(let s=r;s{const t=await navigator.clipboard.readText();t===""||e.focusIndex===-1||e.insertText(t)},bn=e=>{if(e.compositionStartIndex>-1)return;let t=0,r=0;if(e.selectIndex>-1)t=Math.min(e.focusIndex,e.selectIndex),r=Math.max(e.focusIndex,e.selectIndex)+1,e.focusIndex=t;else{if(2>e.focusIndex)return;e.focusIndex--}const n=H(e),i=n.textTable[e.focusIndex];i&&i.mode==="wrap"&&e.focusIndex--;const s=[];let a="";for(let o=1;oo))switch(c.mode){case"break":s.push(new ue(...Object.values(c.textFormat))),a+=` +`;break;case"text":s.push(new ue(...Object.values(c.textFormat))),a+=c.text;break;default:continue}}if(n.textTable.length===e.focusIndex&&(s.pop(),a=a.slice(0,-1)),e.selectIndex=-1,!a)e.text="",e.focusIndex=1;else{const o=e.textWidth,c=e.textHeight;if(e.$textFormats=s,e.text=a,e.scrollX>0){const u=e.textWidth,h=e.width;switch(!0){case h>u:e.$scrollX=0;break;case o!==u:e.$scrollX-=(o-u)/(u/h);break}}if(e.scrollY>0){const u=e.textHeight,h=e.height;switch(!0){case h>u:e.$scrollY=0;break;case c!==u:e.$scrollY-=(c-u)/(u/h);break}}e.$textFormats=null}},us=(e,t)=>{if(e.focusIndex===-1||e.compositionStartIndex>-1)return;e.selectIndex>-1&&bn(e);const r=H(e);if(2>r.textTable.length){e.focusIndex=2,e.appendText(t);return}const n=[];let i="";for(let s=1;s{if(e.selectIndex===-1)return;const t=H(e);if(2>t.textTable.length)return;const r=t.textTable[e.selectIndex];if(!r)return;const n=r.mode==="text"?r.line:r.line-1,i=e.height,s=(e.textHeight-i)/i;let a=-e.scrollY*s-2,o=0;for(let d=0;di));++d)o++;a=-e.scrollY*s-2;let c=0;for(let d=0;d0));++d)c++;c>=r.line&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=t.heightTable[r.line]/s),r.line>=o&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=t.heightTable[r.line]/s);const u=e.width,h=(e.textWidth-u)/u;let l=2,f=e.scrollX*h-2+u;for(let d=1;e.selectIndex>=d;++d){const y=t.textTable[d];if(!y||y.line>n)break;if(y.line===n&&(e.selectIndex!==d&&(l+=y.w),f-=y.w,!(f>0))){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX+=y.w/h;break}}e.scrollX*h-2>l&&(e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((l-2)/e.textWidth))},su=(e,t,r,n=!1)=>{if(e.type!=="input")return;const i=H(e);if(2>i.textTable.length){e.focusIndex=1,e.selectIndex=-1,Ht()===void 0&&pe(e);return}const s=e.width,a=e.height;let o=0;e.scrollX>0&&(o+=e.scrollX*(e.textWidth-s)/s);let c=0;e.scrollY>0&&(c+=e.scrollY*(e.textHeight-a)/a);const u=e.globalToLocal(new se(t,r)),h=u.x+o,l=u.y+c;let f=2,A=2,d=A+i.heightTable[0];for(let y=1;yf&&l>A&&d>l&&s>h){const p=y;n?e.selectIndex!==p&&(e.selectIndex=p,e.focusVisible&&(e.focusVisible=!1,fe()),Kn(e),K(e)):(e.focusIndex!==p||e.selectIndex>-1)&&(e.focusIndex=p,e.selectIndex=-1,K(e));return}f=2,A+=i.heightTable[g.line-1],d=A+i.heightTable[g.line];break;case"text":if(h>f&&l>A&&d>l&&f+g.w>h){let p=y;if(n)e.focusIndex>p?e.focusIndex===p+1?f+g.w/2h&&(p=-1):f+g.w/2>h&&(p-=1),e.selectIndex!==p&&(e.selectIndex=p,e.selectIndex>-1&&(e.focusVisible=!1,fe()),Kn(e),K(e));else{if(f+g.w/2-1)&&(e.focusIndex=p,e.selectIndex=-1,K(e))}return}if(y===i.textTable.length-1&&h>f&&l>A&&d>l&&s>h){const p=i.textTable.length;n?e.selectIndex!==p&&(e.selectIndex=p,e.focusVisible&&(e.focusVisible=!1,fe()),K(e)):(e.focusIndex!==p||e.selectIndex>-1)&&(e.focusIndex=p,e.selectIndex=-1,K(e));return}f+=g.w;break}if(!n)e.focusIndex=i.textTable.length,e.selectIndex=-1,Ht()===void 0?pe(e):K(e);else{let p=0;for(let $=0;i.heightTable.length>$;++$)p+=i.heightTable[$];(l>p||2>l)&&(e.selectIndex=2>l?1:i.textTable.length,e.focusVisible&&(e.focusVisible=!1,fe()),K(e))}}}},au=(e,t)=>{if(e.focusIndex===-1)return;const r=H(e);if(2>r.textTable.length)return;const n=r.textTable[e.focusIndex];if(!n)return;const i=n.mode==="text"?n.line:n.line-1;if(i===r.lineTable.length-1){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,e.focusVisible=!1,e.focusIndex=r.textTable.length;const f=e.width,A=(e.textWidth-f)/f;let d=0;for(let y=1;e.focusIndex>=y;++y){const g=r.textTable[y];if(!g||g.line>i)break;g.line===i&&(d+=g.w)}e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=(d-f)/A,fe(),pe(e);return}const s=e.height,a=(e.textHeight-s)/s;let o=-e.scrollY*a-2,c=0;for(let f=0;fs));++f)c++;let u=2;for(let f=1;fi)break;A.line!==i||A.mode!=="text"||(u+=A.w)}}let h=2;const l=i+1;for(let f=1;fl){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,A.line>=c&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=r.heightTable[A.line]/a),e.focusVisible=!1,e.focusIndex=A.mode==="text"?f-1:f,e.scrollX&&hu)){if(t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===f-1&&(e.selectIndex=-1):e.selectIndex=-1,A.line>=c&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=r.heightTable[A.line]/a),e.scrollX){const d=e.width,y=(e.textWidth-d)/d;e.scrollX*y-2>h&&(e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((h-2)/e.textWidth))}e.focusVisible=!1,e.focusIndex=f,fe(),pe(e);return}}}t?e.selectIndex===-1&&(e.selectIndex=e.focusIndex):e.selectIndex=-1,e.focusVisible=!1,e.focusIndex=r.textTable.length,fe(),pe(e)},ou=(e,t)=>{if(e.focusIndex===-1)return;const r=H(e);if(2>r.textTable.length)return;const n=r.textTable.length===e.focusIndex?e.focusIndex-1:e.focusIndex,i=r.textTable[n];if(!i||!i.line){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.focusVisible=!1,e.focusIndex=1,e.scrollX=0,fe(),pe(e);return}const s=i.mode==="text"?i.line:i.line-1,a=e.height,o=(e.textHeight-a)/a;let c=0,u=-e.scrollY*o-2;for(let A=0;A0));++A)c++;let h=2;for(let A=1;As)break;d.line!==s||d.mode!=="text"||(h+=d.w)}}let l=2;const f=s-1;for(let A=1;Af){t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,c>=d.line&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=r.heightTable[d.line]/o),e.scrollX&&(e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((l-2)/e.textWidth)),e.focusVisible=!1,e.focusIndex=d.mode==="text"?A-1:A,fe(),pe(e);return}if(!(d.line!==f||d.mode!=="text")&&(l+=d.w,l>h)){t?e.selectIndex===-1?e.selectIndex=e.focusIndex-1:e.selectIndex===A+1&&(e.selectIndex=-1):e.selectIndex=-1,c>d.line&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=r.heightTable[d.line]/o),e.focusVisible=!1,e.focusIndex=A,fe(),pe(e);return}}}},cu=(e,t)=>{if(!e.focusIndex)return;const r=H(e);if(r.textTable.length&&e.focusIndex<2){e.focusIndex=1;return}e.focusIndex--,t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1;const n=r.textTable[e.focusIndex];if(n){const i=n.mode==="text"?n.line:n.line-1,s=e.height,a=(e.textHeight-s)/s;let o=-e.scrollY*a-2,c=0;for(let h=0;h0));++h)c++;c>i&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY-=r.heightTable[n.line]/a);const u=r.textTable[e.focusIndex+1];if(u){const h=u.mode==="text"?u.line:u.line-1;let l=2;for(let y=1;e.focusIndex>y;++y){const g=r.textTable[y];if(!g||g.line>i)break;g.line===i&&(l+=g.w)}const f=e.width,A=(e.textWidth-f)/f,d=e.scrollX*A-2;if(l>f&&u&&il){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=e.width*((l-2)/e.textWidth);return}}}e.focusVisible=!1,fe(),pe(e)},lu=(e,t)=>{const r=H(e);if(r.textTable.length===e.focusIndex)return;t?e.selectIndex===-1?e.selectIndex=e.focusIndex:e.selectIndex===e.focusIndex&&(e.selectIndex=-1):e.selectIndex=-1,e.focusVisible=!1,e.focusIndex++,fe(),pe(e);const n=r.textTable[e.focusIndex];if(n){const i=n.mode==="text"?n.line:n.line-1,s=e.height,a=(e.textHeight-s)/s;let o=-e.scrollY*a-2,c=0;for(let d=0;ds));++d)c++;i>=c&&(e.xScrollShape.hasLocalVariable("job")&&e.xScrollShape.deleteLocalVariable("job"),e.scrollY+=r.heightTable[i]/a);const u=r.textTable[e.focusIndex-1],h=u.mode==="text"?u.line:u.line-1;if(u&&i>h){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX=0;return}const l=e.width,f=(e.textWidth-l)/l;let A=e.scrollX*f-2+l;for(let d=1;e.focusIndex>=d;++d){const y=r.textTable[d];if(!y||y.line>i)break;if(y.line===i&&(A-=y.w,!(A>0))){e.yScrollShape.hasLocalVariable("job")&&e.yScrollShape.deleteLocalVariable("job"),e.scrollX+=y.w/f;break}}}},uu=(e,t)=>{if(e.focusIndex!==-1)switch(t.key){case"Backspace":case"Delete":e.deleteText();break;case"Enter":e.insertText(` +`);break;case"ArrowLeft":cu(e,t.shiftKey);break;case"ArrowRight":lu(e,t.shiftKey);break;case"ArrowUp":ou(e,t.shiftKey);break;case"ArrowDown":au(e,t.shiftKey);break;case"a":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.selectAll());break;case"c":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.copy());break;case"v":(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.paste());break}},hu=e=>{const t=H(e);2>t.textTable.length||(e.selectIndex=1,e.focusIndex=t.textTable.length,K(e))},fu=(e,t)=>{const r=e.defaultTextFormat;switch(r.font=t.font,r.size=t.size,r.align=t.align,r.color=t.color,r.leading=t.leading,r.letterSpacing=t.letterSpacing,r.leftMargin=t.leftMargin,r.rightMargin=t.rightMargin,t.fontType){case 1:r.bold=!0;break;case 2:r.italic=!0;break;case 3:r.bold=!0,r.italic=!0;break}switch(e.defaultTextFormat=r,e.type=t.inputType,e.multiline=t.multiline,e.wordWrap=t.wordWrap,e.border=t.border,e.scrollEnabled=t.scroll,e.thickness=t.thickness,e.thicknessColor=t.thicknessColor,t.autoSize){case 1:e.autoSize=t.align;break;case 2:e.autoFontSize=!0;break}e.xMin=e.bounds.xMin=t.bounds.xMin,e.xMax=e.bounds.xMax=t.bounds.xMax,e.yMin=e.bounds.yMin=t.bounds.yMin,e.yMax=e.bounds.yMax=t.bounds.yMax+4,e.text=t.text};class Qr extends fn{isText;$textData;_$isHTML;xMin;yMin;xMax;yMax;bounds;scrollEnabled;xScrollShape;yScrollShape;focusVisible;focusIndex;selectIndex;maxChars;restrict;type;compositionStartIndex;compositionEndIndex;$textFormats;$scrollX;$scrollY;cacheKey;cacheParams;_$background;_$backgroundColor;_$border;_$borderColor;_$htmlText;_$multiline;_$text;_$wordWrap;_$defaultTextFormat;_$rawHtmlText;_$autoSize;_$autoFontSize;_$focus;_$thickness;_$thicknessColor;_$stopIndex;constructor(){super(),this.isText=!0,this.$textData=null,this._$background=!1,this._$backgroundColor=16777215,this._$border=!1,this._$borderColor=0,this._$htmlText="",this._$multiline=!1,this._$text="",this._$wordWrap=!1,this.$scrollX=0,this.$scrollY=0,this.$textFormats=null,this.maxChars=0,this._$stopIndex=-1,this.compositionStartIndex=-1,this.compositionEndIndex=-1;const t=new ue;kc(t),this._$defaultTextFormat=t,this._$rawHtmlText="",this.xMin=0,this.yMin=0,this.xMax=100,this.yMax=100,this.bounds={xMin:0,xMax:this.xMax,yMin:0,yMax:this.yMax},this.restrict="",this._$isHTML=!1,this._$autoSize="none",this._$autoFontSize=!1,this.focusVisible=!1,this.focusIndex=-1,this.selectIndex=-1,this.scrollEnabled=!0,this.xScrollShape=new $t,this.xScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this.xScrollShape.scale9Grid=new be(1.5,1.5,.1,.1),this.yScrollShape=new $t,this.yScrollShape.graphics.beginFill("#000",.3).drawRoundRect(0,0,3,3,3),this.yScrollShape.scale9Grid=new be(1.5,1.5,.1,.1),this.type="static",this._$focus=!1,this._$thickness=0,this._$thicknessColor=0,this.cacheKey=0,this.cacheParams=[0,0,0]}static get namespace(){return"next2d.display.TextField"}get namespace(){return"next2d.display.TextField"}get autoFontSize(){return this._$autoFontSize}set autoFontSize(t){t!==this._$autoFontSize&&(this._$autoFontSize=!!t,Be(this))}get autoSize(){return this._$autoSize}set autoSize(t){t!==this._$autoSize&&(this._$autoSize=t,Be(this))}get background(){return this._$background}set background(t){t!==this._$background&&(this._$background=!!t,K(this))}get backgroundColor(){return this._$backgroundColor}set backgroundColor(t){t=pt(et(t),0,16777215,16777215),t!==this._$backgroundColor&&(this._$backgroundColor=t,K(this))}get border(){return this._$border}set border(t){t!==this._$border&&(this._$border=!!t,K(this))}get borderColor(){return this._$borderColor}set borderColor(t){t=pt(et(t),0,16777215,0),t!==this._$borderColor&&(this._$borderColor=t,K(this))}get stopIndex(){return this._$stopIndex}set stopIndex(t){t|=0,this._$stopIndex!==t&&(this._$stopIndex=t,Al(this,t))}get defaultTextFormat(){return this._$defaultTextFormat.clone()}set defaultTextFormat(t){this._$rawHtmlText="",this._$isHTML?this._$text="":this._$htmlText="",this._$defaultTextFormat=t,Be(this)}get focus(){return this._$focus}set focus(t){this._$focus!==t&&this.type==="input"&&(this._$focus=!!t,gl(this,this._$focus?Ne.FOCUS_IN:Ne.FOCUS_OUT))}get htmlText(){if(this._$htmlText)return this._$htmlText;const t=Uc(this.defaultTextFormat);return this._$htmlText=`${this._$text.replace(/\n/g,"
")}
`,this._$htmlText}set htmlText(t){this._$htmlText!==t&&(this._$htmlText=`${t}`,this._$rawHtmlText="",this._$text="",this._$isHTML=!0,Be(this),this.hasEventListener(x.CHANGE)&&this.dispatchEvent(new x(x.CHANGE)))}get length(){return this.text.length}get multiline(){return this._$multiline}set multiline(t){t!==this._$multiline&&(this._$multiline=!!t,Be(this))}get numLines(){return H(this).lineTable.length}get scrollX(){return this.$scrollX}set scrollX(t){ql(this,t)}get scrollY(){return this.$scrollY}set scrollY(t){jl(this,t)}get text(){return this._$isHTML?(this._$rawHtmlText||(this._$rawHtmlText=eu(this)),this._$rawHtmlText):this._$text}set text(t){t=`${t}`,t===""&&(this.scrollX&&(this.scrollX=0),this.scrollY&&(this.scrollY=0)),t!==this._$text&&(this._$htmlText="",this._$rawHtmlText="",this._$isHTML=!1,this._$text=t,Be(this),this.hasEventListener(x.CHANGE)&&this.dispatchEvent(new x(x.CHANGE)))}get textHeight(){return H(this).textHeight}get textWidth(){return H(this).textWidth}get thickness(){return this._$thickness}set thickness(t){t|=0,t!==this._$thickness&&(this._$thickness=t,K(this))}get thicknessColor(){return this._$thicknessColor}set thicknessColor(t){t=pt(et(t),0,16777215,0),t!==this._$thicknessColor&&(this._$thicknessColor=t,K(this))}get wordWrap(){return this._$wordWrap}set wordWrap(t){this._$wordWrap!==t&&(this._$wordWrap=!!t,Be(this))}get width(){return super.width}set width(t){if(t=+t,!isNaN(t)&&0>t)return;const r=t+this.bounds.xMin;r!==this.bounds.xMax&&(this.bounds.xMax=r,Be(this))}get height(){return super.height}set height(t){if(t=+t,!isNaN(t)&&0>t)return;const r=t+this.bounds.yMin;r!==this.bounds.yMax&&(this.bounds.yMax=r,Be(this))}appendText(t){const r=this.text;this.text=r+`${t}`}insertText(t){us(this,t)}deleteText(){bn(this)}getLineText(t){return this._$text||this._$htmlText?tu(this,t|0):""}replaceText(t,r,n){ru(this,t,r|0,n|0)}selectAll(){hu(this)}copy(){nu(this)}paste(){iu(this)}setFocusIndex(t,r,n=!1){su(this,t,r,n)}keyDown(t){uu(this,t)}$sync(t,r=null){r&&super.$syncLoaderInfo(r),fu(this,t)}}const du=e=>{e.compositionStartIndex=e.focusIndex},Au=()=>{const e=ke();e&&du(e)},pu=(e,t)=>{if(e.compositionEndIndex>-1){const o=e.compositionStartIndex;e.focusIndex=e.compositionStartIndex,e.selectIndex=e.compositionEndIndex-1,e.compositionStartIndex=-1,bn(e),e.compositionStartIndex=o,e.selectIndex=-1}let r=H(e);const n=[],i=t.length;let s="";if(2>r.textTable.length)s=t,e.focusIndex=1,e.compositionStartIndex=1;else{for(let o=1;oe.compositionStartIndex&&a++}}e.compositionEndIndex=e.focusIndex=a},mu=e=>{const t=ke();t&&pu(t,e.data)},gu=e=>{if(e.compositionEndIndex>-1){const t=H(e);for(let r=e.compositionStartIndex;r{const e=ke();e&&gu(e)},xu=e=>{if(!e.data)return;const t=ke();t&&(us(t,e.data),t.hasEventListener(x.INPUT)&&t.dispatchEvent(new x(x.INPUT)))},yu=e=>{e.addEventListener("compositionstart",Au),e.addEventListener("compositionupdate",mu),e.addEventListener("compositionend",bu),e.addEventListener("input",xu)};yu(de);const hs=[],$u=()=>hs,vu=e=>{hs.push(e)};let Le=null;const wu=()=>!!Le,Mu=()=>{Le||(Le=new AudioContext),Le.resume()},fs=()=>(Le||(Le=new AudioContext),Le),Bu=e=>{let t=null;switch(e.method.toUpperCase()){case"GET":if(e.data){const n=e.url.split("?");n[1]=n.length===1?e.data.toString():`${n[1]}&${e.data.toString()}`,e.url=n.join("?")}break;case"PUT":case"POST":e.data&&(t=e.data.toString());break}const r=new XMLHttpRequest;if(r.open(e.method,e.url,!0),r.responseType=e.format,r.withCredentials=e.withCredentials,e.event){const n=Object.keys(e.event);for(let i=0;i{const i=+e;return isNaN(i)&&n!==null?n:Math.min(Math.max(t,isNaN(i)?0:i),r)};let ds=1;const Tu=()=>ds,Su=e=>{ds=xn(e,0,1,1)},Iu=[],Jt=()=>Iu,Cu=[],fr=()=>Cu,Fu=e=>{Su(e);const t=Jt();for(let n=0;n{const e=Jt();for(let r=0;r{e.canLoop?e.play():(e.stop(),e.willTrigger(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE)))},Ru=(e,t)=>{e.willTrigger(x.OPEN)&&e.dispatchEvent(new x(x.OPEN)),e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},Ou=(e,t)=>{e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},yn=async e=>{if(e.byteLength)try{return await fs().decodeAudioData(e)}catch{const t=new Uint8Array(e);let r=0;for(;r>t.byteLength&&(r=t.indexOf(255,r),!(r===-1||(t[r+1]&224)===224));)++r;return await yn(t.subarray(r).buffer)}},ku=async(e,t)=>{const r=t.target;if(r)if(e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total)),199r.status){const n=await yn(r.response);n&&(e.audioBuffer=n,e.willTrigger(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE)))}else e.willTrigger(Re.IO_ERROR)&&e.dispatchEvent(new Re(Re.IO_ERROR,!1,r.statusText))},Uu=async(e,t)=>{await new Promise(r=>{Bu({format:"arraybuffer",url:t.url,method:t.method,data:t.data,headers:t.headers,withCredentials:t.withCredentials,event:{loadstart:n=>{Ru(e,n)},progress:n=>{Ou(e,n)},loadend:async n=>{await ku(e,n),r()}}})})},Gu=async(e,t)=>{if(!t.audioBuffer){const r=new Uint8Array(t.buffer),n=await yn(r.buffer);if(!n)return;t.audioBuffer=n}e.audioBuffer=t.audioBuffer};class dr extends nt{_$source;_$gainNode;_$stopFlag;_$currentCount;_$volume;audioBuffer;loopCount;constructor(){super(),this.loopCount=0,this.audioBuffer=null,this._$volume=1,this._$currentCount=0,this._$stopFlag=!0,this._$source=null,this._$gainNode=null}get volume(){return this._$volume}set volume(t){this._$volume=xn(Math.min(rt.volume,t),0,1,1),this._$gainNode&&(this._$gainNode.gain.value=this._$volume)}get canLoop(){return!this._$stopFlag&&this.loopCount>=this._$currentCount}clone(){const t=new dr;return t.volume=this._$volume,t.loopCount=this.loopCount,t.audioBuffer=this.audioBuffer,t}async load(t){await Uu(this,t)}play(t=0){if(!this._$stopFlag||!this.audioBuffer)return;this.stop();const r=fs();this._$gainNode=r.createGain(),this._$gainNode.connect(r.destination),this._$gainNode.gain.value=Math.min(rt.volume,this._$volume),this._$source=r.createBufferSource(),this._$source.addEventListener("ended",()=>{Pu(this)}),this._$source.buffer=this.audioBuffer,this._$source.connect(this._$gainNode),this._$source.start(t),this._$stopFlag=!1,this._$currentCount++,Jt().push(this)}stop(){if(this._$stopFlag)return;this._$stopFlag=!0,this._$currentCount=0,this._$source&&(this._$source.disconnect(),this._$source=null),this._$gainNode&&(this._$gainNode.gain.value=0,this._$gainNode.disconnect(),this._$gainNode=null);const t=Jt(),r=t.indexOf(this);r>-1&&t.splice(r,1)}async $build(t){await Gu(this,t)}}class _u{volume;loopCount;constructor(t=1,r=0){this.volume=t,this.loopCount=r}}const Du=()=>{const e=document.createElement("video");return e.autoplay=!1,e.crossOrigin="anonymous",e.setAttribute("playsinline",""),e},$n=e=>{e.changed=!0;const t=e.parent;t&&!t.changed&&$n(t)},Lu=async e=>{e.autoPlay&&(wu()||(e.muted=!0,vu(e)),await e.play()),e.loaded=!0,$n(e),e.willTrigger(x.COMPLETE)&&e.dispatchEvent(new x(x.COMPLETE))},Nu=(e,t)=>{t.currentTime=0,t.duration=e.duration,t.videoWidth=e.videoWidth,t.videoHeight=e.videoHeight;const r=new OffscreenCanvas(t.videoWidth,t.videoHeight);t.$context=r.getContext("2d"),t.$offscreenCanvas=r},Yu=(e,t)=>{e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},Wu=e=>{if(e.willTrigger(Ae.ENDED)&&e.dispatchEvent(new Ae(Ae.ENDED)),e.loop){e.currentTime=0;return}e.ended=!0,e.changed=!1,e.pause()},Vu=(e,t)=>{e.addEventListener("loadedmetadata",()=>{Nu(e,t)},{once:!0}),e.addEventListener("progress",r=>{Yu(t,r)}),e.addEventListener("canplaythrough",async()=>{await Lu(t),e.volume=t.volume},{once:!0}),e.addEventListener("ended",()=>{Wu(t)})},As=e=>{if(e.paused||!e.loaded)return 0;e.willTrigger(Ae.PLAY)&&e.dispatchEvent(new Ae(Ae.PLAY)),$n(e);const t=fr();return t.indexOf(e)===-1&&t.push(e),requestAnimationFrame(()=>{As(e)})},Ku=(e,t)=>{t.videoData||(t.videoData=new Uint8Array(t.buffer),t.buffer=null),e.loop=t.loop,e.autoPlay=t.autoPlay,e.videoWidth=t.bounds.xMax,e.videoHeight=t.bounds.yMax,e.volume=t.volume,e.src=URL.createObjectURL(new Blob([t.videoData.buffer],{type:"video/mp4"}))};class Xr extends hr{duration;smoothing;loop;autoPlay;currentTime;videoWidth;videoHeight;loaded;ended;isVideo;$videoElement;$offscreenCanvas;$context;paused;_$timerId;_$volume;_$src;constructor(t=0,r=0){super(),this.videoWidth=t,this.videoHeight=r,this.isVideo=!0,this.duration=0,this.smoothing=!0,this.loop=!1,this.loaded=!1,this.ended=!1,this.paused=!0,this.autoPlay=!0,this.currentTime=0,this._$src="",this._$timerId=-1,this._$volume=1,this.$videoElement=null,this.$offscreenCanvas=null,this.$context=null}static get namespace(){return"next2d.media.Video"}get namespace(){return"next2d.media.Video"}get src(){return this._$src}set src(t){this._$src!==t&&(this.loaded=!1,this.currentTime=0,this.$videoElement=null,this.$offscreenCanvas=null,this.$context=null,this.$videoElement=Du(),Vu(this.$videoElement,this),this._$src=this.$videoElement.src=t,this.$videoElement.load())}get muted(){return this.$videoElement?this.$videoElement.muted:!1}set muted(t){this.$videoElement&&(this.$videoElement.muted=t)}get volume(){return this._$volume}set volume(t){this._$volume=xn(Math.min(rt.volume,t),0,1,1),this.$videoElement&&(this.$videoElement.volume=this._$volume)}pause(){if(!this.$videoElement||this.paused)return;this.paused=!0,this.$videoElement.pause(),cancelAnimationFrame(this._$timerId),this.willTrigger(Ae.PAUSE)&&this.dispatchEvent(new Ae(Ae.PAUSE));const t=fr(),r=t.indexOf(this);r>-1&&t.splice(r,1)}async play(){!this.$videoElement||!this.paused||(this.paused=!1,this.ended=!1,this.$videoElement.volume=this._$volume,await this.$videoElement.play(),this._$timerId=As(this))}seek(t){this.$videoElement&&(this.currentTime=this.$videoElement.currentTime=Math.min(this.duration,t),this.willTrigger(Ae.SEEK)&&this.dispatchEvent(new Ae(Ae.SEEK)))}$sync(t,r=null){r&&super.$syncLoaderInfo(r),Ku(this,t)}}const At=(e,t,r,n,i=-1)=>{const s=n.loaderInfo;if(!s)throw new Error("the loaderInfo or data is null.");e.parent=n,we.set(e,n.root),Dt.set(e,s),e.dictionaryId=t,e.characterId=r.characterId,e.clipDepth=r.clipDepth,e.startFrame=r.startFrame,e.endFrame=r.endFrame,e.name=r.name||"",e.placeId=i},Qn=(e,t,r,n,i=-1)=>{switch(r.extends){case qt.namespace:{const s=new qt;return At(s,e,t,n,i),s.$sync(r),s}case $t.namespace:{const s=new $t;return At(s,e,t,n,i),s.$sync(r),s}case Qr.namespace:{const s=new Qr;return At(s,e,t,n,i),s.$sync(r),s}case Xr.namespace:{const s=new Xr;return At(s,e,t,n,i),s.$sync(r),s}default:throw new Error(`Character extends not found: ${r.extends}`)}},Rt=new Map,Qu=(e,t)=>{const r=e.loaderInfo;if(!r||!r.data)return t;const n=r.data.characters[e.characterId];if(!n)return t;const i=e.currentFrame,s=n.controller[i];if(!s)return t;const a=[],o=n.dictionary;if(!t.length){for(let c=0;ci){Rt.set(u.dictionaryId,u);continue}u.uniqueKey&&O.has(u.uniqueKey)&&O.removeTimer(u.uniqueKey),u.willTrigger(x.REMOVED)&&u.dispatchEvent(new x(x.REMOVED,!0)),u.willTrigger(x.REMOVED_FROM_STAGE)&&u.dispatchEvent(new x(x.REMOVED_FROM_STAGE,!0)),u.isVideo&&u.pause(),u.isContainerEnabled&&un(u)}t.length=0;for(let c=0;c{e.$labels||(e.$labels=new Map),e.$labels.set(t.frame,t)},zu=e=>{if(!e.$labels)return null;const t=e.currentFrame;return e.$labels.has(t)&&e.$labels.get(t)||null},Hu=e=>!e.$labels||!e.$labels.size?null:Array.from(e.$labels.values()),Ju=(e,t)=>{if(!e.$labels||!e.$labels.size)return 0;for(const[r,n]of e.$labels)if(n.name===t)return r;return 0},Zu=(e,t=null)=>{if(!t||!t.size)return;const r=e.currentFrame;if(!t.has(r))return;const n=t.get(r);n.willTrigger(x.FRAME_LABEL)&&n.dispatchEvent(new x(x.FRAME_LABEL))},qu=(e,t=null)=>{if(!t||!t.size)return;const r=e.currentFrame;t.has(r)&&kr.push(e)},Zt=e=>{e.$canAction&&(e.$canAction=!1,Zu(e,e.$labels),qu(e,e.$actions))},Ar=(e,t)=>{if(e.totalFrames===1)return;let r=+t;if(isNaN(r)&&(r=Ju(e,`${t}`)),1>r&&(r=1),e.currentFrame!==r){if(r>e.totalFrames){if(e.currentFrame===e.totalFrames)return;e.$wait=!0,e.$canSound=!0,e.$canAction=!0,e.$hasTimelineHeadMoved=!0,e.currentFrame=e.totalFrames,Zt(e),j(e);return}e.currentFrame=r,e.$wait=!0,e.$canSound=!0,e.$canAction=!0,e.$hasTimelineHeadMoved=!0,j(e),Zt(e)}},ju=(e,t)=>{e.play(),Ar(e,t)},eh=(e,t)=>{e.stop(),Ar(e,t),e.$wait=!1},th=e=>{e.totalFrames<=e.currentFrame||(e.stop(),Ar(e,e.currentFrame+1))},rh=e=>{2>e.currentFrame||(e.stop(),Ar(e,e.currentFrame-1))},nh=(e,t)=>{for(let r=0;r{for(let r=0;r{const n=e.loaderInfo;if(!n)return;const i=n.data;if(!i)return;const s=i.characters;for(let a=0;a{t.actions&&(e.$actions||(e.$actions=new Map),nh(e.$actions,t.actions)),t.sounds&&(e.$sounds||(e.$sounds=new Map),sh(e,e.$sounds,t.sounds)),t.labels&&(e.$labels||(e.$labels=new Map),ih(e.$labels,t.labels)),e.totalFrames=t.totalFrame||1};class qt extends An{$labels;$actions;$sounds;$canAction;$wait;totalFrames;currentFrame;_$stopFlag;$canSound;$hasTimelineHeadMoved;isTimelineEnabled;constructor(){super(),this.currentFrame=1,this.totalFrames=1,this.isTimelineEnabled=!0,this.$actions=null,this.$labels=null,this.$sounds=null,this.$canAction=!0,this.$wait=!1,this.$canSound=!0,this.$hasTimelineHeadMoved=!0,this._$stopFlag=!1}static get namespace(){return"next2d.display.MovieClip"}get namespace(){return"next2d.display.MovieClip"}get children(){return!this.$hasTimelineHeadMoved||this.characterId===-1?this._$children:(this.$hasTimelineHeadMoved=!1,Qu(this,this._$children))}get currentFrameLabel(){return zu(this)}get currentLabels(){return Hu(this)}get isPlaying(){return!this._$stopFlag}gotoAndPlay(t){ju(this,t)}gotoAndStop(t){eh(this,t)}nextFrame(){th(this)}play(){this._$stopFlag=!1,j(this)}prevFrame(){rh(this)}stop(){this._$stopFlag=!0}addFrameLabel(t){Xu(this,t)}$sync(t,r=null){r&&super.$syncLoaderInfo(r),ah(this,t)}}const Xn=async(e,t)=>{const r=new Map;if(t.symbols.length)for(let a=0;a>1|(v&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,O[v]=((b&65280)>>8|(b&255)<<8)>>1}for(var m=(function(r,e,n){for(var i=r.length,f=0,g=new k(e);f>p]=C}else for(h=new k(i),f=0;f>15-r[f]);return h}),A=new l(288),v=0;v<144;++v)A[v]=8;for(var v=144;v<256;++v)A[v]=9;for(var v=256;v<280;++v)A[v]=7;for(var v=280;v<288;++v)A[v]=8;for(var j=new l(32),v=0;v<32;++v)j[v]=5;var hr=m(A,9,1),br=m(j,5,1),B=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},c=function(r,e,n){var i=e/8|0;return(r[i]|r[i+1]<<8)>>(e&7)&n},J=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},sr=function(r){return(r+7)/8|0},yr=function(r,e,n){return(n==null||n>r.length)&&(n=r.length),new l(r.subarray(e,n))},zr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],t=function(r,e,n){var i=new Error(e||zr[r]);if(i.code=r,Error.captureStackTrace&&Error.captureStackTrace(i,t),!n)throw i;return i},N=function(r,e,n,i){var f=r.length,g=0;if(!f||e.f&&!e.l)return n||new l(0);var s=!n,h=s||e.i!=2,p=e.i;s&&(n=new l(f*3));var C=function(vr){var or=n.length;if(vr>or){var lr=new l(Math.max(or*2,vr));lr.set(n),n=lr}},y=e.f||0,a=e.p||0,o=e.b||0,F=e.l,D=e.d,E=e.m,T=e.n,R=f*8;do{if(!F){y=c(r,a,1);var _=c(r,a+1,3);if(a+=3,_)if(_==1)F=hr,D=br,E=9,T=5;else if(_==2){var H=c(r,a,31)+257,L=c(r,a+10,15)+4,d=H+c(r,a+5,31)+1;a+=14;for(var M=new l(d),K=new l(19),u=0;u>4;if(w<16)M[u++]=w;else{var x=0,I=0;for(w==16?(I=3+c(r,a,3),a+=2,x=M[u-1]):w==17?(I=3+c(r,a,7),a+=3):w==18&&(I=11+c(r,a,127),a+=7);I--;)M[u++]=x}}var nr=M.subarray(0,H),z=M.subarray(H);E=B(nr),T=B(z),F=m(nr,E,1),D=m(z,T,1)}else t(1);else{var w=sr(a)+4,q=r[w-4]|r[w-3]<<8,G=w+q;if(G>f){p&&t(0);break}h&&C(o+q),n.set(r.subarray(w,G),o),e.b=o+=q,e.p=a=G*8,e.f=y;continue}if(a>R){p&&t(0);break}}h&&C(o+131072);for(var Dr=(1<>4;if(a+=x&15,a>R){p&&t(0);break}if(x||t(2),S<256)n[o++]=S;else if(S==256){P=a,F=null;break}else{var ar=S-254;if(S>264){var u=S-257,U=W[u];ar=c(r,a,(1<>4;Q||t(3),a+=Q&15;var z=gr[V];if(V>3){var U=X[V];z+=J(r,a)&(1<R){p&&t(0);break}h&&C(o+131072);var ir=o+ar;if(o>3&1)+(e>>4&1);i>0;i-=!r[n++]);return n+(e&2)},pr=function(r){var e=r.length;return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0},xr=function(r,e){return((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&t(6,"invalid zlib data"),(r[1]>>5&1)==1&&t(6,"invalid zlib data: "+(r[1]&32?"need":"unexpected")+" dictionary"),(r[1]>>3&4)+2};function Sr(r,e){return N(r,{i:2},e,e)}function mr(r,e){var n=kr(r);return n+8>r.length&&t(6,"invalid gzip data"),N(r.subarray(n,-8),{i:2},new l(pr(r)),e)}function Ar(r,e){return N(r.subarray(xr(r),-4),{i:2},e,e)}function Cr(r,e){return r[0]==31&&r[1]==139&&r[2]==8?mr(r,e):(r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31?Sr(r,e):Ar(r,e)}var Er=typeof TextDecoder<"u"&&new TextDecoder,Tr=0;try{Er.decode(Fr,{stream:!0}),Tr=1}catch{}self.addEventListener("message",r=>{const e=Cr(r.data);let n="";for(let i=0;i{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(ps),{name:e?.name})}}const Hn=new oh,ms=async(e,t)=>{t.type==="zlib"?await new Promise(r=>{Hn.onmessage=i=>{Xn(e,i.data),r()};const n=new Uint8Array(t.buffer);Hn.postMessage(n,[n.buffer])}):Xn(e,t)},ch=(e,t)=>{e.willTrigger(x.OPEN)&&e.dispatchEvent(new x(x.OPEN)),e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},lh=(e,t)=>{e.willTrigger(Z.PROGRESS)&&e.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total))},uh=async(e,t)=>{const r=t.target;if(!r)return;const n=e.contentLoaderInfo;if(n.willTrigger(Z.PROGRESS)&&n.dispatchEvent(new Z(Z.PROGRESS,!1,t.loaded,t.total)),n.willTrigger(Gt.HTTP_STATUS)){const i=oo(r.getAllResponseHeaders());n.dispatchEvent(new Gt(Gt.HTTP_STATUS,!1,r.status,r.responseURL,i))}199r.status?(await ms(e,r.response),n.willTrigger(x.COMPLETE)&&n.dispatchEvent(new x(x.COMPLETE))):n.willTrigger(Re.IO_ERROR)&&n.dispatchEvent(new Re(Re.IO_ERROR,!1,r.statusText))},hh=async(e,t)=>{await new Promise(r=>{ao({format:t.responseDataFormat,url:t.url,method:t.method,data:t.data,headers:t.headers,withCredentials:t.withCredentials,event:{loadstart:n=>{ch(e.contentLoaderInfo,n)},progress:n=>{lh(e.contentLoaderInfo,n)},loadend:async n=>{await uh(e,n),r()}}})})};class gs{contentLoaderInfo;root;constructor(){this.root=null,this.contentLoaderInfo=new Sc}get content(){return this.contentLoaderInfo.content}get loaderInfo(){return this.contentLoaderInfo}async load(t){if(t.responseDataFormat!=="json")throw new Error("The only format that can be loaded by this function is `json` format.");this.contentLoaderInfo.url=t.url,this.contentLoaderInfo.format=t.responseDataFormat,await hh(this,t)}async loadJSON(t){await ms(this,t)}}const bs=()=>{for(;kr.length;){const e=kr.pop(),t=e.$actions;if(!t)continue;const r=e.currentFrame;if(!t.has(r))continue;const n=t.get(r);if(n)for(let i=0;i{for(;Ur.length;){const e=Ur.pop(),t=e.$sounds;if(!t)continue;const r=e.currentFrame;if(!t.has(r))continue;const n=t.get(r),i=e.soundTransform;for(let s=0;s{if(!t||!t.size)return;const r=e.currentFrame;t.has(r)&&Ur.push(e)},ys=e=>{e.$canSound&&(e.$canSound=!1,fh(e,e.$sounds))},$s=e=>{const t=e.children;for(let r=t.length-1;r>-1;--r){const n=t[r];n&&n.isContainerEnabled&&($s(n),n.isTimelineEnabled&&(ys(n),Zt(n)))}},dh=e=>{$s(e),xs(),bs()},Ah=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e++,e);class ph{buffer;offset;constructor(){this.buffer=new Float32Array(256),this.offset=0}push(...t){this.buffer.length{const t=new Uint32Array(e.buffer,e.byteOffset,e.length),r=t.length;let n=2166136261,i=0;const s=r&-8;for(;i>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619),a=t[i++],n=Math.imul(n^a&255,16777619),n=Math.imul(n^a>>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619)}for(;i>8&255,16777619),n=Math.imul(n^a>>16&255,16777619),n=Math.imul(n^a>>>24,16777619)}return n>>>8^n&255&16777215},pr=e=>{switch(e){case"copy":return 0;case"add":return 1;case"alpha":return 2;case"darken":return 3;case"difference":return 4;case"erase":return 5;case"hardlight":return 6;case"invert":return 7;case"layer":return 8;case"lighten":return 9;case"multiply":return 10;case"normal":return 11;case"overlay":return 12;case"screen":return 13;case"subtract":return 14;default:return 11}},vs=(e,t,r,n,i)=>{if(!e.visible){b.push(0);return}const s=e.graphics,a=s.isDrawable;if(!a&&!e.isBitmap){b.push(0);return}const o=Ve(e),c=o&&(o[0]!==1||o[1]!==1||o[2]!==1||o[3]!==1||o[4]!==0||o[5]!==0||o[6]!==0||o[7]!==0)?U.multiply(r,o):r;if(!me(c[3]+c[7]/255,0,1,0)){c!==r&&U.release(c),b.push(0);return}const h=_(e),l=h&&(h[0]!==1||h[1]!==0||h[2]!==0||h[3]!==1||h[4]!==0||h[5]!==0)?T.multiply(t,h):t,f=he(s.xMin,s.yMin,s.xMax,s.yMax,l),A=f[0],d=f[1],y=f[2],g=f[3];k(f);const p=Math.ceil(Math.abs(y-A)),$=Math.ceil(Math.abs(g-d));switch(!0){case p===0:case $===0:case p===-1/0:case $===-1/0:case p===1/0:case $===1/0:c!==r&&U.release(c),l!==t&&T.release(l),b.push(0);return}if(0>A+p||0>d+$||A>n||d>i){c!==r&&U.release(c),l!==t&&T.release(l),b.push(0);return}const w=h&&e.scale9Grid?Math.abs(h[1])<.001&&Math.abs(h[2])<1e-4:!1;if(!e.uniqueKey)if(e.characterId&&e.loaderInfo){const J=z(e.loaderInfo.id,e.characterId);e.uniqueKey=`${mt(new Float32Array(J))}`,oe(J)}else e.uniqueKey=e.isBitmap?`${mt(new Float32Array(e.$bitmapBuffer.buffer))}`:`${mt(s.buffer)}`;const I=Math.sqrt(l[0]*l[0]+l[1]*l[1]),P=Math.sqrt(l[2]*l[2]+l[3]*l[3]),W=Math.round(I*100)/100,C=Math.round(P*100)/100;(!e.isBitmap&&!e.cacheKey||e.cacheParams[0]!==W||e.cacheParams[1]!==C||e.cacheParams[2]!==c[7])&&(e.cacheKey=O.generateKeys(W,C,c[7]),e.cacheParams[0]=W,e.cacheParams[1]=C,e.cacheParams[2]=c[7]);const R=e.isBitmap?0:e.cacheKey;if(b.pushShapeBuffer(1,xi,l[0],l[1],l[2],l[3],l[4],l[5],c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],A,d,y,g,s.xMin,s.yMin,s.xMax,s.yMax,+w,+a,+e.isBitmap,+e.uniqueKey,R,I,P,e.instanceId),e.$cache&&!e.$cache.has(e.uniqueKey)&&(e.$cache=null),e.$cache?e.$cache.get(`${R}`):O.get(e.uniqueKey,`${R}`))e.$cache||(e.$cache=O.getById(e.uniqueKey),e.$cache.set(e.uniqueKey,!0)),b.push(1);else{if(b.push(0),w){const Y=v.rendererScale,ee=je(Y,0,0,Y,0,0),Q=T.multiply(ee,h||xt);Ft(ee);const ce=e.parent.concatenatedMatrix.rawData,ae=je(ce[0],ce[1],ce[2],ce[3],ce[4]*Y-A,ce[5]*Y-d);T.release(ce);const Ke=T.multiply(ae,Q),Qe=Ke[4]-(l[4]-A),ks=Ke[5]-(l[5]-d);Ft(Ke);const st=he(s.xMin,s.yMin,s.xMax,s.yMax,Q),Bn=st[0],Tn=st[1],Us=st[2],Gs=st[3];k(st);const Tt=Math.ceil(Math.abs(Us-Bn)),St=Math.ceil(Math.abs(Gs-Tn)),xe=e.scale9Grid,br=Math.abs(s.xMax-s.xMin),xr=Math.abs(s.yMax-s.yMin),It=xe.width>0?(xe.x-s.xMin)/br:1e-5,Ct=xe.height>0?(xe.y-s.yMin)/xr:1e-5,yr=xe.width>0?(xe.x+xe.width-s.xMin)/br:.99999,$r=xe.height>0?(xe.y+xe.height-s.yMin)/xr:.99999,Sn=Math.ceil(br*Y),In=Math.ceil(xr*Y);let vr=Sn*It/Tt,wr=In*Ct/St,Mr=(Tt-Sn*(1-yr))/Tt,Br=(St-In*(1-$r))/St;if(vr>=Mr){const at=It/(It+(1-yr));vr=Math.max(at-1e-5,0),Mr=Math.min(at+1e-5,1)}if(wr>=Br){const at=Ct/(Ct+(1-$r));wr=Math.max(at-1e-5,0),Br=Math.min(at+1e-5,1)}b.push(Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],ae[0],ae[1],ae[2],ae[3],ae[4]-Qe,ae[5]-ks,Bn,Tn,Tt,St,It,Ct,vr,wr,yr,$r,Mr,Br),Ft(ae),Ft(Q)}const J=a||w?s.buffer:e.$bitmapBuffer;b.push(J.length),b.set(J),O.set(e.uniqueKey,`${R}`,!0),e.$cache&&(e.$cache=null)}b.push(pr(e.blendMode));const N=e.filters;if(N){let J=!1;const Y=[],ee=re(0,0,0,0);for(let ce=0;ce0;Q?(b.push(+Q,+J,ee[0],ee[1],ee[2],ee[3],Y.length),b.set(new Float32Array(Y))):b.push(0),k(ee)}else b.push(0);c!==r&&U.release(c),l!==t&&T.release(l)},zr=(e,t)=>{const r=_(e),n=r?T.multiply(t,r):t;n!==t&&T.release(n);const i=r&&e.scale9Grid?Math.abs(r[1])<.001&&Math.abs(r[2])<1e-4:!1,s=e.graphics.buffer;b.push(xi,n[0],n[1],n[2],n[3],n[4],n[5],+i,s.length),b.set(s)},mh=new TextEncoder,ws=(e,t,r,n,i)=>{if(!e.visible){b.push(0);return}const s=Ve(e),a=s&&(s[0]!==1||s[1]!==1||s[2]!==1||s[3]!==1||s[4]!==0||s[5]!==0||s[6]!==0||s[7]!==0)?U.multiply(r,s):r;if(!me(a[3]+a[7]/255,0,1,0)){a!==r&&U.release(a),b.push(0);return}const c=_(e),u=c&&(c[0]!==1||c[1]!==0||c[2]!==0||c[3]!==1||c[4]!==0||c[5]!==0)?T.multiply(t,c):t,h=he(e.xMin,e.yMin,e.xMax,e.yMax,u),l=h[0],f=h[1],A=h[2],d=h[3];k(h);const y=Math.ceil(Math.abs(A-l)),g=Math.ceil(Math.abs(d-f));switch(!0){case y===0:case g===0:case y===-1/0:case g===-1/0:case y===1/0:case g===1/0:a!==r&&U.release(a),u!==t&&T.release(u),b.push(0);return}if(0>l+y||0>f+g||l>n||f>i){a!==r&&U.release(a),u!==t&&T.release(u),b.push(0);return}if(!e.uniqueKey)if(e.characterId&&e.loaderInfo){const C=z(e.loaderInfo.id,e.characterId);e.uniqueKey=`${mt(new Float32Array(C))}`,oe(C)}else e.uniqueKey=`${e.instanceId}`;const p=Math.sqrt(u[0]*u[0]+u[1]*u[1]),$=Math.sqrt(u[2]*u[2]+u[3]*u[3]),w=Math.round(p*100)/100,I=Math.round($*100)/100;(e.changed&&!e.cacheKey||e.cacheParams[0]!==w||e.cacheParams[1]!==I||e.cacheParams[2]!==a[7])&&(e.cacheKey=O.generateKeys(w,I,a[7]),e.cacheParams[0]=w,e.cacheParams[1]=I,e.cacheParams[2]=a[7]);const P=e.cacheKey;b.pushTextFieldBuffer(1,eo,u[0],u[1],u[2],u[3],u[4],u[5],a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],l,f,A,d,e.xMin,e.yMin,e.xMax,e.yMax,+e.uniqueKey,P,+e.changed,p,$,e.instanceId),e.$cache&&!e.$cache.has(e.uniqueKey)&&(e.$cache=null);const W=e.$cache?e.$cache.get(`${P}`):O.get(e.uniqueKey,`${P}`);if(!W||e.changed){b.push(0,+W);const C=mh.encode(JSON.stringify(e.$textData));switch(b.push(C.length),b.set(C),e.autoSize){case"center":b.push(0);break;case"left":b.push(1);break;case"none":b.push(2);break;case"right":b.push(3);break}b.push(e.stopIndex,e.scrollX,e.scrollY,e.textWidth,e.textHeight,Math.abs(e.xMax-e.xMin),Math.abs(e.yMax-e.yMin),e.focusIndex,e.selectIndex,+e.focusVisible,e.thickness,e.thicknessColor,+e.wordWrap,+e.border,e.borderColor,+e.background,e.backgroundColor,e.defaultTextFormat.color||0,e.defaultTextFormat.size||0),W||O.set(e.uniqueKey,`${P}`,!0),e.$cache&&(e.$cache=null)}else e.$cache||(e.$cache=O.getById(e.uniqueKey),e.$cache.set(e.uniqueKey,!0)),b.push(1);if(b.push(pr(e.blendMode)),e.filters?.length){let C=!1;const R=[],L=re(0,0,0,0);for(let J=0;J0;N?(b.push(+N,+C,L[0],L[1],L[2],L[3],R.length),b.set(new Float32Array(R))):b.push(0),k(L)}else b.push(0);a!==r&&U.release(a),u!==t&&T.release(u)},Ms=(e,t,r,n,i,s)=>{if(!e.visible||!e.$videoElement||!e.$offscreenCanvas||!e.loaded){b.push(0);return}const a=Ve(e),o=a&&(a[0]!==1||a[1]!==1||a[2]!==1||a[3]!==1||a[4]!==0||a[5]!==0||a[6]!==0||a[7]!==0)?U.multiply(n,a):n;if(!me(o[3]+o[7]/255,0,1,0)){o!==n&&U.release(o),b.push(0);return}const u=_(e),h=u&&(u[0]!==1||u[1]!==0||u[2]!==0||u[3]!==1||u[4]!==0||u[5]!==0)?T.multiply(r,u):r,l=he(0,0,e.videoWidth,e.videoHeight,h),f=l[0],A=l[1],d=l[2],y=l[3];k(l);const g=Math.ceil(Math.abs(d-f)),p=Math.ceil(Math.abs(y-A));switch(!0){case g===0:case p===0:case g===-1/0:case p===-1/0:case g===1/0:case p===1/0:o!==n&&U.release(o),h!==r&&T.release(h),b.push(0);return}if(0>f+g||0>A+p||f>i||A>s){o!==n&&U.release(o),h!==r&&T.release(h),b.push(0);return}if(!e.uniqueKey)if(e.characterId&&e.loaderInfo){const w=z(e.loaderInfo.id,e.characterId);e.uniqueKey=`${mt(new Float32Array(w))}`,oe(w)}else e.uniqueKey=`${e.instanceId}`;b.pushVideoBuffer(1,to,h[0],h[1],h[2],h[3],h[4],h[5],o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7],f,A,d,y,0,0,e.videoWidth,e.videoHeight,+e.uniqueKey,+e.changed,e.instanceId),e.$cache&&!e.$cache.has(e.uniqueKey)&&(e.$cache=null);const $=e.$cache?e.$cache.get("0"):O.get(e.uniqueKey,"0");if(!$||e.changed){b.push(0,+$);const w=e.$context;if(w){const I=e.videoWidth/2,P=e.videoHeight/2;w.save(),w.translate(I,P),w.rotate(Math.PI),w.scale(-1,1),w.drawImage(e.$videoElement,-I,-P,e.videoWidth,e.videoHeight),w.restore(),t.push(e.$offscreenCanvas.transferToImageBitmap())}$||O.set(e.uniqueKey,"0",!0),e.$cache&&(e.$cache=null)}else e.$cache||(e.$cache=O.getById(e.uniqueKey),e.$cache.set(e.uniqueKey,!0)),b.push(1);if(b.push(pr(e.blendMode)),e.filters?.length){let w=!1;const I=[],P=re(0,0,0,0);for(let C=0;C0;W?(b.push(+W,+w,P[0],P[1],P[2],P[3],I.length),b.set(new Float32Array(I))):b.push(0),k(P)}else b.push(0);o!==n&&U.release(o),h!==r&&T.release(h)},Jn=(e,t,r,n)=>{let i=null;switch(!0){case e.isContainerEnabled:i=yt(e,t);break;case e.isShape:i=wt(e,t);break;case e.isText:i=Bt(e,t);break;case e.isVideo:i=Mt(e,t);break}if(!i)return null;const s=i[0],a=i[2],o=Math.abs(a-s);if(!o)return null;const c=i[1],u=i[3],h=Math.abs(u-c);return!h||0>s+o||0>c+h||s>r||c>n?null:i},Hr=(e,t)=>{const r=_(e),n=r?T.multiply(t,r):t,i=e.children;b.push(bi,i.length);for(let s=0;s{const r=wt(e,t),n=e.filters;if(n){const i=re(0,0,0,0);for(let s=0;s{const r=Mt(e,t),n=e.filters;if(n){const i=re(0,0,0,0);for(let s=0;s{const r=Bt(e,t),n=e.filters;if(n){const i=re(0,0,0,0);for(let s=0;s{const r=e.children;if(!r.length)return re(0,0,0,0);const n=_(e),i=n?t?T.multiply(t,n):n:t,s=Number.MAX_VALUE;let a=s,o=-s,c=s,u=-s;for(let h=0;h{if(!e.visible){b.push(0);return}const a=Ve(e);let o=a&&(a[0]!==1||a[1]!==1||a[2]!==1||a[3]!==1||a[4]!==0||a[5]!==0||a[6]!==0||a[7]!==0)?U.multiply(n,a):n;if(!me(o[3]+o[7]/255,0,1,0)){o!==n&&U.release(o),b.push(0);return}const u=e.children;if(!u.length){o!==n&&U.release(o),b.push(0);return}const h=_(e);let l=h&&(h[0]!==1||h[1]!==0||h[2]!==0||h[3]!==1||h[4]!==0||h[5]!==0)?T.multiply(r,h):r;if(!l[0]&&!l[1]||!l[2]&&!l[3]){o!==n&&U.release(o),l!==r&&T.release(l),b.push(0);return}b.push(1,bi);const f=e.blendMode;b.push(pr(f));const A=e.filters;if(A){const p=O.generateFilterKeys(l[0],l[1],l[2],l[3]),$=O.get(`${e.instanceId}`,`${p}`);let w=!1;const I=[],P=re(0,0,0,0);for(let C=0;C0){w||(w=e.changed);const C=Bs(e,r);if($){if(!w){b.push(1,Math.ceil(Math.abs(C[2]-C[0])),Math.ceil(Math.abs(C[3]-C[1])),1,1,e.instanceId,p,P[0],P[1],P[2],P[3],l[0],l[1],l[2],l[3],C[0],C[1],o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]),k(C),k(P),o!==n&&U.release(o),l!==r&&T.release(l);return}O.removeById(`${e.instanceId}`)}b.push(1,Math.ceil(Math.abs(C[2]-C[0])),Math.ceil(Math.abs(C[3]-C[1])),1,0,e.instanceId,p,P[0],P[1],P[2],P[3],l[0],l[1],l[2],l[3],C[0],C[1],o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7],I.length),b.set(new Float32Array(I));const R=l[0],L=l[1],N=l[2],J=l[3],Y=l[4]-C[0],ee=l[5]-C[1];l!==r&&T.release(l),l=je(R,L,N,J,Y,ee),o!==n&&U.release(o),o=_t(1,1,1,1,0,0,0,0),k(C),O.set(`${e.instanceId}`,`${p}`,!0)}else if(f==="normal")b.push(0);else{const C=yt(e,r),R=C[0],L=C[1];b.push(1,Math.ceil(Math.abs(C[2]-R)),Math.ceil(Math.abs(C[3]-L)),0,l[0],l[1],l[2],l[3],R,L,o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]);const N=l[0],J=l[1],Y=l[2],ee=l[3],Q=l[4]-R,ce=l[5]-L;l!==r&&T.release(l),l=je(N,J,Y,ee,Q,ce),k(C),o!==n&&U.release(o),o=_t(1,1,1,1,0,0,0,0)}k(P)}else if(f==="normal")b.push(0);else{const p=yt(e,r),$=p[0],w=p[1];b.push(1,Math.ceil(Math.abs(p[2]-$)),Math.ceil(Math.abs(p[3]-w)),0,l[0],l[1],l[2],l[3],$,w,o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]);const I=l[0],P=l[1],W=l[2],C=l[3],R=l[4]-$,L=l[5]-w;l!==r&&T.release(l),l=je(I,P,W,C,R,L),k(p),o!==n&&U.release(o),o=_t(1,1,1,1,0,0,0,0)}const d=e.mask;if(d){const p=Jn(d,l,i,s);if(!p)b.push(0);else switch(b.push(1,p[0],p[1],p[2],p[3]),!0){case d.isContainerEnabled:Hr(d,l);break;case d.isShape:zr(d,l);break}d.changed=!1}else b.push(0);b.push(u.length);let y=0,g=!0;for(let p=0;py&&(y=0,g=!0),!g){b.push(0),$.changed=!1;continue}if($.clipDepth){y=$.clipDepth;const w=Jn($,l,i,s);if(g=!!w,b.push(+g),!w){$.changed=!1;continue}switch(b.push(w[0],w[1],w[2],w[3]),!0){case $.isContainerEnabled:Hr($,l);break;case $.isShape:zr($,l);break}$.changed=!1;continue}switch(!0){case $.isContainerEnabled:Ts($,t,l,o,i,s);break;case $.isShape:vs($,l,o,i,s);break;case $.isText:ws($,l,o,i,s);break;case $.isVideo:Ms($,t,l,o,i,s);break}$.changed=!1}o!==n&&U.release(o),l!==r&&T.release(l)},yh=(e,t,r,n,i,s)=>{switch(b.push(v.backgroundColor),!0){case e.isContainerEnabled:Ts(e,t,r,n,i,s);break;case e.isShape:vs(e,r,n,i,s);break;case e.isText:ws(e,r,n,i,s);break;case e.isVideo:Ms(e,t,r,n,i,s);break}e.changed=!1},Zn=e=>{e.totalFrames===1||!e.isPlaying||(e.$wait||(++e.currentFrame,e.currentFrame>e.totalFrames&&(e.currentFrame=1)),e.$wait=!1,e.$canSound=!0,e.$canAction=!0,e.$hasTimelineHeadMoved=!0,e.$container=null,ys(e),Zt(e),j(e))},Jr=e=>{const t=e.$container;if(t)for(let r=0;t.length>r;++r){const n=t[r];n.isTimelineEnabled&&Zn(n),Jr(n)}else{const r=[],n=e.children;for(let i=0;n.length>i;++i){const s=n[i];s.isContainerEnabled&&(s.isTimelineEnabled&&Zn(s),Jr(s),r.push(s))}e.$container=r}},$h=()=>{Jr(v),xs(),bs()};class vh extends dn{_$ready;stageWidth;stageHeight;frameRate;rendererScale;rendererWidth;rendererHeight;_$backgroundColor;constructor(){super(),this.stageWidth=0,this.stageHeight=0,this.frameRate=1,this.rendererScale=1,this.rendererWidth=0,this.rendererHeight=0,this._$ready=!1,this._$backgroundColor=-1}get backgroundColor(){return this._$backgroundColor}set backgroundColor(t){this._$backgroundColor=t==="transparent"?-1:parseInt(t.replace("#",""),16)}get pointer(){return bt}set ready(t){!t||this._$ready||(this._$ready=t,dh(this))}addChild(t){return ge.add(t.instanceId),we.set(this,t),super.addChild(t),we.delete(this),we.set(t,t),t}$ticker(){$h()}$generateRenderQueue(t,r,n,i){yh(t,r,n,i,this.rendererWidth,this.rendererHeight)}$mouseHit(t,r,n){He(this,t,r,n,!0)}}const v=new vh;ge.add(v.instanceId);const Fr={command:"resize",buffer:null},qn=[],Zr=(e=!0)=>{Fr.buffer=new Float32Array([B.rendererWidth,B.rendererHeight,e?1:0]),qn[0]=Fr.buffer.buffer,Ce.postMessage(Fr,qn)},jn=window.devicePixelRatio||1,vn=()=>{Je.x=0,Je.y=0;const e=vt();if(!e)return;const t=e.children[0];!t||t.localName!=="canvas"||(Je.x=(e.clientWidth-v.rendererWidth/jn)/2,Je.y=(e.clientHeight-v.rendererHeight/jn)/2)},mr=()=>{const e=vt();if(!e)return;const t=e.parentElement;if(!t)return;const r=B.fullScreen||t.tagName==="BODY"?window.innerWidth:t.clientWidth,n=B.fullScreen||t.tagName==="BODY"?window.innerHeight:t.clientHeight,i=e.style;if(i.width=`${r}px`,i.height=`${n}px`,!v.stageWidth||!v.stageHeight)return;const s=Math.min(r/v.stageWidth,n/v.stageHeight)*Ze,a=B.fullScreen?window.innerWidth*Ze:v.stageWidth*s|0,o=B.fullScreen?window.innerHeight*Ze:v.stageHeight*s|0;a===B.screenWidth&&o===B.screenHeight||(B.screenWidth=r,B.screenHeight=n,v.changed=!0,e.children.length>1&&e.children[1].dispatchEvent(new Event(`${on}_blur`)),vn(),!(a===B.rendererWidth&&o===B.rendererHeight)&&(v.rendererScale=B.rendererScale=s,v.rendererWidth=B.rendererWidth=a,v.rendererHeight=B.rendererHeight=o,ft[0]=ft[3]=s,ft[4]=(B.rendererWidth-v.stageWidth*s)/2,ft[5]=(B.rendererHeight-v.stageHeight*s)/2,O.reset(),Zr(),v.hasEventListener(x.RESIZE)&&v.dispatchEvent(new x(x.RESIZE))))},wh=new Float32Array([1,1,1,1,0,0,0,0]),lt=[],ut={command:"render",buffer:null,length:0,imageBitmaps:null},Ot=[];Ce.addEventListener("message",e=>{if(e.data.message!=="render")return;const t=e.data.buffer;b.buffer.length>t.length||(b.buffer=t)});const Ss=()=>{b.offset=0,Ot.length=0,lt.length=0,v.$generateRenderQueue(v,lt,ft,wh),b.offset&&(ut.buffer=b.buffer,ut.length=b.offset,Ot.push(b.buffer.buffer),ut.imageBitmaps=null,lt.length&&(ut.imageBitmaps=lt,Ot.push(...lt)),Ce.postMessage(ut,Ot))},ei={command:"removeCache",buffer:null},ti=[],ri=()=>{const e=new Float32Array(O.$removeIds);O.$removeIds.length=0,ei.buffer=e,ti[0]=e.buffer,Ce.postMessage(ei,ti)},Mh=new x(x.ENTER_FRAME),Is=e=>{if(B.stopFlag)return;O.$removeIds.length&&ri();const t=e-B.startTime;t>B.fps&&(B.startTime=e-t%B.fps,v.$ticker(),v.hasEventListener(x.ENTER_FRAME)&&v.dispatchEvent(Mh),v.changed&&Ss(),O.$removeCache&&(O.removeTimerScheduledCache(),O.$removeIds.length&&ri())),B.timerId=requestAnimationFrame(r=>{Is(r)})},Bh=()=>{B.stopFlag&&(B.stopFlag=!1,v.changed=!0,B.timerId>-1&&cancelAnimationFrame(B.timerId),B.fps=1e3/v.frameRate|0,B.startTime=performance.now(),B.timerId=requestAnimationFrame(e=>{Is(e)}))},Th=()=>{B.timerId>-1&&cancelAnimationFrame(B.timerId),B.stopFlag=!0,B.timerId=-1,rt.stopAll()},Sh=e=>{const t=ke();if(t){t.keyDown(e);return}v.hasEventListener(V.KEY_DOWN)&&(We(e),v.dispatchEvent(new V(V.KEY_DOWN)))},Ih=e=>{ke()||v.hasEventListener(V.KEY_UP)&&(We(e),v.dispatchEvent(new V(V.KEY_UP)))},Ch=()=>{window.addEventListener(V.KEY_DOWN,Sh),window.addEventListener(V.KEY_UP,Ih)};class Fh{rendererWidth;rendererHeight;screenWidth;screenHeight;rendererScale;fixedWidth;fixedHeight;stopFlag;startTime;fps;tagId;_$fullScreen;timerId;mouseState;constructor(){this.rendererWidth=0,this.rendererHeight=0,this.rendererScale=1,this.screenWidth=0,this.screenHeight=0,this.stopFlag=!0,this.startTime=0,this.fps=16,this.timerId=-1,this.mouseState="up",this.fixedWidth=0,this.fixedHeight=0,this.tagId="",this._$fullScreen=!1,Ch()}get fullScreen(){return this._$fullScreen}set fullScreen(t){this._$fullScreen!==t&&(this._$fullScreen=t,mr())}play(){Bh()}stop(){Th()}cacheClear(){O.reset(),Ce.postMessage({command:"cacheClear"})}setOptions(t=null){t&&(this.fixedWidth=t.width||this.fixedWidth,this.fixedHeight=t.height||this.fixedHeight,this.tagId=t.tagId||this.tagId,this._$fullScreen=!!t.fullScreen,t.bgColor&&(v.backgroundColor=t.bgColor))}}const B=new Fh;let ni="auto";const wn=()=>{B.stopFlag||(ie.x=v.pointer.x,ie.y=v.pointer.y,ie.pointer="auto",ie.hit=null,Tr.beginPath(),Tr.setTransform(1,0,0,1,0,0),v.$mouseHit(Tr,gt,ie),B.mouseState==="up"&&ni!==ie.pointer&&(ui().style.cursor=ni=ie.pointer))},Mn=e=>{let t=window.scrollX,r=window.scrollY;const n=vt();if(n){const c=n.getBoundingClientRect();t+=c.left,r+=c.top}const i=e.target;if(i){const c=i.getBoundingClientRect();t+=c.left,r+=c.top}const s=(B.rendererWidth-v.stageWidth*B.rendererScale)/2,a=(B.rendererHeight-v.stageHeight*B.rendererScale)/2,o=B.rendererScale/Ze;v.pointer.x=(e.pageX-t)/o-s/B.rendererScale,v.pointer.y=(e.pageY-r)/o-a/B.rendererScale},Eh=()=>{const e=ie.hit,t=ke();t&&(!e||t.instanceId!==e.instanceId)&&(t.focus=!1,kn(null)),e?(e.isText&&(e.focus?setTimeout(()=>{de.focus()},300):(e.focus=!0,kn(e)),e.setFocusIndex(ie.x-gt[4],ie.y-gt[5])),e.willTrigger(S.POINTER_DOWN)&&e.dispatchEvent(new S(S.POINTER_DOWN))):v.willTrigger(S.POINTER_DOWN)&&v.dispatchEvent(new S(S.POINTER_DOWN))},Ph=()=>{const e=ie.hit;e?e.willTrigger(S.DOUBLE_CLICK)&&e.dispatchEvent(new S(S.DOUBLE_CLICK)):v.willTrigger(S.DOUBLE_CLICK)&&v.dispatchEvent(new S(S.DOUBLE_CLICK))};let ii,kt=!1;const Rh=e=>{const t=e.target;t&&(B.mouseState="down",t.setPointerCapture(e.pointerId),We(e),Mn(e),wn(),ie.hit&&e.preventDefault(),clearTimeout(ii),kt?(kt=!1,Ph()):(kt=!0,ii=setTimeout(()=>{kt=!1},300),Eh()))},Oh=()=>{const e=v.dropTarget,t=ie.hit;t?(t.willTrigger(S.POINTER_UP)&&t.dispatchEvent(new S(S.POINTER_UP)),e&&e.instanceId!==t.instanceId&&e.willTrigger(S.POINTER_UP)&&e.dispatchEvent(new S(S.POINTER_UP))):e&&e.willTrigger(S.POINTER_UP)?e.dispatchEvent(new S(S.POINTER_UP)):v.willTrigger(S.POINTER_UP)&&v.dispatchEvent(new S(S.POINTER_UP))},si=e=>{const t=e.target;t&&(B.mouseState="up",t.releasePointerCapture(e.pointerId),We(e),Mn(e),wn(),Oh())},kh=()=>{const e=v.dropTarget;if(e){const i=e.parent?e.parent.globalToLocal(v.pointer):e.globalToLocal(v.pointer);let s=0,a=0;e.$lockCenter?(s=i.x-e.width/2,a=i.y-e.height/2):(s=i.x+e.$offsetX,a=i.y+e.$offsetY);const o=e.$boundedRect;o&&(s=Vt(s,o.left,o.right),a=Vt(a,o.top,o.bottom)),e.x=s,e.y=a}const t=ke();if(t&&B.mouseState==="down"){t.setFocusIndex(ie.x-gt[4],ie.y-gt[5],!0);return}const r=fi(),n=ie.hit;n?(n.willTrigger(S.POINTER_MOVE)&&n.dispatchEvent(new S(S.POINTER_MOVE)),r?r.instanceId!==n.instanceId&&(r.willTrigger(S.POINTER_OUT)&&r.dispatchEvent(new S(S.POINTER_OUT)),n.willTrigger(S.POINTER_OVER)&&n.dispatchEvent(new S(S.POINTER_OVER))):n.willTrigger(S.POINTER_OVER)&&n.dispatchEvent(new S(S.POINTER_OVER)),Cn(n)):(r&&(r.willTrigger(S.POINTER_OUT)&&r.dispatchEvent(new S(S.POINTER_OUT)),Cn(null)),v.hasEventListener(S.POINTER_MOVE)&&v.dispatchEvent(new S(S.POINTER_MOVE)))},Uh=e=>{e.target&&(We(e),Mn(e),wn(),ie.hit&&e.preventDefault(),kh())},Gh=e=>{We(e);const t=fi();t&&t.willTrigger(S.POINTER_LEAVE)&&(e.preventDefault(),t.dispatchEvent(new S(S.POINTER_LEAVE)))},_h=e=>{We(e);const t=ie.hit;if(t&&t.isText&&t.scrollEnabled){e.preventDefault(),e.deltaX&&(t.scrollX+=e.deltaX/(t.textWidth/t.width)),e.deltaY&&(t.scrollY+=e.deltaY/(t.textHeight/t.height));return}v.willTrigger(qe.WHEEL)&&(e.preventDefault(),v.dispatchEvent(new qe(qe.WHEEL)))},Dh=e=>{const t=()=>{Mu();const r=$u();for(let n=0;n{Object.defineProperty(qr,e,{get(){return t}})});const jr={Sprite:An,MovieClip:qt,BitmapData:_e,BlendMode:ua,DisplayObject:hr,DisplayObjectContainer:dn,FrameLabel:Ki,Graphics:M,InteractiveObject:fn,Loader:gs,Shape:$t,stage:v};Object.entries(jr).forEach(([e,t])=>{Object.defineProperty(jr,e,{get(){return t}})});const en={BevelFilter:rr,BlurFilter:nr,ColorMatrixFilter:ir,ConvolutionFilter:sr,DisplacementMapFilter:ar,DropShadowFilter:or,GlowFilter:cr,GradientBevelFilter:lr,GradientGlowFilter:ur};Object.entries(en).forEach(([e,t])=>{Object.defineProperty(en,e,{get(){return t}})});const tn={ColorTransform:U,Matrix:T,Point:se,Rectangle:be};Object.entries(tn).forEach(([e,t])=>{Object.defineProperty(tn,e,{get(){return t}})});const rn={Sound:dr,SoundMixer:rt,SoundTransform:_u,Video:Xr};Object.entries(rn).forEach(([e,t])=>{Object.defineProperty(rn,e,{get(){return t}})});class Cs{requestHeaders;url;contentType;data;method;responseDataFormat;withCredentials;constructor(t=""){this.url=`${t}`,this.contentType="application/json",this.data=null,this.method="GET",this.requestHeaders=[],this.responseDataFormat="json",this.withCredentials=!1}get headers(){const t=[];return t.push({name:"Content-Type",value:this.contentType}),this.requestHeaders.length&&t.push(...this.requestHeaders),t}}const nn={URLRequest:Cs};Object.entries(nn).forEach(([e,t])=>{Object.defineProperty(nn,e,{get(){return t}})});const sn={TextFormat:ue,TextField:Qr};Object.entries(sn).forEach(([e,t])=>{Object.defineProperty(sn,e,{get(){return t}})});const an={Easing:Ye,Tween:gn};Object.entries(an).forEach(([e,t])=>{Object.defineProperty(an,e,{get(){return t}})});const Fs=()=>{const e=vt();if(e)for(;e.firstChild;)e.removeChild(e.firstChild)},Es=()=>{const e=vt();if(!e)return;const t=ui();t&&(e.appendChild(t),e.appendChild(de))},Ps=()=>{v.ready=!0,Ss(),B.play(),v.changed=!1},Lh=()=>{const e=document.createElement("div");if(_s(e),e.id=on,e.tabIndex=-1,!B.tagId)document.body.appendChild(e);else{const t=document.getElementById(B.tagId);if(!t)return alert(`Element not found with tag ID: ${B.tagId}`),e;t.appendChild(e)}return e},Nh=(e,t=0,r=0)=>{let n="";if(n+="display:flex;",n+="align-items:center;",n+="justify-content:center;",n+="background-color:transparent;",n+="overflow:hidden;",n+="padding:0;",n+="margin:0;",n+="user-select:none;",n+="outline:none;",t&&r)n+=`width:${t}px;`,n+=`height:${r}px;`;else{const i=e.parentElement;if(!i)throw new Error("parent element is null.");i.tagName==="BODY"?(n+=`width:${window.innerWidth}px;`,n+=`height:${window.innerHeight}px;`):(n+=`width:${i.clientWidth}px;`,n+=`height:${i.clientHeight}px;`)}e.setAttribute("style",n)},Yh=e=>{const t=`${on}_loading`;e.innerHTML=` +
`};let ai=-1;const Wh=()=>{window.addEventListener("resize",()=>{cancelAnimationFrame(ai),ai=requestAnimationFrame(mr)})},Rs=(e=null)=>{B.setOptions(e);const t=Lh();Nh(t,B.fixedWidth,B.fixedHeight),Yh(t),!B.fixedWidth&&!B.fixedHeight&&Wh(),mr()},Vh=async(e,t=null)=>{if(e==="develop"){const s=location.search.slice(1).split("&")[0];if(!s)return;e=`${location.origin}/${s}`}if(!e)return;e.charAt(1)==="/"&&(e=e.slice(1)),Rs(t);const r=new gs,n=r.contentLoaderInfo;if(n.addEventListener(Re.IO_ERROR,s=>{alert("Error: "+s.text)}),await r.load(new Cs(e)),!n.data)return;const i=n.data.stage;v.stageWidth=i.width,v.stageHeight=i.height,v.frameRate=Vt(i.fps,1,60,60),v.backgroundColor=t&&t.bgColor?t.bgColor:i.bgColor,v.addChild(n.content),mr(),Ps(),Fs(),Es(),vn()};let oi=!1;const Kh=(e=240,t=240,r=60,n=null)=>{if(oi)return v.getChildAt(0);oi=!0,v.stageWidth=e|0,v.stageHeight=t|0,v.frameRate=Vt(r,1,60,60),Rs(n);const i=v.addChild(new An);return Ps(),Fs(),Es(),vn(),i},Te={command:"capture",buffer:null,bgColor:16777215,bgAlpha:0,width:0,height:0,length:0,imageBitmaps:null},Ut=[],ht=[],Qh=async(e,t,r,n,i=0,s=0)=>await new Promise(a=>{if(b.offset=0,Ut.length=0,ht.length=0,v.$generateRenderQueue(e,ht,t,r),!b.offset)return a(n);Te.buffer=b.buffer,Te.width=n.width,Te.height=n.height,Te.bgColor=i,Te.bgAlpha=s,Te.length=b.offset,Ut.push(b.buffer.buffer),Te.imageBitmaps=null,ht.length&&(Te.imageBitmaps=ht,Ut.push(...ht));const o=c=>{if(c.data.message!=="capture")return;const u=c.data.buffer;return b.buffer.length{switch(!0){case e.isVideo:{const t=e.muted;e.muted=!0,await e.play(),e.pause(),e.muted=t,await new Promise(r=>{const n=async()=>{e.loaded?(e.seek(0),r()):requestAnimationFrame(n)};requestAnimationFrame(n)})}break;case e.isContainerEnabled:{const t=e.children;for(let r=0;r{t&&t.videoSync&&await Os(e);const r=t&&t.colorTransform?t.colorTransform.rawData:zh,n=new Float32Array([1,0,0,1,-e.width/2,-e.height/2]),i=t&&t.matrix?T.multiply(t.matrix.rawData,n):T.multiply(Xh,n),s=t&&t.canvas?t.canvas:O.getCanvas(),a=Math.sqrt(i[0]*i[0]+i[1]*i[1]),o=Math.sqrt(i[2]*i[2]+i[3]*i[3]),c=Math.ceil(e.width*a),u=Math.ceil(e.height*o);if(c<=0||u<=0)return s;i[4]+=c/2,i[5]+=u/2,s.width=c,s.height=u;const h=B.stopFlag;h||B.stop();let l=!1;const f=B.rendererWidth,A=B.rendererHeight,d=B.rendererScale;if(c>f||u>A){l=!0;const y=Math.min(c/v.stageWidth,u/v.stageHeight)*Ze;v.rendererScale=B.rendererScale=y,v.rendererWidth=B.rendererWidth=c,v.rendererHeight=B.rendererHeight=u,Zr(!1)}return await Qh(e,i,r,s,t&&t.bgColor?parseInt(t.bgColor.replace("#",""),16):0,t&&t.bgAlpha?t.bgAlpha:0),l&&(v.rendererScale=B.rendererScale=d,v.rendererWidth=B.rendererWidth=f,v.rendererHeight=B.rendererHeight=A,Zr(!1)),h||B.play(),T.release(i),t&&t.colorTransform&&U.release(r),s};class Jh{display;events;filters;geom;media;net;text;ui;_$promise;constructor(){this.display=jr,this.events=qr,this.filters=en,this.geom=tn,this.media=rn,this.net=nn,this.text=sn,this.ui=an,this._$promise=new Promise(t=>{document.readyState==="loading"?window.addEventListener("DOMContentLoaded",()=>t(),{once:!0}):t()})}async load(t,r=null){await Promise.all([this._$promise]),await Vh(t,r)}async createRootMovieClip(t=240,r=240,n=60,i=null){return await Promise.all([this._$promise]),Kh(t,r,n,i)}async captureToCanvas(t,r=null){return await Hh(t,r)}}"next2d"in window||(console.log("%c Next2D Player %c 3.0.0 %c https://next2d.app","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),window.next2d=new Jh); diff --git a/public/assets/js/sample.json b/public/assets/js/sample.json index 090c0e57..f1511b4a 100644 --- a/public/assets/js/sample.json +++ b/public/assets/js/sample.json @@ -1 +1 @@ -{"buffer":[120,156,237,253,89,207,92,215,145,46,12,254,26,3,114,1,18,114,30,46,171,252,125,167,208,64,27,125,225,70,161,111,105,91,178,212,160,69,67,98,117,157,243,239,123,237,136,39,86,60,49,236,100,82,162,200,55,245,102,34,199,149,123,88,67,172,152,135,63,156,255,227,15,187,221,207,239,223,252,227,219,241,249,135,253,191,107,195,255,252,240,247,247,223,107,195,126,179,249,195,238,79,227,251,247,223,254,240,143,239,223,163,241,122,209,198,239,254,245,179,182,108,119,218,240,215,127,252,233,221,219,119,63,225,98,227,125,183,255,78,30,203,247,243,255,165,7,253,237,251,55,63,189,249,219,251,111,127,194,201,127,56,254,135,222,119,52,254,240,238,199,220,250,221,79,111,254,137,238,109,245,2,122,220,188,201,251,239,127,248,249,155,159,223,191,251,215,87,127,252,195,126,57,3,119,202,103,163,143,221,217,63,126,251,191,223,239,254,254,205,207,127,123,243,246,219,255,207,31,118,155,63,236,199,21,54,95,253,249,205,251,239,191,249,238,237,187,119,63,233,215,159,222,252,248,247,119,255,28,183,217,109,254,109,188,118,127,92,190,253,97,255,191,198,251,215,39,249,58,174,184,57,221,236,197,254,69,244,226,240,34,122,113,124,17,189,24,199,189,128,94,156,63,127,47,142,216,144,63,255,159,127,254,245,221,91,218,180,216,41,227,182,223,254,248,119,219,143,187,29,250,241,247,31,126,254,215,219,55,255,231,155,63,191,251,255,253,240,237,159,222,254,240,175,121,194,251,119,239,223,188,253,95,101,76,127,123,247,227,251,159,222,189,125,251,173,33,134,227,127,252,248,223,111,199,13,255,52,190,157,208,141,227,127,28,231,183,195,252,182,159,223,118,243,219,118,126,219,44,223,108,20,127,255,65,166,238,205,79,255,39,33,144,31,103,127,230,24,102,143,39,46,250,127,72,219,64,18,91,32,153,49,114,26,9,16,222,64,149,63,189,111,6,56,38,225,255,250,246,95,134,52,55,188,196,31,117,247,237,165,189,59,110,147,239,14,192,253,116,119,63,182,119,199,109,242,221,177,121,63,221,221,183,215,238,238,184,77,190,59,16,216,39,187,251,5,115,28,111,142,187,228,155,3,135,127,178,155,31,219,145,227,46,249,230,118,145,79,117,243,125,187,232,56,58,223,28,199,118,55,183,125,248,246,205,95,191,125,75,68,220,218,7,206,248,219,183,127,126,35,216,226,183,194,1,114,143,255,215,95,255,191,223,254,237,125,102,35,254,249,230,253,79,63,252,239,217,184,0,245,194,218,44,175,229,251,246,112,253,230,124,165,199,2,119,219,235,245,155,11,55,94,230,157,254,182,240,57,255,239,129,114,127,254,238,221,79,255,156,151,93,230,135,95,118,11,125,217,201,127,125,59,38,251,207,239,254,78,139,52,46,242,70,80,176,78,251,127,255,244,221,24,201,255,250,225,237,88,168,255,231,15,63,131,241,194,116,210,74,127,104,84,199,229,219,110,48,113,15,215,239,111,108,1,78,27,122,24,4,60,23,224,217,239,39,192,127,206,129,76,102,241,221,127,59,79,88,134,249,11,89,201,191,124,255,230,95,210,53,237,236,15,239,255,249,230,95,70,159,32,128,254,244,237,223,70,247,253,198,11,201,92,254,58,126,35,168,250,235,253,55,71,153,192,241,186,124,115,144,166,221,55,244,107,57,150,126,234,127,56,153,206,29,95,165,125,99,231,224,235,242,223,114,15,111,249,186,158,252,117,184,184,253,178,59,219,111,244,203,206,231,158,227,14,227,175,121,127,251,238,157,179,150,116,190,157,96,47,97,230,206,14,1,188,110,178,86,255,251,207,63,64,208,176,158,73,227,27,64,169,183,253,31,63,16,183,150,70,59,80,218,6,12,16,24,20,73,254,55,23,53,140,49,185,37,106,252,2,113,225,6,187,250,197,185,166,95,200,249,48,146,240,239,79,44,115,19,203,124,189,221,124,179,93,32,255,170,155,14,251,121,183,124,31,31,203,175,179,124,28,191,57,207,255,79,178,207,247,223,236,177,107,79,242,185,145,227,128,1,22,1,227,235,45,54,242,81,241,194,73,15,148,239,135,111,46,242,215,184,253,34,130,142,189,46,247,218,238,190,89,122,38,135,108,113,253,173,94,109,7,36,131,159,203,33,163,31,220,132,254,142,107,200,181,101,73,181,83,203,109,228,98,131,237,149,51,78,130,112,150,191,174,114,234,198,113,209,85,143,220,75,159,109,118,208,93,25,224,70,135,113,148,142,75,203,232,169,244,102,33,120,122,205,229,175,139,92,65,127,203,37,207,58,14,249,75,46,55,122,97,87,29,45,210,64,71,232,1,243,183,76,229,217,207,192,69,129,205,4,39,234,49,87,57,233,36,125,90,198,111,39,232,170,93,117,64,218,32,131,198,202,75,139,158,98,243,187,215,111,91,25,216,152,193,229,199,114,216,242,194,133,249,183,92,75,46,41,115,62,166,78,47,103,243,52,90,228,122,74,38,164,229,168,48,179,245,21,51,200,24,231,201,80,199,111,140,74,102,29,103,45,66,237,56,139,65,82,193,119,171,148,4,83,49,126,122,127,48,119,60,37,163,109,233,145,174,151,53,96,78,234,105,179,215,10,104,163,101,78,92,222,70,242,90,230,203,223,118,114,153,165,227,107,123,111,237,218,77,15,176,138,99,124,161,11,203,48,182,99,43,121,155,130,230,104,155,112,243,245,248,161,43,73,115,179,92,200,33,185,27,145,116,184,159,194,48,213,221,106,196,245,146,179,6,120,42,248,132,113,74,255,65,138,231,190,21,33,150,218,116,199,142,81,24,206,30,115,102,179,161,152,40,117,83,186,30,193,168,133,180,8,140,43,16,187,213,22,61,86,90,246,58,117,3,7,209,232,232,32,187,23,77,72,236,140,208,26,223,93,101,231,209,174,172,219,150,184,189,229,234,132,86,198,12,205,93,101,216,251,32,87,193,213,9,169,217,102,245,97,205,253,237,75,77,125,20,246,190,226,19,70,57,5,35,85,132,133,33,140,191,209,125,61,17,184,26,216,99,222,115,92,12,235,238,55,212,81,233,172,42,69,176,75,96,38,168,139,75,159,51,102,14,168,91,110,168,75,173,120,1,59,5,163,192,241,25,27,217,62,185,16,73,241,155,8,41,145,33,108,5,0,206,114,103,160,130,187,88,88,116,34,176,176,222,70,44,44,168,96,96,97,21,42,95,29,15,139,201,121,242,176,175,131,135,29,172,161,126,16,145,83,68,176,180,217,62,85,100,177,176,169,214,180,3,254,157,187,31,220,39,136,141,82,45,39,24,122,27,240,161,227,114,126,140,92,68,145,4,168,37,144,148,98,47,226,102,183,96,89,181,95,163,85,41,151,210,17,21,191,7,6,194,39,143,74,14,187,72,175,183,210,13,125,255,24,76,50,58,91,132,225,193,43,23,68,226,199,57,34,145,182,136,71,190,200,66,99,118,231,58,131,177,25,20,213,121,65,107,27,28,58,38,114,185,192,100,57,180,73,101,139,147,137,33,0,14,226,200,65,18,23,11,35,224,7,188,167,11,23,56,25,146,128,41,63,28,186,208,48,249,34,227,79,148,10,219,233,186,4,137,193,80,248,80,234,167,180,87,85,46,206,66,141,175,4,104,115,86,70,183,13,230,32,251,232,129,104,199,47,252,161,29,208,38,64,169,78,29,238,51,127,51,95,232,77,180,219,32,170,17,135,231,151,112,234,9,121,80,153,77,180,16,200,219,181,180,137,184,88,59,202,153,64,108,14,238,132,55,121,139,12,138,38,205,46,165,91,158,90,32,0,162,69,230,133,166,118,25,88,106,193,126,95,166,149,219,192,52,50,3,73,171,130,38,93,45,223,249,248,174,44,30,120,78,234,33,250,207,195,8,27,65,249,71,168,204,38,75,135,171,133,22,93,165,61,3,145,54,65,100,166,243,128,4,0,88,56,104,54,25,122,85,177,61,182,216,64,177,97,148,217,36,0,69,143,110,35,52,146,146,234,166,111,38,132,39,173,157,83,154,243,245,133,41,203,135,75,49,93,49,168,46,240,146,218,112,45,146,207,10,232,53,240,217,1,113,129,244,102,63,212,93,83,183,86,221,126,221,38,109,55,115,191,233,25,55,180,232,35,98,24,220,145,208,80,193,82,1,135,173,96,185,140,8,51,170,28,84,221,129,118,105,80,73,145,113,12,36,105,146,5,141,156,47,167,206,221,64,103,4,32,20,166,94,102,244,44,107,185,149,115,43,228,182,248,160,162,141,138,92,90,12,84,209,84,143,202,18,208,117,176,217,192,112,6,244,216,247,30,197,148,29,222,34,129,132,40,26,108,210,161,156,6,47,53,216,171,162,184,140,98,118,123,21,197,229,187,208,233,178,78,12,64,89,206,47,52,58,210,240,72,227,21,250,164,79,36,91,131,213,59,76,33,21,251,22,54,145,177,101,105,161,244,4,157,51,236,166,22,166,185,207,42,167,139,150,80,250,52,92,161,214,135,73,253,128,162,104,180,200,167,46,218,232,149,225,80,83,240,130,49,213,57,48,214,9,29,165,174,119,67,163,59,234,98,8,127,45,110,150,88,146,210,205,178,91,7,120,169,10,118,202,56,10,223,131,229,243,61,162,63,176,85,151,203,143,195,105,243,242,126,174,251,61,160,131,130,49,100,110,84,245,32,119,191,246,218,188,208,77,189,136,50,238,83,9,52,102,86,149,18,50,71,152,85,104,44,116,175,64,105,49,251,129,237,62,244,28,206,184,202,93,84,97,97,59,6,87,236,71,31,38,168,76,95,232,181,156,34,106,18,57,246,36,80,243,49,18,6,134,28,36,12,111,35,17,3,99,12,34,198,50,202,87,167,169,128,15,218,83,83,241,5,52,21,159,31,188,100,171,127,24,190,150,201,113,55,176,231,175,79,244,235,83,237,89,44,98,218,179,43,222,164,55,54,109,235,213,184,126,219,214,145,243,23,220,246,87,225,138,207,177,88,238,13,41,116,53,252,114,239,73,113,5,9,191,220,219,114,249,101,36,75,127,153,131,163,254,186,198,187,27,234,193,207,212,183,216,157,109,236,207,39,255,249,59,195,196,43,110,98,185,207,96,18,6,51,244,194,59,62,196,162,211,241,186,59,111,119,135,205,16,45,246,174,83,62,158,78,219,205,118,115,62,236,182,23,168,39,218,198,230,124,8,11,139,253,230,165,143,254,114,58,109,182,187,227,121,191,155,67,90,100,196,235,121,123,218,94,78,199,57,164,190,173,57,91,149,167,67,4,121,241,67,63,111,206,99,37,143,135,253,245,112,220,143,81,64,107,177,57,111,174,187,221,229,184,61,158,212,218,188,210,148,207,133,111,199,194,140,191,252,69,63,94,175,231,253,246,192,3,95,214,119,191,221,31,206,167,57,202,166,169,158,10,83,244,97,17,35,31,97,175,15,195,45,193,240,71,111,245,120,186,10,93,139,141,224,137,159,159,248,249,137,159,159,248,249,137,159,159,248,249,247,136,159,95,176,179,136,232,67,161,226,37,163,25,155,2,189,201,45,34,222,70,6,60,53,6,12,7,60,111,18,107,187,123,242,206,243,206,193,228,99,109,83,179,11,51,253,121,122,83,139,54,126,56,95,39,101,48,249,46,79,203,62,217,63,38,202,119,173,178,222,150,91,16,204,65,230,92,53,102,76,31,10,86,255,227,190,170,210,103,95,22,88,98,96,198,12,19,74,83,124,175,222,191,237,149,251,225,64,65,158,127,167,83,212,34,49,12,14,228,132,161,251,122,134,162,168,79,165,249,126,234,72,200,119,83,173,153,228,237,142,41,61,234,145,106,173,196,15,243,162,136,87,24,211,3,61,127,158,144,97,10,32,104,66,19,155,41,96,135,153,174,165,58,156,181,153,37,27,50,57,195,166,197,41,171,71,75,27,150,189,66,134,26,141,150,67,200,184,133,78,187,25,42,205,31,204,67,112,147,113,67,180,121,102,170,81,13,220,20,95,95,61,162,117,124,240,159,37,224,198,245,96,204,48,135,87,37,97,62,217,106,144,36,39,158,249,175,109,89,92,128,108,44,241,158,210,42,161,242,59,93,43,81,176,181,198,180,50,240,229,127,186,183,90,191,134,43,116,180,141,193,195,92,237,171,216,237,212,179,128,17,224,243,47,187,28,80,5,132,0,99,16,56,21,51,82,226,39,161,49,5,102,118,146,105,192,174,0,103,128,96,64,21,38,82,176,18,252,146,221,35,3,64,199,238,83,182,22,19,15,134,121,238,215,162,44,87,89,80,243,215,117,20,128,223,14,92,203,229,213,115,79,23,36,187,31,121,183,3,100,246,192,27,215,89,118,146,160,143,229,38,39,246,229,101,208,40,56,72,81,208,28,166,3,125,222,14,165,71,77,159,105,84,121,192,52,23,253,100,209,108,150,205,83,247,86,218,124,117,5,187,69,110,0,193,129,165,135,165,132,45,11,70,13,72,183,226,228,128,178,137,228,225,10,5,233,71,154,80,200,134,248,119,75,244,141,24,194,47,140,0,238,245,179,172,110,150,104,34,27,168,238,235,96,2,93,154,94,157,9,180,205,17,241,52,129,254,110,3,14,149,87,102,31,52,241,101,56,179,203,130,114,186,20,167,1,159,104,68,38,146,123,237,160,160,193,61,123,185,206,244,188,38,94,121,54,184,175,146,249,166,249,37,221,129,91,191,130,117,202,216,24,1,84,19,249,194,221,8,87,26,191,28,211,129,93,3,5,87,63,225,226,157,69,147,193,179,227,124,242,78,60,79,214,29,123,132,156,56,122,84,183,22,35,232,38,210,22,146,70,68,14,108,157,177,42,240,16,91,196,201,249,227,236,78,38,179,197,227,116,172,69,233,176,146,36,66,200,26,186,24,126,17,118,7,155,99,255,169,88,3,182,192,24,88,162,49,147,106,145,79,50,121,197,176,115,162,7,246,152,215,219,96,150,200,225,145,254,87,26,0,39,113,255,127,242,226,179,133,157,136,116,158,141,211,214,208,191,194,210,117,194,132,198,25,68,226,57,105,231,228,174,161,139,96,8,6,219,204,204,10,249,99,17,32,220,237,21,150,129,220,36,138,254,178,107,119,78,125,11,61,47,3,227,145,151,105,137,179,198,94,147,152,218,102,238,227,226,196,245,154,49,120,54,14,133,43,235,50,51,194,104,73,151,32,48,75,168,171,219,191,180,199,43,14,40,40,34,32,144,128,94,42,6,10,114,71,229,80,9,111,41,195,229,40,77,127,167,213,10,140,34,111,241,130,1,2,126,168,40,4,104,61,111,193,186,77,195,86,46,59,61,224,1,242,20,245,6,184,113,3,195,151,187,18,190,44,239,17,228,203,124,164,216,106,72,82,136,56,156,252,227,197,116,0,26,109,206,58,0,196,159,51,102,39,124,232,142,121,218,247,69,113,148,37,181,170,32,72,208,24,0,182,1,232,14,224,91,148,182,138,18,9,101,174,160,213,188,0,101,137,202,34,38,100,159,40,1,19,138,142,142,48,157,233,105,81,129,229,176,186,194,231,11,45,93,0,224,252,11,66,166,204,79,241,54,47,63,128,33,243,242,2,31,175,47,123,200,51,125,200,43,227,230,133,233,30,56,40,58,206,15,54,220,211,1,204,38,168,171,37,178,192,130,246,57,24,231,98,148,0,169,16,38,185,183,64,18,107,2,74,163,107,40,194,53,133,186,253,32,150,85,90,136,74,34,88,194,137,26,176,221,112,87,247,216,110,197,214,164,41,152,93,117,94,39,206,129,146,28,13,107,18,80,10,72,135,137,144,101,79,33,186,45,243,67,45,22,18,74,188,208,200,54,192,1,143,170,183,176,244,75,147,41,128,75,191,133,173,144,27,189,53,169,156,48,163,27,200,68,192,113,180,136,8,152,215,69,140,128,83,37,79,2,115,179,207,214,100,80,130,78,44,23,138,120,123,201,166,144,252,225,67,156,211,76,23,51,51,118,152,121,133,23,9,17,159,20,20,128,252,50,52,107,22,130,59,184,216,168,110,95,90,88,57,90,154,210,89,22,78,67,196,27,25,39,60,8,6,113,42,198,247,104,95,40,212,35,204,195,76,171,83,90,156,255,10,192,35,142,145,70,50,231,92,169,229,30,137,61,72,48,209,213,212,132,20,180,180,0,25,13,214,160,85,11,92,254,114,45,154,67,228,98,208,107,105,131,94,202,127,35,188,192,198,2,86,214,231,6,182,134,197,193,128,225,64,217,101,3,65,116,133,204,76,6,177,248,152,12,132,5,113,232,13,205,62,196,146,110,48,159,88,188,156,51,40,200,230,225,80,8,116,224,17,121,113,166,145,202,76,254,36,27,144,45,168,99,9,85,239,18,64,250,234,112,36,51,3,187,69,209,112,11,250,75,217,71,92,129,25,226,135,231,157,166,1,144,90,208,57,14,38,142,199,40,103,206,81,91,186,42,147,208,225,46,42,176,65,168,241,63,131,216,98,127,147,196,143,37,142,97,91,132,120,53,34,199,225,72,19,214,145,130,8,10,225,144,153,132,55,160,73,44,222,127,136,172,57,189,148,230,166,153,97,51,174,155,89,198,167,80,9,26,0,217,204,208,63,173,184,192,128,25,220,60,0,104,217,240,20,0,133,38,85,100,81,147,109,102,108,64,15,199,195,242,147,89,151,242,208,64,107,22,195,164,45,113,0,25,16,161,121,34,48,67,26,45,194,104,8,76,50,208,33,156,191,8,5,148,231,38,135,165,141,62,43,102,143,109,134,94,233,84,158,27,210,104,29,244,93,250,91,227,39,219,249,107,240,120,70,246,29,73,40,132,163,161,46,149,4,53,116,170,18,179,150,226,85,178,152,41,103,34,173,13,245,181,88,67,138,13,108,32,33,193,74,11,79,13,216,197,201,21,140,118,214,28,163,183,213,69,122,161,192,182,104,83,67,174,42,77,171,20,204,79,11,164,48,144,201,64,64,27,2,219,209,224,66,167,59,82,94,9,254,100,20,217,158,15,190,44,152,248,115,147,173,12,227,28,57,15,236,153,27,228,148,242,59,83,26,98,69,109,122,13,76,211,132,43,34,148,59,145,134,78,101,126,108,70,205,131,36,43,135,13,64,166,237,169,151,115,221,3,48,27,117,83,129,212,167,55,222,80,183,230,52,76,27,124,185,53,155,82,0,194,78,57,212,238,240,45,75,41,178,156,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,146,243,121,215,102,79,239,212,136,54,50,77,101,250,171,100,96,46,61,8,12,94,19,40,138,208,97,13,233,16,223,22,171,27,142,50,16,22,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,36,221,255,112,177,148,9,238,227,101,187,25,108,230,171,78,42,159,166,23,42,115,186,46,235,181,11,113,175,161,165,21,180,64,134,173,127,186,107,8,63,79,114,56,201,204,108,33,154,98,42,58,10,65,158,77,57,218,218,57,101,246,37,155,156,202,84,178,167,92,0,22,64,175,242,183,229,65,224,60,13,169,141,148,218,72,162,193,150,43,107,162,157,7,38,164,182,20,162,19,243,182,100,30,165,97,100,42,187,83,41,97,67,46,19,81,109,132,222,36,22,175,8,207,105,229,41,36,156,210,152,52,240,66,192,161,40,21,57,57,164,163,64,100,224,177,244,255,144,118,7,27,129,178,129,120,203,156,7,235,154,47,5,224,203,19,111,206,134,2,93,158,82,210,91,200,163,137,116,190,45,4,86,32,109,46,179,214,157,176,35,202,166,161,153,211,169,180,188,90,173,20,214,10,106,69,148,171,210,30,32,44,55,152,31,156,51,42,126,213,153,255,139,38,129,248,21,24,111,210,246,119,193,79,127,187,15,169,17,85,86,212,184,33,183,187,124,127,184,95,209,238,48,119,93,190,165,66,33,217,189,195,228,34,115,73,65,12,21,125,100,4,99,103,187,171,166,89,124,200,132,79,253,130,28,217,157,238,233,123,72,224,9,93,82,204,47,136,222,15,154,16,75,218,20,114,40,32,226,64,99,173,168,76,91,56,215,202,204,31,148,27,146,218,51,166,10,202,87,153,233,38,114,19,231,83,181,236,101,190,237,214,207,99,108,27,134,1,241,201,60,28,38,123,164,2,88,200,62,131,84,17,169,45,104,14,214,36,189,78,34,108,5,71,238,7,119,141,114,58,233,128,18,237,168,2,169,111,59,111,113,218,85,148,42,73,233,98,28,178,223,86,39,196,147,171,250,33,76,180,86,110,237,233,183,102,186,152,100,170,164,60,78,214,224,236,78,68,52,238,191,170,199,161,27,222,160,98,17,41,21,5,47,56,99,84,47,71,25,77,10,162,51,53,145,59,198,38,13,80,163,37,50,152,44,45,12,0,54,19,185,133,174,92,116,86,166,174,35,159,121,44,255,7,47,171,51,164,172,189,76,205,193,121,183,74,145,179,83,191,145,224,128,45,11,165,41,232,50,227,211,130,112,237,170,83,162,162,251,170,8,23,1,21,174,17,115,70,170,136,151,101,178,42,181,97,55,186,140,162,211,236,124,113,85,232,22,157,111,208,10,87,165,49,119,27,138,207,44,164,89,50,68,7,145,160,42,235,116,105,174,105,11,25,108,216,133,130,84,117,65,147,71,153,138,201,103,28,220,17,28,76,27,145,48,75,141,141,100,25,70,54,43,93,36,106,55,121,237,202,138,175,113,235,142,214,27,86,169,178,101,51,239,24,39,152,34,173,42,177,40,183,168,94,37,140,133,118,122,126,84,111,41,52,156,41,60,205,135,230,63,90,227,5,73,170,169,162,207,170,120,228,252,226,141,137,66,106,250,158,113,203,24,47,98,196,140,47,51,58,53,254,50,57,9,227,20,66,250,145,230,195,128,121,131,192,55,212,188,178,10,225,210,32,153,133,47,240,24,15,130,228,66,243,91,138,220,40,124,59,201,172,8,112,171,82,30,119,62,118,21,186,58,165,179,172,205,201,44,64,165,179,13,49,110,8,54,93,25,17,94,129,149,152,43,201,190,97,137,90,87,234,82,41,80,33,82,133,140,117,214,153,198,166,83,155,138,41,168,227,108,210,220,20,14,201,135,13,22,62,50,32,32,240,196,81,52,191,88,61,148,9,59,95,144,181,33,141,224,153,247,59,203,126,124,18,225,141,15,72,68,85,4,90,151,136,122,250,236,108,96,22,209,226,229,139,124,103,59,216,201,40,204,90,89,154,214,59,78,255,17,142,66,66,110,203,34,79,36,199,42,18,48,214,80,194,7,244,50,141,246,230,134,146,135,112,125,194,236,89,46,35,68,212,240,133,157,137,177,88,33,243,14,91,131,176,120,97,190,151,231,112,84,5,221,190,207,187,217,80,191,74,32,43,17,213,85,78,126,100,62,143,13,92,20,205,64,34,65,149,134,84,42,83,184,250,196,247,27,133,141,206,212,4,75,121,181,170,152,221,136,226,149,212,183,146,52,206,49,192,8,183,201,25,74,49,74,87,0,8,158,224,255,45,33,175,187,236,160,5,168,77,207,39,229,29,25,114,215,253,248,88,221,198,250,52,229,125,77,104,157,55,157,165,137,200,98,60,217,184,117,241,32,227,150,172,186,101,244,149,209,67,133,164,2,106,21,26,51,219,87,89,195,14,219,86,140,220,232,11,89,169,216,106,29,121,26,61,192,128,189,38,216,175,162,113,187,200,94,25,193,105,131,28,58,58,127,15,117,232,76,81,26,174,255,239,44,251,217,246,159,156,3,178,239,64,114,45,200,190,7,64,102,148,66,83,119,135,155,142,121,62,136,214,58,12,20,132,95,8,66,217,212,69,222,79,88,32,17,239,170,95,104,120,154,194,247,36,206,168,178,96,149,77,195,52,4,29,146,238,108,167,76,166,48,39,214,148,180,74,183,21,77,69,31,213,114,176,13,159,187,162,37,99,78,187,114,227,149,99,231,165,147,70,113,70,216,158,151,29,180,239,243,5,55,206,61,0,71,170,48,0,11,236,52,29,154,23,54,89,34,150,54,242,105,80,137,214,120,115,42,38,96,179,100,27,147,83,219,54,94,39,141,255,197,13,55,141,168,227,107,87,168,46,100,179,220,21,38,42,220,52,176,181,162,124,11,94,56,164,192,11,51,127,103,26,238,108,239,134,74,3,81,211,138,12,228,36,243,38,133,175,63,185,201,47,167,98,113,180,212,166,111,161,104,7,15,186,134,170,139,8,170,138,226,150,212,162,183,130,0,27,39,188,172,214,169,138,159,164,25,234,76,254,212,203,22,43,23,55,61,70,211,124,184,179,96,209,174,82,76,47,145,168,48,146,85,228,71,137,11,170,59,90,210,86,102,117,102,232,128,218,10,50,86,111,156,206,146,91,90,60,71,11,104,105,85,42,65,12,58,223,149,253,204,156,18,243,53,29,223,195,124,209,10,235,148,88,171,204,123,37,78,233,42,160,43,174,248,219,85,30,57,173,103,113,204,236,92,55,147,111,103,114,254,44,144,217,192,110,4,26,234,131,219,115,216,69,171,174,89,241,28,100,231,194,27,206,135,189,227,162,59,53,102,167,199,2,130,220,185,155,137,229,239,10,44,81,20,16,226,74,70,83,77,148,13,135,247,20,89,146,163,196,63,191,227,191,39,122,247,29,167,124,101,100,237,56,49,5,50,60,164,229,240,120,56,24,249,177,186,20,229,231,137,102,60,29,10,2,156,66,213,6,231,184,201,15,142,88,95,213,14,69,151,24,70,64,92,61,136,29,10,24,13,242,176,111,7,156,125,210,0,35,237,66,0,3,153,149,23,80,146,201,220,246,88,119,6,246,134,120,81,171,183,196,166,35,109,11,129,223,202,225,92,56,16,81,249,168,5,232,231,82,143,26,130,83,178,144,85,84,138,108,172,163,17,95,56,37,201,182,82,157,63,185,148,76,17,203,41,45,4,124,215,152,169,9,130,220,112,147,14,195,138,248,16,56,3,153,91,146,189,136,217,189,250,7,201,226,168,135,66,65,230,8,147,97,61,66,38,8,28,112,78,174,171,206,75,217,222,115,230,119,30,66,26,109,133,230,32,138,154,94,63,214,179,64,92,107,104,72,161,245,128,4,82,12,123,82,18,114,144,50,85,127,42,123,67,113,148,180,59,233,46,230,10,22,154,146,22,123,54,80,96,58,21,160,129,15,48,77,155,155,164,25,36,163,124,160,163,72,177,158,193,19,27,234,68,138,203,4,151,10,158,145,210,88,113,165,55,119,115,2,8,80,29,29,43,5,103,37,118,112,30,121,175,195,7,144,203,238,80,76,210,244,108,173,249,203,208,166,37,93,128,3,93,70,181,46,243,191,101,203,106,71,208,84,91,224,69,205,91,61,121,201,217,105,58,244,112,109,111,10,189,187,63,184,183,129,233,10,248,171,155,35,41,30,202,190,12,187,176,223,168,124,111,87,181,17,212,154,128,75,59,40,116,186,44,205,202,4,181,179,88,103,186,89,142,186,102,121,97,195,226,175,131,70,92,154,237,85,226,121,123,111,184,130,112,81,84,135,10,147,144,246,72,213,52,138,222,1,241,86,182,132,203,0,17,251,110,148,155,235,31,215,189,23,247,102,216,187,107,219,187,32,128,140,36,34,22,137,88,166,32,161,136,163,86,208,88,65,117,21,31,86,156,217,97,214,128,126,19,106,142,120,123,13,183,23,244,95,8,68,115,211,2,225,237,62,104,54,75,77,94,88,48,118,33,161,129,204,118,84,152,136,244,10,25,79,132,190,176,2,1,118,69,82,150,86,13,149,184,45,98,177,218,212,26,98,196,39,106,67,83,166,13,43,75,138,4,114,41,144,22,21,148,167,50,34,197,139,41,115,100,218,33,169,125,16,12,141,156,155,107,182,244,41,3,166,54,34,231,209,34,253,174,103,121,68,157,99,141,122,237,157,190,121,203,199,41,105,110,80,111,159,186,199,189,103,109,152,121,130,86,180,145,177,74,64,57,220,57,185,175,10,120,50,125,219,149,88,1,236,143,144,166,161,99,136,11,53,142,52,187,163,233,149,228,71,166,160,178,13,137,175,232,24,15,133,124,236,123,219,109,169,155,228,175,49,3,107,72,215,63,187,174,125,155,37,230,84,83,192,72,214,194,113,226,44,221,27,134,145,234,225,18,188,18,195,34,10,194,233,136,56,163,195,120,234,233,214,109,231,154,254,151,17,134,73,88,155,43,20,72,227,90,138,105,12,247,6,26,244,164,12,238,205,115,32,174,3,7,49,174,243,213,116,169,237,56,65,66,5,148,0,71,13,165,21,149,147,68,29,73,215,78,188,245,239,44,27,38,243,154,202,134,33,47,92,80,134,52,186,144,215,152,100,163,175,64,244,76,178,241,251,172,26,118,31,124,125,226,34,87,82,141,247,19,192,216,71,22,185,18,58,251,165,65,59,77,229,235,42,197,4,46,242,186,160,248,103,246,155,219,202,79,240,27,87,74,67,35,180,213,243,211,170,114,210,248,123,88,24,135,202,83,200,227,213,98,194,93,93,229,213,113,149,235,55,15,28,23,2,174,112,176,150,107,170,219,203,180,87,204,212,121,66,176,175,211,218,104,231,158,229,44,205,174,11,147,231,228,104,212,34,1,217,130,236,138,151,154,203,14,23,134,253,214,19,55,142,113,169,47,55,178,239,152,20,56,39,102,100,72,35,46,78,141,156,75,45,208,152,208,108,204,167,122,73,201,81,215,144,16,91,91,2,183,135,217,87,223,52,75,29,170,39,203,89,2,201,196,239,33,22,217,22,1,125,64,242,253,57,20,59,11,49,181,249,202,247,114,114,117,158,85,211,116,165,20,215,194,136,233,48,73,248,28,13,81,10,166,6,85,49,40,36,24,191,6,112,49,199,130,152,191,110,12,7,134,105,21,231,17,254,196,113,239,55,102,206,230,32,204,18,230,45,204,37,220,20,100,221,212,128,222,108,145,180,140,117,153,3,20,52,80,18,161,168,1,179,0,134,5,72,35,16,71,40,111,55,66,92,195,219,9,158,238,226,119,109,159,6,134,119,52,2,7,17,199,59,150,184,176,188,210,246,165,237,62,84,62,63,2,37,107,111,102,13,113,215,188,144,183,34,103,254,50,180,103,193,125,172,245,156,203,75,39,205,26,25,164,198,229,232,6,120,101,145,138,200,188,88,88,107,196,23,33,37,230,78,100,159,29,103,119,191,107,89,129,164,195,170,122,27,173,170,246,55,44,170,244,230,245,9,50,207,220,223,175,137,95,50,55,52,242,12,157,129,222,136,136,183,80,21,87,16,154,186,215,163,1,146,39,27,87,17,224,116,60,110,88,176,236,55,230,165,132,58,246,148,64,47,244,11,1,43,26,60,78,110,117,218,192,46,110,234,68,50,137,44,40,206,180,184,0,251,165,156,95,177,5,102,39,82,209,25,166,194,196,0,33,114,232,47,84,153,236,72,231,157,21,100,38,46,177,243,173,115,149,230,137,238,22,162,89,169,54,119,129,255,75,42,119,232,227,204,107,117,58,213,216,223,9,91,99,204,142,245,113,175,224,137,205,29,134,234,181,204,67,156,173,110,62,235,132,79,229,151,49,222,80,179,249,37,166,87,51,37,144,114,38,105,22,149,0,183,161,43,65,46,141,240,140,230,0,48,183,3,209,13,64,45,227,176,238,244,113,204,123,162,217,54,117,111,213,89,46,11,193,43,5,23,110,143,231,225,155,246,123,38,142,165,29,107,14,199,46,179,213,204,104,4,246,213,68,28,119,17,109,189,90,160,217,128,229,72,179,49,148,64,180,151,217,120,117,52,91,248,162,39,205,126,53,58,142,43,248,100,136,34,200,204,139,15,183,52,168,127,150,121,110,169,204,71,245,236,112,140,98,37,242,248,178,164,192,156,77,10,217,191,67,155,245,130,26,32,154,82,78,34,179,13,179,227,153,121,162,185,14,67,205,28,75,202,110,140,43,140,143,245,58,20,157,135,78,78,83,42,46,66,45,158,170,138,147,201,17,154,243,164,116,92,30,192,18,225,77,203,86,185,136,187,253,251,2,128,90,83,221,65,216,188,150,30,209,81,156,133,16,212,202,226,21,236,174,172,27,9,102,37,8,222,158,241,210,87,131,230,7,146,150,10,100,49,225,34,196,119,163,148,33,204,1,105,55,85,82,103,213,24,164,108,228,210,159,107,186,156,10,133,128,174,60,26,120,9,181,9,186,3,35,23,88,86,168,35,132,146,34,189,52,20,7,104,66,134,234,57,237,166,100,162,234,100,6,41,39,135,113,181,72,113,218,65,77,110,207,32,174,90,24,91,62,205,206,135,137,86,119,99,115,50,245,120,84,107,49,157,5,188,28,45,59,3,42,217,112,12,26,210,175,81,4,0,217,52,221,123,123,38,132,51,182,40,230,217,229,148,87,6,244,238,83,111,138,155,208,130,142,113,94,82,6,133,5,60,176,180,190,87,116,117,104,235,78,237,212,92,17,44,27,149,191,212,20,251,84,117,1,32,210,181,208,73,80,129,218,40,67,95,176,215,109,3,134,148,100,198,254,82,150,209,220,148,206,148,171,205,197,118,52,104,229,249,40,93,37,220,96,67,36,15,146,149,211,138,44,224,152,146,93,199,203,35,24,201,182,50,225,2,139,43,42,169,122,216,132,13,101,32,249,163,216,38,159,38,223,112,152,239,237,120,79,68,5,139,171,9,7,39,43,74,33,125,16,178,97,44,234,113,10,240,21,167,145,16,0,166,172,119,200,183,131,163,166,18,207,14,50,116,173,235,238,46,110,10,238,220,194,29,20,208,18,45,159,92,80,108,93,149,169,46,248,198,244,250,164,172,28,125,130,50,83,90,144,83,124,104,59,237,127,219,137,138,41,198,1,160,138,238,100,14,1,196,139,106,140,22,216,13,220,213,208,188,172,8,141,33,250,219,167,124,26,15,160,218,92,193,135,13,206,164,113,10,115,4,127,1,0,32,238,166,105,41,249,254,166,21,158,126,107,208,229,82,139,169,239,60,252,106,52,41,134,224,250,51,208,224,81,217,16,228,162,164,89,137,157,82,196,82,49,192,26,146,152,168,49,158,132,203,56,14,2,238,87,220,238,13,170,25,36,98,100,37,74,200,219,34,92,7,188,83,97,82,10,35,211,113,59,45,83,4,28,63,229,32,243,130,226,18,70,58,243,169,9,71,57,70,178,91,114,191,176,85,56,67,176,129,10,35,179,105,38,224,154,71,166,93,245,68,10,75,155,38,32,101,216,178,27,42,194,128,157,131,106,217,142,38,247,130,227,46,48,38,211,189,69,78,201,232,121,219,146,89,79,202,55,171,214,19,230,88,128,151,66,30,110,184,254,16,82,142,253,182,244,239,54,188,91,76,91,228,237,58,238,143,41,77,101,32,173,102,15,59,45,217,5,66,98,144,224,106,137,251,152,35,57,162,32,64,218,139,86,137,163,104,58,50,216,81,75,40,186,40,109,246,36,16,156,167,59,206,18,165,143,98,210,101,4,136,34,107,141,34,241,213,111,80,41,38,102,228,51,8,238,151,243,222,184,123,23,143,165,75,143,94,213,118,51,47,64,136,84,181,134,112,51,195,119,232,14,107,16,103,50,2,10,112,53,207,179,185,158,97,146,100,218,58,246,193,50,45,115,248,176,241,15,224,118,189,232,5,204,104,54,84,5,37,133,52,223,30,230,186,55,185,22,216,240,2,128,154,72,71,10,49,187,46,92,234,113,99,10,11,235,88,157,52,36,64,7,34,16,39,130,152,45,52,57,41,131,153,237,60,218,233,154,25,62,28,130,180,216,174,227,131,132,136,38,8,184,17,63,2,19,49,47,166,45,190,97,148,61,139,45,200,50,75,43,76,163,2,235,100,12,79,178,116,15,230,193,150,72,45,102,209,219,93,23,218,163,43,13,248,7,77,162,218,52,122,109,142,6,143,247,187,51,151,109,203,166,200,2,131,14,9,183,51,189,45,101,36,51,201,242,164,243,158,97,218,91,114,10,118,226,25,136,27,48,209,139,216,129,134,253,168,60,74,195,200,16,88,6,182,137,76,190,85,106,44,140,84,199,109,53,60,153,121,155,42,103,178,206,222,209,228,202,116,123,204,163,115,138,16,3,29,161,17,128,0,94,114,50,181,209,100,155,118,206,92,227,40,58,58,0,244,48,135,71,121,146,189,201,144,147,95,223,195,62,231,248,76,129,192,133,229,211,112,4,238,225,154,234,136,22,178,127,72,56,54,102,151,36,7,82,212,204,152,66,98,73,156,147,104,216,148,142,157,105,184,158,142,57,106,120,40,71,88,19,33,120,19,9,122,69,246,107,36,68,117,16,226,64,171,14,213,118,24,217,80,118,139,208,43,202,103,130,144,8,198,170,92,10,167,15,230,138,188,41,77,80,20,123,235,116,79,197,199,92,20,67,184,129,5,104,216,9,120,56,179,240,10,123,78,174,24,16,47,213,80,211,74,114,153,46,179,77,199,28,11,60,175,14,171,192,42,11,208,49,10,29,59,81,203,90,117,226,121,35,197,55,178,254,45,254,136,152,40,171,8,82,14,225,28,38,182,96,85,208,103,62,174,97,247,122,29,74,81,152,76,36,67,229,26,152,17,93,97,85,75,246,50,160,57,118,9,1,126,129,30,15,44,118,200,44,130,152,26,206,84,10,83,224,236,141,85,210,228,163,148,8,25,5,102,33,43,114,52,22,75,48,141,193,90,152,122,134,18,48,178,227,36,50,28,202,96,188,130,213,106,129,45,140,106,18,193,18,73,153,2,193,131,228,220,129,49,71,140,230,101,96,155,26,210,158,120,67,170,198,129,155,115,193,8,99,163,104,78,17,109,195,186,106,107,74,25,91,96,255,37,154,234,176,104,54,3,234,160,218,88,253,247,228,181,252,86,206,126,221,96,200,42,215,214,202,134,85,128,84,69,171,15,222,90,230,184,120,20,247,86,188,104,120,29,35,98,68,90,76,230,164,237,58,213,63,52,54,227,118,136,240,26,226,167,12,22,115,23,137,100,110,250,43,206,72,103,226,9,36,73,168,59,82,214,52,163,71,128,135,170,228,174,138,240,70,91,222,232,212,27,205,123,175,159,207,250,161,94,139,212,40,155,26,94,146,87,97,89,152,170,161,7,72,130,36,195,134,181,112,71,211,147,150,226,130,64,157,76,225,201,241,107,164,175,119,170,16,245,251,177,197,244,134,193,68,16,251,55,237,253,161,146,35,144,13,82,94,100,79,188,89,237,133,113,166,5,148,185,139,29,148,13,92,119,187,87,248,123,11,247,68,149,105,73,3,87,53,249,69,189,86,20,112,96,141,67,75,213,227,209,141,204,249,183,216,255,162,226,169,83,77,37,237,213,45,45,23,179,153,45,43,26,152,213,85,150,150,73,1,24,55,94,27,160,22,207,153,106,66,118,96,139,99,94,44,69,79,52,106,13,107,118,146,9,230,183,178,195,204,94,84,253,91,167,164,155,185,232,60,92,142,242,59,126,109,226,5,69,147,77,33,72,127,185,238,138,226,12,227,218,177,131,79,228,32,90,45,85,85,102,85,70,163,225,70,248,242,225,142,204,108,180,26,54,197,253,148,72,79,227,169,201,89,140,43,225,79,115,46,87,34,64,76,157,143,3,231,248,180,89,131,130,221,44,111,50,193,2,49,141,190,57,43,71,211,176,61,129,55,106,120,167,200,92,117,26,69,168,182,59,101,80,150,99,26,97,167,51,106,53,150,47,86,26,117,106,165,168,120,234,132,38,152,134,42,99,221,51,224,29,163,206,234,193,78,129,24,52,140,107,106,200,212,133,208,173,160,64,140,82,70,39,136,180,162,74,212,50,178,26,178,19,84,96,165,20,243,39,51,171,112,130,211,149,80,58,203,89,67,77,194,99,61,18,2,75,40,139,134,121,31,112,188,105,74,154,109,69,18,171,184,210,216,33,73,245,87,21,105,176,161,69,133,39,87,58,6,79,65,184,11,178,61,109,84,229,210,41,247,182,69,50,184,41,195,14,177,169,241,169,131,211,91,97,157,51,115,157,84,137,24,123,173,58,232,218,166,106,78,173,6,77,12,156,8,107,232,139,153,163,27,29,101,229,155,87,143,225,172,207,217,80,27,245,136,171,234,198,70,43,217,152,120,227,245,59,207,35,90,225,133,200,152,216,11,193,11,95,108,63,106,163,46,130,41,234,76,125,170,203,163,59,73,213,55,67,23,2,58,101,152,51,251,159,52,46,42,197,133,37,230,241,12,254,47,157,107,132,165,31,205,92,114,227,91,84,253,143,178,135,210,84,182,231,242,214,174,249,156,233,65,98,70,9,69,237,54,3,89,201,107,117,83,161,124,130,114,90,14,178,229,153,225,60,142,97,103,2,19,34,69,164,174,171,165,9,40,19,186,37,28,93,142,203,121,98,149,115,12,167,194,52,107,234,165,108,219,158,72,10,196,33,168,166,136,155,180,92,172,196,149,118,94,110,141,179,88,113,102,41,238,46,64,93,36,75,3,15,145,144,14,152,34,1,87,121,56,175,106,27,238,115,87,62,236,41,252,80,158,111,32,46,118,134,66,164,127,182,117,207,169,182,49,147,10,36,10,136,107,98,228,138,184,105,125,114,173,121,236,39,213,139,8,229,106,179,18,163,213,116,216,188,38,186,14,34,8,118,7,34,87,200,100,80,24,164,200,172,49,55,87,184,61,230,7,41,130,109,66,178,37,121,101,23,240,66,2,50,149,224,25,152,203,141,108,36,27,142,77,170,54,26,214,18,192,102,224,181,231,7,202,51,118,75,72,28,244,3,211,96,209,27,30,170,70,191,81,252,199,219,195,140,209,88,36,102,160,33,93,140,212,103,43,6,137,206,108,209,90,55,248,142,32,36,141,23,65,35,15,37,153,41,9,85,134,45,130,211,107,81,101,21,53,81,213,36,101,109,83,241,104,136,253,37,165,153,34,227,86,102,204,156,106,82,63,70,5,229,154,26,179,81,118,118,58,209,78,115,90,68,17,196,182,38,190,47,136,47,149,87,172,28,101,195,119,70,238,180,231,95,157,73,35,22,135,197,58,136,19,156,132,144,231,24,118,246,206,195,6,153,185,131,85,99,186,244,88,238,111,114,210,237,13,33,77,83,53,170,116,150,151,117,95,66,50,68,53,230,170,198,49,40,140,14,74,105,181,207,102,51,193,138,19,199,29,190,30,108,75,104,76,14,171,118,137,91,70,157,198,242,211,216,135,26,43,18,132,209,169,113,151,11,185,231,52,57,217,242,157,216,135,103,54,229,238,244,122,253,21,165,120,175,57,207,218,245,85,13,252,13,95,135,234,15,209,249,76,172,248,85,68,9,204,189,134,87,20,249,189,169,33,217,35,138,201,162,213,124,100,138,27,201,114,71,182,153,172,175,210,126,238,31,228,161,42,0,146,144,216,10,145,44,101,174,138,162,235,18,212,13,19,70,181,114,80,239,164,235,2,169,23,141,252,146,25,236,140,10,141,181,128,50,252,179,171,6,109,144,142,87,104,73,122,103,242,239,140,17,220,11,144,172,168,147,204,26,203,162,211,108,244,158,5,71,87,68,222,232,50,162,188,78,242,252,154,200,159,129,34,47,76,103,161,170,164,191,97,15,108,40,119,86,150,104,249,32,46,129,216,176,203,55,184,234,192,125,55,230,160,104,47,90,49,42,117,171,221,67,69,227,47,82,157,74,104,124,178,29,212,109,72,86,36,36,14,11,201,208,170,168,87,5,194,86,110,236,4,204,78,16,69,182,61,179,5,112,27,203,181,54,23,156,58,196,244,195,100,193,106,165,113,64,68,57,79,185,63,22,217,193,137,178,49,220,216,85,82,110,187,91,122,158,32,49,148,80,106,146,149,76,185,43,19,81,37,247,40,224,247,42,0,86,18,144,2,11,154,132,78,213,144,180,17,171,58,139,58,147,221,124,215,117,105,150,175,95,229,48,9,2,147,34,42,73,6,203,237,101,165,4,76,163,46,232,181,10,157,246,161,106,41,58,16,175,235,220,67,67,3,51,218,146,43,12,178,254,8,251,71,153,151,27,1,100,57,204,204,180,201,238,62,103,151,114,7,183,25,119,198,179,163,156,13,57,212,129,155,177,196,238,196,91,167,73,165,38,199,24,170,242,88,161,137,157,230,166,93,176,114,187,218,167,174,223,186,166,212,52,175,196,98,30,60,73,147,43,130,241,1,76,51,64,146,12,67,152,109,125,221,245,191,137,15,232,98,43,155,0,204,18,164,25,167,10,176,125,35,96,137,155,214,165,19,158,119,190,152,172,148,103,205,217,94,87,182,87,55,235,1,166,56,152,81,19,222,210,17,53,158,41,243,239,89,114,136,114,145,174,220,7,165,190,42,28,214,149,106,150,179,93,244,14,54,18,0,53,64,214,128,98,152,57,225,33,149,212,203,164,201,212,183,211,221,109,216,188,173,219,189,95,227,80,107,224,67,43,52,166,133,73,171,119,115,125,221,144,213,123,191,117,78,114,53,132,173,141,33,224,171,73,187,40,103,61,45,80,155,2,56,147,168,172,156,79,33,180,125,148,109,13,196,77,177,186,49,154,247,6,206,206,152,189,98,255,134,68,116,116,164,97,80,42,23,67,131,87,155,142,40,225,132,219,59,173,128,91,187,155,234,166,107,246,102,221,190,43,226,120,4,63,18,236,59,185,159,212,2,107,186,131,198,79,181,115,102,13,154,158,86,23,228,170,162,6,177,72,8,130,230,155,22,2,36,18,67,91,128,174,168,206,58,253,90,81,193,37,37,93,112,41,104,93,14,220,35,97,93,118,47,242,61,187,45,118,142,141,85,67,210,40,27,26,133,68,49,28,23,211,50,207,202,157,85,9,122,127,21,246,103,9,254,46,171,94,49,166,26,167,90,131,102,116,160,19,145,121,156,249,228,112,123,237,180,108,35,89,147,3,167,123,185,47,183,28,238,26,115,203,33,153,43,229,51,49,99,104,72,104,162,141,175,47,165,201,130,243,158,41,77,94,75,74,19,72,176,84,97,57,148,194,182,90,65,94,138,8,27,148,11,168,88,5,191,148,146,112,230,64,180,114,17,190,207,115,121,111,243,189,100,187,191,121,234,184,120,103,22,13,170,242,11,217,219,245,100,51,205,162,151,78,180,2,157,212,191,84,169,229,151,38,57,68,199,35,122,145,113,229,28,135,203,189,83,142,195,215,152,46,233,153,171,253,117,165,56,44,57,213,168,4,13,103,80,147,253,236,182,240,41,25,88,44,141,234,104,225,131,8,133,45,213,63,130,46,58,222,15,194,28,56,17,118,91,180,2,55,236,74,74,233,249,166,112,129,4,194,240,26,160,156,186,238,22,234,254,2,236,169,232,165,165,237,43,235,80,184,71,55,18,20,222,153,177,173,86,139,152,89,220,66,198,54,144,117,78,216,54,122,240,250,80,16,74,71,62,81,208,171,40,23,97,20,231,131,245,34,150,237,177,236,84,219,119,95,162,213,184,146,103,107,215,106,69,76,191,64,235,39,75,241,12,54,48,33,31,148,249,248,237,10,137,236,64,168,239,187,175,29,253,41,110,220,87,48,193,13,242,141,129,154,127,179,1,227,250,191,225,60,27,218,250,236,243,220,3,214,111,63,207,237,128,127,251,121,238,235,241,124,252,62,250,149,149,113,158,68,227,73,52,62,72,52,94,87,197,36,11,210,221,63,92,191,17,64,52,164,184,231,140,127,158,126,139,30,64,204,40,143,214,115,83,55,60,94,207,31,117,206,205,155,111,129,246,199,150,121,165,245,187,42,162,234,129,179,55,111,191,29,55,220,224,184,205,31,246,227,138,35,210,101,63,46,255,167,31,255,231,251,31,222,46,173,95,241,223,250,28,7,253,113,105,24,119,25,7,198,211,255,252,230,253,247,223,124,247,246,221,187,159,190,146,175,99,230,254,254,238,159,95,45,199,255,219,120,157,229,196,221,232,222,188,145,12,243,79,63,190,255,254,135,159,191,249,233,221,187,247,223,252,227,221,251,119,255,254,227,223,255,242,254,221,191,244,230,127,196,145,114,200,207,223,190,255,207,183,239,254,250,230,237,127,189,249,233,135,55,99,134,191,26,127,201,66,253,247,143,239,245,171,140,117,233,227,56,109,252,226,105,252,226,58,128,153,115,26,100,92,44,208,133,192,63,143,120,30,241,60,226,230,17,159,74,95,242,169,196,188,143,20,47,191,144,150,70,242,119,127,137,251,126,148,214,226,19,222,183,247,52,248,237,239,219,155,0,126,123,45,92,95,224,237,179,107,45,212,228,45,158,105,22,243,170,158,69,198,28,189,236,195,36,35,84,115,152,6,6,205,195,36,180,188,57,76,12,113,187,112,152,56,6,60,15,123,140,195,36,180,233,246,97,154,222,173,57,78,156,68,76,78,62,254,135,180,105,204,77,60,78,252,247,14,143,112,220,175,87,50,77,215,79,113,199,124,217,66,225,112,238,185,94,207,231,237,112,8,220,158,14,155,147,121,246,108,182,151,227,238,176,61,93,175,187,237,5,249,155,186,182,238,108,51,246,47,206,167,15,48,250,205,113,127,61,30,55,231,203,118,14,254,176,63,140,1,30,46,151,29,26,251,182,230,100,11,19,19,135,222,199,93,250,253,245,176,187,156,183,155,235,158,214,190,52,222,94,252,23,63,1,143,188,111,115,223,221,111,103,40,93,95,60,220,157,206,35,26,115,115,57,2,146,68,19,181,185,158,182,251,205,158,225,171,109,204,39,123,60,134,145,171,151,59,240,203,121,115,217,31,246,199,205,145,199,62,112,202,121,55,126,5,220,210,54,54,231,123,80,201,248,249,210,199,127,222,109,246,251,211,117,75,216,230,116,221,159,54,251,227,246,168,45,77,67,62,201,82,134,136,155,217,227,174,248,230,114,184,158,28,172,155,166,118,181,225,98,247,16,123,252,112,190,236,198,251,229,16,182,249,249,52,151,54,253,108,206,25,177,93,51,243,247,19,35,127,94,203,221,82,194,232,193,40,56,66,152,71,4,205,163,205,249,35,90,166,61,41,194,99,112,250,187,227,72,89,112,221,239,9,19,15,74,179,191,28,183,251,237,101,182,174,52,118,231,163,214,195,67,176,250,231,221,233,114,58,159,206,71,22,116,206,131,214,94,246,87,195,182,93,75,119,230,204,123,241,184,171,126,216,108,246,87,112,20,77,67,119,158,5,40,63,192,130,63,240,78,45,93,183,88,166,161,142,124,249,208,118,57,93,206,231,195,129,57,220,205,225,178,29,242,203,105,235,44,236,74,99,115,186,22,175,255,122,187,196,12,191,252,209,31,119,151,227,102,127,24,73,136,198,56,108,248,215,193,209,95,55,23,226,224,87,26,187,243,45,86,120,76,192,3,200,55,203,2,158,119,135,161,42,153,242,139,2,192,230,122,60,111,246,174,75,74,13,221,121,22,77,179,44,253,195,161,155,151,183,103,95,106,56,197,125,225,58,203,220,124,202,144,157,79,19,177,243,145,214,186,125,111,141,253,220,198,186,48,147,191,92,203,143,74,10,75,250,138,199,218,156,150,78,120,176,112,15,178,55,109,253,190,80,208,165,32,96,207,169,162,185,218,173,90,4,253,178,9,182,20,58,154,103,209,242,50,206,115,53,19,47,82,114,232,245,61,159,71,248,115,201,20,146,78,158,249,121,66,182,158,137,119,99,191,236,124,238,185,149,9,166,251,219,119,239,220,76,24,18,207,183,19,236,117,212,82,69,119,133,85,162,103,33,172,210,219,40,174,18,183,14,129,149,210,246,234,2,43,247,207,188,17,175,41,182,123,38,14,68,29,51,108,104,20,166,162,212,212,150,139,199,19,252,88,80,183,103,211,158,57,136,103,65,74,221,201,40,241,130,18,105,161,8,204,146,229,147,66,177,71,202,153,153,243,116,102,49,68,234,49,75,217,175,63,81,80,140,155,208,95,203,218,41,75,138,186,107,150,64,211,138,91,105,6,35,47,65,128,148,20,90,22,142,147,231,98,118,40,245,146,85,5,240,212,83,75,129,15,233,141,215,213,213,202,39,230,88,135,75,106,85,13,170,140,48,122,65,181,18,164,129,142,208,3,230,111,153,74,74,6,137,139,2,157,9,82,212,99,52,185,162,230,6,92,198,111,39,232,170,81,214,70,228,127,194,202,75,11,85,79,208,124,193,94,93,88,115,73,138,11,131,38,232,208,156,62,244,91,174,197,169,63,48,131,84,242,67,19,116,112,146,102,46,242,199,144,49,75,17,35,206,159,234,166,121,41,102,6,73,5,95,136,174,152,138,241,147,139,52,41,61,226,12,38,186,36,186,94,214,128,57,169,167,81,182,59,171,59,193,181,190,120,27,221,200,7,192,105,154,226,73,107,215,110,122,128,85,180,90,208,214,5,241,189,73,213,207,100,213,56,75,220,248,161,43,73,115,131,28,185,56,188,27,17,82,77,119,83,24,166,186,91,141,184,94,156,86,108,217,239,41,235,241,216,204,212,47,64,29,39,149,215,29,187,148,73,112,124,101,179,97,89,8,67,55,145,65,130,193,168,133,180,8,140,43,16,171,217,134,71,39,169,116,134,86,177,40,213,84,113,144,221,139,38,36,118,70,104,141,239,174,178,243,104,87,214,109,75,236,222,114,117,66,43,99,134,230,174,50,236,173,217,207,112,117,206,39,135,205,234,195,154,251,219,151,154,250,184,116,185,193,39,140,114,10,70,170,8,11,67,176,234,44,86,252,0,184,26,216,99,222,83,211,100,91,121,12,189,161,142,74,103,85,41,130,93,2,51,65,93,212,194,54,17,51,7,212,141,106,239,218,113,192,216,242,47,101,176,180,13,71,216,200,246,137,39,16,228,155,8,41,209,108,149,2,0,231,143,79,78,164,157,136,201,137,102,27,103,63,83,42,24,147,159,9,84,190,62,38,246,153,160,232,85,49,177,170,22,9,5,85,44,95,152,39,47,180,92,221,68,188,144,244,81,19,169,171,154,66,83,250,35,53,190,38,54,156,20,3,121,25,129,192,80,49,73,142,81,133,42,229,114,180,116,220,94,114,111,214,177,181,234,62,92,67,21,66,114,40,6,148,70,37,135,93,164,215,226,61,138,247,143,65,37,200,231,24,80,137,230,110,202,89,134,236,56,78,51,52,218,34,34,249,34,11,141,217,45,133,47,225,249,144,242,208,90,250,126,73,40,101,60,7,39,130,181,84,206,158,200,157,235,216,205,196,170,10,63,33,35,167,38,25,181,251,184,118,196,83,217,206,134,201,24,25,131,162,100,216,107,198,90,74,59,226,48,20,62,60,99,61,242,82,81,198,62,203,233,55,201,33,10,106,130,100,78,158,220,18,219,163,120,31,85,242,247,10,11,6,196,211,0,144,10,45,44,208,235,253,155,77,53,227,124,72,40,104,151,112,242,57,141,153,179,22,132,229,2,11,217,235,41,25,24,154,56,189,62,146,244,66,196,228,180,241,214,228,45,150,217,63,95,42,212,78,208,188,95,196,117,162,18,94,232,84,154,236,149,204,134,184,56,23,169,182,114,2,84,123,64,87,203,119,254,204,189,136,74,167,42,146,114,129,234,156,173,49,108,4,33,22,211,35,113,86,185,176,44,204,158,244,145,237,232,0,170,210,162,11,137,202,51,220,68,101,196,112,30,149,78,51,30,154,171,169,145,143,100,110,177,188,233,235,8,45,36,163,206,155,190,153,16,158,180,118,78,105,206,215,23,166,44,31,46,197,116,197,160,186,192,75,106,195,181,72,64,43,160,215,192,103,7,196,5,210,155,253,80,119,77,221,90,117,251,117,155,180,221,204,253,166,103,220,208,162,143,136,97,112,71,66,67,5,75,5,28,182,130,229,50,34,204,168,82,109,13,156,174,16,37,192,121,241,97,148,224,162,161,94,115,222,64,61,212,139,38,32,20,174,94,43,223,104,184,18,167,52,38,200,109,241,65,69,27,21,185,180,24,168,162,169,30,149,37,160,235,96,179,129,225,12,232,177,239,171,40,38,109,241,6,15,116,200,162,193,40,13,222,169,200,41,35,176,130,227,42,138,217,105,233,19,29,88,95,154,129,1,40,11,250,133,70,71,26,30,105,188,66,31,50,251,207,78,130,213,211,250,101,10,119,150,120,29,21,152,82,233,200,89,235,215,151,163,192,52,247,89,5,117,81,19,74,159,54,2,16,43,195,164,126,88,161,97,212,187,208,57,91,138,34,165,180,157,86,18,105,86,160,167,142,82,215,187,161,209,29,117,49,132,191,150,18,25,88,146,210,205,178,91,81,106,64,139,0,232,18,160,68,28,109,27,47,42,139,181,226,130,29,113,63,215,253,30,208,65,193,24,50,55,170,123,144,187,95,123,117,94,232,166,94,68,25,247,169,5,130,139,43,20,56,152,85,168,44,20,120,161,181,160,188,200,56,102,50,104,144,62,84,99,97,155,138,43,45,151,209,135,9,42,211,23,122,141,16,205,49,38,57,54,212,58,184,75,194,192,144,131,132,225,109,36,98,96,140,65,196,88,70,249,250,84,21,125,148,250,83,85,241,244,188,249,116,48,246,137,146,229,126,172,235,77,31,40,255,160,174,55,143,153,197,13,4,229,197,68,169,189,96,21,34,10,184,112,97,160,44,32,122,19,151,180,155,81,101,84,64,136,170,240,160,73,116,48,110,224,157,231,113,205,63,227,94,181,22,26,87,37,68,197,51,147,158,80,250,154,88,4,50,105,123,49,5,106,177,32,48,231,53,80,159,150,90,224,228,67,18,188,178,184,83,179,198,76,33,238,171,140,30,107,56,189,216,58,82,149,145,180,235,83,124,47,55,216,246,42,86,214,85,243,79,248,157,78,81,62,149,10,55,163,43,104,241,18,66,102,18,180,234,246,60,93,209,9,2,83,138,50,96,40,69,17,84,65,203,168,216,40,8,193,65,109,82,60,33,177,136,62,154,152,121,5,119,62,45,142,58,156,181,153,37,205,2,217,72,211,226,148,213,163,165,13,203,94,33,67,69,137,89,217,199,129,72,221,60,32,156,164,249,179,60,249,44,186,45,75,108,6,187,89,178,105,58,123,144,235,151,105,201,97,86,37,224,198,245,192,226,154,29,212,171,233,234,100,171,148,72,170,221,249,175,109,89,92,128,56,239,120,79,105,149,28,14,59,93,43,73,247,210,138,88,101,224,203,255,116,111,149,137,180,96,40,73,76,112,60,80,169,155,234,27,162,103,1,35,192,21,68,118,57,160,10,8,1,34,130,124,55,213,246,252,201,85,208,18,180,182,96,87,128,51,64,48,160,10,19,41,88,9,230,106,42,23,165,183,96,165,186,173,197,196,131,97,158,251,181,40,203,85,22,212,204,184,142,2,240,219,129,75,19,186,154,221,134,42,180,66,28,242,110,7,200,236,129,55,174,179,236,36,65,31,203,77,78,108,226,101,208,40,56,8,117,206,163,230,160,219,14,165,71,77,159,105,84,121,192,52,23,253,100,209,108,150,205,83,247,86,218,124,117,5,187,69,110,0,193,129,165,135,165,132,45,11,70,13,72,183,226,228,128,178,137,228,81,197,194,128,244,35,77,40,100,67,204,254,226,148,37,234,17,45,96,254,145,214,183,106,124,67,19,73,198,186,175,131,96,188,52,189,58,193,248,128,59,62,5,227,87,226,136,170,204,50,155,38,80,134,147,52,89,40,31,235,254,59,48,149,195,99,149,172,174,168,136,239,10,89,84,171,85,236,226,136,115,54,184,6,185,148,157,215,227,38,193,0,197,38,63,59,160,99,56,214,77,236,11,69,245,76,121,59,43,151,161,219,168,72,132,250,150,85,105,79,147,193,179,227,140,50,138,161,175,234,123,133,158,56,126,84,109,167,81,116,185,57,114,59,4,154,70,84,14,124,157,241,42,48,28,44,242,228,252,113,166,122,249,214,226,254,91,214,130,114,147,66,147,8,35,171,75,107,248,69,232,29,124,142,253,167,114,13,248,2,227,96,137,200,76,178,69,166,106,82,150,178,205,202,29,190,204,24,50,184,37,178,131,209,255,74,4,172,12,234,252,127,50,227,179,133,117,203,58,207,198,106,171,75,104,225,233,58,105,66,221,79,34,245,156,196,115,178,215,186,112,1,130,189,62,243,228,86,72,77,79,128,112,183,177,32,3,185,137,20,253,101,215,238,156,250,22,122,94,6,198,35,47,211,18,103,141,141,105,152,218,102,238,227,226,196,245,154,190,153,54,14,133,43,235,50,115,194,104,73,151,32,48,75,168,171,219,191,180,199,43,14,40,40,34,32,144,128,94,42,6,10,130,71,101,81,9,111,41,199,229,40,77,127,167,213,10,156,34,111,241,130,1,2,126,168,40,4,104,61,111,193,186,77,195,86,46,59,61,224,1,178,49,122,3,172,251,84,143,60,220,149,240,101,121,143,32,95,230,35,249,220,67,148,130,39,234,100,32,81,234,92,13,150,248,65,78,9,68,156,0,7,134,15,221,94,163,125,71,153,185,32,170,85,13,65,130,198,0,176,13,64,119,0,223,162,180,85,148,72,40,115,5,173,230,5,40,75,84,22,49,33,251,68,9,152,80,116,116,132,233,76,79,139,10,44,135,213,21,70,95,104,169,20,93,248,5,158,116,102,190,186,205,204,107,165,249,192,204,11,124,188,62,110,254,25,86,246,202,184,121,97,186,169,98,63,90,136,150,120,19,244,213,226,112,98,193,28,236,163,117,49,74,128,16,153,73,238,205,191,200,154,128,210,232,26,138,112,77,163,110,63,136,101,149,22,162,146,240,161,113,162,6,108,55,139,192,171,216,65,169,27,131,59,153,243,58,113,14,148,228,168,183,155,128,82,64,58,76,132,44,170,142,232,182,204,15,181,152,167,48,241,66,150,39,198,234,146,90,121,144,232,102,3,79,15,243,102,34,239,10,107,66,61,215,112,226,60,34,20,128,101,63,28,184,142,56,85,242,224,192,155,125,182,38,131,18,116,194,202,233,59,222,182,60,56,164,223,15,238,111,51,140,112,70,114,153,125,133,23,9,142,192,228,43,130,184,67,154,53,243,204,214,36,112,164,111,95,90,88,59,90,154,210,89,230,101,69,196,27,145,72,238,62,5,15,39,227,123,180,47,228,1,20,230,97,134,91,150,22,231,191,2,240,104,241,94,144,204,57,87,234,173,140,128,47,18,76,116,53,53,80,137,150,22,32,163,62,60,180,106,129,203,95,174,69,115,56,235,211,216,106,232,52,243,111,120,157,216,88,102,45,30,103,113,229,106,227,238,1,14,148,93,54,16,68,87,200,206,100,16,139,143,201,64,152,111,15,210,16,192,64,196,146,110,176,159,152,27,165,51,40,136,242,114,40,4,58,112,71,205,56,211,136,113,151,63,201,8,100,11,234,88,66,245,187,4,144,190,58,236,224,206,192,110,206,85,220,130,254,82,84,154,107,48,131,91,249,188,211,180,0,82,11,58,199,62,230,241,24,229,204,217,223,79,87,101,18,58,220,69,5,54,8,53,254,103,16,91,236,111,146,248,177,196,209,225,143,16,175,58,106,57,28,105,38,3,82,16,65,35,28,34,214,120,3,154,196,226,253,135,200,154,195,142,53,102,113,122,83,185,110,102,25,159,66,37,151,161,54,44,26,86,92,96,192,44,110,238,23,182,108,120,242,139,67,147,42,178,168,201,54,51,54,160,123,105,98,249,201,174,75,241,137,208,154,69,239,121,139,39,33,11,34,52,79,4,102,8,175,38,140,6,127,53,3,157,144,132,141,187,110,94,197,142,104,17,175,153,218,12,189,210,169,60,55,164,209,18,229,239,238,32,253,173,110,181,237,252,53,120,60,35,251,142,36,20,194,209,80,151,74,130,26,58,85,137,89,75,241,42,89,204,148,51,145,214,134,250,154,11,42,185,140,54,144,144,96,165,133,167,6,236,226,228,10,70,59,11,99,178,185,173,46,210,11,5,182,5,89,201,123,226,244,33,10,230,167,5,82,24,200,100,32,160,13,129,237,104,112,161,211,29,41,175,4,127,50,138,108,208,7,95,22,108,252,185,201,86,134,113,142,156,7,246,204,45,114,74,249,157,41,13,46,196,54,189,6,166,105,194,21,17,202,157,72,67,167,50,63,54,163,198,199,202,202,97,3,144,109,123,234,229,92,247,0,204,70,221,84,32,245,233,141,55,212,173,57,45,211,6,95,110,206,166,212,16,48,84,14,181,59,178,43,167,208,105,103,12,4,124,104,59,96,235,208,32,109,95,50,146,86,136,8,139,140,164,13,222,181,217,211,59,53,162,141,76,83,153,254,42,25,152,79,15,252,197,215,4,138,34,116,88,67,58,196,183,197,234,134,163,204,20,5,144,18,164,85,80,108,224,181,131,234,22,246,155,29,146,36,160,139,186,80,168,27,126,239,70,221,205,96,51,95,117,82,249,52,189,80,153,211,117,89,175,93,136,123,13,45,173,160,5,50,108,253,211,93,67,248,121,146,195,73,102,102,11,209,20,83,209,145,103,250,108,202,78,248,206,41,179,51,217,228,84,166,146,61,133,136,88,232,133,202,223,22,30,195,225,59,169,141,148,218,136,173,98,203,149,53,209,206,179,28,160,165,165,16,157,24,206,151,121,148,134,145,169,236,78,165,132,13,185,76,68,181,17,122,147,88,188,34,60,167,149,167,72,1,138,110,107,224,133,128,67,81,42,66,181,164,163,64,100,224,177,56,173,55,120,19,108,4,10,18,243,150,57,15,214,53,95,10,192,151,39,100,233,64,176,64,41,117,85,251,110,241,205,173,216,211,74,70,69,118,170,226,21,150,52,55,152,231,153,115,6,126,213,25,135,109,192,224,230,87,218,40,4,156,179,197,118,142,142,159,130,172,172,193,15,32,57,134,104,162,142,30,33,94,101,171,212,13,149,183,156,157,237,222,139,102,3,33,163,54,245,11,146,85,119,186,199,57,146,8,16,186,228,206,71,132,35,42,26,113,191,206,121,159,53,128,65,6,164,120,86,214,252,208,117,112,119,149,206,10,202,82,92,45,168,217,175,50,79,33,253,7,185,0,16,58,247,181,40,235,63,141,150,222,119,151,180,243,90,175,194,75,188,224,92,248,138,233,180,133,35,244,102,212,105,110,72,90,209,24,96,154,175,50,131,148,114,19,167,225,177,152,119,159,228,245,243,24,25,135,97,64,186,50,7,136,201,61,169,124,22,98,22,45,183,115,108,11,138,133,53,65,176,19,24,91,185,146,251,193,93,163,72,96,29,80,34,45,85,94,117,192,247,22,39,109,69,231,146,116,50,198,64,251,109,117,66,60,39,143,31,194,52,109,229,214,30,180,61,131,12,147,37,147,162,127,173,193,185,161,136,22,83,224,90,193,163,166,246,113,79,215,164,209,105,180,62,6,68,165,133,87,204,186,158,91,232,202,69,7,101,234,55,114,130,199,122,125,240,178,132,43,194,140,89,218,41,106,80,57,145,180,172,178,111,157,83,172,19,168,103,171,28,32,167,29,156,209,171,228,59,135,0,24,189,14,132,164,80,201,66,73,50,169,41,180,200,174,58,197,47,186,175,202,123,17,108,225,71,49,103,162,202,131,89,128,171,34,30,246,166,11,52,186,134,206,68,87,237,111,81,16,7,21,114,213,48,115,183,161,37,205,18,157,37,212,112,248,11,122,181,78,241,230,106,185,16,5,201,254,22,164,215,11,106,63,74,119,69,30,230,96,165,224,142,218,200,143,89,196,108,196,208,48,50,42,129,30,24,129,201,152,87,190,125,141,181,119,36,223,80,219,74,146,103,236,58,7,41,147,10,150,216,171,91,4,183,210,228,66,182,61,199,142,183,20,246,134,153,31,154,15,144,240,21,182,132,68,160,42,39,173,202,82,204,186,172,178,195,249,194,126,210,141,217,69,82,68,10,205,246,29,98,69,165,86,25,207,150,215,32,58,86,88,91,190,135,243,115,129,59,206,120,63,210,133,132,244,26,124,158,41,15,8,5,33,214,230,87,210,96,17,146,181,179,147,51,53,78,33,226,23,121,31,216,121,111,48,58,13,87,83,89,166,112,105,176,14,133,63,242,88,24,218,195,133,247,105,57,147,70,47,222,9,176,69,206,93,21,134,185,243,177,171,80,105,42,191,193,74,175,204,10,85,126,163,97,74,26,198,133,174,140,72,184,192,82,205,149,100,23,186,196,181,84,162,93,9,123,161,253,133,59,232,140,88,141,233,171,54,21,139,89,199,225,165,185,41,156,162,15,187,149,37,146,36,144,182,111,79,205,157,133,204,194,72,148,37,116,5,40,58,9,153,80,138,28,145,252,173,72,176,88,219,2,31,80,215,52,74,157,27,186,31,194,234,9,135,103,225,148,54,94,99,119,204,192,178,134,140,152,1,104,184,212,206,128,233,247,242,124,31,170,181,147,32,232,78,221,88,197,239,74,195,90,233,52,144,198,74,61,43,133,85,84,150,60,210,124,234,27,172,95,84,30,9,237,87,52,91,17,113,97,135,19,195,108,228,55,186,101,19,248,229,5,174,234,137,48,135,6,23,225,148,156,206,6,61,118,37,136,200,120,252,191,101,111,114,71,30,180,96,39,235,249,164,210,35,243,238,186,119,31,43,225,88,203,166,76,174,201,170,243,166,51,145,53,217,145,39,191,182,46,7,100,180,144,21,186,204,9,100,102,161,66,69,1,155,10,89,153,191,171,60,96,199,237,84,142,168,209,34,178,170,177,213,69,242,52,122,216,1,251,82,176,183,69,227,140,145,125,53,130,43,7,185,121,116,94,32,234,230,153,98,55,220,42,208,217,251,179,71,64,114,25,200,30,5,201,225,32,123,36,0,9,81,190,21,197,22,110,80,230,249,128,202,48,98,243,130,239,11,61,40,27,180,8,189,105,71,39,214,173,170,21,26,18,94,200,124,98,4,42,199,81,185,18,76,67,80,29,233,206,118,194,100,106,116,226,196,72,153,116,91,191,84,212,80,45,195,214,176,117,43,202,49,102,44,43,243,89,25,84,94,58,105,20,23,133,81,58,106,89,225,62,185,84,227,242,3,112,164,116,148,176,203,78,131,162,249,102,147,125,98,105,35,79,7,21,93,141,21,165,204,147,54,75,182,49,57,15,82,227,139,210,120,101,220,112,222,136,170,189,118,133,234,66,54,203,93,97,162,194,77,3,91,43,58,183,224,155,67,122,187,48,243,119,230,108,203,86,112,232,46,16,76,173,200,64,78,50,31,83,68,0,144,243,252,114,42,22,71,43,179,248,22,138,214,241,160,84,168,74,135,160,147,40,206,74,45,122,43,8,176,113,205,203,250,155,170,225,73,42,160,206,17,128,122,217,98,229,226,188,199,104,154,15,119,105,54,26,127,138,125,40,18,21,70,178,138,252,40,159,65,117,82,75,58,207,172,20,13,29,80,174,48,99,245,198,21,45,57,171,197,115,52,221,186,230,48,23,196,160,243,93,29,103,50,167,196,124,77,199,247,48,95,180,194,58,37,214,42,243,94,137,83,186,10,232,74,114,131,237,10,147,92,214,179,184,107,118,14,157,201,227,51,185,132,22,200,108,96,55,2,13,245,193,109,70,236,184,85,215,172,248,19,178,203,225,13,151,196,222,157,209,93,29,179,43,100,1,65,238,220,205,44,132,119,133,155,40,10,8,209,38,163,169,102,85,131,27,124,138,55,201,193,227,159,63,28,192,179,2,250,142,83,190,50,178,118,156,175,2,137,31,210,114,120,148,28,76,255,88,93,138,253,243,252,51,158,37,5,97,79,33,197,167,115,220,228,29,71,172,175,42,67,162,163,12,35,32,78,53,205,110,6,140,6,121,216,183,195,208,62,105,216,145,118,33,128,129,204,202,11,200,223,109,206,124,172,42,2,123,67,188,168,37,231,102,3,148,182,133,112,112,229,112,46,28,158,168,124,212,2,244,115,169,71,197,137,41,89,200,42,42,69,54,214,209,136,47,92,149,100,91,169,114,159,28,77,166,136,229,148,22,194,186,235,75,213,214,64,206,185,73,207,97,25,159,9,156,129,204,173,28,127,196,236,158,42,150,116,19,72,158,75,161,231,8,158,97,157,64,38,8,28,134,78,14,173,206,75,217,222,115,230,119,30,66,10,92,133,230,32,138,154,2,63,38,63,69,180,107,104,72,1,247,128,4,210,131,122,174,18,114,155,154,181,88,99,142,100,138,174,164,221,73,119,49,7,177,208,148,148,182,179,129,194,213,41,91,49,60,131,105,218,220,18,205,32,25,229,3,29,69,138,0,13,254,217,208,4,82,180,38,184,84,240,140,148,221,138,203,2,184,243,19,64,128,146,46,91,221,0,203,199,140,243,200,167,29,158,129,156,163,153,34,149,166,191,107,77,107,134,54,173,81,3,28,232,50,170,117,153,255,45,91,86,59,130,166,218,2,223,106,222,234,201,119,206,78,211,161,135,107,123,83,232,221,253,33,191,13,76,87,192,95,221,28,73,241,80,246,101,216,133,253,70,229,123,187,234,145,160,214,4,92,218,65,161,211,101,105,86,38,168,157,197,58,211,205,114,212,53,203,11,27,22,127,29,52,226,210,108,175,18,229,219,251,200,21,132,139,12,204,148,197,150,180,71,170,166,81,244,14,136,183,28,183,156,86,154,216,119,163,220,92,45,171,238,189,184,55,195,222,93,219,222,5,1,100,36,17,177,72,196,50,5,9,69,28,181,130,198,10,170,171,248,176,226,204,14,179,6,244,155,80,115,196,219,107,184,189,160,255,66,32,154,155,22,8,111,247,65,179,89,106,78,195,130,177,11,9,13,100,182,163,194,68,164,87,200,120,34,244,133,21,8,176,43,146,178,180,106,0,197,109,17,139,213,166,214,16,227,64,81,73,140,242,111,88,13,27,228,149,75,225,181,86,157,213,148,17,41,138,76,153,35,211,14,45,13,209,174,198,41,187,102,75,159,72,96,106,35,114,122,45,210,239,122,242,71,84,197,210,88,216,222,21,156,183,124,156,146,230,6,245,246,169,123,220,123,214,134,153,187,106,69,27,25,171,4,148,195,157,147,251,170,128,39,211,55,42,144,175,84,178,0,147,89,146,140,38,210,155,155,34,205,238,104,122,37,249,145,41,168,108,67,226,43,58,198,67,33,31,251,222,118,91,234,38,57,102,204,112,27,210,245,207,174,107,223,102,61,2,213,20,48,146,181,32,157,56,75,247,6,103,164,226,73,4,175,196,176,136,130,112,250,31,206,152,49,158,122,186,117,219,185,166,255,101,132,97,18,214,230,10,217,244,185,240,70,26,195,189,225,7,61,41,131,15,246,28,136,235,192,65,140,235,124,53,93,106,59,78,144,80,1,37,192,81,67,105,69,229,36,177,72,210,181,19,111,253,59,115,204,203,188,166,28,243,200,53,29,148,33,141,46,228,53,166,222,248,68,217,191,159,169,55,158,25,230,87,97,108,193,76,159,63,195,252,225,37,20,79,120,213,25,230,193,69,74,9,215,103,78,156,219,202,79,240,27,86,187,121,178,15,158,182,86,149,147,198,223,195,194,104,229,140,71,253,92,10,74,70,117,92,99,238,148,235,55,15,28,23,2,80,218,90,175,169,110,47,211,94,49,19,234,161,228,181,89,27,189,122,175,212,177,245,44,145,40,91,238,57,250,32,91,144,93,17,117,202,153,67,197,133,97,191,245,116,142,40,190,173,242,204,82,252,153,60,86,172,12,61,113,113,106,228,92,10,199,196,52,103,99,62,213,227,73,142,186,134,60,217,218,18,184,61,42,6,188,204,188,89,186,103,106,78,20,35,158,252,30,34,148,109,17,208,7,228,228,159,67,177,179,168,172,61,95,249,94,78,174,206,179,106,154,70,185,225,104,100,208,97,146,240,57,26,162,20,76,13,170,98,80,72,48,126,141,10,138,155,179,129,103,181,27,195,129,97,90,197,121,132,88,113,52,252,141,153,179,57,8,179,132,121,11,115,73,133,177,23,203,85,191,69,210,50,214,101,14,80,208,64,73,132,162,6,204,2,24,22,32,141,64,28,161,188,221,8,113,13,111,167,125,186,175,0,52,246,105,172,0,173,202,133,200,241,142,37,46,44,175,180,125,105,187,15,213,90,140,64,201,218,155,89,112,206,53,47,228,121,200,249,192,12,237,89,128,35,107,61,231,242,210,73,179,116,6,169,113,57,140,1,94,89,164,34,50,47,22,214,26,241,69,72,137,185,211,10,241,31,93,215,27,72,58,172,170,183,209,170,106,127,195,162,74,111,94,157,32,115,124,102,4,127,77,252,146,185,161,145,103,232,140,70,71,156,252,172,221,156,210,242,112,96,77,242,100,227,226,2,156,164,199,13,11,150,19,199,188,148,80,244,144,210,234,133,126,33,62,67,35,220,201,173,142,11,137,123,139,34,57,166,124,211,226,2,236,151,50,129,197,22,152,157,72,69,103,152,138,235,150,198,136,95,168,50,217,145,206,59,43,200,76,92,98,231,91,231,42,205,19,221,45,68,179,82,109,70,3,255,151,84,238,208,199,153,215,234,116,170,177,191,19,182,198,152,29,235,227,94,193,19,155,59,12,213,107,153,135,56,91,221,124,214,9,159,202,47,99,188,161,102,243,75,76,175,102,74,43,229,76,210,172,53,1,110,67,87,130,92,26,225,25,205,241,78,110,7,162,27,128,90,198,97,221,233,227,152,247,68,179,109,234,222,170,179,92,22,130,87,10,46,220,30,79,199,55,237,247,76,28,75,59,214,28,133,93,102,171,153,209,8,236,171,233,57,238,34,218,122,181,64,179,1,203,247,84,208,191,188,66,154,253,204,251,251,170,116,28,87,240,201,16,69,144,175,23,31,110,105,80,255,44,243,220,82,153,143,202,220,225,24,197,74,228,241,101,169,130,57,199,20,114,130,135,54,235,5,53,64,52,165,76,69,102,27,102,199,51,243,68,115,29,6,170,80,35,171,123,30,31,235,117,184,92,127,76,195,5,91,9,183,120,2,171,166,170,187,59,136,167,196,188,51,135,223,180,108,149,139,184,219,191,47,0,168,53,149,35,132,205,107,233,17,29,197,185,9,65,173,44,94,129,11,111,219,239,96,86,130,224,237,121,48,125,53,104,126,32,105,89,5,109,118,156,130,248,110,148,50,132,57,32,25,167,74,234,172,26,131,148,141,12,251,115,77,151,83,161,16,208,149,71,3,47,161,54,65,119,96,228,2,203,10,117,132,80,82,36,157,134,226,0,77,200,91,61,167,221,148,76,84,180,204,32,133,106,51,171,69,138,147,17,106,202,123,6,113,213,194,216,242,105,206,62,76,180,186,27,155,147,169,135,146,90,139,151,153,70,82,55,117,158,69,125,27,142,65,67,82,54,138,0,32,155,166,123,111,207,52,113,198,22,197,236,187,156,8,203,128,222,125,234,77,113,19,90,208,49,206,86,202,160,176,128,7,150,214,247,138,174,14,109,221,169,157,154,43,130,101,163,170,152,154,120,159,106,49,0,68,186,22,58,9,42,80,27,101,232,11,246,186,109,192,144,168,204,216,95,202,61,154,155,210,153,114,181,185,216,142,6,173,106,31,37,177,132,27,108,136,228,65,10,115,90,145,5,28,83,10,236,120,121,4,35,217,86,38,92,96,113,69,37,67,15,155,176,161,12,36,127,20,219,228,211,228,27,14,243,189,29,239,137,160,96,113,53,225,216,100,69,41,164,15,66,218,139,69,61,78,65,192,226,52,18,2,192,148,245,14,105,118,112,212,84,226,217,65,134,174,117,221,221,197,77,193,157,91,184,131,2,90,162,229,147,11,110,251,120,210,130,111,76,175,79,202,202,209,39,40,51,165,5,153,198,135,182,211,254,183,157,168,152,98,28,0,170,232,78,230,16,64,188,212,198,104,129,221,192,93,13,205,203,138,208,24,130,191,125,202,167,241,0,170,205,21,124,216,224,76,26,167,48,71,240,23,0,0,226,110,154,172,146,239,111,90,225,233,183,6,93,46,181,152,250,206,195,175,70,147,98,8,174,74,3,13,30,21,19,65,134,74,154,149,216,41,69,44,21,3,172,33,137,137,26,227,73,184,140,227,32,224,126,197,237,222,160,154,65,34,70,86,184,132,188,45,194,117,192,59,21,38,165,48,50,29,183,211,50,69,192,241,83,14,50,47,40,46,108,164,51,159,154,112,148,99,36,187,37,247,11,91,133,243,6,27,168,48,50,155,102,2,174,132,100,218,85,207,129,176,180,105,90,82,134,45,187,161,34,12,216,57,168,196,237,104,114,47,56,238,2,99,50,221,91,228,148,140,158,183,45,153,245,164,44,180,106,61,97,142,5,120,41,100,231,134,235,15,33,229,216,111,75,10,111,195,187,197,180,69,222,174,227,254,152,210,84,6,210,42,249,176,211,146,93,32,228,193,8,174,150,184,143,57,146,35,10,2,164,189,104,149,56,138,166,35,131,29,181,132,162,139,146,105,79,2,193,217,187,227,44,81,158,40,38,93,70,128,40,178,214,40,18,95,253,6,149,98,98,70,62,131,224,126,57,205,139,187,119,241,88,186,164,233,85,109,55,243,2,132,72,85,107,8,55,51,124,135,238,176,6,113,38,35,160,0,87,243,60,155,235,25,38,73,166,173,99,31,44,255,50,135,15,27,255,0,110,215,75,97,192,140,102,67,85,80,82,72,243,237,97,174,123,147,107,129,13,47,0,168,137,116,164,16,179,235,194,165,30,55,166,176,176,142,213,73,67,2,116,32,2,113,34,136,217,66,147,147,82,149,217,206,163,157,174,249,226,195,33,72,150,237,58,62,72,136,104,130,128,27,241,35,48,17,243,98,218,226,27,70,217,179,216,130,220,179,180,194,52,42,176,78,198,240,36,75,247,96,30,108,137,212,98,22,189,221,117,161,61,186,210,128,127,208,36,170,88,163,215,230,104,240,120,191,59,51,220,182,108,138,44,48,232,144,112,59,211,219,82,70,50,83,47,79,58,239,121,167,189,37,39,102,39,158,129,184,1,19,189,136,29,104,216,143,202,163,52,140,12,129,101,96,155,200,228,91,165,198,194,72,117,220,86,195,147,153,183,169,114,38,235,236,29,77,174,76,183,199,60,58,167,8,49,208,17,26,1,8,224,37,103,77,27,77,182,105,231,204,53,142,162,163,3,64,15,115,120,148,61,217,155,12,57,249,245,61,236,115,142,207,20,8,92,111,62,13,71,224,30,174,169,142,104,33,251,135,252,90,99,118,73,114,32,69,205,140,41,36,150,196,57,137,134,77,233,216,153,134,235,233,152,163,134,135,114,132,53,17,130,55,145,160,87,100,191,70,66,84,7,33,14,180,234,80,109,135,145,13,101,183,8,189,162,124,38,8,137,96,172,202,165,112,250,96,174,200,155,210,4,69,177,183,78,247,84,124,204,69,49,132,27,88,128,134,157,128,135,51,11,175,176,231,228,58,2,241,82,13,53,173,36,151,233,50,219,116,204,177,192,243,234,176,10,172,178,0,29,163,208,177,19,181,216,85,39,158,55,82,124,35,235,223,226,143,136,137,178,58,33,229,16,206,97,98,11,86,5,125,230,227,26,118,175,215,161,20,133,201,68,50,84,196,129,25,209,21,86,181,36,47,3,154,99,151,16,224,23,232,241,192,98,135,204,34,136,169,225,148,164,48,5,206,222,88,125,77,62,74,137,144,81,96,22,178,34,71,99,177,4,211,24,172,229,170,103,40,1,35,59,78,34,195,161,12,198,43,88,5,23,216,194,168,82,17,44,145,148,24,15,60,72,78,149,23,115,196,104,94,6,182,169,33,237,137,55,164,26,29,184,57,151,145,48,54,138,230,20,209,54,172,171,182,166,148,177,5,246,95,162,169,14,139,102,51,160,14,170,141,213,127,79,94,203,111,229,236,215,13,134,172,114,109,173,108,88,5,72,85,180,250,224,173,101,142,139,71,113,111,29,140,134,215,49,34,70,164,197,100,78,218,174,83,253,67,99,51,110,135,8,175,33,126,202,96,49,119,145,72,230,166,191,226,236,114,38,158,64,146,132,186,35,101,77,51,122,4,120,168,74,238,170,8,111,180,229,141,78,189,209,188,247,250,249,172,31,234,181,72,141,178,169,225,37,121,21,150,133,169,26,122,128,36,72,50,108,88,11,119,52,61,105,41,46,8,212,201,20,158,28,191,70,250,122,167,10,81,191,31,91,76,111,24,76,4,177,127,211,222,31,234,59,2,217,32,229,69,246,196,155,53,96,24,103,90,64,153,187,216,65,217,192,213,184,123,133,191,183,112,79,84,153,150,52,112,85,147,95,212,107,69,1,7,214,56,180,84,61,30,221,200,156,127,139,253,47,42,158,58,213,84,210,94,221,210,114,49,155,217,178,162,129,89,93,101,105,153,20,128,113,227,181,1,106,241,156,197,38,100,7,182,56,230,197,82,244,68,163,214,176,102,39,153,96,126,43,59,204,236,69,213,191,117,74,186,153,139,206,195,229,40,191,227,215,38,94,80,52,217,20,130,244,151,235,174,40,206,48,174,29,59,248,68,14,162,213,82,85,101,86,101,52,26,110,132,47,31,238,200,204,70,171,97,83,220,79,137,244,52,158,154,156,197,184,62,254,52,231,114,1,2,196,212,249,56,112,142,79,155,53,40,216,205,26,44,19,44,16,211,232,155,179,114,52,13,219,19,120,163,134,119,138,204,85,167,81,132,106,187,83,6,101,57,166,17,118,58,163,86,99,249,98,165,81,167,86,138,138,167,78,104,130,105,168,50,214,61,3,222,49,234,172,30,236,20,136,65,195,184,166,134,76,93,8,221,10,10,196,40,101,116,130,72,43,170,68,45,35,171,33,59,65,5,86,74,49,127,50,179,10,39,56,93,9,165,179,156,53,212,36,60,214,35,33,176,132,178,104,152,247,1,199,155,166,28,209,86,58,177,138,43,141,29,146,84,127,85,145,6,27,90,84,120,114,253,99,240,20,132,187,32,219,211,70,85,46,157,82,77,91,36,131,155,50,236,16,155,26,159,58,56,189,21,214,57,51,215,73,149,136,177,215,90,132,174,109,170,230,212,106,208,196,192,137,176,134,190,152,57,186,209,81,86,190,121,245,24,74,250,92,12,181,81,143,184,170,110,108,180,146,141,137,55,94,191,243,60,162,21,94,136,140,137,189,16,188,240,197,246,163,54,234,34,152,162,206,212,167,186,60,186,147,84,125,51,116,33,160,83,134,57,179,255,73,227,162,82,92,88,98,30,207,224,255,210,185,70,88,250,209,204,37,55,190,69,213,255,40,123,40,77,101,123,46,122,237,154,207,153,30,36,102,148,80,212,110,51,144,149,188,86,77,21,202,39,40,167,229,32,91,158,25,206,227,24,118,38,48,33,82,68,234,186,154,137,159,18,161,91,194,209,229,184,156,39,86,57,199,112,42,76,179,166,94,202,182,237,137,164,64,28,130,106,138,184,73,203,197,74,92,105,231,229,214,56,139,21,103,150,226,238,2,212,69,178,52,240,16,9,233,128,41,18,112,149,135,243,90,183,225,62,119,229,195,158,194,15,229,61,7,226,98,103,40,68,250,103,91,247,156,106,27,51,169,64,162,128,184,38,70,174,136,155,214,39,215,154,199,126,82,121,132,80,196,54,43,49,90,77,135,205,107,162,235,32,130,96,119,32,114,133,76,6,133,65,138,204,26,115,115,133,219,99,126,144,34,216,38,36,91,146,87,118,1,47,36,32,83,9,158,129,185,220,200,70,178,225,216,164,106,163,97,45,1,108,6,94,145,126,160,60,99,183,132,196,65,63,48,13,22,189,225,161,106,244,27,197,127,188,61,204,24,141,69,98,6,26,210,197,72,125,182,98,144,232,204,22,173,117,131,239,8,66,210,120,17,52,242,80,146,153,146,80,101,216,34,56,189,22,85,86,81,19,85,77,82,214,54,21,143,134,216,95,82,154,41,50,110,101,198,204,169,38,245,99,84,80,174,169,49,27,101,103,167,19,237,52,167,69,20,65,108,107,226,251,130,248,82,121,197,202,81,54,124,103,228,78,123,254,213,153,52,98,113,88,172,131,56,193,73,8,121,142,97,103,239,60,108,144,153,59,88,53,166,75,143,229,254,38,39,221,222,16,210,52,85,163,74,103,121,89,247,37,36,67,84,99,174,106,28,131,194,232,160,148,86,251,108,54,19,172,56,113,220,225,235,193,182,132,198,228,176,106,151,184,101,212,105,44,63,141,125,168,177,34,65,24,157,26,119,185,144,123,78,147,147,45,223,137,125,120,102,83,238,78,175,215,95,81,138,247,154,243,172,93,95,213,192,223,240,117,168,254,16,157,207,196,138,95,69,148,192,220,107,120,69,145,223,155,26,146,61,162,152,44,90,205,71,166,184,145,44,119,100,155,201,250,42,237,231,254,65,30,170,2,32,9,137,173,16,201,82,230,170,40,186,46,65,221,48,97,84,43,7,245,78,186,46,144,122,209,200,47,153,193,206,168,208,88,11,40,195,63,187,106,208,6,233,120,133,150,164,119,38,255,206,24,193,189,0,201,138,58,201,172,177,44,58,205,70,239,89,112,116,69,228,141,46,35,202,235,36,207,175,137,252,25,40,242,194,116,22,170,74,250,27,246,192,134,114,103,101,137,150,15,226,90,135,13,187,124,131,171,14,220,119,99,14,138,246,162,21,163,82,183,218,61,84,52,254,34,213,169,132,198,39,219,65,221,134,100,69,66,226,176,144,12,173,138,122,85,32,108,229,198,78,192,236,4,81,100,219,51,91,0,183,177,92,107,115,193,169,67,76,63,76,22,172,86,26,7,68,148,243,148,251,99,145,29,156,40,27,195,141,93,37,229,182,187,165,231,9,18,67,9,165,38,89,201,148,187,50,17,85,114,143,2,126,175,2,96,37,1,41,176,160,73,232,84,13,73,27,177,170,179,168,51,217,205,119,93,151,102,249,250,85,14,147,32,48,41,162,146,100,176,220,94,86,74,192,52,234,130,94,171,208,105,31,170,150,162,3,241,186,206,61,52,52,48,163,45,185,160,30,235,143,176,127,148,121,185,17,64,150,195,204,76,155,236,238,115,118,41,119,112,155,113,103,60,59,202,217,144,67,29,184,25,75,236,78,188,117,154,84,106,114,140,161,42,143,21,154,216,105,110,218,5,43,183,171,125,234,250,173,107,74,77,243,74,44,230,193,147,52,185,34,24,31,192,52,3,36,201,48,132,217,214,215,93,255,155,248,128,46,182,178,9,192,44,65,154,113,170,0,219,55,2,150,184,105,93,58,225,121,231,139,201,74,121,214,156,237,117,101,123,37,8,226,208,69,77,111,75,71,212,232,165,204,173,103,57,33,74,65,186,78,31,148,241,170,40,88,215,165,89,188,118,137,59,72,72,224,210,128,84,3,120,29,116,134,153,19,46,82,137,189,76,164,76,254,135,39,124,101,99,183,187,191,70,162,214,208,135,86,108,76,139,149,86,244,230,154,187,41,171,247,127,235,220,228,106,16,91,27,69,192,87,147,118,81,207,122,98,160,54,9,112,38,82,89,61,159,130,104,251,56,219,26,138,155,162,117,99,60,239,13,172,157,113,123,197,255,13,145,232,40,73,195,162,84,62,134,6,175,86,29,81,195,9,191,119,90,1,183,118,135,213,141,216,236,215,186,165,87,4,242,8,126,36,218,119,146,63,41,6,214,180,7,141,167,106,231,206,26,116,61,173,54,200,149,69,13,178,145,32,4,205,56,45,36,72,100,134,182,4,93,81,158,117,26,182,162,132,75,106,186,224,84,208,58,29,184,79,194,186,244,94,36,124,118,92,236,92,27,171,142,164,81,55,52,42,137,98,58,46,198,101,158,149,59,235,18,244,30,43,236,209,18,60,94,86,253,98,76,57,78,213,6,205,236,64,39,34,247,56,115,202,225,246,218,105,217,70,178,38,146,235,247,227,178,203,225,174,49,187,28,202,77,81,70,19,51,135,134,148,38,218,248,250,146,154,96,34,158,73,77,158,25,149,67,26,96,115,114,252,148,176,134,140,43,159,57,179,178,164,172,252,2,183,5,226,249,220,183,253,68,233,171,127,117,30,233,6,128,94,87,62,105,115,97,150,41,120,168,126,163,188,229,32,244,15,150,193,123,22,189,116,142,225,73,8,122,66,128,116,243,31,65,9,180,172,160,240,233,232,223,243,136,231,17,191,226,136,79,197,87,236,91,146,39,42,210,223,182,100,67,203,207,124,134,251,182,12,205,103,184,111,203,209,124,134,251,182,50,202,103,184,47,238,240,185,239,43,174,141,159,226,190,191,150,135,19,15,46,169,247,59,181,8,98,28,26,53,143,108,131,11,253,20,195,174,164,84,16,105,93,142,91,206,160,227,180,106,156,25,128,133,73,213,227,80,67,201,142,19,21,156,112,33,238,228,41,199,73,237,0,63,78,52,31,146,170,66,138,13,44,23,213,227,68,193,225,199,169,53,112,57,78,92,11,150,139,234,113,82,71,192,143,19,61,133,120,34,74,38,124,9,142,147,227,150,51,232,56,85,74,152,110,89,234,62,201,113,23,241,136,245,227,68,21,37,21,221,150,139,74,209,60,61,78,130,10,253,56,209,29,137,115,139,160,69,169,170,47,199,137,183,41,205,179,232,19,37,113,207,114,213,211,92,144,75,94,16,65,183,226,50,186,92,86,61,229,103,205,49,62,80,112,178,228,68,22,79,240,185,36,162,73,226,3,151,59,136,241,73,54,196,105,174,137,184,103,240,129,82,215,94,172,254,203,101,69,155,167,7,166,69,81,29,152,152,69,36,228,111,174,138,24,29,249,64,73,91,45,68,67,102,112,46,203,37,45,139,232,12,213,217,84,166,112,174,203,213,215,229,215,75,33,83,111,42,186,204,199,224,141,23,215,192,205,117,115,184,28,78,219,235,246,176,57,161,58,252,245,186,191,158,119,231,243,101,191,219,236,183,51,105,226,12,69,123,156,209,109,47,155,205,113,127,222,110,174,123,132,115,93,47,231,203,229,112,220,109,199,168,181,205,236,155,139,49,244,113,70,182,223,108,14,135,227,241,120,58,209,186,93,182,199,235,249,186,217,236,175,104,179,236,235,143,53,182,195,88,180,195,126,183,221,93,108,28,99,108,231,227,254,120,222,240,128,97,223,80,251,194,67,173,220,113,172,212,88,61,236,45,93,184,203,238,116,24,166,161,237,241,145,87,174,223,111,167,235,238,180,59,93,109,188,230,233,169,249,165,30,31,85,30,207,199,45,15,206,16,229,195,208,129,135,167,97,199,221,245,112,190,94,47,155,195,233,98,112,119,61,238,54,151,243,97,179,219,59,158,119,99,227,3,109,169,253,32,196,167,203,233,56,7,178,12,110,179,223,29,175,131,68,243,224,30,113,79,237,118,35,110,231,184,191,108,46,71,66,25,199,193,127,236,247,151,203,233,188,213,245,124,84,148,177,223,28,183,231,227,249,226,136,126,208,230,221,225,120,26,4,14,160,74,136,254,145,70,246,164,209,79,26,253,164,209,79,26,253,49,125,55,152,18,71,153,151,221,245,5,106,206,187,203,254,186,63,58,166,30,240,117,222,12,178,116,30,0,69,152,161,109,172,167,207,90,81,151,7,24,251,110,115,61,14,158,106,119,50,84,55,220,195,119,187,253,238,122,222,134,189,213,54,214,211,61,5,201,139,31,250,229,188,60,54,215,235,201,16,164,196,147,14,220,120,56,111,72,109,176,210,216,156,63,19,162,60,196,240,79,251,227,229,116,216,77,166,101,25,253,233,112,188,158,142,199,243,105,107,12,217,74,99,61,29,131,127,233,4,242,183,128,121,74,151,245,242,7,127,26,204,205,84,246,45,56,237,122,184,94,118,215,237,100,118,250,182,120,162,121,57,139,215,223,203,31,243,224,92,175,187,237,158,196,140,133,245,187,158,207,215,211,105,207,18,73,219,216,156,111,153,137,150,48,194,39,105,254,13,87,110,240,226,251,32,19,75,148,251,121,144,225,33,113,177,74,180,109,108,206,167,149,123,132,241,31,182,199,227,24,214,121,10,95,11,174,218,12,29,200,121,127,218,239,166,184,217,52,53,231,78,198,228,17,240,212,64,53,155,211,233,226,172,214,50,242,33,117,30,118,78,153,226,207,230,156,135,66,205,151,243,40,187,28,177,243,192,191,195,134,177,97,5,208,74,99,57,251,201,140,60,6,51,50,124,220,55,251,253,201,89,12,225,70,198,224,118,155,205,233,178,119,50,212,54,54,231,63,22,59,114,60,12,38,203,241,214,130,222,135,222,108,97,174,175,187,235,84,242,118,109,229,92,103,74,30,65,240,186,12,126,226,192,138,93,161,97,167,235,254,16,213,81,109,99,61,253,193,232,218,224,177,14,251,129,171,9,232,55,187,227,192,220,219,211,209,173,154,43,141,245,116,232,231,30,143,29,67,94,129,165,28,211,3,128,236,80,212,111,55,67,217,49,45,234,139,126,120,127,25,82,18,145,225,218,210,156,41,126,40,143,129,160,46,151,205,72,209,224,58,197,49,194,49,176,243,102,59,52,144,140,162,186,198,122,58,34,134,37,25,248,3,48,97,215,253,105,71,88,87,120,176,81,49,112,180,108,135,32,76,156,88,211,88,79,215,196,60,195,141,233,229,51,36,131,180,236,14,131,163,98,221,208,64,196,187,227,233,120,29,89,76,230,10,183,141,245,116,203,174,254,0,67,95,91,244,193,121,29,55,110,225,106,154,186,5,23,247,176,199,0,246,133,133,28,6,216,49,42,34,74,99,28,151,227,97,192,182,227,183,218,212,156,171,17,255,146,127,227,17,16,251,121,115,57,4,69,232,189,120,61,158,168,104,253,197,143,249,161,169,240,121,84,216,56,48,182,25,102,137,243,229,120,28,8,39,44,96,109,109,206,214,152,227,135,24,248,80,99,12,27,52,115,125,3,9,29,6,87,124,184,6,51,123,219,218,158,175,57,102,30,130,13,25,6,247,243,72,104,196,50,192,136,145,223,7,3,232,18,249,148,219,186,83,145,200,235,49,176,242,241,52,96,119,40,226,23,219,219,28,249,88,202,253,200,158,226,184,104,25,122,105,108,207,214,96,255,199,192,203,3,217,110,246,199,19,47,250,254,52,150,246,112,216,70,189,88,211,218,157,174,249,207,70,177,230,71,88,247,227,126,176,80,102,98,25,203,59,52,0,35,145,193,126,234,62,150,37,207,109,229,60,228,120,123,8,252,118,30,235,52,236,14,91,70,90,187,193,65,30,15,155,243,153,188,152,219,214,246,124,77,116,247,24,176,62,20,213,67,82,58,13,83,43,41,58,199,240,134,107,250,249,180,103,195,77,211,218,158,111,216,253,33,56,176,161,226,217,93,47,123,23,144,23,2,62,140,23,71,118,43,19,170,158,27,219,179,17,190,251,128,172,152,165,121,27,57,70,30,194,117,100,160,32,246,70,29,16,184,57,110,134,229,133,92,243,219,214,122,178,20,166,92,138,66,60,194,184,135,43,196,118,112,21,193,6,53,232,238,229,76,164,86,20,217,169,173,61,215,18,68,105,185,137,151,143,170,118,195,220,48,212,209,180,236,67,49,191,59,157,118,251,225,22,57,125,6,219,214,238,116,164,80,146,44,157,47,159,74,109,118,167,1,194,155,45,217,95,6,203,181,57,13,101,60,41,12,114,83,123,38,210,226,45,37,239,30,99,217,119,195,201,124,104,123,72,9,242,113,235,158,206,183,172,103,90,76,249,17,54,253,118,59,150,149,25,148,177,193,135,88,117,72,78,37,77,107,123,190,21,102,88,114,172,62,0,174,31,236,245,110,152,89,93,156,254,56,108,159,78,127,24,124,255,224,36,250,56,92,241,7,111,180,153,138,74,81,235,13,57,113,123,140,28,116,219,216,157,143,58,183,146,90,250,229,163,173,253,238,180,205,86,155,161,0,218,108,134,143,83,208,98,182,141,221,249,86,123,226,33,214,255,52,240,208,62,58,208,236,78,151,221,240,141,31,226,163,147,167,174,173,59,215,32,255,197,231,197,89,20,0,44,44,15,7,229,221,37,41,19,106,19,157,163,9,214,181,38,217,75,31,234,101,136,64,195,28,17,204,53,135,161,8,26,88,151,121,207,166,169,156,105,233,14,37,255,225,203,95,226,225,242,54,104,74,36,191,251,225,24,48,228,227,177,109,137,61,111,27,251,243,173,60,221,225,1,118,247,178,106,131,222,6,254,107,48,159,251,75,116,8,90,105,236,207,151,212,147,15,130,221,135,16,57,112,53,51,213,139,105,110,132,35,92,70,88,100,180,215,53,141,221,249,40,109,59,62,30,194,145,100,40,62,175,155,179,171,252,196,181,247,176,232,136,88,56,109,154,186,115,103,105,136,23,191,246,191,135,228,120,94,181,98,144,154,7,224,255,135,43,210,144,96,24,170,6,58,141,68,39,181,116,167,205,68,214,75,253,207,151,63,234,133,62,156,79,195,146,72,66,223,80,224,12,53,228,150,26,23,172,83,91,219,243,45,109,251,82,148,230,17,140,142,231,225,96,73,12,195,48,164,5,119,52,181,55,102,15,181,124,222,140,230,123,8,170,90,67,155,22,175,227,65,60,71,192,246,102,199,46,139,77,107,31,90,133,152,252,135,24,254,26,204,95,79,99,84,60,248,220,182,6,239,86,8,243,33,12,17,69,113,179,25,38,212,161,207,73,219,189,105,109,207,247,237,254,16,138,237,235,110,127,142,42,174,193,27,142,112,40,222,203,77,91,119,170,85,7,121,0,68,255,224,148,121,40,39,206,151,225,30,207,202,156,97,12,29,201,66,210,142,109,90,219,243,161,153,94,134,255,16,81,66,131,139,31,178,77,176,30,46,106,140,75,200,74,33,190,245,165,181,61,127,86,91,121,144,93,59,72,205,57,122,199,108,23,71,159,17,192,56,200,48,57,137,52,173,221,233,52,252,7,80,126,12,219,247,80,217,141,165,61,177,95,234,97,216,27,70,164,204,128,119,86,204,215,214,246,124,39,215,15,49,254,87,206,174,12,213,197,48,179,94,135,7,170,187,78,12,35,227,110,80,232,131,55,138,93,166,180,182,231,63,214,242,95,143,35,234,51,56,142,12,88,30,180,120,152,225,60,74,76,145,95,110,109,206,118,118,237,33,48,223,249,52,252,114,89,127,35,50,232,96,76,66,114,158,174,177,61,251,209,16,255,176,166,14,223,198,160,181,30,214,154,33,140,13,175,191,24,179,81,91,219,243,137,105,123,188,148,49,86,246,117,164,76,125,236,212,247,210,250,93,205,84,175,7,206,222,188,253,118,220,112,243,183,113,237,229,243,15,251,113,197,205,251,239,127,248,249,155,127,124,251,254,63,223,190,251,235,155,183,255,245,230,167,31,222,140,97,124,245,135,163,206,198,114,168,124,253,227,31,246,163,27,127,250,241,135,239,198,73,95,13,110,111,156,255,127,219,213,254,184,252,28,157,24,255,227,234,163,67,255,129,51,228,14,63,127,248,14,210,101,187,158,158,42,131,222,140,60,204,99,92,118,3,29,4,6,139,65,140,241,201,127,255,243,253,15,111,151,214,175,248,111,125,142,131,168,151,241,244,63,191,121,255,253,55,223,189,125,247,238,167,175,228,235,88,254,191,191,251,231,87,203,241,255,54,94,103,57,113,25,210,102,75,29,179,161,253,244,238,221,251,111,254,241,238,253,187,127,255,241,239,127,121,255,238,95,122,115,27,194,199,141,126,27,70,190,11,32,241,2,202,26,196,20,245,175,224,215,39,75,183,255,133,210,192,75,146,239,151,144,22,61,76,173,137,247,250,203,212,60,250,203,24,72,253,101,36,69,127,197,26,9,22,187,170,191,204,99,89,127,153,127,12,238,110,40,26,63,211,66,199,238,140,212,221,225,103,236,208,36,114,248,153,202,54,196,62,141,157,245,73,114,104,163,180,226,86,10,48,62,22,141,29,94,197,135,193,54,216,99,164,70,212,162,124,220,56,242,207,63,218,160,180,48,232,203,119,191,92,233,185,20,17,124,208,158,63,154,110,112,118,252,209,106,90,61,254,140,63,42,144,63,46,98,121,249,185,68,214,167,252,65,161,252,81,55,231,75,55,148,60,9,208,115,198,159,4,232,73,128,126,51,93,158,73,200,50,186,95,168,221,249,203,247,111,254,37,61,212,62,255,240,254,159,111,254,101,178,63,42,237,253,244,237,223,198,40,252,254,86,201,124,84,173,71,76,137,250,104,47,50,52,148,217,59,113,101,198,47,155,96,252,212,255,112,50,157,59,190,122,50,53,189,190,87,181,15,127,46,245,242,211,201,95,135,139,219,175,169,167,141,253,178,243,185,231,184,131,21,198,71,213,251,217,129,248,111,58,223,78,176,151,212,215,186,179,124,58,122,22,170,167,123,27,213,79,199,173,67,249,116,105,123,117,213,211,165,254,219,179,122,250,151,177,28,124,126,52,243,245,136,86,67,112,181,236,58,108,104,49,26,141,143,229,215,89,62,142,8,36,64,14,127,229,88,176,109,181,42,193,112,74,183,3,142,230,36,165,59,25,249,43,79,122,32,60,114,52,193,223,184,189,228,186,211,204,45,95,111,23,70,127,154,127,224,88,170,87,219,153,41,79,127,74,149,61,115,235,209,38,244,119,92,67,227,16,17,140,137,219,200,197,36,132,92,186,34,248,76,90,150,83,45,74,64,26,228,200,133,3,150,243,81,57,90,206,147,1,142,192,86,69,83,82,16,17,65,37,210,27,169,184,136,4,13,75,119,172,76,44,46,121,214,113,200,95,114,185,209,11,187,234,104,145,6,58,66,15,152,191,101,42,207,126,6,46,10,116,38,72,81,143,185,202,73,75,113,15,11,70,213,19,116,213,174,58,32,109,144,65,99,229,165,69,79,177,249,69,60,163,186,208,143,25,84,109,172,30,138,11,243,111,185,150,92,82,230,28,17,55,186,192,104,145,235,41,157,144,150,163,194,12,18,91,48,100,104,20,169,86,98,209,94,202,172,227,172,165,242,221,56,139,65,82,193,119,9,226,18,152,181,159,222,31,204,29,79,201,104,67,142,39,106,192,156,212,211,102,175,21,208,52,190,27,77,105,27,205,178,141,254,182,211,74,162,162,253,238,247,222,218,181,155,30,96,21,199,248,66,23,36,212,99,108,37,111,83,208,28,109,19,110,190,30,63,116,37,105,110,150,11,57,36,119,35,146,14,247,83,24,166,186,91,141,184,94,114,150,20,214,145,78,240,56,165,255,160,197,115,223,138,150,159,218,116,199,142,81,24,206,30,115,102,179,161,152,40,117,83,186,30,193,168,133,180,8,140,43,16,171,89,103,70,39,13,240,45,222,125,224,32,26,29,29,100,247,162,9,137,157,17,90,227,187,171,236,60,218,149,117,219,18,187,167,129,30,19,173,140,25,154,187,202,176,183,122,175,226,234,132,212,108,179,250,176,230,254,246,165,166,62,138,185,167,226,19,70,57,5,35,85,132,133,33,140,191,209,125,61,17,184,26,216,99,222,115,92,12,235,238,55,180,224,54,59,94,202,254,248,146,134,46,138,225,41,97,230,128,186,229,134,186,212,138,23,176,83,48,10,28,159,177,145,237,147,11,145,20,191,201,44,11,187,21,59,238,240,76,33,84,112,23,15,139,78,4,30,214,219,136,135,5,21,12,60,172,66,229,235,99,98,49,59,79,38,246,117,48,177,131,55,164,72,126,224,105,139,129,155,27,21,181,34,136,120,73,217,136,5,177,217,246,7,251,9,106,163,100,203,41,134,222,6,140,232,184,156,31,131,108,93,166,155,81,151,205,153,179,138,217,89,113,196,154,253,82,191,172,41,36,91,170,115,59,132,71,37,135,73,13,237,145,113,198,223,63,6,149,72,54,237,132,74,52,175,84,196,36,126,156,99,18,105,139,136,228,139,44,52,102,119,174,51,56,27,43,252,102,218,6,16,116,203,34,238,197,252,102,210,7,21,46,78,38,135,204,186,113,14,66,74,19,191,54,174,126,137,123,240,139,202,94,195,201,16,5,76,253,225,208,133,134,201,24,25,131,162,100,216,78,215,37,72,28,134,194,135,146,63,37,190,170,116,113,30,106,124,37,64,155,179,178,68,76,79,144,196,56,164,80,180,182,227,23,254,208,14,104,19,160,84,167,14,247,153,191,153,49,244,38,218,109,22,4,232,44,158,95,194,201,39,4,66,229,54,209,66,32,111,215,210,38,98,99,237,40,231,2,177,57,184,19,222,228,45,50,40,154,52,187,148,110,121,106,129,4,136,22,153,23,154,218,101,96,169,5,251,93,114,17,80,27,184,70,230,32,105,85,208,164,171,229,59,31,223,149,199,3,211,73,61,68,255,121,24,97,35,40,3,201,57,120,0,49,165,69,87,105,207,64,164,77,144,153,233,60,32,1,0,150,103,227,159,155,1,151,50,134,209,91,108,160,216,48,202,109,18,128,162,71,183,17,26,137,73,117,211,55,19,194,147,214,206,41,205,249,250,194,148,229,195,165,152,174,24,84,23,120,73,109,184,22,9,104,5,244,26,248,236,128,184,64,122,179,31,234,174,169,91,171,110,191,110,147,182,155,185,223,244,140,27,90,244,17,49,12,238,72,104,168,96,169,128,195,86,176,92,70,132,25,85,14,170,238,64,187,52,168,168,200,56,6,162,52,9,131,70,206,37,82,192,118,3,157,17,128,80,184,122,153,209,179,172,229,112,44,107,33,183,197,7,21,109,84,228,210,98,160,138,166,122,84,150,128,174,131,205,6,134,51,160,199,190,247,40,166,236,240,22,9,36,68,209,96,147,14,229,52,120,169,193,94,21,197,101,20,51,66,33,68,178,149,239,66,167,203,58,49,0,101,65,191,208,232,72,195,35,141,87,232,147,62,145,112,13,86,15,229,2,164,65,25,61,181,123,140,45,75,11,165,39,152,211,254,92,142,2,211,220,103,21,212,69,77,40,125,218,8,64,172,12,147,250,1,77,145,5,9,232,162,141,94,25,14,53,13,47,24,83,157,3,99,157,208,81,234,122,55,52,186,163,46,134,240,215,87,85,244,72,75,233,102,217,173,200,167,56,130,56,231,18,8,124,15,150,207,247,136,254,192,86,93,46,143,152,79,107,161,253,92,247,123,64,7,5,99,200,220,168,238,65,238,126,237,213,121,161,155,122,17,101,220,167,22,8,137,217,161,192,193,172,66,101,161,123,5,90,139,217,15,108,247,161,232,112,198,85,238,162,26,11,219,49,184,98,63,250,48,65,101,250,66,175,229,20,209,147,200,177,39,129,154,143,145,48,48,228,32,97,120,27,137,24,24,99,16,49,150,81,190,62,85,197,178,142,79,85,197,11,137,212,121,33,240,245,137,195,27,108,171,253,90,24,251,200,232,134,211,130,68,190,52,104,167,169,252,157,128,247,122,234,184,17,24,185,59,143,44,135,20,38,189,56,243,95,14,103,46,224,179,210,88,206,86,205,198,194,234,60,85,144,31,210,76,9,149,5,227,64,162,24,11,152,222,228,124,182,183,145,88,168,44,230,176,235,120,147,232,112,220,64,60,207,59,7,65,194,218,38,191,0,229,207,121,26,233,133,199,27,54,253,196,98,144,73,124,234,139,136,171,158,105,8,157,87,209,219,114,11,156,132,72,73,160,44,242,212,204,49,83,137,251,42,163,200,26,82,240,247,16,142,195,132,210,20,223,203,77,182,189,114,237,46,216,174,252,59,157,162,124,46,146,30,65,181,135,10,96,164,218,163,194,88,58,18,50,9,170,140,76,78,20,152,210,163,30,169,50,48,126,152,110,46,94,97,201,100,231,54,45,158,144,193,96,18,52,161,137,153,95,112,247,211,98,169,195,89,155,89,210,76,144,141,53,45,78,89,61,90,218,176,236,21,50,84,20,89,14,33,145,201,203,156,66,184,73,243,7,161,3,202,87,87,111,152,193,111,214,66,153,206,34,228,58,102,90,118,152,101,9,184,113,61,176,200,102,71,85,92,232,147,173,98,46,169,134,231,191,182,101,113,1,226,220,227,61,165,117,4,182,141,119,93,171,221,170,136,86,6,190,252,79,247,86,153,106,88,216,163,196,5,199,5,149,218,177,219,169,103,1,35,192,149,68,118,57,160,10,8,1,34,134,124,55,213,248,252,73,104,76,129,153,85,175,13,216,21,224,12,16,12,168,194,68,34,63,141,152,187,93,207,7,160,99,165,188,173,197,196,131,97,158,251,181,40,203,85,22,212,204,192,142,2,240,219,129,107,185,188,218,131,116,65,178,82,219,187,29,32,179,7,222,184,206,178,147,4,125,44,55,17,15,188,14,52,10,14,66,77,186,168,121,232,182,67,233,81,211,103,26,85,30,48,205,69,63,89,52,155,101,243,212,189,149,54,95,93,193,110,145,27,64,112,96,233,97,41,97,203,130,81,3,210,173,56,57,160,108,34,121,184,66,65,250,145,38,20,178,33,110,3,226,212,37,234,149,11,35,128,123,173,119,213,120,135,38,146,172,117,95,7,193,122,105,122,125,130,53,162,168,159,130,245,43,113,100,85,102,153,77,27,162,34,59,179,38,76,89,93,242,255,129,169,29,30,175,100,181,29,36,52,88,253,151,235,76,131,62,49,203,179,193,85,224,102,242,240,75,186,95,128,126,5,239,148,209,49,28,243,38,246,133,22,27,87,26,191,28,213,129,95,3,9,87,243,115,81,250,211,100,240,236,56,163,60,146,197,220,212,23,11,61,113,252,168,218,82,163,232,114,243,97,237,46,52,141,168,28,248,58,227,85,96,120,24,132,200,127,156,93,119,57,91,220,255,203,90,148,16,43,77,34,140,172,46,177,225,23,161,119,240,57,246,159,202,53,224,11,140,131,37,34,51,201,22,153,186,73,217,202,54,47,119,24,51,99,202,224,150,200,142,70,255,43,17,128,239,129,255,63,153,241,217,194,186,105,157,103,99,181,213,165,180,240,116,157,52,161,238,43,145,122,78,226,57,217,107,93,184,0,193,224,155,153,91,33,53,63,1,194,221,198,134,12,228,38,82,244,151,93,187,115,234,91,232,121,25,24,143,188,76,75,156,53,54,198,97,106,155,185,143,139,19,215,107,250,118,218,56,20,174,172,203,204,9,163,37,93,130,192,44,161,174,110,255,210,30,175,56,160,160,136,128,64,2,122,169,24,40,8,30,149,69,37,188,165,28,151,163,52,253,157,86,43,112,138,188,197,11,6,8,248,161,162,16,160,245,188,5,235,54,13,91,185,236,244,128,7,200,0,233,13,240,14,0,134,47,119,37,124,89,222,35,200,151,249,72,62,251,16,165,224,201,58,25,200,139,41,1,52,138,129,149,0,136,107,96,204,78,248,208,237,61,218,247,69,115,148,69,181,170,33,72,208,24,0,182,1,232,14,224,91,148,182,138,18,9,101,174,160,213,188,0,101,137,202,34,38,100,159,40,1,19,138,142,142,48,157,233,105,81,129,229,176,186,194,232,11,45,93,0,224,252,11,60,241,76,39,127,155,153,31,192,144,153,121,129,143,87,199,205,139,223,244,147,155,127,69,220,188,48,221,3,7,69,127,140,193,134,123,152,201,108,130,190,90,28,86,44,24,132,125,188,46,70,9,16,98,51,201,189,249,39,89,19,80,26,93,67,17,174,105,212,237,7,177,172,210,66,84,18,62,56,78,212,128,237,150,44,164,126,12,130,66,216,221,70,143,114,94,39,206,129,146,28,245,150,211,92,86,189,183,156,57,182,6,186,45,243,67,45,230,105,76,188,208,136,98,97,63,90,85,92,88,92,239,100,10,44,157,36,9,27,112,32,176,38,100,149,10,39,206,35,220,35,43,185,237,192,245,196,169,146,7,23,222,236,179,53,25,148,160,19,203,133,34,222,94,162,116,146,155,69,112,159,155,97,136,51,18,204,236,43,188,72,112,36,38,95,19,196,45,210,172,153,103,247,224,98,163,190,125,105,97,237,104,105,74,103,153,151,22,17,111,68,50,185,111,21,220,159,140,239,209,190,144,7,81,152,135,25,174,89,90,156,255,10,192,35,9,223,140,100,206,185,82,155,32,2,198,72,48,209,213,212,64,39,90,90,128,140,250,0,209,170,5,46,127,185,22,205,33,98,124,244,90,218,160,151,242,223,240,90,177,177,128,149,245,185,129,177,97,220,61,192,129,178,203,6,130,232,10,217,153,12,98,241,49,25,8,243,13,210,27,206,100,6,81,148,113,251,137,185,97,58,131,130,40,49,135,66,160,3,119,244,140,51,141,24,121,205,199,230,70,32,91,80,199,18,170,223,37,128,244,213,97,7,121,6,118,115,206,226,22,171,165,31,1,155,26,166,85,39,233,100,67,11,58,199,62,234,241,24,229,204,217,25,80,87,101,18,58,220,69,5,54,8,53,254,103,16,91,236,111,146,248,177,196,209,27,144,16,175,58,122,57,28,105,38,4,82,16,65,35,28,34,222,120,3,154,196,226,253,135,200,154,195,150,53,230,113,122,99,185,110,102,25,159,66,37,104,0,100,51,67,255,180,226,2,3,102,113,115,191,50,43,48,12,191,58,52,169,34,139,154,108,51,99,3,186,151,39,150,159,236,186,20,223,8,173,89,244,190,183,120,20,178,32,66,243,68,96,70,57,230,103,155,73,16,19,90,129,24,22,161,128,226,39,179,183,227,232,51,82,255,134,54,67,175,116,42,207,13,105,180,14,250,46,253,173,110,185,237,252,53,120,60,35,251,142,36,20,194,209,80,151,74,130,26,58,85,137,89,75,241,42,89,204,148,51,145,214,134,250,154,11,43,185,156,54,144,144,96,165,133,167,6,236,226,228,10,70,59,11,99,178,185,173,46,210,11,5,182,69,155,26,114,85,105,90,165,96,126,90,32,133,129,76,6,2,218,16,216,142,6,23,58,221,145,242,74,240,39,163,200,6,125,240,101,193,198,159,155,108,101,24,231,200,121,96,207,220,34,167,148,223,153,210,224,130,108,211,107,96,154,38,92,17,33,170,237,207,94,171,204,143,205,168,241,181,178,114,216,0,100,219,158,122,57,215,61,0,179,81,55,21,72,125,122,227,13,117,107,78,203,180,193,151,155,179,41,181,4,12,149,67,237,14,55,165,20,122,237,140,129,128,15,109,7,108,29,26,164,237,75,70,210,10,17,97,145,145,244,193,187,54,123,122,167,70,180,145,105,42,211,95,37,3,243,233,129,191,249,154,64,81,132,14,107,72,135,248,182,88,221,112,148,217,162,0,82,130,180,10,138,13,188,118,80,221,194,126,179,67,146,4,116,81,23,10,117,227,239,221,176,187,25,108,230,171,78,42,159,166,23,42,115,186,46,235,181,11,113,175,161,165,21,180,64,134,173,127,40,225,227,248,121,146,195,73,102,102,11,209,20,83,209,145,103,251,108,202,78,252,206,41,179,51,217,228,84,166,146,61,133,152,88,92,134,202,223,22,94,195,225,63,169,141,148,218,136,205,98,203,149,53,209,206,179,210,77,165,165,16,157,24,14,152,121,148,134,145,169,236,78,165,132,13,185,76,68,181,17,122,147,88,188,34,60,167,149,167,72,3,138,142,107,224,133,128,67,81,42,66,189,164,163,64,100,224,177,244,255,16,205,137,141,64,65,102,222,50,231,193,186,230,75,1,248,242,132,46,29,8,22,40,165,174,106,223,45,62,186,21,123,90,201,168,200,78,85,188,194,146,230,6,243,60,163,44,221,36,33,34,142,219,128,193,205,175,180,81,8,56,103,139,237,28,29,63,5,105,89,131,31,64,114,12,209,68,29,61,66,196,202,86,169,27,42,111,57,59,219,189,23,205,6,66,70,109,234,23,36,171,238,116,143,147,36,17,32,116,201,157,143,8,71,84,52,226,126,157,243,62,107,0,131,12,74,241,172,172,249,161,235,224,238,42,157,21,148,165,184,90,80,179,95,101,158,66,250,15,114,1,32,116,238,107,97,238,139,107,224,48,109,152,62,20,23,188,243,210,175,130,207,92,249,138,234,180,133,67,252,102,216,106,110,72,106,209,24,161,154,175,50,163,156,114,19,231,241,177,160,121,159,229,245,243,24,27,135,97,64,188,50,15,136,201,62,169,128,22,130,30,173,38,95,108,11,154,133,53,73,176,147,24,91,193,146,251,193,93,163,80,98,29,80,162,45,85,96,117,200,247,22,167,109,69,233,146,148,50,198,65,251,109,117,66,60,169,143,31,194,68,109,229,214,30,245,61,163,20,147,41,147,194,135,173,193,217,161,136,23,83,228,91,65,164,166,247,113,87,215,164,210,105,212,62,6,68,165,133,87,204,186,158,91,232,202,69,9,101,250,55,242,130,199,122,125,240,178,132,44,194,140,89,222,42,106,80,65,145,212,172,130,8,156,85,172,19,168,103,171,32,32,167,29,156,211,171,244,59,199,0,24,193,14,148,164,144,201,66,74,50,173,41,196,200,174,58,229,47,186,175,10,124,17,108,225,72,49,103,162,10,132,89,130,171,50,30,246,166,75,52,186,134,206,69,87,245,111,209,16,7,29,114,85,49,115,183,161,38,205,34,157,101,228,112,248,11,138,181,78,243,230,122,185,16,70,201,14,23,164,216,11,122,63,202,151,69,46,230,224,165,224,143,218,8,144,89,198,108,228,208,48,178,153,112,53,113,2,147,51,175,140,251,26,111,239,72,190,33,183,149,38,207,224,119,142,114,38,29,44,241,87,183,40,110,37,202,133,110,123,146,30,111,41,252,13,115,63,52,31,68,195,27,190,132,100,160,42,40,173,10,83,204,187,172,242,195,249,194,126,210,141,217,69,86,197,158,85,205,56,56,226,232,132,128,26,220,154,169,0,144,54,33,185,230,87,82,39,17,194,179,179,147,103,51,78,33,66,20,249,16,24,93,111,48,29,13,135,81,217,151,112,105,144,241,194,171,120,96,10,237,167,194,135,180,92,66,163,164,238,164,201,34,116,174,74,166,220,249,216,85,232,23,149,246,179,6,42,179,37,149,246,55,12,66,195,68,208,149,17,150,22,216,155,185,146,236,207,150,56,136,74,64,43,145,45,116,184,80,234,206,162,212,216,161,106,83,49,95,117,220,86,154,155,194,181,249,176,9,41,124,128,57,167,121,42,162,161,65,174,19,49,152,160,178,32,163,247,232,165,137,116,203,158,128,59,215,152,37,142,86,60,181,33,234,186,83,128,18,146,169,20,73,34,185,92,145,104,177,182,241,62,160,177,105,244,58,55,212,63,132,215,19,22,207,242,41,109,247,198,244,152,65,116,13,5,50,11,208,240,169,157,13,211,239,229,41,67,84,113,183,239,211,188,116,18,120,165,98,173,128,26,136,99,165,159,149,198,42,24,38,167,52,159,250,6,112,139,214,35,17,155,138,220,43,250,47,12,113,98,153,141,0,71,207,108,2,191,188,192,85,67,17,230,208,224,34,156,146,51,226,160,199,174,7,17,41,143,255,183,4,80,238,203,131,22,224,15,61,159,180,122,100,225,93,119,240,99,61,28,43,218,148,205,53,105,117,222,116,230,194,38,83,242,228,216,214,37,129,140,37,178,78,151,145,89,198,69,21,42,10,216,84,200,202,28,94,229,2,59,126,167,242,68,141,34,145,181,141,173,58,146,167,209,35,15,216,157,130,29,46,26,127,140,236,174,17,188,57,200,211,163,115,4,81,79,207,20,190,225,134,129,206,228,159,157,2,146,215,64,118,42,72,62,7,217,41,1,72,136,82,182,40,182,112,155,50,207,7,180,134,17,155,23,124,95,232,65,217,160,69,236,77,59,58,49,140,85,177,208,48,14,133,185,72,236,71,229,115,42,47,132,105,8,202,35,221,217,78,152,76,147,78,252,31,169,147,110,107,152,138,34,170,101,19,27,102,114,69,61,198,236,108,101,121,43,91,204,75,39,141,226,165,176,61,47,59,104,223,231,167,106,188,126,0,142,148,209,18,166,217,105,83,52,247,108,50,81,44,109,228,236,160,194,171,49,192,148,188,210,102,201,54,38,167,82,106,220,81,26,199,140,27,254,27,81,185,215,174,80,93,200,102,185,43,76,84,184,105,96,107,69,235,22,220,115,72,115,23,102,254,206,180,111,217,16,14,237,5,226,169,21,25,200,73,230,102,138,32,0,242,159,95,78,197,226,104,113,23,223,66,209,64,30,212,10,85,237,16,180,18,197,95,169,69,111,5,1,54,222,121,89,131,83,117,60,73,9,212,249,2,80,47,87,12,56,197,198,19,169,2,99,73,197,94,148,147,160,58,154,37,181,101,214,107,134,14,120,56,7,211,137,226,81,200,132,131,15,247,108,121,193,247,44,121,167,85,188,31,206,209,132,237,154,5,93,240,130,78,119,117,157,201,140,18,179,53,29,219,195,108,209,10,231,148,56,171,204,122,37,70,233,42,144,43,233,13,182,43,60,114,153,188,226,176,217,185,116,38,159,207,228,20,90,0,179,1,221,184,66,212,7,93,34,135,145,2,64,153,6,119,171,85,220,13,217,35,241,134,199,98,239,237,232,158,144,217,83,242,102,30,195,187,2,78,20,3,132,120,147,209,84,243,178,193,17,62,69,156,228,240,241,207,31,16,224,121,5,125,191,42,91,25,57,59,206,88,129,212,15,105,198,61,78,14,198,127,44,32,69,255,121,6,26,207,147,130,192,167,144,36,212,25,110,242,143,35,206,87,53,48,209,85,134,209,23,39,171,102,71,3,198,57,60,236,219,129,104,159,52,240,72,187,16,192,64,102,229,5,100,0,55,119,62,214,79,129,187,33,86,212,210,123,179,5,74,219,66,64,184,50,56,23,14,80,84,54,106,1,250,185,212,163,102,197,20,44,100,21,149,32,27,231,104,180,23,206,74,178,173,84,187,79,174,38,83,194,114,66,11,89,221,149,180,106,108,32,247,220,164,230,176,156,209,4,206,64,230,150,213,43,98,118,79,54,75,170,9,164,223,165,224,115,132,207,176,74,32,19,4,14,68,39,151,86,103,165,108,239,57,239,59,15,33,173,177,66,115,144,68,77,131,31,211,167,34,222,53,52,164,144,123,64,2,41,95,61,91,9,57,78,153,82,63,101,89,166,248,74,218,157,116,23,115,17,11,77,73,83,60,27,40,96,157,242,29,195,55,152,166,205,77,209,12,146,81,60,208,81,164,24,208,224,161,13,189,32,197,107,130,73,5,203,72,249,173,184,176,128,187,63,1,4,40,109,179,85,30,176,140,206,56,143,188,218,225,27,200,89,158,41,86,105,122,188,214,196,102,104,115,130,11,249,3,69,19,220,20,54,255,45,91,86,59,130,166,218,2,239,106,222,234,201,123,206,78,211,161,135,107,123,83,232,221,253,65,191,13,76,87,192,95,221,28,73,239,80,246,101,216,133,253,70,229,123,187,230,145,160,214,228,91,218,65,161,211,101,105,86,38,168,157,197,58,211,205,114,212,53,203,11,27,22,127,29,52,226,210,108,175,18,231,219,123,201,21,132,139,28,206,148,7,151,148,71,170,165,81,244,14,136,183,44,185,156,117,154,248,121,163,220,92,111,171,238,189,184,55,195,222,93,219,222,5,1,100,36,17,177,72,196,50,5,9,69,28,181,130,198,10,170,171,248,176,226,204,14,179,6,244,155,80,115,196,219,107,184,189,160,255,66,32,154,155,22,8,111,247,65,179,89,106,86,195,130,177,11,9,13,100,182,163,194,68,164,87,200,120,34,244,133,21,8,176,43,130,178,180,106,8,197,109,17,139,181,166,214,16,35,65,81,139,140,50,112,88,21,28,100,150,75,1,182,86,223,213,116,17,41,142,76,153,35,83,14,45,13,209,152,199,73,187,102,75,159,74,96,42,35,114,130,45,82,239,122,250,71,212,213,210,104,216,222,25,156,183,124,156,146,230,6,245,246,169,123,220,123,86,134,153,195,106,69,27,25,171,4,148,195,157,147,251,170,128,39,211,183,93,137,33,192,254,8,233,27,58,134,184,80,227,72,179,59,154,94,73,126,100,10,42,219,144,248,138,142,241,80,200,199,190,183,221,150,186,73,158,25,51,224,134,84,253,179,235,218,183,89,209,64,53,5,140,100,45,76,39,206,210,189,225,25,169,252,18,193,43,49,44,162,31,156,14,136,51,106,140,167,158,110,221,118,174,233,127,25,97,152,132,181,185,66,62,126,46,221,145,198,112,111,0,66,79,202,224,133,61,7,226,42,112,16,227,58,95,77,151,218,142,19,36,84,64,9,112,212,80,90,81,57,73,52,146,116,77,138,189,125,100,150,122,153,215,148,165,30,249,226,130,50,164,209,133,188,198,228,27,159,40,127,248,51,249,198,51,71,253,42,140,65,63,249,153,115,212,139,33,231,153,163,254,51,230,168,95,88,249,221,121,152,52,206,167,195,233,112,57,104,238,249,133,229,190,108,207,187,253,102,55,124,167,45,35,253,210,122,62,95,135,229,227,178,31,217,234,45,77,253,117,123,56,93,46,131,243,219,31,183,199,147,217,6,5,167,47,117,179,159,185,117,110,171,80,193,181,88,13,233,201,132,120,250,91,85,113,154,148,0,51,165,149,85,30,117,124,41,184,25,85,122,141,69,84,217,193,220,120,92,148,64,137,109,189,166,250,206,76,171,203,76,204,135,210,219,102,178,244,42,194,82,79,215,179,77,162,124,186,231,250,131,132,66,198,73,212,75,103,62,23,23,134,17,216,211,66,162,8,184,74,69,75,17,106,114,123,177,114,248,196,11,170,165,116,41,96,19,211,165,141,249,84,183,41,57,234,26,242,109,107,75,224,25,169,40,241,50,243,102,46,159,41,62,81,20,121,114,141,136,116,182,69,64,31,144,219,127,14,197,206,162,242,250,124,229,123,249,193,58,207,170,175,26,101,143,163,169,66,135,73,34,236,104,136,178,52,53,168,162,66,33,193,184,62,42,108,110,30,11,158,29,111,12,7,214,109,85,10,32,84,139,163,234,111,204,156,205,65,152,37,204,91,152,75,42,208,189,216,191,250,45,146,150,177,46,115,128,130,6,74,34,20,53,96,22,192,176,0,105,4,226,8,229,237,70,136,107,120,59,125,212,125,133,168,177,79,99,37,106,85,81,68,190,121,44,113,97,156,165,237,75,91,143,168,230,99,4,74,214,1,205,194,119,174,191,33,247,69,206,43,102,104,207,2,37,89,119,58,151,151,78,154,37,56,72,25,204,209,16,112,237,34,69,147,185,194,176,238,137,47,66,170,208,157,86,170,255,232,250,226,64,210,97,85,189,141,86,85,251,27,22,85,122,243,250,196,161,103,102,241,215,196,47,153,47,27,185,151,206,168,118,196,219,207,26,210,41,189,15,7,24,36,119,56,46,82,192,201,126,220,60,97,185,117,204,177,8,197,23,41,61,95,232,23,66,75,52,82,158,124,243,184,160,185,183,40,146,99,202,55,237,54,192,126,41,163,88,108,129,241,138,20,125,134,169,184,126,106,12,28,6,243,206,222,120,222,89,65,102,226,87,59,223,58,127,107,158,232,110,33,154,149,106,51,35,248,191,164,184,135,86,207,92,95,167,247,141,253,157,176,53,198,236,88,31,247,10,238,220,220,97,40,112,203,60,196,217,234,230,179,78,248,84,161,25,227,13,101,157,95,98,186,70,83,122,42,103,146,102,205,10,112,27,186,18,228,23,9,247,106,14,213,114,107,18,221,0,212,50,14,235,78,71,201,188,39,154,109,83,247,86,157,229,178,16,188,82,240,3,247,176,60,190,105,191,103,226,88,218,177,230,96,238,50,91,205,140,70,96,95,77,243,113,23,209,214,171,5,154,13,88,190,167,146,255,229,245,209,108,73,28,244,164,217,175,70,199,113,5,159,12,81,4,121,127,241,225,246,10,245,242,50,255,47,149,249,168,92,30,142,81,172,68,126,99,150,114,152,115,85,33,183,120,104,179,94,80,3,68,83,202,120,100,22,102,118,95,51,127,54,215,97,160,212,53,178,195,231,241,177,94,135,34,252,208,201,105,144,197,69,168,197,19,97,53,213,229,221,203,60,37,248,157,185,0,167,125,172,92,196,99,7,124,1,64,173,169,172,33,44,103,75,143,232,40,206,113,8,106,101,65,15,92,221,219,126,7,227,20,4,111,207,167,233,171,65,243,3,73,203,42,121,179,251,21,196,119,163,148,33,86,2,73,61,85,82,103,213,24,164,108,100,234,159,107,186,156,10,133,128,174,60,26,120,9,181,9,186,3,35,23,88,86,168,35,132,146,34,121,53,20,7,104,66,254,235,57,237,166,100,162,226,103,6,41,84,35,90,237,90,156,212,80,83,231,51,136,171,22,198,150,79,115,255,97,162,213,47,217,92,85,61,32,213,90,188,220,53,146,195,169,11,46,234,228,112,32,27,146,187,81,24,1,89,70,221,7,124,166,155,51,182,40,102,241,229,132,90,6,244,238,215,111,138,155,208,130,142,113,214,83,6,133,5,60,176,180,190,87,116,117,104,235,78,237,212,92,17,44,27,85,215,212,4,254,84,211,1,32,210,181,208,73,80,129,218,40,67,95,176,215,109,3,134,132,103,198,254,82,14,211,220,148,206,148,171,205,197,118,52,104,213,255,40,25,38,156,105,67,56,16,82,161,211,138,44,224,152,82,105,199,203,35,162,201,182,50,225,2,11,78,42,137,126,216,16,14,101,32,121,181,216,38,159,134,227,112,152,239,237,120,79,68,22,139,195,10,7,56,43,74,33,125,16,178,103,44,234,113,138,36,22,215,147,16,69,166,172,119,200,214,131,163,166,18,207,14,50,116,173,235,238,142,114,10,238,220,194,29,20,208,18,45,159,92,112,219,7,165,22,124,99,122,125,82,86,142,62,65,153,41,45,200,88,62,180,157,246,191,237,68,197,20,227,0,80,69,119,85,135,0,226,37,59,70,11,236,6,238,176,104,190,90,132,198,16,65,238,83,62,141,7,80,109,174,224,195,6,103,210,56,133,57,130,215,1,0,16,119,211,164,151,124,127,211,10,79,239,55,232,114,169,197,212,119,30,195,53,154,20,67,112,117,27,104,240,168,40,9,50,93,210,172,196,78,41,98,169,24,96,13,73,76,212,24,79,194,101,28,7,1,247,43,110,247,6,213,12,18,49,178,2,40,228,179,17,174,163,155,2,186,124,42,7,59,154,220,95,12,156,12,234,193,250,110,85,248,33,247,93,0,114,219,146,217,43,202,216,170,22,2,166,202,216,123,33,147,53,156,100,8,241,196,126,71,203,10,151,82,50,181,170,39,84,88,218,52,175,41,3,85,96,211,10,43,215,241,123,45,91,8,42,55,103,206,188,201,184,68,148,194,94,106,194,81,142,147,237,150,220,47,204,40,103,96,182,205,194,232,60,77,132,101,151,183,203,221,226,218,34,115,215,177,127,76,106,42,7,105,37,129,216,247,201,46,16,114,120,4,143,77,220,199,252,209,17,76,1,218,94,212,74,28,140,211,209,193,142,92,66,211,69,89,185,39,133,224,52,224,113,150,40,223,20,211,46,163,64,20,159,107,36,137,175,126,131,76,49,53,35,215,67,176,191,156,162,198,189,196,120,44,93,246,245,170,183,155,217,5,66,188,171,53,132,155,25,194,67,119,88,133,56,83,26,80,152,172,57,176,205,245,12,147,36,211,214,241,15,150,200,153,131,144,141,129,0,187,235,53,53,96,71,179,161,42,40,41,164,57,236,155,7,224,100,91,96,196,11,0,106,50,29,105,196,236,186,240,204,199,141,41,186,172,227,117,210,144,0,29,8,100,156,216,115,182,208,228,164,148,103,182,243,8,13,106,226,249,112,8,178,110,187,146,15,34,34,154,32,225,70,244,0,52,205,204,152,182,248,134,81,254,44,182,32,137,45,173,48,141,10,188,147,113,60,201,212,61,184,7,91,34,53,153,69,167,121,93,104,15,210,52,224,31,68,137,74,223,232,181,57,166,60,222,239,206,84,185,45,159,34,11,12,52,44,236,206,116,218,148,145,204,28,206,147,208,123,2,107,111,201,25,222,137,105,32,118,192,100,47,226,7,26,254,163,50,41,13,39,67,96,25,248,38,178,249,86,177,177,112,82,29,187,213,48,101,230,180,170,172,201,58,127,71,147,43,211,237,161,147,206,42,66,14,116,132,70,0,2,120,201,217,215,70,147,109,218,57,115,141,191,233,232,0,208,195,28,30,165,97,246,38,67,78,126,125,143,30,157,227,51,13,2,23,174,79,195,17,184,135,135,171,35,90,8,255,33,55,216,152,93,18,29,72,83,51,67,19,137,34,59,155,213,176,43,29,53,111,136,126,199,27,52,44,132,35,172,137,16,188,137,36,189,34,252,53,34,162,122,8,113,188,86,135,106,59,140,108,40,187,69,232,21,229,51,65,72,4,99,85,48,133,215,7,179,140,222,148,38,40,202,189,117,186,167,230,99,46,138,33,220,192,2,52,236,4,28,165,89,122,133,65,39,23,36,136,151,106,168,105,37,185,76,151,217,168,99,158,5,158,157,135,117,96,149,5,232,24,133,142,157,168,85,179,58,249,188,17,227,27,97,255,22,127,68,76,148,21,28,41,135,112,38,20,91,176,42,233,51,31,215,176,123,189,18,165,104,76,38,146,161,106,16,204,136,174,176,170,37,5,26,208,28,251,132,0,191,64,145,7,22,59,228,39,65,104,14,167,54,133,45,112,246,198,10,117,242,81,74,132,140,2,179,140,17,57,26,11,73,152,214,96,173,123,61,35,18,24,217,41,246,43,12,69,43,211,85,193,79,149,128,222,29,107,153,195,0,209,242,197,54,173,60,65,146,90,49,253,247,100,102,124,228,206,223,220,224,120,194,40,56,197,14,71,122,24,15,100,37,110,96,228,163,82,78,232,49,37,43,196,157,114,250,194,152,65,71,211,86,176,177,16,73,97,188,33,21,49,193,205,185,206,134,177,135,4,43,8,70,98,37,188,53,165,124,54,30,72,121,79,69,141,134,217,49,42,70,180,197,36,114,218,175,83,1,68,115,111,236,14,81,94,195,252,148,137,99,110,35,17,209,77,131,197,73,234,76,62,129,40,9,133,71,74,190,102,4,9,19,87,213,220,85,21,222,232,203,27,173,122,163,123,239,53,244,89,67,212,235,145,26,117,83,195,76,242,42,44,11,83,117,244,216,50,160,201,176,98,45,236,209,244,165,165,248,34,144,39,83,121,114,28,28,105,236,157,44,68,13,127,108,49,205,97,48,18,196,254,77,139,127,168,20,9,108,131,212,25,217,23,111,86,147,97,164,105,129,105,238,100,7,109,3,215,245,238,85,254,222,194,61,81,117,90,210,193,85,93,126,81,176,21,21,28,120,227,208,82,53,121,116,35,118,9,137,36,167,85,107,84,237,71,165,76,13,249,226,203,135,59,50,117,106,85,50,138,223,40,127,155,198,241,146,123,17,87,102,159,6,64,206,124,143,88,46,31,7,206,241,224,47,107,208,85,157,213,63,38,129,65,44,157,47,102,37,129,13,157,12,196,180,33,182,145,26,119,42,40,24,146,59,237,65,102,124,27,238,184,51,131,52,182,18,214,50,116,122,136,168,169,232,184,108,24,19,42,39,214,115,108,29,103,199,250,164,78,227,20,84,82,107,122,171,212,133,208,173,160,113,138,108,105,199,185,182,188,109,84,75,177,222,170,227,108,97,215,18,250,206,220,13,220,166,116,37,20,47,115,178,74,19,9,88,241,128,80,4,202,222,96,246,106,142,115,76,9,145,173,104,95,229,111,27,203,21,233,138,170,230,5,86,151,168,33,227,202,187,160,65,164,174,135,48,72,27,85,217,58,202,171,108,190,239,174,3,183,67,108,106,124,234,224,38,85,120,146,204,181,36,221,19,198,94,171,224,185,122,162,26,224,170,9,12,3,39,68,28,250,98,6,204,202,244,85,45,87,163,248,242,211,160,212,42,150,189,168,119,90,85,79,53,90,172,198,38,24,175,223,185,170,208,2,127,61,21,37,102,143,51,195,156,109,71,109,212,53,48,197,142,169,219,116,117,116,35,169,184,63,100,103,249,229,244,34,59,44,52,62,13,197,231,33,102,143,12,14,19,157,45,221,146,94,102,166,170,113,70,169,14,43,217,165,101,42,103,115,181,101,215,148,205,172,20,49,145,129,98,118,155,129,172,20,180,50,158,80,86,64,153,41,7,217,242,204,248,15,71,176,51,111,6,81,34,82,239,212,172,243,148,126,219,210,92,46,199,229,236,164,202,104,132,83,97,203,51,117,68,54,134,78,28,5,218,16,84,25,196,124,88,6,80,98,98,58,183,168,198,187,168,120,63,20,255,8,96,46,146,81,128,134,72,248,1,76,145,188,166,102,92,47,178,26,238,163,91,18,219,136,40,249,84,79,234,47,183,42,81,34,129,198,173,42,154,245,58,195,95,178,13,174,42,229,146,242,174,85,240,5,21,224,170,162,144,5,108,208,127,102,120,33,21,123,69,9,99,8,130,178,49,230,44,85,246,132,70,173,57,103,28,110,161,82,172,74,70,86,218,84,147,111,103,23,158,121,130,61,151,1,229,222,78,107,119,87,82,237,41,250,80,242,116,144,33,118,134,66,190,128,108,235,158,67,50,16,38,13,72,20,15,215,132,200,21,97,211,250,228,74,243,216,79,170,236,16,138,225,102,89,191,85,8,216,54,73,92,26,88,26,48,175,16,184,66,62,132,194,238,70,214,155,193,160,240,238,204,221,83,4,219,68,76,150,41,150,93,192,11,65,207,52,159,103,96,46,55,114,154,108,56,54,169,154,104,88,71,0,147,129,87,182,31,20,204,152,103,97,88,160,29,152,246,138,222,238,80,21,250,141,222,63,222,30,86,140,198,32,49,3,13,233,98,164,61,91,177,71,116,86,139,214,184,193,119,4,95,208,120,88,52,27,55,109,238,180,251,13,249,7,167,215,162,104,43,170,184,170,173,203,26,189,226,237,17,251,11,101,161,35,175,22,185,101,228,151,180,143,81,63,185,166,197,108,116,157,157,74,180,83,156,22,193,18,177,173,137,139,15,194,104,229,252,171,124,208,72,17,81,214,232,165,17,103,185,137,135,101,33,29,194,33,167,50,228,57,134,153,189,243,47,65,122,239,96,212,152,14,45,150,64,156,156,116,123,59,72,211,84,109,42,157,225,101,221,151,144,236,80,141,181,170,113,139,9,163,131,238,86,205,179,217,74,176,226,195,113,135,171,7,155,18,26,139,195,170,89,226,150,77,167,49,252,52,230,161,198,136,4,213,194,84,76,203,133,220,115,154,156,108,249,78,236,194,51,155,114,119,104,10,73,47,188,162,59,238,21,204,89,9,189,170,168,190,225,234,80,221,33,58,151,137,21,183,138,40,79,187,215,112,213,119,115,9,200,164,145,79,106,251,162,217,111,245,88,153,226,70,178,220,145,109,38,235,171,180,159,251,7,233,182,138,243,36,242,183,42,1,214,25,172,42,22,214,69,228,27,6,150,106,131,161,222,73,215,5,82,47,26,249,37,51,216,153,20,26,91,1,149,9,96,79,13,218,32,29,175,208,146,244,206,226,223,153,34,184,23,32,89,145,121,206,172,117,97,190,27,6,189,224,232,138,200,27,205,84,212,190,144,118,102,77,129,147,129,34,47,76,103,63,171,164,191,97,15,108,40,119,150,167,104,249,32,46,153,216,176,203,55,184,234,192,125,55,198,160,104,45,90,49,41,117,171,221,67,69,227,46,82,125,74,104,124,178,29,212,107,72,86,36,164,31,11,41,213,170,228,94,229,251,86,13,208,233,11,58,189,2,114,246,153,208,202,109,172,166,176,185,224,212,33,166,237,39,251,85,171,92,1,68,148,243,148,251,99,13,12,56,81,182,133,27,187,74,166,10,119,75,207,19,36,102,18,74,77,178,146,111,119,101,34,170,34,38,234,107,122,141,14,235,124,72,29,9,197,80,167,57,74,202,165,85,21,84,157,201,110,190,235,186,52,203,215,175,114,152,4,129,73,17,149,36,15,230,246,178,82,71,166,209,254,244,74,162,78,153,84,149,78,29,136,215,117,238,161,161,129,25,109,201,181,0,89,29,136,253,163,204,203,141,0,178,28,102,102,182,1,247,158,179,75,185,127,219,140,59,227,217,81,206,134,252,233,192,205,88,122,120,226,173,211,164,82,147,99,12,85,121,172,208,196,78,17,215,46,88,185,93,237,83,215,111,93,83,106,154,87,98,49,15,142,164,201,81,194,248,0,166,25,32,73,134,33,204,178,190,238,248,222,120,199,119,177,149,77,0,102,9,210,140,83,5,216,190,17,176,196,77,235,210,9,207,59,95,76,86,202,179,230,108,175,43,219,43,65,16,135,46,106,146,92,58,162,70,47,101,110,61,203,9,81,10,210,117,250,160,140,87,69,193,186,46,205,226,181,75,220,65,66,2,151,6,164,26,192,235,160,51,204,156,112,145,74,236,101,34,101,242,219,186,88,105,234,210,252,222,92,129,66,150,9,23,180,8,163,6,175,214,96,137,86,210,244,78,134,94,119,145,7,209,69,174,70,176,181,17,4,124,53,105,23,85,187,103,5,106,243,8,103,10,149,77,45,41,130,182,15,178,173,113,184,41,84,55,6,243,222,64,217,25,177,87,228,223,80,136,142,140,52,252,73,101,98,104,240,106,161,19,29,156,48,123,167,21,88,107,183,87,221,133,205,102,173,251,121,69,26,143,128,68,114,125,39,246,147,86,96,77,117,208,120,169,118,174,172,65,209,211,170,130,92,83,212,96,26,9,64,208,164,213,66,127,68,96,104,55,107,209,156,117,234,181,162,129,75,58,186,224,31,210,250,143,184,123,201,186,232,94,196,123,118,238,235,220,255,170,130,164,209,53,52,250,136,226,5,80,252,4,120,86,238,44,109,208,219,196,216,238,18,236,50,171,214,27,211,140,83,189,66,179,57,208,137,72,95,206,108,114,49,235,40,2,216,202,154,28,56,219,203,125,169,229,112,215,152,90,14,25,97,41,157,137,153,182,67,62,19,109,124,125,25,77,22,156,247,204,104,242,76,202,156,51,9,155,127,227,167,204,120,183,236,235,207,159,156,249,130,44,47,159,251,182,182,102,159,249,182,159,40,3,246,175,78,69,221,0,208,239,59,37,117,238,179,121,47,203,20,60,84,191,81,33,115,16,250,199,234,185,169,128,151,153,127,18,130,155,132,0,168,248,35,8,129,22,38,20,54,29,221,123,69,71,124,42,18,120,106,177,51,178,240,253,118,68,65,4,171,207,127,91,81,184,124,129,219,182,148,247,183,191,109,203,74,255,246,183,69,137,213,207,124,91,203,205,253,107,111,251,43,249,12,17,21,69,200,148,170,222,178,121,101,247,74,45,12,57,76,34,184,68,255,103,18,166,30,38,78,103,126,152,218,13,197,238,177,28,39,217,114,229,56,33,134,126,156,42,20,69,182,94,142,147,52,102,114,156,148,0,243,227,52,145,182,120,172,89,173,101,61,78,252,24,252,56,17,121,69,243,36,216,71,44,164,114,156,164,175,241,227,196,76,40,2,191,252,43,113,80,242,77,124,3,253,56,145,178,213,2,102,22,3,57,238,32,185,111,63,81,137,144,169,65,18,173,206,203,230,18,134,9,239,122,221,157,206,199,243,101,139,2,218,163,228,199,254,120,56,109,15,187,217,184,248,79,237,15,215,145,250,220,202,134,140,243,46,167,235,254,114,56,159,172,60,8,178,198,46,246,148,151,63,230,243,238,122,29,250,159,253,254,56,7,180,57,239,15,135,205,241,184,245,201,88,198,125,222,158,118,135,243,241,120,241,35,199,217,167,243,246,56,234,171,92,174,27,140,158,170,17,60,194,138,31,135,9,248,26,70,63,86,253,114,220,238,183,151,217,136,85,223,157,247,167,203,246,116,192,72,117,229,119,251,161,138,60,143,25,195,161,115,241,15,143,198,22,63,55,235,115,179,190,236,21,223,140,237,182,221,95,198,40,46,54,250,195,126,44,239,126,79,67,234,26,219,179,167,77,77,18,27,189,248,225,95,174,167,227,225,120,216,110,172,12,213,240,209,56,12,180,179,59,109,231,136,106,83,119,34,76,162,18,169,253,210,135,61,106,113,237,54,187,203,101,67,128,188,140,101,108,244,205,118,239,107,217,182,118,167,123,80,234,224,77,95,250,232,199,6,222,93,15,231,235,245,178,25,85,200,48,166,211,241,56,176,218,121,191,61,28,142,3,208,103,164,106,105,109,207,55,39,52,241,53,122,241,64,191,185,140,5,61,92,6,153,118,76,127,88,112,216,225,178,191,208,86,110,91,219,243,45,141,192,226,96,247,220,243,47,115,216,231,205,225,124,216,13,44,62,121,173,69,103,183,63,95,15,199,227,241,68,12,88,215,214,156,141,42,115,162,178,124,241,131,223,15,107,230,105,59,216,82,175,86,184,31,69,10,207,231,81,177,112,240,165,19,16,218,198,114,182,123,108,12,9,245,193,152,58,225,223,70,161,198,243,225,186,153,3,234,219,210,153,40,51,179,248,7,62,154,86,29,165,238,94,122,199,151,41,31,204,245,176,194,159,2,168,142,12,137,135,203,238,28,9,118,219,216,156,15,9,68,82,224,188,248,225,159,70,241,208,43,115,216,82,64,116,55,34,15,135,252,200,3,109,27,235,233,179,36,229,35,12,126,172,221,238,56,4,98,151,123,117,149,3,163,82,26,234,105,234,28,243,0,99,126,224,141,122,57,93,142,231,211,38,46,197,162,205,216,109,143,227,15,230,36,154,214,254,124,139,130,126,233,99,63,110,199,128,70,65,223,205,198,249,199,203,216,115,251,49,162,211,105,114,71,146,133,167,180,118,167,75,98,200,197,83,243,197,111,209,195,102,63,8,229,222,85,29,131,101,24,204,240,96,152,72,127,176,48,23,165,177,59,153,75,174,62,152,94,11,49,1,195,39,237,1,16,235,160,10,129,117,29,235,115,25,50,221,133,117,148,203,162,149,198,230,220,153,124,226,165,251,68,12,65,117,51,244,118,139,8,183,119,149,205,121,115,189,238,55,135,237,96,237,28,67,213,198,238,100,243,169,95,188,110,95,215,146,131,133,120,238,209,223,82,42,223,92,183,131,26,28,46,151,81,70,222,232,199,118,232,153,143,251,211,137,149,205,93,91,119,54,60,105,37,239,246,203,7,215,227,168,134,127,142,98,218,126,20,206,63,15,237,123,208,205,182,141,245,116,141,42,147,184,203,151,207,246,110,143,219,211,118,56,239,211,186,15,149,252,208,182,236,14,44,142,182,141,245,108,100,178,145,240,211,199,218,176,143,232,105,231,241,175,195,43,253,1,168,194,46,42,119,148,4,28,135,126,119,144,187,235,100,228,187,182,230,100,84,85,18,87,253,151,47,176,236,143,151,83,52,228,29,7,205,31,152,115,115,217,109,166,118,187,107,171,231,34,0,103,137,199,125,249,58,133,33,128,109,134,249,106,40,53,93,179,63,36,230,195,246,112,138,138,190,182,177,59,223,236,29,75,0,242,115,191,254,118,75,119,188,14,195,211,64,249,100,115,220,13,195,203,102,40,127,166,173,185,54,117,39,206,4,165,82,177,251,229,35,170,129,109,134,221,233,52,201,218,162,154,190,30,135,206,107,88,158,120,236,77,107,119,186,39,100,125,8,69,216,110,164,102,56,156,14,23,162,253,199,177,57,247,215,101,127,186,245,162,105,109,206,70,145,13,13,185,127,176,221,106,233,68,134,159,221,99,123,85,75,235,119,197,9,90,143,155,157,121,251,237,184,223,230,111,227,210,203,231,31,246,227,130,155,247,223,255,240,243,55,255,248,246,253,127,190,125,247,215,55,111,255,235,205,79,63,188,25,163,248,234,15,71,157,140,229,80,249,250,199,63,236,71,47,254,244,227,15,223,141,147,190,26,179,54,206,255,191,237,106,127,92,126,142,62,140,255,113,245,209,159,255,192,25,114,135,159,63,124,7,233,178,93,79,79,149,49,111,134,247,228,24,150,221,64,7,129,177,98,16,123,28,255,63,223,255,240,118,105,253,138,255,214,231,56,136,122,25,79,255,243,155,247,223,127,243,221,219,119,239,126,250,74,190,142,213,255,251,187,127,126,181,28,255,111,227,117,150,19,151,33,141,12,125,222,49,27,218,79,239,222,189,255,230,31,239,222,191,251,247,31,255,254,151,247,239,254,165,55,183,33,124,220,232,183,97,228,187,0,17,95,222,97,62,58,148,255,70,191,62,153,67,250,151,241,149,150,180,78,95,222,123,56,78,236,46,252,50,175,49,253,101,34,172,254,50,20,174,191,98,12,129,49,163,230,159,252,73,252,109,17,144,190,149,176,245,7,48,246,238,135,140,76,148,179,241,177,92,245,188,76,39,91,28,244,67,120,114,93,47,195,73,101,187,25,190,73,52,246,195,240,92,57,68,131,90,105,107,207,69,34,170,71,16,111,70,159,15,195,109,97,8,172,147,255,219,28,119,151,106,69,110,90,187,211,53,101,171,36,1,125,0,223,205,235,240,208,26,130,185,243,190,155,1,208,199,211,158,192,120,25,122,105,236,78,134,249,81,50,250,189,210,141,254,90,247,249,35,200,132,207,141,254,59,222,232,31,18,171,140,121,146,249,249,133,156,246,95,190,127,243,47,233,161,246,249,135,247,255,124,243,47,227,10,17,46,248,211,183,127,27,163,240,251,91,190,146,145,155,198,202,82,121,149,9,43,115,67,191,140,105,178,252,81,154,82,212,82,144,206,115,53,233,52,210,207,232,245,61,119,77,248,115,201,138,147,78,158,201,169,66,170,170,41,50,199,126,217,249,220,115,43,136,77,247,183,239,222,185,153,28,39,158,111,39,216,235,168,53,185,238,74,146,130,158,133,28,41,222,70,89,82,112,235,144,36,69,218,94,95,142,20,200,37,207,28,41,95,64,137,243,249,209,204,204,145,137,130,125,216,208,168,192,70,89,216,45,239,148,39,179,178,82,160,158,56,126,166,219,158,165,87,117,39,67,21,138,90,128,161,122,213,146,208,150,82,169,141,244,74,51,189,239,76,216,137,188,123,22,241,160,63,81,57,143,155,208,95,75,80,43,75,138,2,131,150,43,214,10,142,104,182,46,47,158,130,124,242,90,255,144,243,68,99,118,40,205,152,21,192,240,52,107,75,105,34,233,141,87,144,214,146,77,22,97,143,75,106,61,32,170,233,50,122,65,85,94,164,129,142,208,3,230,111,153,74,202,123,138,139,2,157,9,82,212,99,52,143,168,166,193,92,198,111,39,232,170,81,130,82,228,58,195,202,75,11,21,10,153,252,10,234,104,195,192,109,169,187,112,97,254,45,215,226,98,69,152,65,42,86,164,113,194,156,143,156,171,89,50,100,204,162,219,240,254,161,2,129,94,116,156,65,82,193,119,241,188,240,140,139,227,39,87,151,83,122,68,83,130,18,77,186,94,214,96,190,39,229,52,74,245,104,37,86,184,118,14,111,35,121,73,30,204,249,214,165,36,139,39,173,93,187,233,1,86,209,170,158,91,23,36,64,60,85,164,145,85,227,140,136,227,135,174,36,205,13,210,65,227,240,110,68,200,170,222,77,97,152,234,110,53,226,122,113,10,189,101,191,167,4,223,99,51,83,191,0,117,92,63,65,119,236,82,17,196,241,213,116,60,9,169,192,209,77,36,26,101,48,106,33,45,2,227,10,196,106,98,237,209,73,170,18,163,5,91,74,221,96,28,100,247,162,9,137,157,17,90,227,187,171,236,60,218,149,117,219,18,187,167,30,24,19,173,140,25,154,187,202,176,183,198,207,224,234,156,59,17,155,213,135,53,247,183,47,53,245,81,52,129,21,159,48,202,41,24,169,34,44,12,193,10,17,89,157,15,224,106,96,143,121,79,205,8,111,149,96,244,134,58,42,157,85,165,8,118,9,204,4,117,81,189,125,35,102,14,168,91,51,148,203,127,40,221,166,59,133,210,183,218,134,35,108,100,251,196,147,101,242,77,132,148,168,103,144,0,192,153,11,250,220,155,232,15,185,54,40,207,223,108,227,76,127,74,5,99,162,63,129,202,87,199,196,94,113,199,39,19,251,58,152,88,77,14,26,106,7,89,126,123,79,212,105,105,233,137,120,33,193,169,214,12,80,211,131,86,175,64,21,8,77,226,57,41,6,114,144,2,129,161,56,152,28,3,31,8,207,91,106,153,231,189,86,232,44,216,108,133,172,130,207,36,21,89,176,186,87,105,84,114,152,228,217,219,105,102,20,125,255,24,84,130,220,165,1,149,104,242,249,136,73,252,56,199,36,210,22,17,201,23,89,104,204,110,169,216,139,74,59,41,231,178,85,170,176,228,8,84,8,84,133,11,203,90,238,53,11,184,2,231,76,34,172,240,19,178,207,106,66,93,187,143,107,71,60,109,243,108,152,140,145,49,40,74,134,189,6,163,229,229,37,14,67,225,195,139,51,160,244,47,149,72,209,210,12,84,226,0,149,128,65,50,39,79,110,53,28,80,182,209,139,147,83,53,112,3,226,89,70,44,213,20,89,160,215,251,55,155,106,113,5,98,241,252,18,78,62,33,16,82,217,19,171,17,17,10,53,80,169,86,52,113,37,9,36,164,134,136,201,21,18,172,201,91,172,136,69,190,84,40,19,162,149,102,136,235,68,13,207,208,169,52,217,75,177,140,82,47,13,5,52,98,53,118,115,92,163,50,27,186,90,190,243,241,29,229,93,245,131,122,136,254,243,48,194,70,80,6,18,169,207,39,79,135,142,89,189,36,110,162,226,119,56,143,10,254,25,59,204,53,0,103,170,245,89,63,102,182,204,250,49,150,224,220,248,84,128,99,232,17,247,241,54,66,11,137,215,243,166,111,38,132,39,173,157,83,154,243,245,133,41,203,135,75,49,93,49,168,46,240,146,218,112,45,18,208,10,232,53,240,217,1,113,129,244,102,63,212,93,83,183,86,221,126,221,38,109,55,115,191,233,25,55,180,232,35,98,24,220,145,208,80,193,82,1,135,173,96,185,140,8,51,170,84,87,89,90,52,228,239,14,139,175,45,46,12,26,57,23,47,91,219,31,161,208,61,1,225,204,171,54,66,0,60,139,123,133,220,22,31,84,180,81,145,75,139,129,42,154,234,81,89,2,186,14,54,27,24,206,128,30,251,190,134,98,242,22,47,88,160,69,20,9,153,52,24,167,67,75,13,238,106,48,92,70,49,195,34,39,146,173,124,239,171,144,48,0,101,65,191,208,232,72,195,35,141,87,232,67,209,140,217,77,176,122,234,20,169,112,103,69,6,204,8,28,171,164,206,42,229,190,28,5,166,185,207,42,168,139,154,80,250,180,17,128,88,25,38,245,195,74,164,163,180,139,46,209,82,255,107,254,111,243,11,126,24,233,8,38,228,198,174,119,67,163,59,234,98,8,127,45,213,96,176,36,165,155,101,183,194,247,91,11,94,232,18,160,26,34,109,27,47,135,141,181,226,218,52,113,63,215,253,30,208,65,193,24,50,55,170,123,208,84,136,189,58,47,116,83,47,162,140,251,212,2,193,10,10,5,14,102,21,42,11,221,25,208,90,204,126,96,187,107,9,30,171,56,140,99,104,127,112,141,248,50,250,48,65,101,250,66,175,229,20,209,147,200,177,161,174,199,93,18,6,134,28,36,12,111,35,17,3,99,12,34,198,50,202,215,167,170,120,9,41,204,159,53,9,62,27,124,1,234,95,138,107,237,227,56,239,10,214,45,27,69,210,225,254,166,222,187,86,101,229,87,223,247,147,186,239,254,210,95,159,198,237,247,87,253,122,173,5,18,64,219,31,192,227,239,180,36,183,25,117,208,60,236,87,148,166,35,63,217,200,196,182,25,89,201,102,28,116,219,216,156,15,110,88,172,17,47,63,110,115,228,78,25,145,151,251,145,148,128,115,202,140,92,164,201,195,175,107,107,206,86,245,160,148,117,123,249,9,44,206,99,45,143,41,116,115,180,110,70,124,27,199,104,246,77,249,92,104,83,133,211,125,249,17,128,35,161,238,72,23,19,147,176,142,204,124,167,227,126,228,234,224,220,124,109,99,115,62,42,27,46,185,121,159,200,234,119,107,122,66,145,59,46,158,152,21,139,222,196,85,127,103,206,83,42,178,72,149,10,209,36,186,123,119,12,154,231,113,89,100,83,169,104,185,88,46,220,140,162,176,166,117,27,190,92,73,180,36,87,168,105,39,32,5,203,68,127,46,163,162,132,63,181,192,57,148,212,197,170,26,153,22,25,86,38,224,190,170,32,96,203,24,180,56,80,138,134,9,165,41,190,87,139,208,246,202,173,122,16,183,243,239,116,138,234,55,144,207,15,38,29,202,240,231,101,22,205,149,68,71,66,174,32,170,27,37,231,57,76,41,80,131,234,62,241,195,108,50,241,10,26,63,109,190,12,60,33,40,24,26,155,88,233,1,173,206,244,84,209,225,172,205,44,105,164,201,183,38,45,78,89,61,90,218,176,236,21,50,84,5,53,171,31,58,16,169,123,32,148,90,105,254,160,108,162,194,167,170,227,52,71,143,89,214,114,58,9,146,203,176,89,87,225,142,67,192,141,235,65,53,98,254,51,200,171,54,39,91,149,153,100,18,156,255,218,150,197,5,72,99,19,239,41,173,82,64,99,167,107,37,165,54,90,213,92,25,248,242,63,221,91,117,105,90,83,157,52,109,112,88,83,109,45,149,128,70,207,2,70,128,11,161,236,114,64,21,16,2,84,75,32,218,166,242,196,79,174,20,155,160,181,5,187,2,156,1,130,1,85,152,72,193,74,112,115,162,146,154,122,11,54,198,218,90,76,60,24,230,185,95,139,178,92,101,65,205,253,199,81,0,126,59,112,73,77,209,105,239,167,34,246,80,163,121,183,3,100,246,192,27,215,89,118,146,160,143,229,38,39,118,13,98,208,40,56,8,41,39,163,198,185,219,14,165,71,77,159,105,84,121,192,52,23,253,100,209,108,150,205,83,247,86,218,124,117,5,187,69,110,0,193,129,165,135,165,132,45,11,70,13,72,183,226,228,128,178,137,228,81,85,231,128,244,35,77,40,100,67,220,197,196,153,87,212,234,18,12,252,177,94,27,213,105,3,77,164,81,213,125,29,20,170,75,211,235,83,168,182,37,162,158,10,213,223,109,0,131,50,203,108,210,70,169,114,178,128,160,230,190,251,125,194,197,10,145,14,228,173,163,229,251,221,219,203,74,252,43,118,113,196,57,27,220,208,105,166,110,191,100,172,99,13,138,77,254,217,64,199,112,200,158,216,23,214,203,89,224,113,150,237,70,183,181,216,230,130,248,82,161,108,179,33,250,100,240,236,56,163,60,138,5,221,180,19,10,61,113,252,168,86,50,163,232,114,243,225,229,84,104,26,81,57,240,117,198,171,192,224,188,200,147,243,199,217,109,86,179,197,253,126,173,5,37,185,133,38,17,70,70,82,76,254,69,232,29,124,142,253,167,114,13,248,2,227,96,137,200,76,178,69,46,78,100,100,99,95,7,119,20,54,35,250,224,150,200,127,130,254,87,34,96,165,226,231,255,147,25,159,45,108,147,212,121,54,86,91,67,9,10,79,215,73,19,234,182,24,169,231,36,158,147,189,214,133,11,16,12,190,153,185,21,50,239,18,32,220,109,100,206,64,110,34,69,127,217,181,59,167,190,133,158,151,129,241,200,203,180,196,89,99,39,12,76,109,51,247,113,113,226,122,77,159,126,27,135,194,149,117,153,57,97,180,164,75,16,152,37,212,213,237,95,218,227,21,7,20,20,17,16,72,64,47,21,3,5,193,163,178,168,132,183,148,227,114,148,166,191,211,106,5,78,145,183,120,193,0,1,63,84,20,2,180,158,183,96,221,166,97,43,151,157,30,240,0,185,153,120,3,188,194,128,225,203,93,9,95,150,247,8,242,101,62,82,172,22,68,41,68,48,76,6,242,98,74,0,141,94,99,37,0,226,217,24,179,19,62,116,59,191,246,29,217,1,131,168,86,53,4,9,26,3,192,54,0,221,1,124,139,210,86,81,34,161,204,21,180,154,23,160,44,81,89,196,132,236,19,37,96,66,209,209,17,166,51,61,45,42,176,28,86,87,24,125,161,165,82,238,250,23,120,96,155,219,195,109,102,126,0,67,102,230,5,62,94,31,55,255,12,71,126,101,220,188,48,221,3,7,69,63,188,193,134,123,120,225,108,130,190,90,28,21,45,8,144,125,123,47,70,9,16,90,57,201,189,249,165,90,19,80,26,93,67,17,174,105,212,237,7,177,172,210,66,84,18,190,151,78,212,128,237,134,247,155,199,138,41,182,38,85,193,236,170,243,58,113,14,148,228,168,151,180,128,82,64,58,76,132,44,26,155,232,182,204,15,181,88,132,9,241,66,35,122,145,227,39,84,113,97,249,28,38,83,0,15,65,243,130,37,175,60,107,82,57,97,58,75,146,141,128,195,114,224,96,56,175,11,151,67,167,74,30,84,126,179,207,214,100,80,130,78,44,23,138,120,123,137,206,76,238,117,193,109,122,134,159,207,8,96,179,175,240,34,33,128,132,124,12,17,175,78,179,102,17,61,90,165,139,244,237,75,11,107,71,75,83,58,203,188,115,137,120,35,130,213,61,104,225,228,106,124,143,246,133,60,71,195,60,204,48,253,210,226,252,87,0,30,113,6,49,146,57,231,74,205,216,8,20,38,193,68,87,83,3,92,105,105,1,50,234,251,73,171,22,184,124,41,231,204,11,107,209,246,179,65,47,229,191,225,173,104,99,1,43,235,115,3,99,195,184,123,128,3,101,151,13,4,209,21,178,51,25,196,226,99,50,16,230,19,170,55,52,3,17,75,186,193,126,98,238,247,206,160,32,58,216,161,16,232,192,29,252,227,76,35,55,138,38,73,114,35,144,45,168,99,9,213,239,18,64,250,234,112,96,20,3,187,57,229,114,11,250,75,209,204,174,193,12,225,72,243,78,211,2,72,45,232,28,199,38,197,99,148,51,103,151,111,93,149,73,232,112,23,21,216,32,212,248,159,65,108,177,191,73,226,199,18,71,191,116,66,188,234,224,235,112,164,25,112,72,65,4,141,112,136,116,230,13,104,18,139,247,31,34,107,78,87,161,177,238,211,11,215,117,51,82,129,157,3,194,33,155,25,250,167,21,23,24,48,139,155,251,19,207,36,216,190,167,180,24,96,108,178,205,140,13,232,222,253,88,126,178,235,82,92,59,180,102,49,234,202,226,16,201,130,8,205,19,129,153,21,34,117,140,230,197,41,39,180,2,49,44,66,1,197,205,103,47,247,209,103,100,223,13,109,134,94,233,84,158,27,210,104,141,146,239,203,187,244,183,134,99,180,243,215,224,241,140,236,59,146,80,8,71,67,93,42,9,106,232,84,37,102,45,197,171,100,49,83,206,68,90,27,234,107,161,11,20,106,208,64,66,130,149,22,158,26,176,139,147,43,24,237,44,140,201,230,182,186,72,47,20,216,22,109,106,200,85,165,105,149,130,249,105,129,20,6,50,25,8,104,67,96,59,26,92,232,116,71,202,43,193,159,140,34,27,244,193,151,5,27,127,110,178,149,97,156,35,231,129,61,115,139,156,82,126,103,74,67,232,137,77,175,129,105,154,112,69,132,150,153,207,19,43,40,97,154,84,18,6,56,108,0,178,109,79,189,156,235,30,128,217,168,155,10,164,62,189,241,134,186,53,167,101,218,224,203,205,217,148,82,8,134,74,173,117,205,42,65,40,226,157,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,146,253,120,215,102,79,239,212,136,54,50,77,101,250,171,100,96,62,61,136,51,90,19,40,138,208,97,13,233,16,223,22,171,27,142,50,26,21,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,46,234,66,161,225,91,125,248,77,55,131,205,124,213,73,229,211,244,66,101,78,215,101,189,118,33,238,53,180,180,130,22,200,176,245,79,119,13,225,231,73,14,39,153,153,45,68,83,76,69,71,17,77,179,41,7,111,57,167,204,206,100,147,83,153,74,246,20,90,104,209,119,42,127,91,88,37,135,125,166,54,82,106,35,38,151,45,87,214,68,59,207,170,102,148,150,66,116,98,24,120,230,81,26,70,166,178,59,149,18,54,228,50,17,213,70,232,77,98,241,138,240,156,86,158,34,204,40,42,186,129,23,2,14,69,169,8,241,149,142,2,145,129,199,210,255,67,20,63,54,2,5,23,123,203,156,7,235,154,47,5,224,203,19,121,205,134,2,93,158,162,202,91,200,165,137,116,190,45,4,86,32,109,46,179,214,157,176,35,202,166,161,153,211,169,180,52,29,173,20,214,10,106,69,148,171,210,30,32,44,55,152,35,28,37,55,39,129,21,233,68,104,18,136,95,177,124,185,113,251,187,224,167,191,221,137,212,136,42,43,106,220,144,219,93,190,63,220,175,104,119,152,187,46,223,82,161,144,236,222,97,114,17,8,93,16,67,69,31,25,193,216,217,238,171,105,22,31,50,225,83,191,32,71,118,167,123,54,0,18,120,66,151,20,243,11,162,247,131,38,196,146,54,133,28,10,136,56,208,88,43,42,211,22,14,221,158,233,8,114,67,82,123,198,204,3,249,42,51,122,53,55,113,126,54,75,134,226,219,110,253,60,198,182,97,24,16,159,204,195,97,178,71,42,128,133,96,118,43,119,20,219,130,230,96,77,210,235,36,194,86,112,228,126,112,215,40,69,132,14,40,209,142,42,144,250,182,243,22,167,93,69,169,146,148,46,198,33,251,109,117,66,60,89,155,31,194,68,107,229,214,158,205,99,70,159,39,83,37,165,133,176,6,103,119,34,162,113,7,86,61,14,221,240,6,21,139,72,169,40,120,193,25,163,122,57,10,144,46,136,206,212,68,238,25,155,52,64,141,150,200,96,178,180,48,0,216,76,228,22,186,114,209,89,153,186,142,156,230,177,252,31,188,172,206,144,178,246,50,53,7,231,221,42,69,206,94,253,70,130,3,182,44,148,166,160,203,140,79,11,194,181,171,78,137,138,238,171,34,92,4,84,184,70,204,25,169,34,94,150,201,170,212,134,221,232,50,138,78,179,243,197,85,161,91,116,190,65,43,92,149,198,220,109,40,62,179,144,102,185,149,28,68,130,170,172,211,165,185,166,45,4,196,179,11,5,169,234,130,38,143,50,31,146,211,56,184,35,120,152,54,34,97,150,26,27,201,50,140,108,166,206,78,212,110,242,218,149,21,95,227,214,29,173,55,172,82,101,203,102,26,19,206,87,65,90,85,98,81,110,81,189,74,24,11,237,244,116,107,222,82,104,56,83,120,154,15,77,167,176,198,11,146,84,83,69,159,85,241,200,249,197,27,19,133,84,183,61,227,150,49,94,196,136,25,95,102,116,106,252,101,242,18,198,41,132,244,35,205,135,1,243,6,129,111,168,121,101,21,194,165,65,50,11,95,224,65,30,4,201,133,230,183,20,185,81,248,118,146,89,17,224,86,165,60,238,124,236,42,116,117,74,103,89,155,147,89,128,74,103,27,98,220,16,108,186,50,66,188,2,43,49,87,146,125,195,18,181,174,212,165,82,160,66,164,10,25,235,172,51,141,77,167,54,21,83,80,199,217,164,185,41,28,146,15,27,44,124,100,64,64,224,137,163,104,126,177,122,40,19,118,190,32,107,67,26,193,51,239,119,150,253,248,36,194,27,31,144,136,170,8,180,46,17,245,244,217,217,192,44,162,197,203,23,249,206,118,176,147,81,152,181,178,52,173,119,156,254,35,28,134,132,84,89,69,158,72,142,85,36,96,172,161,132,15,232,101,26,237,205,13,37,15,225,250,132,217,179,92,70,136,168,225,11,59,19,99,177,66,230,29,182,6,97,241,194,124,47,79,9,165,10,186,125,159,198,171,161,126,149,64,86,34,170,171,156,252,200,124,30,27,184,40,154,129,68,130,42,13,169,84,166,112,245,137,239,55,10,27,157,169,9,150,242,106,85,49,187,17,197,43,169,111,37,105,156,99,128,17,110,147,19,158,97,148,174,0,16,60,193,255,91,126,63,119,217,65,11,80,155,158,79,202,59,50,228,174,251,241,177,186,141,245,105,202,251,154,208,58,111,58,75,29,144,197,120,178,113,235,226,65,198,45,89,117,203,232,43,163,135,10,73,5,212,42,52,102,182,175,178,134,29,182,173,24,185,209,23,178,82,177,213,58,242,52,122,128,1,123,77,176,95,69,227,118,145,189,50,130,211,6,57,116,116,254,30,234,208,153,162,52,92,255,223,89,246,179,237,63,57,7,100,223,129,228,90,144,125,15,128,204,40,35,151,238,14,55,29,243,124,16,173,117,24,40,8,191,16,132,178,169,139,188,159,176,64,34,222,85,191,208,240,52,133,239,73,156,81,101,193,42,155,134,105,8,58,36,221,217,78,153,76,97,78,172,41,105,149,110,43,154,138,62,170,229,96,27,62,119,69,75,198,156,118,229,198,43,199,206,75,39,141,226,140,176,61,47,59,104,223,167,31,108,156,123,0,142,148,176,24,22,216,105,58,52,47,108,178,68,44,109,228,211,160,18,173,241,230,148,155,216,102,201,54,38,103,202,107,188,78,26,255,139,27,110,26,81,199,215,174,80,93,200,102,185,43,76,84,184,105,96,107,69,249,22,188,112,72,129,23,102,254,206,172,158,217,222,13,149,6,194,166,21,25,200,73,230,77,10,95,127,114,147,95,78,197,226,104,237,46,223,66,209,14,30,116,13,85,23,17,84,21,197,45,169,69,111,5,1,54,78,120,89,173,83,21,63,73,51,212,153,252,169,151,45,86,46,110,122,140,166,249,112,103,193,162,93,165,152,94,34,81,97,36,171,200,143,50,23,84,119,180,164,173,204,234,204,208,1,181,21,100,172,222,56,157,37,183,180,120,142,22,228,208,42,23,130,24,116,190,43,251,153,57,37,230,107,58,190,135,249,162,21,214,41,177,86,153,247,74,156,210,85,64,87,210,24,108,87,121,228,180,158,197,49,179,115,221,76,190,157,201,249,179,64,102,3,187,17,104,168,15,110,207,97,23,173,186,102,197,115,144,157,11,111,56,31,246,142,139,238,212,152,157,30,11,8,114,231,110,230,169,189,43,176,68,81,64,136,43,25,77,53,239,38,28,222,83,100,73,14,19,255,252,142,255,158,55,214,119,156,242,149,145,181,227,204,20,72,241,144,150,195,227,225,96,228,199,234,82,148,159,103,154,241,124,40,8,112,10,73,160,157,227,38,63,56,98,125,85,59,20,93,98,24,1,113,49,2,118,40,96,52,200,195,190,29,112,246,73,3,140,180,11,1,12,100,86,94,64,133,7,115,219,99,221,25,216,27,226,69,173,124,3,155,142,180,45,4,126,43,135,115,225,64,68,229,163,22,160,159,75,61,106,18,77,201,66,86,81,41,178,177,142,70,124,225,148,36,219,74,117,254,228,82,50,69,44,167,180,16,240,93,99,166,38,8,114,195,77,58,12,171,9,64,224,12,100,110,25,231,34,102,247,100,226,36,139,35,189,58,5,153,35,76,134,245,8,153,32,112,192,57,185,174,58,47,101,123,207,153,223,121,8,105,180,21,154,131,40,106,122,253,152,30,27,113,173,161,33,133,214,3,18,72,49,236,89,73,200,65,202,84,253,41,139,62,197,81,210,238,164,187,152,43,88,104,74,90,236,217,64,129,233,148,207,30,62,192,52,109,110,146,102,144,140,242,129,142,34,197,122,6,79,108,168,19,41,46,19,92,42,120,70,202,99,197,133,99,220,205,9,32,64,105,249,173,178,140,101,236,199,121,228,189,14,31,64,206,226,79,49,73,211,179,181,38,48,67,155,102,136,7,14,116,25,213,186,204,255,150,45,171,29,65,83,109,129,23,53,111,245,228,37,103,167,233,208,195,181,189,41,244,238,254,224,222,6,166,43,224,175,110,142,164,120,40,251,50,236,194,126,163,242,189,93,213,70,80,107,2,46,237,160,208,233,178,52,43,19,212,206,98,157,233,102,57,234,154,229,133,13,139,191,14,26,113,105,182,146,29,251,220,123,195,21,132,139,28,253,148,231,156,180,71,170,166,81,244,14,136,183,44,232,92,67,128,216,119,163,220,92,79,177,238,189,184,55,195,222,93,219,222,5,1,100,36,17,177,72,196,50,5,9,69,28,181,130,198,10,170,171,248,176,226,204,14,179,6,244,155,80,115,196,219,107,184,189,160,255,66,32,154,155,22,8,111,247,65,179,89,106,246,194,130,177,11,9,13,100,182,163,194,68,164,87,200,120,34,244,133,21,8,176,43,146,178,180,106,168,196,109,17,139,213,166,214,16,35,62,81,107,146,50,109,88,149,51,100,144,75,129,180,86,191,219,148,17,41,94,76,153,35,211,14,45,13,209,208,200,201,185,102,75,159,50,96,106,35,114,34,45,210,239,122,154,71,212,77,212,168,215,222,233,155,183,124,156,146,230,6,245,246,169,123,220,123,214,134,153,39,104,69,27,25,171,4,148,195,157,147,251,170,128,39,211,39,249,195,219,90,71,96,50,75,58,209,68,122,115,83,164,217,29,77,175,36,63,50,5,149,109,72,124,69,199,120,40,228,99,223,219,110,75,221,36,127,141,25,88,67,186,254,217,117,237,219,172,88,163,154,2,70,178,22,142,19,103,233,222,48,140,84,94,143,224,149,24,22,81,16,78,71,196,25,29,198,83,79,183,110,59,215,244,191,140,48,76,194,218,92,161,222,10,151,102,74,99,184,55,208,160,39,101,112,111,158,3,113,29,56,136,113,157,175,166,75,109,199,9,18,42,160,4,56,106,40,173,168,156,36,234,72,186,118,226,173,127,103,21,18,153,215,84,133,4,153,36,130,50,164,209,133,188,194,36,27,219,77,91,91,225,153,101,227,89,132,228,89,132,36,237,20,91,131,207,92,133,100,43,172,225,179,12,201,179,12,201,175,203,236,15,158,94,74,174,191,248,138,12,231,243,254,114,58,156,15,167,205,213,202,107,236,54,151,221,254,116,186,142,74,11,71,52,46,210,92,109,237,78,95,44,222,34,208,12,246,224,197,15,126,59,148,31,219,227,238,178,223,109,80,77,99,240,83,155,243,254,112,57,237,119,151,89,155,35,55,181,103,90,188,244,121,176,111,47,190,252,202,168,170,113,222,110,15,163,134,202,28,210,241,186,221,108,246,135,225,69,113,154,5,89,74,91,119,234,82,37,1,25,231,94,252,130,31,174,151,243,225,114,62,95,119,62,162,253,102,52,31,54,219,203,241,120,240,161,55,173,237,249,75,0,181,73,240,79,52,245,123,77,153,6,33,245,74,185,203,68,32,243,172,230,106,209,50,165,16,220,82,198,214,16,153,234,106,137,68,220,198,225,245,88,85,85,100,110,155,174,57,186,34,42,71,174,169,190,146,211,200,61,243,173,138,148,119,157,46,42,118,238,130,132,84,137,4,253,133,224,99,139,91,34,133,20,57,163,92,106,2,84,92,24,78,63,158,237,119,140,75,3,128,144,178,205,84,135,115,98,70,90,77,18,253,213,51,102,169,71,25,179,96,142,249,84,215,90,57,234,26,202,40,104,75,80,17,96,246,213,161,217,242,77,235,201,114,150,64,50,41,9,128,144,109,17,208,7,148,108,153,67,177,179,144,136,33,95,249,94,241,191,206,179,154,39,174,84,24,65,16,133,14,147,52,150,163,33,170,78,169,65,245,210,10,9,38,228,3,92,204,27,45,38,61,29,195,129,55,147,234,128,17,51,203,201,82,110,204,156,205,65,152,37,204,91,152,75,248,182,201,186,169,215,85,179,69,210,50,214,101,14,80,208,64,73,132,162,6,204,2,24,22,32,141,64,28,161,188,221,8,113,13,111,103,5,188,75,73,98,251,52,104,73,70,35,112,16,169,73,198,18,23,61,137,180,125,105,103,1,42,225,30,129,146,85,254,179,142,181,171,235,201,197,157,211,69,26,218,179,136,112,54,149,205,229,165,147,102,101,37,178,253,113,72,28,92,121,201,174,96,174,143,108,106,224,139,144,229,107,39,10,179,29,215,4,185,107,89,129,164,195,170,122,27,173,170,246,55,44,170,244,230,21,106,191,158,21,35,94,19,195,100,206,203,20,79,48,211,131,32,143,138,5,56,186,89,201,140,132,30,67,150,252,159,185,248,12,39,113,115,115,180,229,76,51,223,86,20,83,167,180,171,161,95,8,115,212,148,35,228,140,173,13,236,24,173,174,135,147,202,130,228,76,59,61,208,95,202,20,25,91,224,172,64,134,29,67,85,152,24,96,68,78,24,97,34,74,234,137,118,86,176,153,4,82,204,183,46,192,134,39,186,91,136,102,165,218,140,55,254,47,25,106,97,197,177,88,135,233,138,105,127,39,116,141,49,59,218,199,189,66,252,14,119,24,6,187,50,15,113,182,186,249,172,19,62,77,38,198,121,195,56,227,151,152,177,48,148,118,208,185,164,89,139,8,236,134,174,4,57,194,35,158,134,195,134,221,123,128,110,0,114,25,135,117,167,103,124,222,19,205,182,169,123,171,206,114,89,8,94,41,4,254,120,20,40,223,180,223,51,113,44,237,88,115,18,143,50,91,205,140,70,96,95,77,223,116,23,213,214,171,5,162,13,88,142,68,27,67,9,84,123,153,141,87,72,180,159,137,225,95,149,150,227,10,78,25,194,8,18,186,227,195,13,212,234,214,107,14,191,42,245,81,29,84,28,163,104,137,28,133,45,151,60,39,33,68,209,136,208,102,189,160,6,83,44,179,16,59,147,84,206,54,115,96,118,45,134,90,199,151,74,15,24,87,24,31,107,118,40,168,27,157,156,30,56,184,8,181,120,134,67,206,65,74,120,206,115,153,114,85,25,203,159,58,29,34,202,69,60,90,204,23,0,228,154,234,213,194,85,98,233,17,29,197,201,107,65,174,44,204,205,238,202,218,145,224,141,0,209,219,19,37,251,106,208,252,64,214,82,145,44,230,233,133,0,111,164,50,68,199,33,91,179,202,234,172,28,131,156,141,18,44,115,77,151,83,161,18,208,149,71,3,47,161,54,65,123,96,244,2,203,10,133,132,144,82,84,37,128,234,0,77,40,108,48,167,221,212,76,84,213,210,32,229,228,48,174,142,12,156,173,86,107,162,48,136,171,30,198,150,79,147,186,98,162,53,74,197,98,19,60,141,129,181,152,214,2,206,241,150,212,7,5,208,56,116,153,148,206,20,4,4,56,241,160,159,153,71,212,248,162,152,158,157,51,37,26,208,123,40,150,169,110,66,11,58,198,233,172,25,20,22,240,192,210,250,94,209,213,161,173,59,245,83,115,69,176,108,84,54,89,43,179,80,177,30,128,72,215,66,39,65,9,106,163,12,125,193,94,183,13,24,50,89,26,255,75,201,169,115,83,58,83,174,54,23,219,209,160,149,117,165,44,199,136,158,8,1,160,168,113,65,43,2,27,10,215,72,136,151,71,12,171,109,101,194,5,22,142,90,50,188,177,231,19,212,129,228,198,104,155,124,122,10,133,195,124,111,199,123,34,153,132,120,40,114,78,11,69,41,164,17,66,18,165,69,65,78,121,33,196,215,48,196,13,43,239,29,210,180,225,168,169,198,179,131,12,93,235,186,187,103,180,130,59,183,112,7,5,180,68,207,39,23,220,246,105,8,10,190,49,205,62,169,43,71,159,160,206,148,22,148,162,24,250,78,251,223,118,162,98,138,113,0,168,162,199,38,65,2,241,90,76,163,5,150,3,247,80,55,231,92,66,99,72,26,226,83,62,205,7,80,110,174,224,195,6,103,210,56,133,57,130,155,25,0,16,119,211,108,198,124,127,211,11,79,119,103,104,115,169,197,20,120,30,181,59,154,20,67,112,217,50,232,240,168,218,20,82,24,211,172,196,78,41,98,169,24,96,13,73,76,212,24,79,194,101,28,7,1,247,43,110,247,6,213,13,18,49,178,202,86,228,164,23,174,163,155,2,218,124,170,243,61,154,220,65,24,156,12,10,125,251,110,85,248,161,120,13,0,114,219,146,217,43,74,197,173,54,2,166,202,216,123,161,68,1,188,34,9,241,196,126,71,219,10,215,200,51,197,170,39,222,89,218,52,97,53,3,85,96,211,10,43,215,241,123,45,91,8,42,55,103,206,220,135,185,246,159,194,94,106,194,81,142,147,237,150,220,47,204,40,167,214,183,205,194,232,60,77,132,149,13,33,55,135,85,174,45,50,119,29,251,199,164,166,114,144,86,235,141,157,93,237,2,33,161,84,112,209,199,125,44,0,9,209,115,160,237,69,175,196,209,151,29,29,236,200,37,84,93,84,110,97,82,8,174,239,16,103,137,210,14,50,237,50,10,68,25,25,140,36,241,213,111,144,41,166,102,228,107,14,246,151,243,165,185,91,48,143,165,43,171,81,21,119,51,159,76,200,112,96,13,225,102,134,240,208,29,214,33,206,36,54,148,24,193,60,150,231,122,134,73,146,105,235,248,7,203,208,207,105,39,140,129,0,187,235,197,146,96,73,179,161,42,40,41,164,57,236,155,203,247,100,91,96,198,11,0,106,50,29,169,196,236,186,8,197,194,141,41,156,184,227,117,210,144,0,29,136,92,159,216,115,182,208,228,164,204,151,182,243,8,13,106,69,145,112,8,202,41,184,150,15,34,34,154,32,225,70,244,0,52,205,204,152,182,248,134,81,254,44,182,32,59,57,173,48,141,10,188,147,113,60,201,216,61,184,7,91,34,53,154,197,40,41,93,104,143,202,55,224,31,68,137,106,154,233,181,57,139,72,188,223,157,57,208,91,62,69,22,24,104,88,216,157,233,165,47,35,153,201,249,39,161,247,202,4,222,146,75,119,16,211,64,236,128,201,94,196,15,52,252,71,101,82,26,78,134,192,50,240,77,100,245,173,98,99,225,164,58,118,171,97,202,44,74,65,89,147,117,254,142,38,87,166,219,99,229,157,85,132,28,232,8,141,0,4,240,146,147,112,142,38,219,180,115,230,154,0,131,209,1,160,135,57,60,202,175,239,77,134,156,252,250,158,46,96,142,207,52,8,100,99,201,195,17,184,71,72,131,35,90,8,255,33,81,229,152,93,18,29,72,83,51,99,209,137,34,59,155,213,176,43,29,53,111,136,126,199,27,52,44,132,35,172,137,16,188,137,36,189,34,252,53,34,162,250,8,113,128,110,135,106,59,140,108,40,187,69,232,21,229,51,65,72,4,99,85,48,133,223,7,179,140,222,148,38,40,202,189,117,186,167,230,99,46,138,33,220,192,2,52,236,4,34,99,88,122,133,69,39,87,154,137,151,106,168,105,37,185,76,151,217,170,99,190,5,158,143,141,117,96,149,5,232,24,133,142,157,168,229,16,59,249,188,17,227,27,97,255,22,127,68,76,148,85,146,42,135,112,238,43,91,176,42,233,51,31,215,176,123,189,18,165,104,76,38,146,161,50,63,204,136,174,176,170,37,235,37,208,28,123,133,0,191,64,145,7,22,59,100,164,66,44,38,103,184,134,49,112,246,198,42,48,243,81,74,132,140,2,179,140,17,57,26,139,65,155,230,224,161,249,230,16,52,70,118,138,253,10,67,209,202,116,85,240,83,37,160,119,199,90,230,48,64,180,124,177,77,43,79,144,164,102,76,255,61,153,25,31,185,243,55,55,56,158,48,10,78,170,198,161,125,198,3,89,237,50,88,249,168,70,31,122,76,153,115,113,167,156,75,55,230,76,211,60,69,108,45,68,26,48,111,72,213,169,112,115,46,160,100,236,33,193,10,162,79,89,9,111,77,41,131,153,71,206,223,83,42,169,97,118,140,138,17,109,49,137,156,246,235,84,0,209,220,27,187,67,148,215,48,63,165,62,154,219,72,68,116,211,96,113,42,83,147,79,32,74,66,225,145,210,109,26,65,194,196,85,53,119,85,133,55,250,242,70,171,222,232,222,123,13,125,214,16,245,122,164,70,221,212,48,147,188,10,203,194,84,29,61,182,12,104,50,172,88,11,123,52,189,105,41,160,20,228,201,84,158,28,248,76,26,123,39,11,81,195,31,91,76,115,24,140,4,177,127,211,228,31,74,0,3,219,32,87,82,246,198,155,101,194,24,105,90,36,178,187,217,65,219,64,103,173,168,252,189,133,123,162,234,180,164,131,171,186,252,162,96,43,42,56,240,198,161,165,106,242,232,70,236,19,18,73,78,171,214,168,218,143,74,153,26,242,197,151,15,119,100,234,212,170,100,20,191,81,198,78,77,220,64,254,69,51,225,15,27,0,185,228,9,130,119,125,28,56,199,163,125,173,65,87,117,214,81,154,4,6,193,211,190,152,149,4,54,116,50,16,211,134,216,70,106,220,169,160,96,72,238,180,7,153,241,109,184,227,206,12,210,216,74,88,203,208,233,33,162,166,162,227,178,97,76,168,156,88,207,177,117,156,29,235,147,58,141,83,80,73,173,233,173,82,23,66,183,130,198,41,178,165,29,231,218,242,182,81,45,197,122,171,142,179,133,93,75,232,59,115,55,240,155,210,149,80,188,204,233,137,77,36,96,197,3,130,17,40,93,143,217,171,57,176,61,101,231,183,106,172,149,191,109,44,87,164,43,170,154,23,88,93,162,134,140,75,170,131,6,145,186,30,194,32,109,84,101,235,40,201,191,121,191,187,14,220,14,177,169,241,169,131,159,84,225,73,50,215,146,116,79,24,123,45,111,234,234,137,106,128,171,38,48,12,156,16,113,232,139,25,48,43,211,87,181,92,141,226,203,79,179,236,242,217,178,23,245,78,171,234,169,70,139,213,216,4,227,245,59,87,21,90,224,175,167,162,196,236,113,102,152,179,237,168,141,186,6,166,216,49,117,155,174,142,110,36,21,247,135,236,44,191,156,94,100,135,133,198,167,161,248,60,196,124,193,193,97,162,179,165,91,154,227,204,84,53,206,40,213,97,37,187,180,76,229,108,46,163,239,154,178,153,134,40,102,174,81,204,110,51,144,149,130,86,159,25,202,10,40,51,229,32,91,158,25,1,226,8,118,38,74,34,74,68,234,157,90,2,133,42,46,88,98,227,229,184,156,143,90,25,141,112,42,108,121,166,142,200,198,208,137,163,64,27,130,42,131,152,15,203,249,76,76,76,231,22,213,120,23,21,239,135,226,31,1,204,69,50,10,208,16,9,63,128,41,146,215,212,140,235,213,179,195,125,116,75,98,27,17,37,159,234,73,253,229,86,37,202,28,211,184,85,69,179,94,103,248,75,182,193,85,165,92,82,222,181,10,190,160,2,92,85,20,178,128,13,250,207,12,47,164,98,175,96,98,12,65,80,54,198,44,213,202,158,208,168,53,201,152,195,45,84,138,85,201,200,74,155,106,242,237,236,194,51,51,188,39,175,161,106,11,105,237,238,42,163,48,69,31,42,15,1,50,196,206,80,72,16,147,109,221,115,72,6,194,164,1,137,226,225,154,16,185,34,108,90,159,92,105,30,251,73,101,134,66,149,243,44,235,183,10,1,219,38,137,75,3,75,3,230,21,2,87,72,128,83,216,221,200,122,51,24,20,222,157,185,123,138,97,155,136,201,114,131,179,15,120,33,232,153,230,243,12,204,229,70,18,171,13,71,39,85,19,13,235,8,96,50,64,30,32,181,23,25,243,44,12,11,180,3,211,94,209,219,29,170,66,191,209,251,199,219,195,138,209,24,36,102,168,33,93,140,180,103,43,246,136,206,106,209,26,55,248,142,224,11,26,15,139,102,227,166,205,157,118,191,33,255,224,244,90,20,109,69,21,87,181,117,89,163,87,188,61,98,127,161,44,116,228,213,34,183,140,252,146,246,49,234,39,215,180,152,141,174,179,83,137,118,138,211,34,88,34,186,53,113,241,65,24,173,156,127,149,15,26,41,34,202,26,189,52,226,44,55,241,176,44,164,67,56,228,220,181,60,199,48,179,119,254,37,40,232,16,140,26,211,161,197,74,70,144,147,110,111,7,105,154,170,77,165,51,188,172,251,18,146,29,170,177,86,53,110,49,97,116,208,221,170,121,54,91,9,86,124,56,238,112,245,96,83,66,99,113,88,53,75,220,178,233,52,134,159,198,60,212,24,145,160,90,152,138,105,185,144,123,78,147,147,45,223,137,93,120,102,83,238,14,77,33,233,133,87,116,199,189,130,57,43,161,87,21,213,55,92,29,170,59,68,231,50,177,226,86,17,229,105,247,26,174,250,110,174,253,155,52,242,73,109,95,52,251,173,30,43,83,220,72,150,59,178,205,100,125,149,246,115,255,32,221,86,113,158,68,254,86,37,192,58,131,85,197,194,186,136,124,195,192,82,109,48,212,59,233,186,64,234,69,67,191,100,6,59,147,66,99,43,160,194,48,236,169,65,27,164,227,21,90,146,222,89,252,59,83,4,247,2,36,43,50,207,153,181,46,204,119,195,160,23,28,93,17,121,163,153,138,218,23,210,206,172,41,112,50,80,228,133,233,236,103,149,244,55,236,129,13,229,206,130,68,45,31,196,149,115,27,118,249,6,87,29,184,239,198,24,20,173,69,43,38,165,110,181,123,168,104,220,69,170,79,9,141,79,182,131,122,13,201,138,132,124,147,33,135,102,149,220,171,124,223,170,1,58,125,65,167,87,64,146,86,19,90,185,141,213,20,54,23,156,60,196,180,253,100,191,106,149,43,128,136,114,158,114,127,172,129,1,39,202,182,112,99,87,201,84,225,110,233,121,130,196,76,66,201,73,86,18,172,175,76,68,85,196,68,125,77,175,209,97,157,15,169,35,161,24,234,52,71,73,185,180,170,130,170,51,217,205,119,93,151,102,249,250,85,14,147,32,48,41,162,146,36,62,222,94,86,42,135,53,218,159,94,73,212,41,147,170,210,169,3,241,186,206,61,52,52,48,163,45,185,48,45,171,3,177,127,148,121,185,17,64,150,195,204,204,54,224,222,115,118,41,247,111,155,113,103,60,59,202,217,144,63,29,184,25,171,7,66,188,117,154,84,106,114,140,161,42,143,21,154,216,41,226,218,5,43,183,171,125,234,250,173,107,74,77,243,74,44,230,193,145,52,57,74,24,31,192,52,3,36,201,48,132,89,214,215,29,223,27,239,248,46,182,178,9,192,44,65,154,113,170,0,219,55,2,150,184,105,93,58,225,121,231,139,201,74,121,222,156,237,117,101,123,213,33,55,243,210,206,94,55,201,105,37,154,213,106,214,180,91,248,0,214,28,79,169,169,218,233,136,26,82,149,69,136,44,188,68,209,76,187,252,65,193,179,202,167,97,230,132,135,84,82,47,61,150,169,111,235,32,166,62,166,129,220,28,106,33,202,132,9,90,116,81,67,87,107,168,68,43,103,122,39,67,175,187,184,131,232,32,87,227,215,218,248,1,190,154,180,139,162,221,179,2,181,105,227,51,125,202,134,150,20,63,219,135,216,214,40,220,20,168,27,67,121,111,32,236,140,214,43,234,111,232,67,71,68,26,238,164,178,48,52,120,181,207,137,6,78,88,189,211,10,172,181,112,92,193,189,217,21,117,227,172,200,226,17,144,72,170,239,132,126,210,9,172,41,14,26,31,213,206,145,53,168,121,90,69,144,235,137,154,45,45,225,7,90,163,64,168,143,136,11,237,102,45,122,179,78,185,86,244,111,73,67,23,188,67,90,239,17,119,46,89,23,220,139,112,207,174,125,157,243,95,85,143,52,154,134,70,27,81,124,0,138,151,0,207,202,157,149,108,122,139,24,91,93,130,85,102,213,118,99,122,113,170,79,107,22,7,58,17,213,42,152,73,46,70,29,69,0,91,89,147,3,39,123,185,47,181,28,238,26,83,203,33,129,53,101,51,49,195,118,72,103,162,141,175,47,161,137,32,173,103,66,147,215,146,208,100,230,255,242,170,233,230,109,101,28,42,187,75,1,57,171,71,42,188,156,167,2,217,130,89,80,163,22,22,151,121,174,151,205,212,82,233,116,99,40,54,128,54,166,231,144,255,156,182,117,23,160,103,194,166,153,186,161,56,116,206,234,103,102,22,131,242,139,44,147,168,248,14,151,58,234,192,237,164,166,247,102,83,42,232,167,203,165,132,170,23,156,74,105,255,26,49,207,179,250,199,107,194,60,208,156,121,221,90,85,101,199,162,197,92,57,19,152,135,235,253,89,193,233,148,12,117,102,95,181,234,102,206,98,132,123,144,199,55,187,143,153,191,167,171,149,204,146,138,235,83,229,58,215,207,207,4,175,94,233,219,146,227,83,255,82,97,193,95,154,94,21,29,143,156,141,140,43,103,87,93,238,157,178,171,190,198,60,109,150,99,248,137,92,158,165,133,184,142,140,21,110,183,125,119,79,235,194,8,220,251,143,196,205,127,225,86,171,25,205,248,37,254,243,137,90,63,93,86,69,212,19,250,252,229,141,128,46,239,188,241,39,188,179,221,35,221,25,119,200,119,54,240,254,205,134,140,27,252,134,83,45,201,170,190,196,26,155,6,32,221,120,141,22,252,230,119,94,153,106,112,195,159,228,190,159,170,90,216,175,44,218,245,68,182,191,1,178,125,93,133,195,44,0,212,106,181,61,78,191,17,108,52,180,165,207,25,255,60,253,22,38,80,244,244,15,215,115,203,123,240,236,248,231,169,243,5,29,193,2,235,79,201,234,83,21,109,245,128,120,35,136,177,254,229,243,136,223,221,17,159,74,2,188,126,161,250,182,215,47,36,120,138,231,207,23,17,120,191,148,20,38,65,91,95,228,198,173,38,240,115,200,157,109,125,167,47,80,58,89,84,238,98,131,19,17,70,164,10,209,75,123,1,100,245,92,17,191,139,229,56,217,231,114,156,152,198,188,52,178,152,254,212,25,200,92,69,245,56,193,10,94,52,249,222,227,196,244,39,250,113,41,78,36,12,156,28,39,110,12,142,132,68,109,46,6,57,73,26,191,124,211,227,150,111,35,10,212,142,83,63,175,229,56,9,60,147,128,17,57,78,82,61,90,21,218,227,127,136,199,181,104,242,167,63,186,30,39,245,13,175,243,56,113,89,144,67,68,18,149,32,76,57,110,249,54,124,124,236,56,141,75,52,255,204,131,84,25,18,251,169,212,125,246,34,212,226,42,34,76,83,58,78,114,222,120,121,106,81,150,8,104,229,3,165,74,31,45,156,166,93,90,59,208,87,238,147,30,248,235,101,209,233,130,36,110,65,47,190,72,238,245,186,59,157,169,50,240,102,127,28,181,142,79,163,28,238,246,176,57,153,221,167,105,45,231,154,29,91,50,174,190,252,113,159,119,167,203,233,28,199,62,234,91,31,71,142,175,43,13,60,53,181,103,122,53,203,151,94,22,88,23,109,127,222,156,54,84,233,120,172,238,245,122,60,92,246,251,235,229,48,107,128,55,173,221,233,190,236,47,94,60,149,238,143,33,237,70,109,115,170,239,189,217,140,225,93,119,231,29,21,54,111,91,219,243,221,11,240,17,42,192,215,238,47,11,189,217,94,207,219,195,158,171,95,183,141,237,232,45,111,201,99,12,191,95,254,235,225,104,149,221,115,195,218,162,219,168,31,98,199,31,135,235,207,149,107,249,47,155,251,178,217,37,144,47,141,237,217,86,16,241,65,118,252,235,69,244,199,227,249,112,61,14,118,125,59,119,245,110,20,244,207,219,63,183,181,231,250,162,63,4,117,31,36,235,124,24,238,40,12,221,35,54,229,24,233,94,105,105,78,68,188,200,226,211,253,96,170,192,7,98,68,115,223,17,72,175,249,138,30,20,197,108,206,151,227,49,99,216,218,218,158,63,203,182,62,192,232,47,215,205,249,48,198,181,153,4,115,120,184,239,199,78,218,236,246,206,77,150,182,230,76,139,214,146,32,149,151,63,238,243,246,184,219,92,175,188,190,67,70,58,158,7,251,112,24,239,62,29,93,99,61,29,17,20,154,67,232,165,143,254,50,248,129,49,128,203,206,70,180,36,171,59,156,246,199,205,230,122,62,29,141,134,54,77,229,204,153,247,227,197,88,44,86,71,61,137,225,112,159,188,14,110,97,123,56,29,92,54,106,154,236,4,196,185,136,172,240,0,75,59,194,163,15,115,201,116,101,119,219,221,249,52,80,151,211,202,182,49,159,236,137,250,199,1,15,187,165,143,199,45,227,246,166,169,219,206,51,39,222,19,137,191,46,210,109,49,26,79,166,235,51,59,165,44,117,241,30,180,227,15,232,219,129,158,15,52,247,242,183,249,105,183,217,28,79,3,69,59,230,218,92,246,151,235,238,178,219,237,136,210,213,198,246,108,184,228,152,57,229,37,35,246,195,249,114,26,212,105,191,113,34,61,242,5,28,118,139,66,127,195,26,144,166,181,61,31,209,111,146,170,245,197,15,255,116,188,142,168,219,19,175,251,238,120,185,108,175,199,203,102,224,243,201,187,214,198,238,100,196,80,47,249,159,94,62,200,239,55,231,221,49,176,222,35,48,237,186,219,109,183,87,54,237,212,198,238,100,68,104,63,0,158,82,237,213,238,116,61,159,89,155,55,180,92,215,237,41,66,124,105,107,207,213,4,158,163,16,240,147,40,126,46,205,149,197,183,142,20,103,143,219,245,135,83,186,205,190,75,104,226,203,223,229,187,97,159,60,36,202,182,189,108,15,151,203,102,104,24,88,132,171,173,237,249,150,77,89,130,35,95,252,248,207,155,33,112,14,35,157,27,170,134,101,118,176,47,67,167,77,106,251,182,181,57,219,12,121,90,215,253,197,15,126,152,37,207,67,22,221,145,216,182,31,67,25,186,135,171,235,95,36,242,53,55,118,39,91,170,150,37,131,220,35,104,41,134,113,118,179,187,238,174,14,247,199,97,167,30,21,94,183,187,33,142,59,105,175,173,221,233,179,226,236,3,140,125,40,31,134,204,189,223,30,200,62,59,232,247,176,217,196,157,220,182,182,231,91,133,227,37,133,230,147,76,126,166,174,63,98,192,142,103,34,125,4,36,113,61,15,72,63,30,142,151,224,210,115,26,128,95,60,61,186,198,238,124,75,250,246,8,163,223,109,15,219,108,232,30,95,70,60,238,101,68,208,147,52,216,54,118,231,123,90,150,71,208,231,14,26,119,218,156,175,195,57,217,165,191,205,245,178,31,250,250,253,137,152,131,218,216,157,108,70,240,37,219,242,203,103,13,22,143,181,221,62,184,173,237,135,102,227,124,28,62,30,35,251,154,15,190,105,109,207,159,153,12,151,252,198,47,222,124,179,31,98,251,101,191,48,57,190,157,143,99,33,7,19,116,222,93,142,115,77,219,214,246,124,75,181,248,16,230,232,177,124,155,197,24,227,6,70,89,232,145,133,122,115,153,30,76,181,169,61,83,242,54,73,73,182,87,184,225,173,214,229,67,136,130,175,29,221,255,134,212,254,17,29,159,30,133,81,43,93,183,60,78,35,36,228,229,3,221,229,176,13,24,116,115,28,174,29,199,221,33,134,14,148,198,122,170,149,36,253,122,187,100,105,125,0,92,59,60,31,46,187,19,233,83,70,102,138,243,105,151,52,47,181,177,63,25,75,46,169,78,31,64,2,63,157,175,195,1,226,64,234,135,225,51,60,84,41,251,243,206,221,0,68,189,94,90,219,243,103,153,234,7,89,253,209,253,227,62,153,13,79,99,141,119,135,203,113,79,156,84,219,216,156,62,114,201,62,18,0,12,109,218,48,145,68,166,226,112,217,237,175,219,253,240,25,118,70,186,109,172,103,163,244,250,50,250,151,239,0,182,172,222,97,179,57,237,131,123,212,199,173,126,62,159,151,255,33,182,255,233,176,223,140,55,50,173,13,52,55,70,27,157,202,83,91,119,170,213,23,121,144,145,191,106,172,63,108,162,163,227,108,77,30,110,95,135,205,150,188,255,196,73,42,181,117,167,90,69,228,7,65,247,139,117,252,50,66,5,98,144,228,241,178,63,4,63,193,210,214,158,107,21,118,150,177,63,156,125,240,229,49,167,191,48,183,136,180,126,87,83,129,232,129,179,55,111,191,29,55,220,224,184,205,31,246,227,138,155,195,31,246,227,242,127,250,241,127,190,255,225,237,210,250,21,255,173,207,113,208,31,151,134,113,151,113,96,60,253,207,111,222,127,255,205,119,111,223,189,251,233,43,249,58,102,238,239,239,254,249,213,114,252,191,141,215,89,78,220,141,238,141,172,2,122,35,25,230,159,126,124,255,253,15,63,127,243,211,187,119,239,191,249,199,187,247,239,254,253,199,191,255,229,253,187,127,233,205,255,136,35,229,144,159,191,125,255,159,111,223,253,245,205,219,255,122,243,211,15,111,198,12,127,53,254,146,133,250,239,31,223,235,87,25,235,102,43,167,141,95,60,141,47,32,215,74,204,206,241,176,191,62,89,254,144,47,150,92,240,83,37,242,248,181,73,30,82,170,186,152,64,111,253,151,199,253,47,191,60,49,131,228,45,8,191,98,106,58,79,165,32,69,221,227,202,122,94,132,95,248,243,215,231,23,64,5,151,237,3,56,94,214,174,35,73,253,67,240,185,151,211,200,110,176,113,141,216,18,47,56,56,215,203,105,80,122,82,162,111,182,35,112,244,48,226,102,137,229,185,28,6,47,48,242,179,184,203,228,172,22,253,0,3,63,12,226,112,58,145,34,121,179,63,12,215,208,253,96,111,98,126,128,225,70,48,228,152,193,243,145,124,119,186,12,46,119,119,165,0,234,153,190,238,33,220,11,186,85,223,143,101,220,14,45,22,251,86,140,214,195,110,120,145,80,32,196,240,168,25,156,238,132,13,20,206,28,26,244,7,216,166,18,246,158,44,97,75,195,144,87,146,149,228,186,189,92,207,3,20,220,83,118,22,200,120,4,249,125,184,118,142,202,48,151,45,11,161,155,221,226,3,27,157,190,71,219,97,120,135,110,135,216,102,12,253,96,127,217,109,6,21,97,37,21,192,35,36,62,104,34,162,187,21,143,198,208,110,181,31,198,20,90,7,125,107,55,15,133,228,8,94,35,189,198,178,163,183,135,160,173,210,226,202,143,225,31,248,91,33,242,165,134,240,147,239,248,109,229,86,99,129,191,80,69,19,81,78,120,61,195,101,38,80,85,115,168,107,233,151,77,176,149,220,212,2,231,86,16,125,158,171,30,244,86,113,201,191,90,205,68,138,150,172,39,207,122,158,161,186,231,212,73,196,126,217,249,220,115,220,193,124,60,81,107,111,118,32,254,155,206,183,19,236,37,217,204,238,172,108,130,158,133,202,38,222,70,165,77,112,235,80,219,68,218,94,95,113,19,201,32,247,44,110,242,90,42,39,205,146,221,163,222,59,237,119,161,54,40,96,124,214,66,67,40,215,232,213,53,7,21,194,190,85,235,137,23,111,51,111,37,148,140,68,133,204,113,154,58,57,83,237,202,229,246,98,128,64,109,215,81,239,113,233,25,23,230,95,20,181,168,151,201,63,37,169,161,121,25,104,19,250,107,245,242,101,73,181,83,179,116,61,106,150,163,124,232,242,215,136,167,114,91,192,114,10,74,128,107,254,105,155,29,170,123,170,177,9,203,132,204,106,252,139,83,222,210,27,43,72,185,196,251,44,221,177,212,182,184,228,72,216,142,6,137,220,91,206,152,133,115,151,128,182,165,129,142,208,3,230,111,153,74,42,195,142,139,2,159,9,86,180,8,49,189,182,228,191,164,130,85,186,106,84,47,29,197,87,177,242,210,130,240,131,137,152,229,155,86,218,84,147,129,38,252,244,74,88,252,219,98,81,189,164,150,94,110,150,78,197,149,149,80,112,49,213,225,223,149,33,99,156,167,14,9,240,252,187,82,113,84,173,60,59,206,98,144,84,240,93,28,177,189,74,245,248,233,253,193,220,241,148,140,182,165,71,186,94,214,128,57,169,167,81,121,108,0,130,215,76,77,219,72,94,146,223,116,190,117,53,82,227,73,107,215,110,122,128,85,28,227,11,93,16,55,250,177,149,188,77,65,115,180,81,249,254,133,125,148,101,240,185,89,46,228,144,220,141,8,197,195,187,41,12,83,221,173,70,92,47,174,233,187,236,119,186,146,244,159,235,23,47,251,86,210,189,82,155,238,216,49,138,89,122,209,106,105,155,29,55,117,83,186,30,193,168,133,180,8,140,43,16,187,4,41,72,39,103,81,93,173,84,188,224,32,26,29,29,100,247,162,9,137,157,17,90,227,187,171,236,60,218,149,117,219,18,191,183,92,157,208,202,152,161,185,171,12,123,171,23,49,174,206,197,156,177,89,125,88,115,127,251,82,83,31,69,133,91,241,9,163,156,130,145,42,194,194,16,198,223,232,190,197,63,41,108,224,187,221,115,92,12,235,238,55,212,81,233,172,42,69,176,75,96,38,168,139,162,76,78,152,57,160,110,185,161,46,181,226,5,236,20,42,121,111,27,142,176,145,237,19,175,222,205,55,17,82,162,117,226,5,0,206,31,95,158,79,59,17,203,243,205,54,46,61,172,84,48,86,30,22,168,124,133,92,236,179,254,231,171,226,98,181,92,249,172,193,59,253,166,103,5,126,45,61,62,3,50,173,9,153,20,6,75,55,21,21,130,100,64,110,80,86,124,146,12,84,69,7,6,147,127,113,140,106,108,40,78,31,88,129,42,16,131,159,181,2,232,83,139,231,53,134,81,179,124,145,164,205,49,139,70,37,135,93,164,215,154,254,28,73,208,63,2,151,160,154,122,192,37,106,25,201,117,132,237,56,46,36,60,218,34,38,249,34,11,141,217,157,235,12,214,102,208,84,231,6,173,13,165,235,151,179,152,233,152,201,145,164,13,130,8,128,131,120,114,16,69,173,135,15,59,2,213,195,215,18,255,118,31,215,143,140,132,91,19,186,208,48,57,35,227,80,148,14,219,233,136,127,140,44,134,194,135,210,63,165,190,170,118,113,38,202,202,218,78,122,168,179,2,231,30,5,73,140,3,245,101,197,233,71,127,225,15,237,128,54,1,74,117,234,112,159,249,155,57,67,111,162,221,6,97,45,212,212,181,75,56,253,164,48,158,217,66,32,111,215,210,38,226,99,237,40,103,3,177,57,184,19,222,228,45,48,173,120,175,112,41,221,242,212,194,117,123,177,48,52,181,98,91,137,45,125,113,95,92,220,121,65,124,199,236,163,73,87,203,119,254,44,63,44,3,208,15,234,33,250,207,195,8,27,65,57,72,57,23,76,31,248,53,14,164,224,38,136,200,128,43,109,161,131,116,125,169,201,144,169,138,233,177,197,134,133,237,161,204,37,129,99,232,17,247,241,54,66,35,57,169,110,250,102,66,120,210,218,57,165,57,95,95,152,178,124,184,20,211,21,131,234,2,47,169,13,215,34,9,173,128,94,3,159,29,16,23,72,111,246,67,221,53,117,107,213,237,215,109,210,118,51,247,155,158,113,67,139,62,34,134,193,29,9,13,21,44,21,112,216,10,150,203,136,48,163,74,53,135,210,162,169,172,200,56,6,178,52,73,131,70,206,145,246,85,97,150,206,8,64,40,108,189,204,232,89,214,82,235,130,84,200,109,241,65,69,27,21,185,180,24,168,162,169,30,149,37,160,235,96,179,129,225,12,232,177,239,107,40,38,111,241,130,5,90,68,145,144,73,131,113,58,180,212,224,174,6,195,101,20,51,194,204,68,180,149,239,66,167,203,58,49,0,101,73,191,208,232,72,195,35,141,87,232,147,30,144,116,13,86,79,51,214,43,220,41,163,167,150,143,177,101,105,161,244,4,115,76,159,203,81,96,154,251,172,146,186,232,9,165,79,82,243,120,109,152,212,15,168,138,44,243,136,46,209,146,140,98,254,111,243,11,126,88,116,181,96,157,208,81,234,122,55,52,186,163,46,134,240,215,82,163,10,75,82,186,89,118,171,184,237,168,255,138,45,129,192,247,96,249,124,143,232,15,108,85,41,186,19,54,47,239,231,186,223,3,58,40,24,67,230,70,149,15,114,247,107,175,207,11,221,212,139,40,227,62,213,64,72,243,1,13,14,102,21,58,11,221,25,80,91,204,126,96,187,15,77,135,51,174,114,23,85,89,216,254,192,21,251,209,135,9,42,211,23,122,45,167,136,162,68,142,29,85,136,62,82,194,192,144,131,132,225,109,36,98,96,140,65,196,88,70,249,10,117,21,109,157,184,167,174,226,247,90,244,242,99,252,176,63,29,144,181,149,234,62,30,200,62,214,135,89,106,170,125,105,224,78,147,249,218,170,92,131,166,188,24,39,200,23,172,69,132,123,213,228,1,141,17,35,25,209,155,156,85,246,54,146,236,148,75,92,34,172,102,147,168,97,220,200,59,207,27,21,177,139,222,242,236,36,31,250,155,243,52,180,11,155,54,236,242,137,75,32,179,246,84,249,16,175,108,18,217,148,69,76,150,227,22,120,250,144,228,175,92,238,84,174,49,95,136,251,42,175,199,74,78,203,221,160,220,113,152,80,154,226,123,25,194,182,87,174,160,5,231,148,127,167,83,148,85,69,69,22,104,231,148,241,153,126,74,106,110,51,179,160,142,132,204,122,42,230,146,35,4,166,244,168,71,170,24,139,31,166,94,139,87,176,72,83,181,75,241,132,12,30,145,160,9,77,204,191,130,65,159,86,71,29,206,218,204,146,114,129,236,164,105,113,202,234,209,210,134,101,175,144,161,210,132,149,235,133,212,131,78,187,124,146,230,15,114,3,244,167,174,161,48,163,157,74,91,122,78,184,190,26,203,117,124,48,173,18,112,227,122,224,114,205,22,170,153,116,124,178,85,46,37,237,238,252,215,182,44,46,64,204,119,188,167,180,162,130,165,124,23,198,173,149,178,202,192,151,255,233,222,42,22,13,43,121,20,154,224,124,160,130,55,118,59,245,44,96,4,184,131,104,40,163,30,10,132,0,41,65,190,155,118,123,254,36,52,166,192,204,218,211,6,236,10,112,6,8,6,84,97,34,53,164,84,77,214,174,170,3,208,177,94,221,214,98,226,193,48,207,253,90,148,229,42,11,106,166,92,71,1,248,237,192,181,92,94,77,58,186,32,89,47,237,221,14,144,217,3,111,92,103,217,73,130,62,150,155,140,178,172,61,104,20,28,68,5,11,92,121,208,109,135,210,163,166,207,52,170,60,96,154,139,126,178,104,54,203,230,169,123,43,109,190,186,130,221,34,55,128,224,192,210,195,82,194,150,5,163,6,164,91,113,114,64,217,68,242,112,133,130,244,35,77,40,100,67,76,255,226,152,165,69,126,25,1,220,107,128,171,246,55,52,145,112,172,251,58,200,198,75,211,43,148,141,23,152,127,202,198,175,199,27,85,185,101,54,79,136,154,235,204,218,44,229,117,201,137,7,230,114,184,173,146,229,117,208,208,96,185,95,174,51,141,242,196,45,207,6,87,90,155,217,194,47,233,182,125,253,10,230,41,227,99,120,215,77,244,11,77,52,174,52,126,57,174,3,195,6,26,174,38,228,162,184,167,201,224,217,113,78,121,148,6,189,169,243,21,130,226,8,82,53,158,70,210,229,230,40,17,21,136,26,145,57,48,118,198,172,192,120,176,8,148,243,199,217,245,143,179,197,157,184,172,5,49,92,66,148,8,37,171,95,107,248,69,248,29,140,142,253,167,130,13,24,3,99,97,137,202,76,186,69,230,106,82,152,178,221,202,189,190,204,32,50,216,37,178,133,209,255,74,5,224,63,224,255,79,110,124,182,176,126,89,231,153,146,216,73,165,181,196,212,117,226,132,186,160,68,242,57,169,231,228,175,117,225,2,4,131,113,102,118,133,84,245,4,8,119,27,12,50,144,155,76,209,95,118,237,206,169,111,161,231,101,96,60,242,50,45,113,214,216,160,134,169,109,230,62,46,78,92,175,233,160,105,227,176,210,81,218,101,102,133,209,146,46,65,96,150,80,87,183,127,105,143,87,28,80,80,68,64,32,1,189,84,12,20,36,143,202,163,18,222,82,150,203,81,154,254,78,171,21,88,69,222,226,5,3,4,252,80,81,8,208,122,222,130,117,155,134,173,92,118,122,192,3,100,50,244,6,88,248,129,225,203,93,9,95,150,247,8,242,101,62,146,227,61,100,41,184,163,78,14,242,98,90,0,13,69,96,45,0,130,19,24,179,19,62,116,155,141,246,125,81,29,101,89,173,170,8,18,52,6,128,109,0,186,3,248,22,165,173,162,68,66,153,43,104,53,47,64,89,162,178,136,9,217,39,74,192,132,162,163,35,76,103,122,90,84,96,57,172,174,112,250,66,75,23,0,56,255,2,111,58,51,97,221,230,230,7,48,100,110,94,224,227,245,177,243,194,169,60,217,249,87,196,206,11,215,173,245,101,201,169,98,240,225,30,44,50,155,160,177,22,175,19,11,233,96,71,173,139,145,2,4,202,76,122,111,78,70,214,4,156,70,215,80,140,107,58,117,251,65,60,171,180,16,153,132,35,141,83,53,160,187,165,126,172,31,195,69,190,131,79,153,51,59,113,14,148,230,168,203,155,128,82,192,58,76,133,44,182,142,8,183,204,15,181,152,187,48,49,67,150,50,24,206,176,170,186,176,240,220,201,21,192,221,195,92,154,200,197,194,154,84,80,152,158,47,100,37,96,31,107,120,139,204,235,194,127,196,201,146,135,8,222,236,179,53,25,148,160,19,203,133,34,226,182,148,200,164,225,15,62,112,51,152,112,198,115,153,133,133,23,9,222,192,228,48,130,232,67,154,53,115,207,30,108,108,212,184,47,45,172,31,45,77,233,44,115,181,34,234,141,120,36,119,135,130,199,146,49,62,218,23,114,3,10,243,48,131,46,75,139,51,96,1,120,36,21,147,209,204,57,87,234,178,140,176,47,146,76,116,53,53,92,137,150,22,32,163,142,60,180,106,129,205,95,174,69,115,56,211,206,216,106,232,52,243,111,184,158,216,88,192,203,250,220,192,220,48,238,30,224,64,249,101,3,65,116,133,44,77,6,177,248,152,28,132,57,248,232,13,103,78,130,40,203,184,5,197,124,41,157,67,65,172,151,67,33,208,129,123,107,198,153,70,168,187,252,73,102,32,91,80,199,18,170,225,37,128,244,213,97,47,119,6,118,243,176,226,22,244,151,98,211,92,135,25,124,203,231,157,166,13,144,90,208,57,118,52,143,199,40,107,206,254,123,186,42,147,208,225,46,42,177,89,234,138,249,103,144,91,236,111,18,249,177,196,209,201,144,16,175,122,107,57,28,105,66,3,210,16,65,39,28,226,214,120,3,154,200,226,253,135,204,154,131,143,53,114,113,186,84,185,114,102,25,159,66,37,104,0,132,51,67,255,180,226,2,3,102,115,115,231,176,101,195,147,115,28,154,60,161,141,51,246,236,162,231,174,154,88,126,178,236,82,148,34,212,102,209,133,222,130,74,200,134,8,213,19,129,153,21,29,112,140,6,167,53,3,29,194,249,139,84,64,81,144,217,101,113,244,25,217,42,67,155,161,87,58,149,231,134,84,90,7,125,151,254,86,223,218,118,254,26,60,158,145,125,71,18,10,225,104,168,75,37,65,13,157,170,196,172,165,120,149,44,102,202,153,72,107,67,125,103,214,226,106,227,231,120,213,8,43,45,60,53,96,23,39,87,48,218,89,24,147,145,126,243,150,190,72,47,20,216,22,109,106,200,85,165,105,149,130,249,105,129,20,6,50,25,8,104,67,96,59,26,92,232,116,71,202,43,193,159,140,34,155,244,193,151,5,43,127,110,178,149,97,156,35,231,129,61,115,155,156,82,126,103,74,131,31,177,77,175,129,105,154,112,69,132,168,143,60,123,173,66,63,54,163,70,201,202,202,97,3,144,117,123,42,230,92,249,0,204,70,221,84,32,245,233,141,55,212,173,57,109,211,6,95,110,208,166,4,17,48,85,14,189,187,172,139,111,7,104,226,157,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,82,55,120,215,102,79,239,84,137,54,50,77,101,250,171,100,96,94,61,112,26,95,19,40,138,208,97,13,233,16,223,22,171,27,142,242,83,20,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,46,234,68,161,190,248,189,47,117,55,131,205,124,213,73,229,211,244,66,101,78,215,101,189,118,33,238,181,180,180,130,22,200,176,245,79,119,13,225,231,73,14,39,153,153,45,68,83,76,71,71,238,233,179,41,123,226,59,167,204,238,100,147,83,153,90,246,20,39,98,161,20,42,127,91,140,12,199,240,164,54,210,106,35,192,138,77,87,214,68,59,207,234,193,148,150,66,116,98,76,95,230,81,26,70,166,178,59,149,18,54,228,50,17,213,70,232,77,98,241,138,240,156,86,158,194,5,40,196,173,129,23,2,14,69,169,136,215,146,142,122,197,51,235,27,216,26,99,167,176,17,40,82,204,91,230,60,88,215,124,41,0,95,158,150,165,3,193,2,165,212,85,237,187,5,57,183,98,79,43,25,21,217,169,138,87,88,210,220,96,190,103,148,123,151,36,68,4,99,27,48,184,253,149,54,10,1,231,108,177,157,163,227,167,72,43,107,240,3,72,142,33,154,168,163,71,156,87,217,42,117,67,229,45,103,103,187,255,162,25,65,200,170,77,253,130,100,213,157,238,193,142,36,2,132,46,185,251,17,225,136,138,70,220,179,115,222,103,13,96,144,7,41,158,149,53,63,116,29,220,93,165,179,130,178,20,87,11,106,246,171,204,83,72,255,65,62,0,132,206,125,45,202,250,79,171,165,247,221,37,237,188,214,171,240,18,47,56,23,190,98,58,109,225,48,189,25,122,154,27,146,86,52,70,153,230,171,204,72,165,220,196,201,120,44,240,221,39,121,253,60,70,198,97,24,144,174,204,3,98,114,79,42,159,133,192,69,171,243,21,219,130,98,97,77,16,236,4,198,86,174,228,126,112,215,40,28,88,7,148,72,75,149,87,29,240,189,197,73,91,209,185,36,157,140,49,208,126,91,157,16,207,204,227,135,48,77,91,185,181,71,110,207,72,195,100,202,164,16,96,107,112,110,40,162,197,20,189,86,240,168,169,125,220,215,53,105,116,26,173,143,1,81,105,225,21,179,174,231,22,186,114,209,65,153,250,141,220,224,177,94,31,188,44,225,138,48,99,150,124,138,26,84,78,36,45,171,236,91,231,20,235,4,234,217,42,7,200,105,7,103,244,42,249,206,65,0,70,175,3,33,41,84,178,80,146,76,106,10,45,178,171,78,241,139,238,171,242,94,4,91,56,82,204,153,168,242,96,22,224,170,136,135,189,233,2,141,174,161,51,209,85,251,91,20,196,65,133,92,53,204,220,109,104,73,179,68,103,89,53,28,254,130,94,173,83,188,185,90,46,132,66,178,195,5,233,245,130,218,143,146,94,145,143,57,88,41,56,164,54,242,99,22,49,27,49,52,140,108,166,77,77,140,192,100,204,43,223,190,198,218,59,146,111,168,109,37,201,51,128,157,35,149,73,5,75,236,213,45,130,91,105,114,33,219,158,104,199,91,10,123,195,204,15,205,7,72,248,10,91,66,34,80,149,147,86,101,41,102,93,86,217,225,124,97,63,233,198,236,34,53,34,197,103,251,14,129,122,59,51,73,31,224,53,136,142,21,214,150,239,225,252,92,224,142,51,222,143,116,33,33,189,6,159,103,202,3,66,65,136,181,249,149,52,88,132,100,237,236,228,78,141,83,136,248,69,222,7,118,222,27,140,78,195,213,84,150,41,92,26,172,67,225,143,60,26,134,246,112,225,125,90,206,164,209,139,119,2,108,145,115,87,133,97,238,124,236,42,84,154,202,111,176,210,43,179,66,149,223,104,152,146,134,113,161,43,35,22,46,176,84,115,37,217,135,46,113,45,149,104,87,194,94,104,127,225,14,58,35,86,99,250,170,77,197,98,214,113,120,105,110,10,167,232,195,110,101,137,36,9,164,237,219,83,115,103,33,179,48,18,101,9,93,1,138,79,66,58,148,34,71,36,135,43,18,44,214,182,192,7,212,53,141,82,231,134,238,135,176,122,194,225,89,56,165,141,215,216,29,51,176,172,33,35,102,0,26,46,181,51,96,250,189,60,233,135,106,237,246,125,162,150,78,252,174,52,172,149,78,3,105,172,212,179,82,88,69,101,201,37,205,167,190,193,250,69,229,145,208,126,69,179,21,17,23,118,56,49,204,70,126,163,95,54,129,95,94,224,170,158,8,115,104,112,17,78,201,57,109,208,99,87,130,136,140,199,255,91,10,39,119,228,65,11,118,178,158,79,42,61,50,239,174,187,247,177,18,142,181,108,202,228,154,172,58,111,58,211,89,147,29,121,242,107,235,114,64,70,11,89,161,203,156,64,102,22,42,84,20,176,169,144,149,249,187,202,3,118,220,78,229,136,26,45,34,171,26,91,93,36,79,163,199,29,176,47,5,123,91,52,206,24,217,87,35,184,114,144,155,71,231,5,162,126,158,41,120,195,173,2,157,189,63,123,4,36,151,129,236,81,144,28,14,178,71,2,144,16,37,93,81,108,225,6,101,158,15,168,12,35,54,47,248,190,208,131,178,65,139,208,155,118,116,98,221,170,90,161,33,225,133,204,39,70,160,114,28,149,43,193,52,4,213,145,238,108,39,76,166,70,39,78,140,148,73,183,245,75,69,13,213,50,108,13,91,183,162,28,99,198,178,50,159,149,65,229,165,147,70,113,81,216,158,151,29,180,239,51,76,53,46,63,0,71,202,73,9,187,236,52,40,154,115,54,217,39,150,54,242,116,80,209,213,88,81,74,63,105,179,100,27,147,147,33,53,190,40,141,87,198,13,231,141,168,218,107,87,168,46,100,179,220,21,38,42,220,52,176,181,162,115,11,190,57,164,183,11,51,127,103,226,182,108,5,135,238,2,225,212,138,12,228,36,243,49,69,8,0,121,207,47,167,98,113,180,64,139,111,161,104,29,15,74,133,170,116,8,58,137,226,172,212,162,183,130,0,27,215,188,172,191,169,26,158,164,2,234,28,1,168,151,45,86,46,206,123,140,166,249,112,151,102,163,241,167,216,135,34,81,97,36,171,200,143,50,26,84,39,181,164,243,204,74,209,208,1,229,10,51,86,111,92,209,146,179,90,60,71,147,174,107,38,115,65,12,58,223,213,113,38,115,74,204,215,116,124,15,243,69,43,172,83,98,173,50,239,149,56,165,171,128,174,164,55,216,174,48,201,101,61,139,187,102,231,208,153,60,62,147,75,104,129,204,6,118,35,208,80,31,220,102,196,142,91,117,205,138,63,33,187,28,222,112,73,236,221,25,221,213,49,187,66,22,16,228,206,221,76,69,120,87,188,137,162,128,16,110,50,154,106,106,53,184,193,167,128,147,28,62,254,249,195,1,60,53,160,239,56,229,43,35,107,199,25,43,144,250,33,45,135,135,201,193,244,143,213,165,224,63,207,64,227,121,82,16,247,20,242,124,58,199,77,222,113,196,250,170,50,36,58,202,48,2,226,124,211,236,102,192,104,144,135,125,59,14,237,147,198,29,105,23,2,24,200,172,188,128,36,222,230,204,199,170,34,176,55,196,139,90,134,110,54,64,105,91,136,7,87,14,231,194,241,137,202,71,45,64,63,151,122,212,157,152,146,133,172,162,82,100,99,29,141,248,194,85,73,182,149,42,247,201,209,100,138,88,78,105,33,172,187,190,84,109,13,228,156,155,244,28,150,246,153,192,25,200,28,41,141,149,219,204,17,208,81,55,129,12,186,20,123,142,224,25,214,9,100,130,192,113,232,228,208,234,188,148,237,61,103,126,231,33,164,192,85,104,14,162,168,41,240,99,6,84,132,187,134,134,20,113,15,72,32,61,168,103,43,33,183,41,211,233,167,68,201,20,94,73,187,147,238,98,14,98,161,41,41,109,103,3,197,171,83,202,98,120,6,211,180,185,37,154,65,50,202,7,58,138,20,2,26,252,179,161,9,164,112,77,112,169,224,25,41,191,21,215,6,112,231,39,128,0,101,94,182,226,1,150,148,25,231,145,79,59,60,3,57,81,51,69,42,77,127,215,154,216,12,109,154,4,24,56,208,101,84,235,50,255,91,182,172,118,4,77,181,5,190,213,188,213,147,239,156,157,166,67,15,215,246,166,208,187,251,99,126,27,152,174,128,191,186,57,146,226,161,236,203,176,11,251,141,202,247,118,213,35,65,173,9,184,180,131,66,167,203,210,172,76,80,59,139,117,166,155,229,168,107,150,23,54,44,254,58,104,196,165,217,94,37,204,183,247,145,43,8,23,105,152,41,149,45,105,143,84,77,163,232,29,16,111,137,110,57,77,52,177,239,70,185,185,102,86,221,123,113,111,134,189,187,182,189,11,2,200,72,34,98,145,136,101,10,18,138,56,106,5,141,21,84,87,241,97,197,153,29,102,13,232,55,161,230,136,183,215,112,123,65,255,133,64,52,55,45,16,222,238,131,102,179,212,172,134,5,99,23,18,26,200,108,71,133,137,72,175,144,241,68,232,11,43,16,96,87,36,101,105,213,0,138,219,34,22,171,77,173,33,198,129,162,158,24,37,224,176,66,54,200,44,151,194,107,173,72,171,41,35,82,20,153,50,71,166,29,90,26,162,93,141,147,118,205,150,62,147,192,212,70,228,4,91,164,223,245,244,143,168,141,165,177,176,189,43,56,111,249,56,37,205,13,234,237,83,247,184,247,172,13,51,119,213,138,54,50,86,9,40,135,59,39,247,85,1,79,166,111,187,18,65,128,253,17,178,55,116,12,113,161,198,145,102,119,52,189,146,252,200,20,84,182,33,241,21,29,227,161,144,143,125,111,187,45,117,147,28,51,102,184,13,233,250,103,215,181,111,179,40,129,106,10,24,201,90,144,78,156,165,123,131,51,82,5,37,130,87,98,88,68,65,56,253,15,103,204,24,79,61,221,186,237,92,211,255,50,194,48,9,107,115,133,148,250,92,125,35,141,225,222,240,131,158,148,193,7,123,14,196,117,224,32,198,117,190,154,46,181,29,39,72,168,128,18,224,168,161,180,162,114,146,88,36,233,218,137,183,254,157,137,230,101,94,83,162,121,164,139,11,202,144,70,23,242,42,115,111,124,162,12,224,207,220,27,207,52,243,235,64,6,13,229,231,78,51,47,153,87,159,105,230,191,96,154,121,48,146,82,203,245,153,22,231,182,254,19,44,135,21,113,158,28,132,231,174,85,253,164,177,248,48,50,90,93,227,81,72,151,226,146,81,38,215,248,59,101,252,205,9,199,229,0,212,184,214,107,170,231,203,52,89,204,164,122,168,125,109,6,71,47,227,43,5,109,61,83,36,234,151,123,158,62,136,23,100,90,68,193,114,102,82,113,97,152,112,61,165,35,170,112,171,72,179,84,129,38,167,21,171,71,79,140,156,218,57,151,2,50,49,213,217,152,79,117,122,146,163,174,33,89,182,182,4,134,143,170,2,47,51,111,198,238,153,158,19,85,137,39,203,135,32,101,91,4,244,1,137,249,231,80,236,44,170,111,207,87,190,151,153,171,243,172,202,166,81,119,56,218,25,116,152,36,127,142,134,40,8,83,131,106,25,20,18,140,101,163,202,226,230,111,224,153,237,198,112,96,155,86,137,30,81,86,28,16,127,99,230,108,14,194,44,97,222,194,92,82,133,236,197,120,213,111,145,180,140,117,153,3,20,52,80,18,161,168,1,179,0,134,5,72,35,16,71,40,111,55,66,92,195,219,153,159,238,171,4,141,125,26,75,65,171,126,33,50,189,99,137,11,215,43,109,95,218,244,67,53,23,35,80,178,2,103,22,158,115,229,11,57,31,114,74,48,67,123,22,227,200,138,207,185,188,116,210,172,159,65,154,92,142,100,128,99,22,105,137,204,145,133,21,71,124,17,210,99,238,180,84,252,71,23,248,6,146,14,171,234,109,180,170,218,223,176,168,210,155,87,40,203,60,211,130,191,38,134,201,92,209,200,59,116,70,164,35,86,126,22,113,78,169,121,56,184,38,121,179,113,137,1,78,212,227,198,5,203,139,99,158,74,168,126,72,169,245,66,191,16,163,161,81,238,228,90,199,21,197,189,69,177,28,147,190,105,117,1,250,75,217,192,98,11,76,79,164,166,51,84,197,5,76,99,212,47,212,153,236,76,231,157,21,108,38,110,177,243,173,115,151,230,137,238,22,162,89,169,54,171,129,255,75,106,119,232,228,204,115,117,58,214,216,223,9,93,99,204,142,246,113,175,224,141,205,29,134,250,181,204,67,156,173,110,62,235,132,79,5,152,113,222,80,181,249,37,166,103,51,165,150,114,46,105,86,156,0,187,161,43,65,110,141,240,142,230,152,39,183,5,209,13,64,46,227,176,238,244,115,204,123,162,217,54,117,111,213,89,46,11,193,43,5,55,110,143,169,227,155,246,123,38,142,165,29,107,142,196,46,179,213,204,104,4,246,213,20,29,119,81,109,189,90,32,218,128,229,123,74,233,95,94,33,209,22,55,200,39,209,126,53,90,142,43,56,101,8,35,72,218,139,15,55,55,168,147,150,185,111,169,212,71,213,238,112,140,162,37,114,251,178,124,193,156,104,10,153,193,67,155,245,130,26,32,156,82,186,34,51,16,179,247,153,185,163,185,22,3,165,165,145,219,61,143,143,53,59,92,184,63,230,226,130,193,132,91,60,139,85,83,223,221,189,196,83,118,222,153,200,111,154,183,202,69,220,247,223,23,0,228,154,170,18,194,240,181,244,136,142,226,4,133,32,87,22,180,192,21,191,237,119,176,45,65,244,246,100,152,190,26,52,63,144,181,172,150,54,123,79,65,128,55,82,25,98,29,144,145,83,101,117,86,142,65,206,70,158,253,185,166,203,169,80,9,232,202,163,129,151,80,155,160,61,48,122,129,101,133,66,66,72,41,50,79,67,117,128,38,36,175,158,211,110,106,38,170,93,102,144,66,85,154,213,44,197,25,9,53,241,61,131,184,234,97,108,249,52,113,31,38,90,125,142,205,211,212,227,73,173,197,11,78,35,179,155,122,208,162,202,13,7,162,33,51,27,133,1,144,97,211,93,184,103,174,56,227,139,98,10,94,206,134,101,64,239,142,245,166,186,9,45,232,24,167,44,101,80,88,192,3,75,235,123,69,87,135,182,238,212,79,205,21,193,178,81,113,76,77,191,79,21,25,0,34,93,11,157,4,37,168,141,50,244,5,123,221,54,96,200,86,102,252,47,37,32,205,77,233,76,185,218,92,108,71,131,86,188,143,50,89,194,23,54,132,243,32,143,57,173,200,2,142,41,15,118,188,60,34,146,108,43,19,46,176,224,162,146,166,135,237,216,80,7,146,83,138,109,242,105,247,13,135,249,222,142,247,68,100,176,248,155,112,128,178,162,20,210,8,33,247,197,162,32,167,72,96,241,28,9,81,96,202,123,135,92,59,56,106,170,241,236,32,67,215,186,238,238,231,166,224,206,45,220,65,1,45,209,243,201,5,183,125,80,105,193,55,166,217,39,117,229,232,19,212,153,210,130,116,227,67,223,105,255,219,78,84,76,49,14,0,85,116,79,115,72,32,94,112,99,180,192,114,224,254,134,230,106,69,104,12,17,224,62,229,211,124,0,229,230,10,62,108,112,38,141,83,152,35,56,13,0,0,113,55,205,88,201,247,55,189,240,116,94,131,54,151,90,76,129,231,49,88,163,73,49,4,215,166,129,14,143,74,138,32,77,37,205,74,236,148,34,150,138,1,214,144,196,68,141,241,36,92,198,113,16,112,191,226,118,111,80,221,32,17,35,43,95,66,46,23,225,58,224,157,10,147,82,24,153,142,219,105,153,34,224,248,41,8,153,43,20,151,55,210,153,79,77,56,202,49,146,221,146,251,133,173,194,201,131,13,84,24,153,77,67,1,215,67,50,253,170,39,66,88,218,52,55,41,195,150,221,80,17,6,44,29,84,233,118,52,185,43,28,119,129,49,153,238,45,242,76,70,207,219,150,204,122,82,42,90,181,159,48,199,2,188,20,82,116,195,255,135,144,114,236,183,101,134,183,225,221,98,218,34,111,215,113,127,76,105,42,3,105,245,124,216,115,201,46,16,146,97,4,127,75,220,199,188,201,17,10,1,210,94,212,74,28,74,211,145,193,142,90,66,211,69,25,181,39,129,224,20,222,113,150,40,89,20,147,46,35,64,20,94,107,20,137,175,126,131,74,49,49,35,199,65,112,191,156,235,197,125,188,120,44,93,230,244,170,183,155,201,1,66,184,170,53,132,155,25,190,67,119,88,133,56,51,18,80,148,171,185,159,205,245,12,147,36,211,214,177,15,150,132,153,99,136,141,127,0,183,235,245,48,96,72,179,161,42,40,41,164,249,246,48,255,189,201,181,192,138,23,0,212,68,58,210,136,217,117,225,87,143,27,83,108,88,199,234,164,33,1,58,16,134,56,17,196,108,161,201,73,249,202,108,231,209,78,215,164,241,225,16,100,204,118,37,31,36,68,52,65,192,141,248,17,152,136,121,49,109,241,13,163,236,89,108,65,2,90,90,97,26,21,88,39,99,120,146,173,123,48,15,182,68,106,51,139,46,239,186,208,30,98,105,192,63,104,18,149,173,209,107,115,72,120,188,223,157,105,110,91,54,69,22,24,116,72,184,157,233,114,41,35,153,249,151,39,157,247,228,211,222,146,179,179,19,207,64,220,128,137,94,196,14,52,236,71,229,81,26,70,134,192,50,176,77,100,244,173,82,99,97,164,58,110,171,225,201,204,229,84,57,147,117,246,142,38,87,166,219,3,31,157,83,132,24,232,8,141,0,4,240,146,83,167,141,38,219,180,115,230,26,111,209,209,1,160,135,57,60,74,161,236,77,134,156,252,250,30,251,57,199,103,10,4,46,59,159,134,35,112,15,255,84,71,180,144,253,67,146,173,49,187,36,57,144,162,102,6,22,18,75,226,156,68,195,166,116,236,76,195,245,116,204,81,195,67,57,194,154,8,193,155,72,208,43,178,95,35,33,170,139,16,71,91,117,168,182,195,200,134,178,91,132,94,81,62,19,132,68,48,86,229,82,184,125,48,87,228,77,105,130,162,216,91,167,123,42,62,230,162,24,194,13,44,64,195,78,192,205,153,133,87,24,116,114,49,129,120,169,134,154,86,146,203,116,153,141,58,230,90,224,201,117,88,5,86,89,128,142,81,232,216,137,90,241,170,19,207,27,41,190,145,245,111,241,71,196,68,89,177,144,114,8,39,50,177,5,171,130,62,243,113,13,187,215,235,80,138,194,100,34,25,170,228,192,140,232,10,171,90,50,152,1,205,177,83,8,240,11,244,120,96,177,67,122,17,4,214,112,94,82,216,2,103,111,172,202,38,31,165,68,200,40,48,11,89,145,163,177,128,130,105,13,214,162,213,51,158,128,145,29,103,146,225,120,6,227,21,172,140,11,140,97,84,174,8,166,72,202,142,7,30,36,231,203,139,137,98,52,57,3,27,213,144,251,196,27,82,161,14,220,156,107,73,24,27,69,115,138,144,27,214,85,91,83,74,219,2,3,48,209,84,135,69,179,25,80,7,213,200,234,191,39,175,229,183,114,246,235,6,67,86,185,182,86,54,172,2,164,42,90,125,240,214,50,199,197,163,184,183,24,70,195,235,24,17,35,210,98,50,39,109,215,169,254,161,177,25,183,67,132,215,16,63,165,177,152,187,72,36,115,211,95,113,138,57,19,79,32,73,66,221,145,82,167,25,61,2,60,84,37,119,85,132,55,218,242,70,167,222,104,222,123,253,124,214,15,245,90,164,70,217,212,240,146,188,10,203,194,84,13,61,64,18,36,25,54,172,133,59,154,190,180,20,28,4,234,100,10,79,14,98,35,125,189,83,133,168,223,143,45,166,55,12,38,130,216,191,105,240,15,69,30,129,108,144,247,34,251,226,205,66,48,140,51,45,170,204,157,236,160,108,224,154,220,189,194,223,91,184,39,170,76,75,26,184,170,201,47,234,181,162,128,3,107,28,90,170,30,143,110,100,238,191,197,254,23,21,79,157,106,42,105,175,110,105,185,152,205,108,89,209,192,172,174,178,180,76,10,192,184,241,218,0,181,120,226,98,19,178,3,91,28,147,99,41,122,162,81,107,108,179,147,76,48,191,149,29,102,246,162,234,223,58,37,221,76,72,231,49,115,148,228,241,107,19,47,40,164,108,10,65,250,203,117,87,20,108,24,215,142,61,124,34,7,209,106,169,170,50,171,50,26,13,55,194,151,15,119,100,102,163,213,176,41,238,167,108,122,26,84,77,222,98,92,37,127,154,115,185,10,1,2,235,124,28,56,199,167,205,26,20,236,102,33,150,9,22,8,108,244,205,89,57,154,134,237,9,188,81,195,59,69,230,170,211,40,66,181,221,41,131,178,28,211,8,59,157,81,171,177,124,177,210,168,83,43,69,197,83,39,52,193,52,84,25,235,158,1,239,24,117,86,15,118,10,196,160,97,92,83,67,166,46,132,110,5,5,98,148,50,58,65,164,21,85,162,150,145,213,144,157,160,2,43,165,152,63,153,89,133,23,156,174,132,210,89,78,29,106,18,30,235,145,16,90,66,169,52,204,251,128,131,78,83,162,104,171,159,88,197,149,198,14,73,170,191,170,72,131,13,45,42,60,185,8,50,120,10,194,93,144,237,105,163,42,151,78,249,166,45,150,193,77,25,118,136,77,141,79,29,188,222,10,235,156,153,235,164,74,196,216,107,65,66,215,54,85,115,106,53,104,98,224,68,88,67,95,204,28,221,232,40,43,223,188,122,12,101,126,46,134,218,168,71,92,85,55,54,90,201,198,196,27,175,223,121,30,209,10,47,68,198,196,94,8,94,248,98,251,81,27,117,17,76,81,103,234,83,93,30,221,73,170,190,25,186,16,208,41,195,156,217,255,164,113,81,41,46,44,49,153,103,240,127,233,92,35,44,7,105,230,146,27,223,162,234,127,148,61,148,166,178,61,87,190,118,205,231,204,17,18,211,74,40,106,183,25,200,74,94,43,169,10,229,19,148,211,114,144,45,207,12,232,113,12,59,179,152,16,41,34,117,93,77,199,79,217,208,45,235,232,114,92,78,22,171,156,99,56,21,166,89,83,47,101,219,246,68,82,32,14,65,53,69,220,164,37,100,37,174,180,243,114,107,156,197,138,51,75,113,119,1,234,34,89,26,120,136,132,116,192,20,9,184,202,195,121,193,219,112,159,187,146,98,79,225,135,146,159,3,113,177,51,20,194,253,179,173,123,78,181,141,153,84,32,81,64,92,19,35,87,196,77,235,147,107,205,99,63,169,70,66,168,100,155,149,24,173,166,195,230,53,209,117,16,65,176,59,16,185,66,58,131,194,32,69,102,141,185,185,194,237,49,63,72,49,108,19,146,45,211,43,251,128,23,18,144,169,4,207,192,92,110,164,36,217,112,116,82,181,209,176,150,0,54,3,47,75,63,80,158,177,91,66,226,160,31,152,6,139,222,240,80,53,250,141,226,63,222,30,102,140,198,34,49,67,13,233,98,164,62,91,49,72,116,102,139,214,186,193,119,4,33,105,188,8,26,121,40,201,76,73,168,50,108,17,156,94,139,42,171,168,137,170,38,41,107,155,138,71,67,236,47,41,205,20,25,183,50,99,230,84,147,250,49,42,40,215,212,152,141,178,179,211,137,118,154,211,34,138,32,186,53,241,125,65,124,169,188,98,229,40,27,190,51,114,167,61,255,234,76,26,177,56,44,214,65,156,224,76,132,60,199,176,179,119,30,54,72,207,29,172,26,211,165,199,18,128,147,147,110,111,8,105,154,170,81,165,179,188,172,251,18,146,33,170,49,87,53,142,65,97,116,80,74,171,125,54,155,9,86,156,56,238,240,245,96,91,66,99,114,88,181,75,220,50,234,52,150,159,198,62,212,88,145,32,140,78,141,187,92,200,61,167,201,201,150,239,196,62,60,179,41,119,167,215,235,175,40,197,123,205,121,214,174,175,106,224,111,248,58,84,127,136,206,103,98,197,175,34,74,96,238,53,188,162,200,239,77,13,201,30,81,76,22,173,230,35,83,220,72,150,59,178,205,100,125,149,246,115,255,32,15,85,1,144,132,196,86,136,100,41,115,85,20,93,151,160,110,152,48,170,149,131,122,39,93,23,72,189,104,232,151,204,96,103,84,104,172,5,148,230,159,93,53,104,131,116,188,66,75,210,59,147,127,103,140,224,94,128,100,69,157,100,214,88,22,157,102,163,247,44,56,186,34,242,70,151,17,229,117,146,231,215,68,254,12,20,121,97,58,11,85,37,253,13,123,96,67,185,179,188,68,203,7,113,193,195,134,93,190,193,85,7,238,187,49,7,69,123,209,138,81,169,91,237,30,42,26,127,145,234,84,66,227,147,237,160,110,67,178,34,33,123,88,200,136,86,69,189,42,16,182,114,99,39,96,118,130,40,82,238,153,45,128,219,88,174,181,185,224,228,33,166,31,38,11,86,43,141,3,34,202,121,202,253,177,200,14,78,148,141,225,198,174,146,114,219,221,210,243,4,137,161,132,146,147,172,164,203,93,153,136,42,185,71,1,191,87,1,176,146,128,20,88,208,36,116,170,134,164,141,88,213,89,212,153,236,230,187,174,75,179,124,253,42,135,73,16,152,20,81,73,210,88,110,47,43,117,96,26,117,65,175,85,232,180,15,85,75,209,129,120,93,231,30,26,26,152,209,150,92,85,143,245,71,216,63,202,188,220,8,32,203,97,102,166,77,118,247,57,187,148,59,184,205,184,51,158,29,229,108,200,161,14,220,140,101,119,39,222,58,77,42,53,57,198,80,149,199,10,77,236,52,55,237,130,149,219,213,62,117,253,214,53,165,166,121,37,22,243,224,73,154,92,17,140,15,96,154,1,146,100,24,194,108,235,235,174,255,77,124,64,23,91,217,4,96,150,32,205,56,85,128,237,27,1,75,220,180,46,157,240,188,243,197,100,165,60,111,206,246,186,178,189,186,89,15,48,197,193,140,154,245,150,142,168,241,76,153,127,207,146,67,148,139,116,229,62,40,245,85,225,176,174,84,179,156,237,162,119,176,145,0,168,1,178,6,20,195,204,9,15,169,164,94,38,77,166,190,157,238,110,195,230,109,221,238,253,26,135,90,3,31,90,161,49,45,76,90,189,155,235,235,134,172,222,251,173,115,146,171,33,108,109,12,1,95,77,218,69,57,235,137,129,218,60,192,153,68,101,229,124,10,161,237,163,108,107,32,110,138,213,141,209,188,55,112,118,198,236,21,251,55,36,162,163,35,13,131,82,185,24,26,188,218,116,68,9,39,220,222,105,5,220,218,221,84,55,93,179,55,235,246,93,17,199,35,248,145,96,223,201,253,164,22,88,211,29,52,126,170,157,51,107,208,244,180,186,32,87,21,53,136,69,66,16,52,233,180,16,32,145,24,218,42,116,69,117,214,233,215,138,10,46,41,233,130,75,65,235,114,224,30,9,235,178,123,145,239,217,109,177,115,108,172,26,146,70,217,208,40,36,138,225,184,152,150,121,86,238,44,77,208,251,171,176,63,75,240,119,89,245,138,49,213,56,21,28,52,163,3,157,136,244,227,204,39,135,219,107,167,101,27,201,154,28,56,223,203,125,217,229,112,215,152,93,14,249,92,41,161,137,25,67,67,70,19,109,124,133,57,77,22,164,247,204,105,242,90,114,154,204,20,96,94,6,215,92,116,140,73,101,31,27,32,103,117,75,213,115,81,130,213,11,226,90,141,107,24,93,230,185,94,7,77,107,223,210,141,161,219,0,218,152,238,38,254,115,122,45,186,12,61,115,54,205,236,13,197,171,115,150,179,49,203,24,244,95,100,156,68,9,95,248,97,81,7,110,231,53,189,55,161,82,65,63,93,58,37,236,56,206,166,180,127,141,152,231,153,206,253,85,101,83,34,23,74,83,164,49,186,65,6,95,171,243,158,42,201,194,52,233,216,69,181,154,94,41,103,86,129,214,179,72,13,78,247,253,36,185,78,107,213,6,111,99,46,99,166,186,37,38,99,244,240,21,110,116,20,113,124,110,244,87,81,183,225,0,68,240,193,194,13,86,21,215,118,222,47,111,93,80,193,199,254,243,49,173,140,31,238,253,231,229,181,74,92,255,179,117,165,213,74,167,254,238,91,63,93,14,235,133,36,23,188,110,73,50,127,195,90,41,134,97,238,187,241,222,240,209,167,184,115,59,100,187,67,25,50,8,223,111,55,102,187,195,111,57,217,70,23,62,251,42,183,21,113,36,237,89,115,99,44,204,111,119,99,52,230,251,66,189,244,73,238,219,150,30,250,5,51,253,43,107,0,61,233,242,147,46,63,233,242,23,163,203,175,171,234,150,133,121,239,31,180,223,47,166,86,216,239,126,190,69,157,34,102,184,135,235,185,101,221,120,118,252,243,84,242,131,47,232,2,235,79,101,205,167,81,214,204,12,221,196,96,157,10,49,123,30,241,60,226,121,196,243,136,231,17,43,71,124,50,229,155,216,175,190,132,90,70,242,124,125,137,27,155,150,237,243,223,248,75,105,192,246,173,111,206,231,184,113,107,177,251,28,58,191,182,44,226,231,87,129,169,151,158,176,191,18,195,36,198,99,73,78,150,4,248,231,113,175,229,56,113,18,186,227,56,65,247,119,28,39,142,154,221,113,34,138,72,185,70,57,78,156,217,229,56,169,209,123,153,199,105,72,221,60,78,18,90,203,113,75,79,79,215,121,156,6,243,204,227,164,136,179,28,39,122,88,63,78,163,18,230,113,18,166,38,199,9,241,242,227,196,137,66,180,153,162,190,146,67,228,109,233,41,29,167,161,155,243,56,113,39,147,227,150,158,210,113,226,231,41,196,82,142,243,245,144,244,52,126,156,120,247,138,43,153,28,231,235,177,244,148,142,19,119,220,101,48,122,220,92,15,113,201,166,227,196,146,160,114,162,28,56,23,228,36,11,66,7,10,53,159,43,34,230,1,61,80,86,132,14,20,71,184,185,36,226,247,160,7,46,157,29,17,8,243,64,241,52,159,107,34,86,37,61,80,180,129,82,132,95,15,20,15,223,185,40,154,247,68,14,20,5,247,46,30,40,20,50,31,40,154,246,231,129,95,226,192,95,175,209,157,158,250,226,61,255,178,181,48,35,86,242,122,61,157,175,199,211,241,176,187,158,46,230,159,185,25,169,97,143,231,211,233,180,217,30,79,112,230,234,218,186,179,45,240,99,137,21,120,249,163,191,156,142,231,221,238,132,17,73,74,142,237,24,208,40,96,122,62,158,47,91,27,123,215,88,78,182,84,53,18,125,241,0,11,63,86,109,183,63,237,119,24,145,172,251,121,248,120,238,199,58,31,118,91,93,207,149,198,230,116,100,40,125,140,117,31,128,123,61,92,70,200,10,70,180,12,126,115,220,157,14,187,203,206,151,116,165,177,57,221,98,219,30,101,211,95,174,251,17,45,124,56,211,72,71,173,212,195,225,114,61,31,78,155,235,126,78,74,109,109,207,183,88,84,169,76,242,176,203,127,184,110,118,251,131,13,179,182,180,11,63,19,193,62,236,150,223,111,70,78,131,235,113,63,209,93,211,214,111,248,71,130,249,39,170,127,162,250,39,170,127,133,168,126,115,57,28,206,97,161,47,151,235,241,114,62,56,106,23,152,40,173,221,233,62,250,151,110,142,215,222,167,173,187,140,243,112,56,30,143,167,211,97,227,152,48,183,181,231,122,88,240,139,95,248,71,22,202,114,223,145,126,77,179,200,191,120,144,59,12,76,177,221,156,174,251,253,209,81,203,126,168,167,7,112,157,175,135,171,211,149,182,177,57,127,228,99,152,213,122,94,250,240,207,215,235,72,153,181,57,15,50,122,113,212,114,188,94,14,167,195,245,116,188,236,54,147,161,106,27,155,243,103,138,128,151,207,96,30,207,155,203,117,183,223,239,199,208,230,224,47,187,237,160,44,135,141,171,8,250,182,122,178,101,84,120,241,227,190,156,55,167,203,96,25,137,97,94,210,98,15,122,178,63,239,207,231,43,141,178,109,108,206,247,228,30,227,152,7,224,173,71,100,193,97,119,62,51,61,29,92,196,144,34,46,182,141,187,150,122,34,66,134,151,108,82,47,31,213,29,198,120,206,164,54,219,15,46,225,184,223,71,110,163,109,76,231,90,202,153,135,192,113,151,237,117,123,25,3,186,50,243,120,60,239,143,219,211,229,48,118,177,99,184,166,173,158,60,241,219,35,72,82,187,235,24,202,254,188,219,204,33,45,203,126,26,251,246,114,218,94,182,196,63,181,141,205,249,51,217,207,139,119,146,28,221,31,194,193,102,116,252,188,191,144,36,57,242,81,140,136,147,241,199,16,156,231,58,183,141,205,249,200,86,160,41,198,159,203,255,220,248,47,116,232,3,83,31,55,199,73,186,22,242,190,31,60,234,118,115,60,56,109,47,45,249,180,153,30,250,197,56,185,174,195,250,113,127,222,28,198,138,49,47,183,187,158,135,110,236,52,100,197,141,43,199,218,198,122,250,100,227,31,65,107,112,185,236,135,236,123,57,154,169,75,208,220,162,31,216,157,246,167,243,148,86,186,182,114,238,44,205,246,20,59,63,155,23,188,216,218,71,50,213,71,83,83,88,254,155,145,5,249,1,184,254,211,110,232,76,79,219,35,219,76,46,251,33,197,177,14,117,17,5,74,99,123,246,172,189,180,228,220,120,249,40,226,112,25,38,113,214,149,142,132,149,135,221,241,176,61,110,246,87,215,173,53,173,205,217,72,123,168,169,177,95,252,216,79,199,235,176,20,236,130,170,116,119,188,92,54,135,253,110,120,155,210,232,155,214,246,124,100,239,91,10,252,60,2,31,56,116,197,131,141,189,12,77,213,92,253,253,101,113,133,24,99,189,14,11,138,51,135,181,181,61,223,242,102,74,2,232,23,207,13,157,134,109,112,81,215,24,109,31,44,223,102,72,242,187,235,158,120,190,133,57,172,173,205,217,72,43,185,100,238,124,132,149,167,81,143,213,189,108,55,251,97,54,35,197,71,109,76,231,45,25,102,101,188,15,192,5,62,119,250,115,167,63,119,250,115,167,63,119,250,115,167,255,126,119,58,59,176,46,235,123,30,3,28,22,42,151,96,114,83,57,203,178,198,191,124,153,115,217,170,251,203,112,104,57,156,120,255,14,37,198,118,55,210,42,178,138,171,180,181,231,154,67,204,131,236,243,235,216,158,167,93,176,191,109,247,219,129,198,131,178,39,182,116,167,161,112,248,136,52,120,234,24,62,83,215,31,49,89,138,87,122,122,4,84,120,62,237,7,82,31,122,25,218,242,187,177,25,134,45,99,51,181,187,11,102,200,109,237,185,230,43,245,16,218,172,205,105,63,148,52,71,230,229,14,99,140,231,205,53,41,130,155,214,238,116,171,149,33,229,9,94,190,223,202,80,97,39,50,120,26,106,187,161,219,62,109,7,185,247,149,111,90,187,211,151,186,31,94,132,247,197,47,254,254,56,12,86,251,224,246,186,63,110,118,195,45,238,116,14,94,13,77,107,119,186,85,141,248,250,17,188,194,135,12,115,14,188,205,102,104,101,175,215,243,176,224,50,219,219,180,54,103,91,73,31,73,2,253,242,241,221,254,52,20,177,67,108,97,78,104,56,253,159,19,35,148,154,218,51,81,178,69,43,24,190,124,166,247,176,33,135,246,133,195,221,141,50,46,161,81,248,222,210,90,206,157,176,46,165,76,30,65,206,61,15,59,60,107,227,7,139,59,156,222,175,236,143,38,98,110,105,237,78,183,42,7,75,225,148,151,191,215,183,3,81,5,212,61,28,178,54,199,129,186,163,39,83,211,218,156,61,189,106,165,44,225,163,174,252,176,205,92,167,7,42,214,61,180,173,172,58,106,117,62,132,87,238,171,221,237,35,54,117,232,164,142,219,173,27,232,119,151,203,160,213,187,35,27,233,74,91,119,170,239,244,7,80,231,93,54,67,71,119,56,184,27,245,216,212,141,251,78,105,235,78,117,62,254,33,4,252,193,162,29,7,55,206,1,47,67,109,113,14,75,217,180,117,167,206,96,159,7,96,103,30,88,242,44,93,183,66,32,35,169,198,3,240,207,195,127,251,18,183,85,17,17,170,204,80,79,67,157,182,175,183,75,69,191,7,216,102,53,166,240,58,98,136,142,67,55,206,90,228,182,177,158,173,229,229,150,170,143,47,127,228,231,193,21,238,88,209,47,194,209,121,240,11,155,109,136,37,237,26,155,211,133,135,120,156,133,31,189,223,108,41,15,196,50,252,225,214,127,217,143,129,77,242,89,91,154,19,81,224,253,197,239,242,7,192,79,191,48,91,169,180,126,87,147,139,234,129,179,55,111,191,29,55,220,224,184,205,31,246,227,138,99,2,246,227,242,127,250,241,127,190,255,225,237,210,250,21,255,173,207,113,208,31,151,134,113,151,113,96,60,253,207,111,222,127,255,205,119,111,223,189,251,233,43,249,58,102,238,239,239,254,249,213,114,252,191,141,215,89,78,220,141,238,109,182,184,145,12,243,79,63,190,255,254,135,159,191,249,233,221,187,247,223,252,227,221,251,119,255,254,227,223,255,242,254,221,191,244,230,127,196,145,114,200,207,223,190,255,207,183,239,254,250,230,237,127,189,249,233,135,55,99,134,191,26,127,201,66,253,247,143,239,245,171,140,117,179,149,211,198,47,158,198,23,144,189,53,102,39,124,254,122,254,106,126,125,186,236,148,95,42,101,162,164,96,122,9,9,4,31,18,8,60,189,149,86,171,224,95,135,240,203,228,23,253,21,147,159,198,148,119,158,176,110,249,229,201,210,228,238,158,18,77,126,166,190,197,238,140,164,105,225,103,236,208,140,196,198,207,148,143,53,165,225,123,193,63,127,125,210,48,173,11,189,125,249,238,18,181,227,90,214,250,17,188,150,75,176,233,146,237,101,132,160,15,245,238,226,210,67,170,129,218,218,157,62,194,12,30,103,236,67,175,49,162,145,134,22,211,181,34,163,106,247,126,248,51,4,77,79,219,218,158,63,43,167,63,194,240,135,142,107,132,88,135,36,40,195,85,235,52,244,92,81,247,91,27,187,147,71,228,26,138,187,63,128,133,107,216,168,70,248,69,144,196,134,70,119,59,140,247,195,114,55,99,213,22,29,104,109,109,207,63,105,96,144,84,130,127,128,40,141,97,177,24,121,38,56,52,117,132,159,94,174,219,32,191,150,182,238,84,13,88,124,140,72,213,235,97,244,121,4,161,142,68,11,174,255,29,107,59,226,78,162,85,183,54,182,103,67,15,250,16,113,249,67,181,178,31,209,167,27,78,172,49,214,117,64,242,112,81,97,60,95,27,219,179,225,198,249,24,152,238,60,72,84,178,224,36,79,197,220,208,157,36,105,114,156,157,124,209,139,61,210,74,16,194,218,30,207,219,237,48,214,111,134,63,18,237,239,218,90,206,213,80,236,7,217,222,99,87,14,107,108,240,86,218,110,135,121,118,187,219,111,8,167,151,182,246,92,53,239,60,198,222,30,9,202,246,231,161,59,39,11,246,41,146,112,250,217,157,96,88,252,33,54,243,176,75,30,135,171,221,112,185,114,119,188,129,149,246,35,186,62,184,164,215,198,246,236,147,218,235,31,134,116,15,54,60,58,101,13,58,125,62,142,1,69,206,165,105,109,207,119,190,237,33,182,248,230,50,104,211,101,248,34,56,114,27,53,101,7,117,98,18,22,91,218,243,52,69,233,67,112,171,67,198,26,124,199,72,182,201,33,197,139,183,229,96,65,179,136,150,26,219,179,165,18,218,67,236,246,151,47,88,127,200,194,96,218,52,25,221,47,212,159,255,229,251,55,255,146,30,106,159,127,120,255,207,55,255,50,69,33,212,132,63,125,251,183,49,10,191,255,226,146,33,234,173,101,87,171,91,190,184,183,47,122,44,24,84,119,18,139,130,95,54,193,248,169,255,225,100,58,87,189,251,145,158,70,175,47,95,197,252,19,254,28,30,49,249,228,175,195,197,237,215,180,30,197,126,217,249,220,115,220,97,252,53,239,111,223,189,115,214,146,206,183,19,236,37,197,42,220,99,229,175,188,124,178,86,255,251,207,63,192,210,99,61,147,198,55,0,78,111,251,63,126,32,110,45,141,118,160,180,13,80,248,162,213,241,76,63,124,219,188,242,41,21,231,82,188,163,232,175,109,87,125,38,245,245,239,175,24,237,125,6,205,207,143,103,190,30,113,78,34,28,93,117,219,97,71,11,211,53,62,150,95,103,249,24,233,11,231,255,26,13,39,233,221,100,223,170,189,127,240,109,118,0,242,64,137,83,157,58,217,233,105,114,32,188,121,224,112,56,162,237,144,72,71,126,46,116,125,90,165,245,250,195,143,64,69,153,233,79,34,218,101,151,235,172,9,253,29,215,144,107,203,146,106,167,150,219,88,64,27,226,249,4,161,73,203,114,234,66,130,113,202,85,143,212,218,163,54,59,232,174,12,112,68,13,40,158,146,122,48,26,123,36,21,111,148,198,33,108,110,233,142,21,97,195,37,207,58,14,249,75,46,7,6,22,45,210,64,71,232,1,243,183,76,229,40,247,235,29,151,139,2,159,9,86,212,99,174,114,210,146,209,87,199,111,39,204,24,70,111,144,65,99,229,165,5,129,111,19,49,203,183,197,23,88,220,44,213,36,162,135,226,194,252,91,174,37,151,148,57,31,83,135,28,32,222,34,215,83,66,33,45,26,85,50,238,48,87,204,32,99,156,167,222,184,195,77,81,123,169,220,174,158,181,72,120,227,44,6,73,5,223,37,56,71,96,214,126,122,127,48,119,60,37,163,109,233,145,174,151,53,96,78,234,105,179,215,10,104,163,101,78,92,222,70,242,146,2,65,243,109,56,226,10,229,90,76,80,253,222,91,187,118,211,3,172,226,24,95,232,130,36,93,145,156,84,214,166,160,57,218,38,220,124,61,126,232,74,210,220,44,23,114,72,238,70,36,29,238,167,48,76,117,183,26,113,189,228,172,1,158,10,62,97,156,210,127,16,227,185,111,197,212,70,109,186,99,199,40,12,103,143,57,179,217,80,76,148,186,41,93,143,96,212,66,90,4,198,21,136,85,39,159,209,73,3,252,129,186,100,234,144,227,20,163,163,131,236,94,52,33,177,51,66,107,124,119,149,157,71,187,178,110,91,226,247,150,171,19,90,25,51,52,119,149,97,111,13,103,193,213,9,169,217,102,245,97,205,253,237,75,77,125,20,155,107,197,39,140,114,10,70,170,8,11,67,24,127,91,162,36,172,135,194,6,190,219,61,199,197,176,238,126,67,29,149,206,170,82,4,187,4,102,130,186,40,214,223,132,153,3,234,150,27,234,82,43,94,192,78,193,40,112,124,198,70,182,79,46,68,82,252,38,66,74,100,8,82,1,109,184,231,18,42,184,139,137,69,39,2,19,235,109,196,196,130,10,6,38,86,161,242,21,114,177,96,231,159,92,236,235,224,98,213,227,192,130,193,129,168,225,138,59,247,37,232,143,21,103,23,76,7,12,60,247,63,248,79,144,27,165,91,78,50,244,54,224,68,151,192,137,121,12,130,44,76,31,167,186,123,249,37,155,159,248,217,225,191,78,253,90,220,217,73,76,182,244,177,118,8,143,74,14,187,72,175,181,42,159,190,127,12,46,145,240,213,132,75,22,69,121,70,37,126,156,163,18,105,139,152,228,139,44,52,102,119,174,51,88,155,37,170,131,245,13,160,232,202,238,235,170,78,166,67,155,172,220,143,69,62,89,166,15,7,33,37,138,95,27,91,191,36,242,243,139,202,94,195,201,144,5,76,1,226,208,133,134,201,25,25,135,130,92,50,179,123,66,27,34,139,161,240,161,244,79,169,175,170,93,156,137,26,95,9,208,230,172,44,161,79,19,36,49,14,9,120,209,118,252,194,31,218,1,109,2,148,234,212,225,62,243,55,115,134,28,39,55,219,32,172,17,143,231,151,112,250,9,137,80,217,77,180,16,200,219,181,180,137,248,88,59,202,217,64,108,14,238,132,55,121,139,12,138,38,205,46,165,91,158,90,32,2,162,69,230,133,166,86,194,164,98,11,246,187,132,81,83,27,216,70,102,33,105,85,208,164,171,229,59,31,223,149,201,3,215,73,61,68,255,121,24,97,35,40,7,137,220,203,147,169,67,199,52,235,126,108,130,136,12,184,154,145,237,19,140,60,216,125,130,62,46,101,252,161,183,216,176,176,61,148,185,36,112,12,61,226,62,222,70,104,36,39,213,77,223,76,8,79,90,59,167,52,231,235,11,83,150,15,151,98,186,98,80,93,224,37,181,225,90,36,161,21,208,107,224,179,3,226,2,233,205,126,168,187,166,110,173,186,253,186,77,218,110,230,126,211,51,110,104,209,71,196,48,184,35,161,161,130,165,2,14,91,193,114,25,17,102,84,169,214,6,90,52,149,21,25,199,64,150,38,105,208,200,185,164,241,182,253,65,103,4,32,20,182,94,235,31,107,149,97,57,183,66,110,139,15,42,218,168,200,165,197,64,21,77,245,168,44,1,93,7,155,13,12,103,64,143,125,95,67,49,121,139,23,44,208,34,138,132,76,26,140,211,161,165,6,119,53,24,46,163,152,97,62,19,209,86,190,11,157,46,235,196,0,148,37,253,66,163,35,13,143,52,94,161,79,122,64,210,53,88,61,181,92,42,220,41,163,167,150,143,177,101,105,161,244,4,139,40,154,203,81,96,154,251,172,146,186,232,9,165,79,27,1,136,149,97,82,63,160,42,90,202,241,168,206,19,73,205,13,135,154,138,23,140,169,206,129,177,78,232,40,117,189,27,26,221,81,23,67,248,235,171,106,122,164,165,116,179,236,86,169,39,176,40,97,167,140,163,240,173,158,30,83,69,59,49,140,246,19,1,163,214,66,251,185,238,247,128,14,10,198,144,185,81,229,131,220,253,218,235,243,66,55,245,34,202,184,79,53,16,82,121,67,131,131,89,133,206,66,119,6,212,22,179,31,216,238,67,211,225,140,171,220,69,85,22,182,63,112,197,126,244,97,130,202,244,133,94,207,210,234,87,57,86,42,150,127,148,132,129,33,7,9,195,219,72,196,192,24,131,136,177,140,242,21,234,42,32,127,61,117,21,47,33,132,240,133,0,216,167,142,135,58,46,251,249,19,0,217,71,135,67,45,200,241,75,3,119,154,204,223,9,128,223,93,62,2,52,229,197,36,239,122,193,90,68,245,19,118,107,143,49,98,36,35,122,147,179,202,222,70,146,157,114,137,75,16,252,108,66,173,85,99,141,231,121,231,32,11,88,219,36,249,208,223,156,167,161,93,216,180,97,151,79,92,2,153,181,167,202,135,120,229,89,235,199,217,13,189,45,183,192,211,135,36,127,229,114,167,114,141,249,66,220,23,185,67,73,60,4,67,14,249,54,76,40,77,241,189,12,97,219,43,87,208,130,115,202,191,211,41,202,170,34,199,19,180,115,240,39,36,237,156,219,250,49,18,50,235,169,152,75,142,16,152,82,36,203,85,49,22,63,76,189,22,175,96,185,17,212,46,197,19,98,94,249,161,137,249,87,48,232,211,234,168,195,89,155,89,82,46,144,157,52,45,78,89,61,90,218,176,236,21,50,84,154,88,14,33,169,7,157,118,249,36,205,31,228,6,232,79,93,67,97,70,59,149,182,200,119,221,174,175,198,114,29,31,76,171,4,220,184,30,184,92,179,133,106,34,103,159,108,149,75,73,187,59,255,181,45,139,11,16,243,29,239,41,173,35,66,116,188,235,90,237,86,165,172,50,240,229,127,186,183,138,69,195,74,30,133,38,56,31,168,224,141,221,78,61,11,24,1,238,32,200,100,36,135,2,33,64,74,64,228,131,73,175,248,73,104,76,129,153,181,167,13,216,21,224,12,16,12,168,194,68,10,86,130,201,218,85,117,0,58,214,171,219,90,76,60,24,230,185,95,139,178,92,101,65,205,148,235,40,0,191,29,184,150,203,171,73,71,23,36,235,165,189,219,1,50,123,224,141,235,44,59,73,208,199,114,147,19,155,121,25,52,10,14,226,224,195,0,244,121,59,148,30,53,125,166,81,229,1,211,92,244,147,69,179,89,54,79,221,91,105,243,213,21,236,22,185,1,4,7,150,30,150,18,182,44,24,53,32,221,138,147,3,202,38,146,135,43,20,164,31,105,66,33,27,98,250,23,199,44,209,144,92,24,1,220,107,128,171,246,55,52,145,112,172,251,58,200,198,75,211,235,147,141,101,31,61,101,227,215,227,141,170,220,50,155,39,68,205,117,102,109,150,242,186,228,196,3,115,57,220,86,201,242,58,104,104,176,220,47,215,153,70,121,226,150,103,131,43,173,205,108,225,151,116,219,190,126,5,243,148,241,49,188,235,38,250,133,38,26,87,66,97,52,66,153,75,249,76,197,124,241,6,83,31,236,147,193,179,227,156,242,8,149,186,169,243,21,130,226,8,82,53,158,51,10,116,57,22,217,173,3,81,35,50,7,198,206,152,21,24,15,22,129,114,254,56,187,254,113,182,184,19,151,181,40,37,86,162,68,40,89,253,90,195,47,194,239,96,116,236,63,21,108,192,24,24,11,75,84,102,210,45,50,87,147,194,148,237,86,238,245,101,6,145,193,46,145,45,140,254,87,42,0,255,1,255,127,114,227,179,133,245,203,58,207,198,107,171,95,104,97,234,58,113,66,93,80,34,249,156,212,115,242,215,179,2,171,67,48,24,103,102,87,72,85,79,128,112,183,193,32,3,185,201,20,253,101,215,238,156,250,22,122,94,6,198,35,47,211,18,103,141,13,106,152,218,102,238,227,226,196,245,154,14,154,54,14,133,43,235,50,179,194,104,73,151,32,48,75,168,171,219,191,180,199,43,14,40,40,34,32,144,128,94,42,6,10,146,71,229,81,9,111,41,203,229,40,77,127,167,213,10,172,34,111,241,130,1,2,126,168,40,4,104,61,111,193,186,77,195,86,46,59,61,224,1,50,25,122,3,44,252,192,240,229,174,132,47,203,123,4,249,50,31,201,241,30,178,20,220,81,39,7,121,49,45,128,134,34,176,22,0,193,9,140,217,9,31,186,205,70,251,190,168,142,178,172,86,85,4,9,26,3,192,54,0,221,1,124,139,210,86,81,34,161,204,21,180,154,23,160,44,81,89,196,132,236,19,37,96,66,209,209,17,166,51,61,45,42,176,28,86,87,56,125,161,165,11,0,156,127,129,55,157,153,176,110,115,243,3,24,50,55,47,240,241,10,217,249,103,112,217,43,99,231,133,235,70,146,2,106,33,98,226,77,208,88,139,215,137,133,116,176,163,214,197,72,1,2,101,38,189,55,39,35,107,2,78,163,107,40,198,53,157,186,253,32,158,85,90,136,76,194,145,198,169,154,165,51,38,93,205,146,137,218,203,6,4,159,50,103,118,226,28,40,205,81,151,55,205,184,214,187,188,153,119,106,32,220,50,63,212,98,238,194,196,12,141,88,20,118,134,85,213,133,133,231,78,174,0,238,30,230,210,68,46,22,214,164,130,194,244,124,33,43,1,251,88,195,91,100,94,23,254,35,78,150,60,68,240,102,159,173,201,160,4,157,176,228,252,142,184,151,88,155,228,43,17,124,224,102,48,225,140,231,50,11,11,47,18,188,129,201,97,4,209,135,52,107,230,158,173,37,47,73,227,110,165,241,216,125,47,52,165,179,204,213,138,168,55,226,145,220,29,10,30,75,198,248,104,95,200,13,40,204,195,12,186,44,45,206,128,5,224,145,220,137,70,51,231,92,169,203,50,194,190,56,155,132,172,166,134,43,209,210,2,100,144,124,193,87,45,176,249,203,181,104,14,17,169,163,215,210,6,189,148,255,134,235,137,141,5,188,172,207,13,204,13,227,238,1,14,148,95,54,16,68,87,200,210,100,16,139,143,201,65,152,131,15,178,17,120,54,5,150,101,220,130,98,190,148,206,161,32,214,203,161,16,232,192,189,53,227,76,35,212,93,254,36,51,144,45,168,99,9,213,240,18,64,250,234,176,151,59,3,187,121,88,113,11,250,75,177,105,174,195,12,190,229,243,78,211,6,72,45,232,28,59,154,199,99,148,53,103,255,61,93,149,73,232,44,249,16,75,53,254,103,144,91,236,111,18,249,177,196,209,201,144,16,175,122,107,57,28,105,66,3,210,16,65,39,28,226,214,120,3,154,200,226,253,135,204,154,131,143,53,114,113,186,84,185,114,102,25,159,66,37,104,0,132,51,67,255,180,226,2,3,102,115,115,231,176,101,195,147,115,28,154,84,147,69,77,182,153,177,1,221,85,19,203,79,150,93,138,82,132,218,44,186,208,91,80,9,217,16,161,122,34,48,179,2,17,142,209,224,180,102,160,67,56,95,74,225,121,20,100,118,89,28,125,70,94,241,208,102,232,149,78,229,185,33,149,150,100,205,221,29,164,191,213,183,182,157,191,6,143,103,100,223,145,132,66,56,26,234,82,73,80,67,167,42,49,107,41,94,37,139,153,114,38,210,218,80,223,153,103,191,218,248,57,94,53,194,74,11,79,13,216,197,201,21,140,118,22,198,100,115,91,95,164,23,10,108,139,54,53,228,170,210,180,74,193,252,180,64,10,3,153,12,4,180,33,176,29,13,46,116,186,35,229,149,224,79,70,145,77,250,224,203,130,149,63,55,217,202,48,206,145,243,44,21,225,36,34,74,249,157,41,13,126,196,54,189,6,166,105,194,21,17,34,87,208,236,181,10,253,216,140,26,37,43,43,135,13,64,214,237,169,152,115,229,3,48,27,117,83,129,212,167,55,222,80,183,230,180,77,27,124,185,65,155,18,68,192,84,57,244,238,200,101,150,2,168,157,49,16,240,161,237,128,173,67,131,180,125,201,72,90,33,34,44,50,82,55,120,215,102,79,239,84,137,54,50,77,101,250,171,100,96,94,61,112,26,95,19,40,138,208,97,13,233,16,223,22,171,27,142,242,83,20,64,74,144,86,65,177,129,215,14,170,91,216,111,118,72,146,128,46,234,68,161,190,248,189,47,117,55,131,205,124,213,73,229,211,244,66,101,78,215,101,189,118,33,238,181,180,180,130,22,200,176,245,79,119,13,225,231,73,14,39,153,153,45,68,83,76,71,71,238,233,179,41,123,226,59,167,204,238,100,147,83,153,90,246,20,39,98,161,20,42,127,91,140,12,199,240,164,54,210,106,35,192,138,77,87,214,68,59,207,138,55,149,150,66,116,98,76,95,230,81,26,70,166,178,59,149,18,54,228,50,17,213,70,232,77,98,241,138,240,156,86,158,194,5,40,196,173,129,23,2,14,69,169,136,215,146,142,2,145,129,199,210,255,67,72,38,54,2,69,138,121,203,156,7,235,154,47,5,224,203,211,178,204,134,2,93,158,112,196,91,200,169,137,148,190,45,4,86,32,109,46,179,214,157,176,35,202,166,161,153,211,169,180,152,235,86,10,107,5,181,34,202,85,105,15,16,150,27,204,21,206,25,21,191,234,140,13,167,73,32,126,5,214,155,180,253,93,240,211,223,238,70,106,68,149,21,53,110,201,237,46,223,31,238,87,180,59,204,93,151,111,169,80,72,134,239,48,185,136,106,43,136,161,162,143,140,96,236,108,247,214,52,147,15,217,240,169,95,144,35,187,211,61,180,147,4,158,208,37,197,252,130,232,253,160,9,177,164,77,33,143,2,34,14,52,214,138,202,180,133,227,240,102,108,105,110,72,106,207,24,70,154,175,50,67,145,114,19,103,219,177,200,118,223,118,235,231,49,182,13,195,128,248,100,46,14,147,61,82,1,44,68,38,90,213,189,216,22,52,7,107,146,94,39,17,182,130,35,247,131,187,70,241,190,58,160,68,59,170,64,234,219,206,91,156,118,21,165,74,82,186,24,135,236,183,213,9,241,212,59,126,8,19,173,149,91,123,104,246,12,37,76,182,74,138,241,181,6,103,119,34,162,113,23,86,61,14,221,240,6,21,139,72,169,40,120,193,25,163,122,57,138,118,43,136,206,212,68,238,27,155,52,64,141,150,200,96,178,180,48,0,216,76,228,22,186,114,209,89,153,186,142,220,230,177,252,31,188,172,206,144,178,246,50,53,7,231,221,42,69,206,126,253,70,130,3,182,44,148,166,160,203,140,79,11,194,181,171,78,137,138,238,171,34,92,4,84,248,70,204,25,169,34,94,150,201,170,212,134,221,232,50,138,78,179,243,197,85,161,91,116,190,65,43,92,149,198,220,109,40,62,179,144,102,137,50,28,68,130,170,172,211,165,185,166,45,68,55,178,15,5,169,234,130,38,143,242,88,145,219,56,184,35,248,152,54,34,97,150,26,27,201,50,140,108,102,66,77,212,110,242,218,149,21,95,227,214,29,173,55,172,82,101,203,102,76,58,7,31,147,86,149,88,148,91,84,175,18,198,66,59,61,119,142,183,20,26,206,20,158,230,67,99,99,215,120,65,146,106,170,232,179,42,30,57,191,120,99,162,144,184,176,103,220,50,198,139,24,49,227,203,140,78,141,191,76,126,194,56,133,144,126,164,249,48,96,222,32,240,13,53,175,172,66,184,52,72,102,225,11,60,204,131,32,185,208,252,150,34,55,10,223,78,50,43,2,220,170,148,199,157,143,93,133,174,78,233,44,107,115,50,11,80,233,108,67,140,27,130,77,87,70,144,87,96,37,230,74,178,115,88,162,214,149,186,84,10,84,136,84,33,99,157,117,166,177,233,212,166,98,10,234,56,155,52,55,133,67,242,97,131,133,143,12,8,8,60,113,20,205,47,86,15,101,194,206,23,100,109,72,35,120,230,253,206,178,31,159,68,120,227,3,18,81,21,129,214,37,162,158,62,59,27,152,69,180,120,249,34,223,217,14,118,50,10,179,86,150,166,245,142,211,127,132,3,145,144,247,164,200,19,201,179,138,4,140,53,148,240,1,189,76,163,189,185,161,228,33,92,159,48,123,150,203,8,17,53,124,97,103,98,44,86,200,188,195,214,32,44,94,152,239,229,249,61,84,65,183,239,115,178,116,178,103,165,109,173,232,24,72,102,165,170,149,242,42,104,36,239,51,159,252,6,152,138,58,33,209,173,74,120,42,105,42,162,64,18,22,140,44,71,23,108,2,192,188,196,85,54,15,115,8,97,187,30,51,253,82,29,51,240,255,150,158,201,157,116,208,2,100,166,231,147,186,46,119,43,196,253,173,59,243,177,202,141,117,106,202,255,154,224,58,187,49,147,87,147,213,120,178,114,235,34,66,198,47,89,125,203,40,44,163,136,10,24,5,114,42,112,101,214,175,178,135,29,198,173,88,185,209,25,178,98,177,213,60,242,52,122,148,1,123,78,176,111,69,227,122,145,61,51,130,227,6,57,117,116,62,31,234,213,153,66,53,220,6,208,89,247,179,253,63,57,8,100,255,129,228,94,144,253,15,128,208,40,197,138,34,12,55,31,243,124,16,189,117,24,40,72,191,16,133,178,71,139,204,159,54,117,34,224,85,199,208,240,53,133,247,73,220,81,101,195,42,171,134,105,8,122,36,221,235,78,157,76,105,78,236,41,105,150,110,43,155,138,78,170,229,98,27,94,119,69,83,198,220,118,229,200,43,215,206,75,39,141,226,144,176,61,47,59,104,223,231,147,106,28,124,0,142,148,129,18,86,216,105,62,52,87,108,178,70,44,109,228,215,160,82,173,241,231,148,108,210,102,201,54,38,167,62,106,60,79,26,31,140,27,174,26,81,207,215,174,80,93,200,102,185,43,76,84,184,105,96,107,69,1,23,60,113,72,137,23,102,254,206,52,109,217,230,13,181,6,130,167,21,25,200,73,230,81,10,135,127,242,149,95,78,197,226,104,57,22,223,66,209,22,30,244,13,85,31,17,212,21,197,53,169,69,111,5,1,54,142,120,89,181,83,149,63,73,59,212,153,253,169,151,45,86,46,174,122,140,166,249,112,151,200,163,109,165,152,95,34,81,97,36,171,200,143,242,23,84,151,180,164,177,204,42,205,208,1,101,97,50,86,111,28,207,146,107,90,60,71,83,172,107,222,114,65,12,58,223,13,11,154,153,165,194,218,48,239,211,241,70,204,59,173,176,87,137,253,202,204,210,85,160,87,242,25,140,186,160,43,238,60,105,73,139,127,102,231,193,153,92,60,147,15,104,1,206,6,124,35,220,80,31,220,172,195,158,90,117,217,138,3,33,251,24,222,240,65,236,253,23,221,183,49,251,62,22,40,228,206,221,204,61,120,87,128,137,98,129,16,95,50,154,106,46,53,248,189,167,8,147,28,47,254,249,253,255,61,23,160,111,58,101,45,35,119,199,41,42,144,235,33,45,135,199,197,193,214,143,213,165,104,63,79,57,227,137,81,16,232,20,18,123,58,211,77,238,112,196,253,170,146,40,122,198,48,14,226,4,211,236,87,192,152,144,135,125,59,240,236,147,6,26,105,23,2,24,200,172,188,128,172,221,230,189,199,42,52,112,56,196,142,90,74,110,182,32,105,91,8,0,87,38,231,194,1,137,202,74,45,64,63,151,122,20,154,152,194,133,172,162,18,101,227,30,141,254,194,55,73,182,149,170,254,201,179,100,74,89,78,108,33,178,187,226,76,45,17,228,141,155,84,25,150,231,153,192,25,216,27,57,140,149,225,204,33,207,81,67,129,148,185,20,108,142,104,25,214,12,100,10,192,129,231,228,193,234,236,148,237,61,231,127,231,33,164,216,86,104,14,210,168,169,247,99,202,83,196,183,134,134,20,98,15,72,32,253,176,167,39,33,63,41,211,248,167,204,200,20,79,73,187,147,238,98,30,97,161,41,41,179,103,3,5,168,83,142,98,184,2,211,180,185,101,154,65,50,138,8,58,138,20,243,25,28,178,161,85,164,248,76,48,170,96,27,41,161,21,23,3,112,111,39,128,0,165,90,182,106,1,150,133,25,231,145,19,59,92,1,57,51,51,133,38,77,7,215,154,201,12,109,154,245,23,56,208,197,84,235,50,255,91,182,172,118,4,77,181,5,206,212,188,213,147,179,156,157,166,67,15,215,246,166,208,187,251,131,124,27,152,174,128,191,186,57,146,238,161,236,203,176,11,251,141,202,247,118,5,36,65,173,201,184,180,131,66,167,203,210,172,76,80,59,139,117,166,155,229,168,107,150,23,54,44,254,58,104,196,165,217,94,37,174,183,119,138,43,8,23,121,151,41,119,45,41,144,84,83,163,232,29,16,111,153,109,57,47,52,113,240,70,185,185,72,86,221,123,113,111,134,189,187,182,189,11,2,200,72,34,98,145,136,101,10,18,138,56,106,5,141,21,84,87,241,97,197,153,29,102,13,232,55,161,230,136,183,215,112,123,65,255,133,64,52,55,45,16,222,238,131,102,179,212,52,134,5,99,23,18,26,200,108,71,133,137,72,175,144,241,68,232,11,43,16,96,87,132,101,105,213,136,137,219,34,22,107,78,173,33,6,126,162,128,24,101,220,176,202,53,72,37,151,226,105,173,42,171,233,35,82,216,152,50,71,166,32,90,26,162,189,145,179,116,205,150,62,117,192,84,72,228,140,90,164,226,245,124,143,40,134,165,193,175,189,239,55,111,249,56,37,205,13,234,237,83,247,184,247,172,16,51,135,208,138,54,50,86,9,40,135,59,39,247,85,1,79,166,111,187,18,50,128,253,17,210,53,116,12,113,161,198,145,102,119,52,189,146,252,200,20,84,182,33,241,21,29,227,161,144,143,125,111,187,45,117,147,220,54,102,124,13,169,251,103,215,181,111,179,10,129,106,10,24,201,90,84,78,156,165,123,163,49,82,201,36,130,87,98,88,68,71,56,253,17,103,144,24,79,61,221,186,237,92,211,255,50,194,48,9,107,115,133,28,250,92,110,35,141,225,222,120,131,158,148,193,203,121,14,196,213,224,32,198,117,190,154,46,181,29,39,72,168,128,18,224,168,161,180,162,114,146,224,35,233,154,100,130,248,200,204,242,50,175,41,179,60,210,75,7,101,72,163,11,121,149,201,54,62,81,202,239,103,178,141,103,94,249,117,32,91,112,211,23,200,43,127,122,9,69,19,94,117,94,121,48,146,82,188,245,153,7,231,182,254,19,44,135,85,109,158,28,132,39,171,85,253,164,177,248,176,51,90,33,227,81,57,151,2,145,81,23,215,248,59,101,252,205,21,199,229,0,20,181,214,107,170,243,203,52,89,204,44,122,40,118,109,54,71,175,219,43,21,108,61,53,36,10,150,123,98,62,136,23,100,93,68,133,114,102,82,113,97,88,113,61,135,35,202,110,171,72,179,148,125,38,191,21,43,64,79,140,156,154,58,151,138,49,49,183,217,152,79,117,125,146,163,174,33,59,182,182,4,134,143,202,0,47,51,111,246,238,153,143,19,101,136,39,203,135,168,100,91,4,244,1,153,248,231,80,236,44,42,104,207,87,190,151,153,171,243,172,202,166,81,104,56,218,25,116,152,36,127,142,134,40,8,83,131,106,25,20,18,140,101,163,82,226,230,114,224,169,236,198,112,96,158,86,137,30,129,80,28,1,127,99,230,108,14,194,44,97,222,194,92,82,73,236,197,120,213,111,145,180,140,117,153,3,20,52,80,18,161,168,1,179,0,134,5,72,35,16,71,40,111,55,66,92,195,219,169,158,238,43,253,140,125,26,107,63,171,126,33,50,189,99,137,11,215,43,109,95,218,244,67,69,22,35,80,178,2,103,86,154,115,229,11,185,32,114,14,48,67,123,22,230,199,138,207,185,188,116,210,44,152,65,154,92,142,115,128,111,22,105,137,204,151,133,21,71,124,17,210,99,238,180,54,252,71,87,244,6,146,14,171,234,109,180,170,218,223,176,168,210,155,215,39,203,72,217,244,167,44,243,90,24,38,243,70,35,7,209,25,243,141,224,248,89,181,57,229,226,225,192,128,228,208,198,53,5,56,51,143,27,23,44,17,142,57,43,161,220,33,229,210,11,253,66,236,138,198,145,147,119,29,151,16,247,22,197,114,76,250,166,213,5,232,47,165,255,138,45,48,61,145,154,206,80,21,87,44,141,81,192,80,103,178,63,157,119,86,176,153,120,198,206,183,206,99,154,39,186,91,136,102,165,218,52,6,254,47,169,221,161,147,51,231,213,233,88,99,127,39,116,141,49,59,218,199,189,130,67,54,119,24,234,215,50,15,113,182,186,249,172,19,62,21,96,198,121,67,213,230,151,152,206,205,148,75,202,185,164,89,98,2,236,134,174,4,121,54,194,65,154,99,193,220,22,68,55,0,185,140,195,186,211,213,49,239,137,102,219,212,189,85,103,185,44,4,175,20,60,185,61,180,135,111,218,239,153,56,150,118,172,57,50,187,204,86,51,163,17,216,87,115,114,220,69,181,245,106,129,104,3,150,239,169,157,127,121,141,68,251,153,237,247,85,105,57,174,224,148,33,140,32,75,47,62,220,220,160,78,90,230,190,165,82,31,149,183,195,49,138,150,200,237,203,18,4,115,102,41,164,2,15,109,214,11,106,128,112,74,249,137,204,64,204,222,103,230,142,230,90,12,212,146,70,50,247,60,62,214,236,112,165,254,152,124,11,6,19,110,241,180,85,77,65,119,119,20,79,233,120,103,230,190,105,222,42,23,113,247,127,95,0,144,107,42,67,8,195,215,210,35,58,138,51,18,130,92,89,220,2,151,248,182,223,193,182,4,209,219,179,95,250,106,208,252,64,214,178,226,217,236,61,5,1,222,72,101,8,119,64,10,78,149,213,89,57,6,57,27,137,245,231,154,46,167,66,37,160,43,143,6,94,66,109,130,246,192,232,5,150,21,10,9,33,165,72,53,13,213,1,154,144,173,122,78,187,169,153,168,88,153,65,10,149,101,86,179,20,167,32,212,76,247,12,226,170,135,177,229,211,76,125,152,104,245,57,54,79,83,143,77,181,22,175,48,141,84,110,234,65,139,178,54,28,139,134,84,108,20,9,64,134,77,119,225,158,201,225,140,47,138,57,119,57,253,149,1,189,251,214,155,234,38,180,160,99,156,163,148,65,97,1,15,44,173,239,21,93,29,218,186,83,63,53,87,4,203,70,213,48,53,223,62,149,96,0,136,116,45,116,18,148,160,54,202,208,23,236,117,219,128,33,61,153,241,191,148,113,52,55,165,51,229,106,115,177,29,13,90,181,62,74,93,9,95,216,16,209,131,196,229,180,34,11,56,166,196,215,241,242,8,74,178,173,76,184,192,226,139,74,218,30,182,99,67,29,72,78,41,182,201,167,221,55,28,230,123,59,222,19,17,194,226,111,194,129,202,138,82,72,35,132,204,24,139,130,156,130,125,197,115,36,4,130,41,239,29,114,239,224,168,169,198,179,131,12,93,235,186,187,159,155,130,59,183,112,7,5,180,68,207,39,23,220,246,113,165,5,223,152,102,159,212,149,163,79,80,103,74,11,242,139,15,125,167,253,111,59,81,49,197,56,0,84,209,61,205,33,129,120,133,141,209,2,203,129,251,27,154,171,21,161,49,68,130,251,148,79,243,1,148,155,43,248,176,193,153,52,78,97,142,224,52,0,0,196,221,52,69,37,223,223,244,194,211,121,13,218,92,106,49,5,158,135,97,141,38,197,16,92,140,6,58,60,170,33,130,188,148,52,43,177,83,138,88,42,6,88,67,18,19,53,198,147,112,25,199,65,192,253,138,219,189,65,117,131,68,140,172,94,9,185,92,132,235,128,119,42,76,74,97,100,58,110,167,101,138,128,227,167,32,100,174,80,92,207,72,103,62,53,225,40,199,72,118,75,238,23,182,10,103,11,54,80,97,100,54,13,5,92,0,201,244,171,158,84,97,105,211,100,164,12,91,118,67,69,24,176,116,80,105,219,209,228,174,112,220,5,198,100,186,183,200,51,25,61,111,91,50,235,73,185,103,213,126,194,28,11,240,82,200,201,13,255,31,66,202,177,223,150,10,222,134,119,139,105,139,188,93,199,253,49,165,169,12,164,21,240,97,207,37,187,64,72,18,18,252,45,113,31,243,38,71,40,4,72,123,81,43,113,40,77,71,6,59,106,9,77,23,165,208,158,4,130,115,118,199,89,162,84,82,76,186,140,0,81,132,173,81,36,190,250,13,42,197,196,140,28,7,193,253,114,14,28,247,241,226,177,116,169,210,171,222,110,230,7,8,17,171,214,16,110,102,248,14,221,97,21,226,76,74,64,129,174,230,126,54,215,51,76,146,76,91,199,62,88,214,101,14,35,54,254,1,220,174,23,192,128,33,205,134,170,160,164,144,230,219,195,252,247,38,215,2,43,94,0,80,19,233,72,35,102,215,133,95,61,110,76,177,97,29,171,147,134,4,232,64,24,226,68,16,179,133,38,39,101,51,179,157,71,59,93,179,196,135,67,144,34,219,149,124,144,16,209,4,1,55,226,71,96,34,230,197,180,197,55,140,178,103,177,5,25,103,105,133,105,84,96,157,140,225,73,182,238,193,60,216,18,169,205,44,186,188,235,66,123,136,165,1,255,160,73,84,167,70,175,205,81,225,241,126,119,230,181,109,217,20,89,96,208,33,225,118,166,203,165,140,100,38,92,158,116,222,179,77,123,75,78,199,78,60,3,113,3,38,122,17,59,208,176,31,149,71,105,24,25,2,203,192,54,145,209,183,74,141,133,145,234,184,173,134,39,51,151,83,229,76,214,217,59,154,92,153,110,15,124,116,78,17,98,160,35,52,2,16,192,75,78,172,54,154,108,211,206,153,107,188,69,71,7,128,30,230,240,40,103,178,55,25,114,242,235,123,236,231,28,159,41,16,184,206,124,26,142,192,61,252,83,29,209,66,246,15,201,199,198,236,146,228,64,138,154,25,88,72,44,137,115,18,13,155,210,177,51,13,215,211,49,71,13,15,229,8,107,34,4,111,34,65,175,200,126,141,132,168,46,66,28,109,213,161,218,14,35,27,202,110,17,122,69,249,76,16,18,193,88,149,75,225,246,193,92,145,55,165,9,138,98,111,157,238,169,248,152,139,98,8,55,176,0,13,59,1,55,103,22,94,97,208,201,213,3,226,165,26,106,90,73,46,211,101,54,234,152,107,129,231,215,97,21,88,101,1,58,70,161,99,39,106,137,171,78,60,111,164,248,70,214,191,197,31,17,19,101,213,65,202,33,156,203,196,22,172,10,250,204,199,53,236,94,175,67,41,10,147,137,100,168,116,3,51,162,43,172,106,201,100,6,52,199,78,33,192,47,208,227,129,197,14,25,70,16,88,195,89,75,97,11,156,189,177,178,154,124,148,18,33,163,192,44,100,69,142,198,2,10,166,53,88,171,84,207,120,2,70,118,156,76,134,227,25,140,87,176,186,45,48,134,81,125,34,152,34,41,107,32,120,144,156,71,48,230,138,209,228,12,108,84,67,250,19,111,72,149,57,112,115,46,30,97,108,20,205,41,66,110,88,87,109,77,41,115,11,12,192,68,83,29,22,205,102,64,29,84,35,171,255,158,188,150,223,202,217,175,27,12,89,229,218,90,217,176,10,144,170,104,245,193,91,203,28,23,143,226,222,234,23,13,175,99,68,140,72,139,201,156,180,93,167,250,135,198,102,220,14,17,94,67,252,148,198,98,238,34,145,204,77,127,197,137,230,76,60,129,36,9,117,71,202,158,102,244,8,240,80,149,220,85,17,222,104,203,27,157,122,163,121,239,245,243,89,63,212,107,145,26,101,83,195,75,242,42,44,11,83,53,244,0,73,144,100,216,176,22,238,104,250,210,82,112,16,168,147,41,60,57,136,141,244,245,78,21,162,126,63,182,152,222,48,152,8,98,255,166,193,63,84,117,4,178,65,222,139,236,139,55,43,191,48,206,180,168,50,119,178,131,178,129,139,112,247,10,127,111,225,158,168,50,45,105,224,170,38,191,168,215,138,2,14,172,113,104,169,122,60,186,145,185,255,22,251,95,84,60,117,170,169,164,189,186,165,229,98,54,179,101,69,3,179,186,202,210,50,41,0,227,198,107,3,212,226,249,83,77,200,14,108,113,204,143,165,232,137,70,173,177,205,78,50,193,252,86,118,152,217,139,170,127,235,148,116,51,39,157,199,204,81,230,199,175,77,188,160,144,178,41,4,233,47,215,93,81,176,97,92,59,246,240,137,28,68,171,165,170,202,172,202,104,52,220,8,95,62,220,145,153,141,86,195,166,184,159,18,234,105,80,53,121,139,113,89,252,105,206,229,170,4,8,172,243,113,224,28,159,54,107,80,176,155,165,78,38,88,32,176,209,55,103,229,104,26,182,39,240,70,13,239,20,153,171,78,163,8,213,118,167,12,202,114,76,35,236,116,70,173,198,242,197,74,163,78,173,20,21,79,157,208,4,211,80,101,172,123,6,188,99,212,89,61,216,41,16,131,134,113,77,13,153,186,16,186,21,20,136,81,202,232,4,145,86,84,137,90,70,86,67,118,130,10,172,148,98,254,100,102,21,94,112,186,18,74,103,57,123,168,73,120,172,71,66,104,9,165,210,48,239,3,14,58,77,9,180,173,96,98,21,87,26,59,36,169,254,170,34,13,54,180,168,240,228,170,199,224,41,8,119,65,182,167,141,170,92,58,229,225,182,88,6,55,101,216,33,54,53,62,117,240,122,43,172,115,102,174,147,42,17,99,175,21,8,93,219,84,205,169,213,160,137,129,19,97,13,125,49,115,116,163,163,172,124,243,234,49,156,1,58,27,106,163,30,113,85,221,216,104,37,27,19,111,188,126,231,121,68,43,188,16,25,19,123,33,120,225,139,237,71,109,212,69,48,69,157,169,79,117,121,116,39,169,250,102,232,66,64,167,12,115,102,255,147,198,69,165,184,176,196,124,158,193,255,165,115,141,176,52,164,153,75,110,124,139,170,255,81,246,80,154,202,246,92,234,218,53,159,51,71,72,76,43,161,168,221,102,32,43,121,173,134,42,148,79,80,78,203,65,182,60,51,160,199,49,236,204,98,66,164,136,212,117,181,76,1,101,69,183,196,163,203,113,57,95,172,114,142,225,84,152,102,77,189,148,109,219,19,73,129,56,4,213,20,113,147,150,147,149,184,210,206,203,173,113,22,43,206,44,197,221,5,168,139,100,105,224,33,18,210,1,83,36,224,42,15,231,21,110,195,125,238,202,139,61,133,31,74,129,14,196,197,206,80,8,247,207,182,238,57,213,54,102,82,129,68,1,113,77,140,92,17,55,173,79,174,53,143,253,164,218,17,161,116,109,86,98,180,154,14,155,215,68,215,65,4,193,238,64,228,10,233,12,10,131,20,153,53,230,230,10,183,199,252,32,197,176,77,72,182,100,175,236,3,94,72,64,166,18,60,3,115,185,145,146,100,195,209,73,213,70,195,90,2,216,12,188,14,253,64,121,198,110,9,137,131,126,96,26,44,122,195,67,213,232,55,138,255,120,123,152,49,26,139,196,12,53,164,139,145,250,108,197,32,209,153,45,90,235,6,223,17,132,164,241,34,104,228,161,36,51,37,161,202,176,69,112,122,45,170,172,162,38,170,154,164,172,109,42,30,13,177,191,164,52,83,100,220,202,140,153,83,77,234,199,168,160,92,83,99,54,202,206,78,39,218,105,78,139,40,130,232,214,196,247,5,241,165,242,138,149,163,108,248,206,200,157,246,252,171,51,105,196,226,176,88,7,113,130,51,17,242,28,195,206,222,121,216,32,67,119,176,106,76,151,30,203,1,78,78,186,189,33,164,105,170,70,149,206,242,178,238,75,72,134,168,198,92,213,56,6,133,209,65,41,173,246,217,108,38,88,113,226,184,195,215,131,109,9,141,201,97,213,46,113,203,168,211,88,126,26,251,80,99,69,130,48,58,53,238,114,33,247,156,38,39,91,190,19,251,240,204,166,220,157,94,175,191,162,20,239,53,231,89,187,190,170,129,191,225,235,80,253,33,58,159,137,21,191,138,40,129,185,215,240,138,34,191,55,53,36,123,68,49,89,180,154,143,76,113,35,89,238,200,54,147,245,85,218,207,253,131,60,84,5,64,18,18,91,33,146,165,204,85,81,116,93,130,186,97,194,168,86,14,234,157,116,93,32,245,162,161,95,50,131,157,81,161,177,22,80,166,127,118,213,160,13,210,241,10,45,73,239,76,254,157,49,130,123,1,146,21,117,146,89,99,89,116,154,141,222,179,224,232,138,200,27,93,70,148,215,73,158,95,19,249,51,80,228,133,233,44,84,149,244,55,236,129,13,229,206,10,19,45,31,196,229,16,27,118,249,6,87,29,184,239,198,28,20,237,69,43,70,165,110,181,123,168,104,252,69,170,83,9,141,79,182,131,186,13,201,138,132,236,97,33,35,90,21,245,170,64,216,202,141,157,128,217,9,162,72,185,103,182,0,110,99,185,214,230,130,147,135,152,126,152,44,88,173,52,14,136,40,231,41,247,199,34,59,56,81,54,134,27,187,74,202,109,119,75,207,19,36,134,18,74,78,178,146,46,119,101,34,170,228,30,5,252,94,5,192,74,2,82,96,65,147,208,169,26,146,54,98,85,103,81,103,178,155,239,186,46,205,242,245,171,28,38,65,96,82,68,37,137,115,220,94,86,74,193,52,234,130,94,171,208,105,31,170,150,162,3,241,186,206,61,52,52,48,163,45,185,218,32,235,143,176,127,148,121,185,17,64,150,195,204,76,155,236,238,115,118,41,119,112,155,113,103,60,59,202,217,144,67,29,184,25,203,238,78,188,117,154,84,106,114,140,161,42,143,21,154,216,105,110,218,5,43,183,171,125,234,250,173,107,74,77,243,74,44,230,193,147,52,185,34,24,31,192,52,3,36,201,48,132,217,214,215,93,255,155,248,128,46,182,178,9,192,44,65,154,113,170,0,219,55,2,150,184,105,93,58,225,121,231,139,201,74,121,222,156,237,117,101,123,213,33,55,243,210,206,94,55,201,105,37,154,213,106,214,180,91,248,0,214,28,79,169,137,119,233,136,26,82,149,69,136,44,188,68,209,76,187,252,65,193,179,202,167,97,230,132,135,84,82,47,61,150,169,111,166,187,223,176,121,91,183,123,191,198,161,214,192,135,86,104,76,179,146,166,238,230,228,186,33,171,247,126,235,156,228,106,8,91,27,67,192,87,147,118,81,206,122,98,160,54,15,112,38,81,89,57,159,66,104,251,40,219,26,136,155,98,117,99,52,239,13,156,157,49,123,197,254,13,137,232,232,72,195,160,84,46,134,6,175,54,29,81,194,9,183,119,90,1,183,22,148,43,196,55,27,163,238,157,21,113,60,130,31,9,246,157,220,79,106,129,53,221,65,227,167,218,57,179,6,77,79,171,11,114,85,81,179,171,37,4,65,147,78,11,1,18,137,161,45,68,87,84,103,157,126,173,168,224,146,146,46,184,20,180,46,7,238,145,176,46,187,23,249,158,221,22,59,199,198,170,33,105,148,13,141,66,162,24,142,139,105,153,103,229,206,210,4,189,191,10,251,179,4,127,151,85,175,24,83,141,83,205,65,51,58,208,137,72,63,206,124,114,184,189,118,90,182,145,172,201,129,243,189,220,151,93,14,119,141,217,229,80,113,138,18,154,152,49,52,100,52,209,198,87,152,211,4,51,241,204,105,242,42,114,154,204,20,96,94,9,215,92,116,140,73,101,31,27,32,103,117,75,213,115,81,133,213,107,226,90,25,107,24,93,230,185,94,7,77,203,223,210,141,161,219,0,218,152,238,38,254,115,122,45,186,12,61,115,54,205,236,13,197,171,115,150,179,49,203,24,244,95,100,156,68,21,95,248,97,81,7,110,231,53,189,55,161,82,65,63,93,58,37,100,17,226,108,74,251,215,136,121,158,233,220,95,83,58,119,43,243,120,71,62,119,36,105,67,159,158,173,93,171,150,20,125,254,243,57,254,121,182,126,177,214,79,71,109,192,24,69,106,115,64,181,135,223,176,176,131,8,95,95,228,198,144,124,62,255,141,251,82,22,104,45,55,70,55,63,201,157,219,226,29,191,96,200,191,186,138,198,115,43,63,73,216,147,132,61,91,95,109,53,29,11,223,220,63,92,191,81,223,127,200,43,15,215,115,139,238,126,176,194,75,112,221,89,64,230,41,68,127,26,33,218,169,1,44,207,82,254,136,113,212,243,136,47,113,4,255,187,176,165,207,35,30,229,8,65,174,55,215,246,121,196,243,136,47,118,196,39,83,148,28,63,149,12,253,209,21,48,63,74,67,35,126,179,191,233,157,183,176,211,252,150,67,254,82,186,161,211,151,210,13,153,225,253,133,64,151,65,81,185,49,214,254,147,220,25,101,86,62,191,30,238,83,221,248,215,106,195,52,28,82,140,170,203,155,56,118,72,40,192,41,226,54,63,78,4,232,59,142,19,203,243,237,227,196,71,70,14,190,125,156,154,126,63,124,156,152,133,31,251,56,45,88,30,142,219,11,19,100,242,23,4,45,245,100,139,199,9,1,114,154,212,28,34,138,94,241,130,27,185,85,237,56,177,241,63,143,251,93,31,39,254,93,9,92,132,87,49,201,92,15,19,239,174,116,152,68,128,75,237,105,57,108,249,41,65,77,233,48,4,134,217,97,146,40,235,195,135,73,217,217,223,211,97,130,210,62,124,152,96,180,15,31,38,111,55,15,147,85,255,240,97,226,126,249,225,195,196,93,242,119,122,216,175,215,245,78,223,92,241,151,125,217,138,188,17,29,117,189,158,78,135,253,102,188,109,78,26,178,255,205,102,55,170,4,111,175,231,221,233,168,77,75,108,122,110,235,78,181,16,20,73,72,254,242,71,126,57,93,206,231,195,97,75,35,63,92,118,215,241,243,188,191,236,46,219,57,246,218,218,157,78,197,166,205,152,240,146,71,63,150,242,114,58,159,206,199,243,28,211,102,140,240,56,50,128,94,109,68,181,169,61,83,252,254,36,117,249,171,92,244,25,44,247,74,55,251,64,159,15,102,175,120,44,20,125,217,29,7,200,157,118,23,223,132,219,203,113,108,193,253,230,122,60,111,246,19,102,155,214,238,116,36,15,149,24,153,151,15,178,199,195,254,124,218,237,54,52,164,205,117,132,69,92,121,72,11,208,150,198,246,108,91,122,201,135,251,88,96,139,204,27,154,64,244,217,245,223,20,230,142,187,203,101,115,57,94,247,72,47,186,64,215,233,112,222,109,79,231,235,32,1,4,115,169,181,59,253,129,96,238,85,163,155,106,144,23,109,231,82,109,235,1,24,155,195,97,127,218,236,143,67,255,111,104,242,120,60,31,143,167,237,113,183,31,88,208,64,182,52,118,39,107,14,141,145,195,250,1,6,190,31,122,210,253,110,27,224,117,187,63,12,110,229,120,60,248,94,45,109,237,185,26,12,40,105,220,95,254,70,61,110,14,167,253,216,130,91,27,208,240,85,221,93,78,215,203,216,148,60,242,218,218,156,109,213,227,37,100,240,9,238,47,151,133,63,158,119,103,22,200,54,131,77,191,158,54,167,235,126,111,4,71,120,248,210,218,156,173,137,251,70,1,208,39,106,254,92,178,135,5,181,141,212,70,15,0,109,167,235,8,243,218,29,78,27,130,172,243,101,63,154,73,132,204,13,205,105,40,46,179,132,242,189,252,65,239,78,35,120,57,140,121,59,232,196,118,252,225,152,54,55,212,179,80,100,64,226,173,95,62,45,57,15,30,118,127,188,236,7,110,244,81,87,12,210,52,117,231,106,174,46,169,87,247,132,241,151,73,70,118,3,118,55,35,122,124,42,241,198,32,199,170,14,225,229,178,247,149,92,105,236,206,159,137,217,30,205,99,248,129,80,242,35,58,150,47,57,225,119,135,161,77,60,238,15,3,107,78,14,116,224,139,237,241,188,221,28,14,132,70,143,215,237,102,168,113,206,172,238,185,156,54,199,203,56,236,224,88,7,137,98,36,193,253,195,233,30,45,179,246,35,160,137,211,105,119,190,108,206,167,173,137,9,138,28,175,215,195,249,184,185,158,93,65,220,54,118,231,123,77,143,23,191,118,66,219,54,131,170,159,55,199,49,62,87,124,12,18,184,187,238,24,249,175,52,118,231,35,171,249,146,153,240,133,111,220,145,11,98,183,63,95,46,67,157,181,61,16,95,176,223,12,98,48,134,52,134,75,202,176,221,229,48,50,191,156,130,164,117,188,156,199,238,221,110,206,7,219,226,51,149,226,146,134,241,185,252,15,185,253,175,99,69,55,105,247,215,182,238,108,173,95,250,68,217,159,173,235,150,74,120,120,138,60,128,73,250,58,116,201,135,227,133,185,207,33,84,109,182,251,169,165,90,224,47,53,181,103,90,37,170,199,24,248,200,85,115,60,76,92,58,144,201,48,192,30,167,249,96,65,57,161,161,61,229,97,70,123,217,45,166,245,237,198,53,119,131,106,236,15,131,166,236,130,113,33,181,181,103,106,233,136,231,18,191,184,157,124,185,30,118,67,47,224,164,112,217,181,219,65,16,142,78,34,176,151,83,107,119,250,227,236,230,7,64,192,191,48,52,82,90,191,171,145,140,122,224,236,205,219,111,199,13,55,56,110,243,135,253,184,226,72,196,181,31,151,255,211,143,255,243,253,15,111,151,214,175,248,111,125,142,131,254,184,52,140,187,140,3,227,233,127,126,243,254,251,111,190,123,251,238,221,79,95,201,215,49,115,127,127,247,207,175,150,227,255,109,188,206,114,226,110,116,111,148,22,210,27,201,48,255,244,227,251,239,127,248,249,155,159,222,189,123,255,205,63,222,189,127,247,239,63,254,253,47,239,223,253,75,111,254,71,28,41,135,252,252,237,251,255,124,251,238,175,111,222,254,215,155,159,126,120,51,102,248,171,241,151,44,212,127,255,248,94,191,202,88,55,91,57,109,252,226,105,124,1,249,150,98,128,209,243,215,243,215,111,246,235,211,133,169,125,169,8,166,203,167,74,36,244,171,115,204,188,156,165,117,23,105,141,165,229,95,49,51,198,163,252,50,221,146,254,138,241,51,30,37,243,106,126,253,122,191,118,164,212,222,74,226,237,199,98,194,102,214,208,71,240,227,25,78,199,135,235,102,184,108,144,118,101,136,64,155,195,110,183,63,237,217,67,185,182,182,231,91,161,155,135,24,253,121,72,125,151,203,249,116,61,186,183,231,24,200,80,253,111,55,236,205,83,27,219,179,173,240,207,99,248,180,12,143,156,205,229,26,92,148,54,99,61,143,167,115,148,133,106,99,123,246,112,186,92,108,119,243,161,59,97,49,91,219,99,212,137,121,88,144,24,178,114,118,121,169,173,183,129,226,33,208,193,254,50,92,76,217,28,251,49,184,32,156,252,48,136,224,229,227,239,15,201,208,198,233,125,161,36,225,163,8,4,108,13,179,218,11,42,198,160,218,172,85,167,139,127,162,120,159,21,251,155,231,170,151,152,165,18,247,175,86,12,196,91,150,242,19,233,228,89,171,38,84,174,153,250,145,216,47,59,159,123,142,59,88,157,9,20,145,152,29,136,255,166,243,237,4,123,29,151,51,238,204,6,142,158,133,108,224,222,70,9,193,113,235,144,17,92,218,94,95,74,240,11,210,46,60,83,130,191,138,98,4,179,28,221,168,101,72,251,93,232,15,138,115,105,69,82,171,240,226,101,99,80,75,148,106,52,207,202,182,168,120,132,90,40,40,253,178,132,23,230,162,44,203,237,197,2,128,162,69,163,144,201,172,164,57,107,227,161,14,151,41,144,245,231,114,136,213,179,65,19,250,107,181,32,101,73,181,83,179,44,35,234,241,161,46,142,23,182,71,233,230,229,148,89,254,26,231,35,23,161,151,46,69,173,121,47,104,36,14,83,75,111,172,210,202,226,211,42,149,248,189,152,190,36,10,154,197,98,80,111,127,244,130,42,240,75,3,29,161,7,204,223,50,149,84,98,16,23,5,62,19,172,168,199,104,201,62,173,56,183,140,223,78,208,85,163,90,128,168,42,132,149,151,22,170,201,175,85,104,205,7,112,153,34,185,160,21,201,193,133,249,183,92,203,139,42,105,129,80,44,48,90,228,122,84,234,20,85,130,80,10,148,33,99,156,167,33,55,40,233,48,92,187,83,73,37,171,250,10,216,82,240,93,28,192,188,2,219,248,233,253,177,90,172,52,37,163,77,242,28,120,23,71,3,230,164,158,70,165,223,0,8,94,12,40,109,35,121,73,77,139,249,214,21,255,137,39,173,93,187,233,1,86,113,41,152,202,93,144,188,14,92,104,30,160,105,37,244,173,230,143,174,36,205,13,42,175,226,240,110,68,40,140,215,77,97,152,234,110,53,226,122,113,177,170,101,191,167,90,186,99,51,83,191,0,117,92,170,92,119,236,82,124,223,241,149,205,134,149,228,11,221,68,145,57,6,163,22,210,34,48,174,64,44,252,98,245,88,43,76,167,45,94,202,77,247,49,14,178,123,209,132,196,206,8,173,241,221,85,118,30,237,202,186,109,137,223,91,174,78,104,101,204,208,220,85,134,189,181,166,22,174,206,85,202,176,89,125,88,115,127,251,82,83,31,69,35,87,241,9,163,156,130,145,42,194,194,16,80,118,116,116,95,79,4,174,6,246,152,247,212,226,203,203,186,251,13,117,84,58,171,74,17,236,18,152,9,234,226,210,231,140,153,3,234,214,132,59,242,159,226,5,236,20,42,231,104,27,142,176,145,237,19,47,75,199,55,17,82,162,94,181,2,0,103,175,137,123,127,73,45,176,100,84,81,107,182,113,77,45,165,130,177,164,150,64,229,43,228,98,159,37,181,94,21,23,171,117,248,102,113,41,174,37,237,53,241,220,111,113,162,52,132,204,105,125,110,85,84,104,165,120,232,89,180,94,222,36,25,40,247,7,12,166,101,122,245,24,56,75,122,137,64,171,242,236,165,181,192,207,90,101,191,89,140,220,139,103,65,189,179,72,210,22,109,76,163,146,195,46,210,107,205,168,166,239,31,131,75,80,38,48,224,18,45,244,156,11,100,217,113,92,33,107,180,69,76,242,69,22,26,179,75,229,78,141,79,116,110,208,203,155,90,85,120,41,92,102,76,7,215,23,181,10,193,94,31,220,65,72,137,226,172,164,58,32,138,11,61,106,237,74,187,143,235,71,188,66,234,108,152,156,145,113,40,74,135,237,116,93,130,196,98,40,124,120,33,116,56,208,160,30,164,182,44,160,71,229,196,117,86,22,247,222,9,146,24,7,28,86,37,140,91,127,225,15,43,220,111,64,108,245,250,151,38,174,223,191,64,175,247,111,54,213,66,230,196,227,249,37,156,126,66,34,84,118,19,45,4,242,118,45,148,123,165,38,174,218,142,218,175,144,49,185,26,185,53,121,139,21,140,207,151,10,37,249,5,188,152,237,212,121,137,149,218,211,100,171,251,187,78,43,183,145,179,147,177,144,180,42,104,210,213,242,157,143,239,202,228,129,235,164,30,162,255,60,140,176,17,148,131,132,218,108,50,117,184,90,104,209,85,178,178,123,212,4,161,153,206,179,154,162,122,109,28,52,155,12,189,122,217,84,111,177,129,98,195,40,187,73,0,138,30,221,70,104,161,198,113,222,244,205,132,240,164,181,115,74,115,190,190,48,101,249,112,41,166,43,6,213,5,94,82,27,174,69,18,90,1,189,6,62,59,32,46,144,222,236,135,186,107,234,214,170,219,175,219,164,237,102,238,55,61,227,134,22,125,68,12,131,59,18,26,42,88,42,224,176,21,44,151,17,97,70,149,90,132,146,22,13,165,114,195,226,83,125,76,244,92,201,185,212,175,180,221,64,103,4,32,20,182,94,102,84,234,29,161,96,114,133,220,22,31,84,180,81,145,75,139,129,42,154,234,81,89,2,186,14,54,27,24,206,128,30,251,222,163,152,178,195,91,36,144,16,69,131,77,58,148,211,224,165,6,123,85,20,151,81,204,136,102,17,209,86,190,247,21,255,25,128,178,164,95,104,116,164,225,145,198,43,244,161,96,252,236,19,88,189,145,68,102,242,145,86,207,91,161,140,23,74,79,208,57,195,110,106,97,154,251,172,146,186,232,9,165,79,161,112,106,30,38,245,3,170,162,165,250,184,39,81,24,189,50,28,106,42,94,178,59,58,235,132,142,82,215,187,161,209,29,117,49,52,123,163,106,122,188,226,43,119,179,236,86,84,176,215,144,65,93,2,129,111,205,95,54,85,180,19,195,104,63,17,243,97,45,180,159,235,126,15,232,160,96,12,153,27,85,62,200,221,175,189,62,47,116,83,47,162,140,251,84,3,193,110,13,13,14,102,21,58,11,221,43,80,91,204,126,96,187,15,77,135,51,174,114,23,85,89,216,142,193,21,251,209,135,9,42,211,23,122,45,167,136,162,68,51,201,114,9,253,187,36,12,12,57,72,24,222,70,34,6,198,24,68,140,101,148,175,80,87,209,215,234,123,234,42,126,159,245,131,100,123,61,157,194,191,156,219,242,165,47,122,141,157,245,91,186,45,183,197,0,126,193,141,95,132,219,242,253,14,199,247,59,242,198,66,43,158,218,252,55,253,245,90,139,3,130,213,120,128,52,105,35,157,196,245,56,242,245,80,4,233,117,248,9,94,70,62,56,142,96,110,218,242,169,176,35,14,131,217,3,68,89,110,54,195,69,244,180,115,183,199,133,77,93,18,185,108,70,30,60,206,87,217,54,54,231,131,13,127,132,148,62,199,227,126,231,14,208,139,246,230,186,59,140,17,94,119,156,205,185,109,76,231,14,91,43,120,240,23,63,232,209,233,241,188,112,138,230,33,223,13,127,216,203,54,164,191,107,154,154,115,143,34,205,137,24,250,92,238,23,186,193,15,219,227,134,147,181,127,220,246,14,103,207,205,253,8,126,242,35,63,208,72,95,25,115,149,125,12,78,79,103,75,41,182,199,203,36,244,242,104,240,11,54,240,138,14,3,106,25,82,116,179,250,222,155,92,139,233,109,164,116,87,5,222,194,5,204,38,100,194,55,61,230,60,111,148,79,46,38,229,179,107,99,96,90,59,79,31,72,209,160,13,151,201,164,192,33,143,195,105,141,35,157,101,136,145,87,77,144,222,150,91,224,132,77,38,24,85,64,78,187,39,171,236,112,95,85,195,177,253,25,218,83,152,30,194,132,210,20,223,171,171,107,123,229,182,115,40,181,242,239,116,138,106,17,145,99,27,134,83,202,186,13,165,171,187,97,98,36,228,113,165,22,8,242,81,197,148,14,26,8,210,225,63,204,242,25,175,176,36,123,116,151,33,158,144,65,75,8,154,208,196,170,69,232,78,167,67,152,14,103,109,102,201,238,67,46,108,105,113,202,234,209,210,134,101,175,144,161,138,94,43,78,9,133,52,58,237,170,227,52,127,80,233,194,180,237,198,35,243,167,82,69,184,158,19,174,175,126,140,58,62,120,189,17,112,227,122,80,64,154,155,154,230,253,240,201,86,35,2,25,222,231,191,182,101,113,1,210,139,198,123,74,171,212,84,27,41,56,228,125,85,1,94,6,190,252,79,247,86,141,245,112,96,140,250,108,248,133,170,77,4,187,157,122,22,48,2,60,117,101,151,3,170,128,16,160,192,149,239,230,120,48,127,18,26,83,96,102,195,118,3,118,5,56,3,4,3,170,48,145,130,149,224,77,232,86,84,0,29,187,60,216,90,76,60,24,230,185,95,139,178,92,101,65,205,203,206,81,0,126,59,112,45,151,87,111,27,93,144,236,50,224,221,14,144,217,3,111,92,103,217,73,130,62,150,155,156,216,3,143,65,163,224,32,69,65,115,152,14,244,121,59,148,30,53,125,166,81,229,1,211,92,244,147,69,179,89,54,79,221,91,105,243,213,21,236,22,185,1,4,7,150,30,150,18,182,44,24,53,32,221,138,147,3,202,38,146,135,43,20,164,31,105,66,33,27,226,149,41,62,243,98,188,186,48,2,184,215,55,170,186,70,161,137,236,22,186,175,131,217,98,105,122,125,102,139,43,110,249,52,91,188,146,64,33,229,150,217,115,68,44,144,103,54,52,42,175,75,254,213,240,100,68,68,17,57,197,13,26,26,156,42,151,235,76,127,73,226,150,103,131,123,24,152,71,137,95,210,221,46,245,43,152,167,140,143,17,248,48,209,47,156,4,112,165,241,203,113,29,24,54,208,112,245,238,43,62,21,52,25,60,59,206,41,239,196,94,188,110,142,87,185,117,34,72,53,70,27,73,151,155,15,103,194,66,212,136,204,129,177,51,102,5,126,29,139,64,57,127,156,221,52,60,91,220,191,222,90,148,18,43,81,34,148,172,33,71,225,23,225,119,48,58,246,159,10,54,96,12,140,133,37,42,51,233,22,121,18,146,45,155,93,138,220,33,223,124,85,6,187,68,110,74,244,191,82,1,184,118,250,255,147,27,159,45,108,250,215,121,54,94,91,67,118,10,83,215,137,19,234,29,28,201,231,164,158,147,191,214,133,11,16,12,198,153,217,21,242,162,32,64,184,219,151,35,3,185,201,20,253,101,215,238,156,250,22,122,94,6,198,35,47,211,18,103,141,125,157,48,181,205,220,199,197,137,235,53,99,103,108,28,10,87,214,101,102,133,209,146,46,65,96,150,80,87,183,127,105,143,87,28,80,80,68,64,32,1,189,84,12,20,36,143,202,163,18,222,82,150,203,81,154,254,78,171,21,88,69,222,226,5,3,4,252,80,81,8,208,122,222,130,117,155,134,173,92,118,122,192,3,228,223,229,13,112,190,4,134,47,119,37,124,89,222,35,200,151,249,72,49,145,144,165,16,41,52,57,200,139,105,1,52,74,148,181,0,136,27,101,204,78,248,208,221,105,180,239,139,234,40,203,106,85,69,144,160,49,0,108,3,208,29,192,183,40,109,21,37,18,202,92,65,171,121,1,202,18,149,69,76,200,62,81,2,38,20,29,29,97,58,211,211,162,2,203,97,117,133,211,23,90,186,0,192,249,23,4,58,152,119,209,109,110,126,0,67,230,230,5,62,94,33,59,255,140,251,127,101,236,188,112,221,139,49,56,248,187,14,62,220,227,120,103,211,76,120,78,209,182,236,67,127,49,82,128,24,230,73,239,205,255,219,154,128,211,232,26,138,113,77,167,110,63,136,103,149,22,34,147,240,113,118,170,6,116,55,188,76,61,40,83,209,53,41,11,102,87,157,217,137,115,160,52,71,163,17,4,148,2,214,97,42,100,105,15,136,112,203,252,80,139,69,114,17,51,100,85,19,16,167,164,170,11,203,156,50,185,2,120,226,154,183,57,121,191,90,147,10,10,211,41,153,172,4,28,254,6,71,222,121,93,184,246,58,89,242,236,13,55,251,108,77,6,37,232,196,114,161,136,184,173,42,4,105,248,67,120,194,204,243,48,67,237,205,194,194,139,132,64,45,242,229,69,98,8,154,53,139,156,83,251,54,105,220,151,22,214,143,150,166,116,150,121,193,19,245,70,168,184,251,174,195,189,220,24,31,237,11,121,104,135,121,152,249,48,74,139,51,96,1,120,196,87,202,104,230,156,43,141,38,67,68,62,73,38,186,154,26,73,78,75,11,144,81,251,47,173,90,96,243,151,107,209,28,34,136,90,175,165,13,122,41,255,13,175,96,27,11,120,89,159,27,152,27,198,221,3,28,40,191,108,32,136,174,144,165,201,32,22,31,147,131,48,223,107,189,225,76,23,21,101,25,183,160,88,152,139,115,40,8,195,119,40,4,58,240,64,154,56,211,200,66,36,127,146,25,200,22,212,177,132,106,120,9,32,125,117,56,0,145,129,221,156,223,185,5,253,165,180,1,174,195,12,97,127,243,78,211,6,72,45,232,28,199,0,198,99,148,53,231,96,11,93,149,73,232,112,23,149,216,32,213,248,159,65,110,177,191,73,228,199,18,199,104,11,66,188,234,72,239,112,164,185,166,72,67,4,157,112,72,41,192,27,208,68,22,239,63,100,214,156,23,70,147,74,76,111,119,87,206,44,227,83,168,4,13,128,112,102,232,159,86,92,96,192,108,110,238,183,191,108,120,138,91,64,147,106,178,168,201,54,51,54,160,71,209,96,249,201,178,75,9,36,160,54,139,209,141,22,239,75,54,68,168,158,8,204,144,255,134,48,26,226,9,12,116,8,231,47,82,1,37,168,200,209,36,163,207,72,106,30,218,12,189,210,169,60,55,164,210,58,232,187,244,183,134,61,181,243,215,224,241,140,236,59,146,80,8,71,67,93,42,9,106,232,84,37,102,45,197,171,100,49,83,206,68,90,27,234,107,33,66,20,210,211,64,66,130,149,22,158,26,176,139,147,43,24,237,44,140,201,230,182,190,72,47,20,216,22,109,106,200,85,165,105,149,130,249,105,129,20,6,50,25,8,104,67,96,59,26,92,232,116,71,202,43,193,159,140,34,155,244,193,151,5,43,127,110,178,149,97,156,35,231,129,61,115,155,156,82,126,103,74,67,136,151,77,175,129,105,154,112,69,132,200,226,56,123,173,66,63,54,163,38,48,145,149,195,6,32,235,246,84,204,185,242,1,152,141,186,169,64,234,211,27,111,168,91,115,218,166,13,190,220,160,77,185,187,96,170,28,122,119,248,18,166,220,54,206,24,8,248,208,118,192,214,161,65,218,190,100,36,173,16,17,22,25,89,181,188,107,179,167,119,170,68,27,153,166,50,253,85,50,48,175,30,196,243,173,9,20,69,232,176,134,116,136,111,139,213,13,71,169,195,10,32,37,72,171,160,216,192,107,7,213,45,236,55,59,36,73,64,23,117,162,208,48,201,62,204,173,155,193,102,190,234,164,242,105,122,161,50,167,235,178,94,187,16,247,90,90,90,65,11,100,216,250,55,139,220,27,2,155,228,112,146,153,217,66,52,197,116,116,20,57,56,155,114,144,164,115,202,236,78,54,57,149,169,101,79,33,188,22,247,170,242,183,133,47,115,120,117,106,35,173,54,98,223,217,116,101,77,180,243,172,52,86,105,41,68,39,166,91,200,60,74,195,200,84,118,167,82,194,134,92,38,162,218,8,189,73,44,94,17,158,211,202,83,36,39,101,31,104,224,133,128,67,81,42,66,233,165,163,64,100,224,177,244,255,144,45,3,27,129,130,248,189,101,206,131,117,205,151,2,240,229,25,243,58,16,44,80,74,93,213,190,91,254,153,86,236,105,37,163,34,59,85,241,10,75,154,27,204,247,140,210,203,147,132,136,60,57,6,12,110,127,165,141,66,192,57,91,108,231,232,248,41,8,222,26,252,0,146,99,136,38,234,232,17,130,95,182,74,221,80,121,203,217,217,238,191,104,70,16,178,106,83,191,32,89,117,167,123,30,10,18,1,66,151,220,253,136,112,68,69,35,238,217,57,239,179,6,48,72,81,25,207,202,154,31,186,14,238,174,210,89,65,89,138,171,5,53,251,85,230,41,164,255,32,31,0,66,231,190,22,101,253,167,213,210,251,238,146,118,94,235,85,120,137,23,156,11,95,49,157,182,112,6,133,153,21,36,55,36,173,104,76,0,146,175,50,131,200,115,19,231,73,180,156,68,62,201,235,231,49,50,14,195,128,116,101,30,16,147,123,154,213,116,29,59,91,201,195,216,22,20,11,107,130,96,39,48,182,114,37,247,131,187,70,153,90,116,64,137,180,84,121,213,1,223,91,156,180,21,157,75,210,201,24,3,237,183,213,9,241,164,137,126,8,211,180,149,91,123,82,157,153,4,34,153,50,41,59,139,53,56,55,20,209,98,74,44,80,240,168,169,125,220,215,53,105,116,26,173,143,1,81,105,225,21,179,174,231,22,186,114,209,65,153,250,141,220,224,177,94,31,188,44,225,138,48,99,150,23,148,26,84,78,36,45,171,236,91,231,20,235,4,234,217,42,7,200,105,82,236,103,205,80,156,131,0,140,94,7,66,82,168,100,161,36,153,212,20,90,100,87,157,226,23,221,87,229,189,8,182,112,164,152,51,81,229,193,44,192,85,17,15,123,211,5,26,93,67,103,162,171,246,183,40,136,131,10,185,106,152,185,219,208,146,102,137,206,18,158,57,252,5,189,90,167,120,115,181,92,200,82,193,14,23,164,215,11,106,63,202,71,74,62,230,96,165,224,144,218,200,143,89,196,108,196,208,48,178,153,209,62,49,2,147,49,175,124,251,26,107,239,72,190,161,182,149,36,207,220,66,156,68,134,84,176,196,94,221,34,184,149,38,23,178,237,57,16,189,165,176,55,204,252,208,124,128,132,175,176,37,36,2,85,57,105,85,150,98,214,101,149,29,206,23,246,147,110,204,46,178,86,83,234,28,223,33,80,111,103,38,233,3,188,6,209,177,194,218,242,61,156,159,11,220,113,198,251,145,46,36,164,215,224,243,76,121,64,40,8,177,54,191,146,6,139,144,172,157,157,220,169,113,10,17,191,200,251,192,206,123,131,209,105,184,154,202,50,133,75,131,117,40,252,145,71,195,208,30,46,188,79,203,153,52,122,241,78,128,45,114,238,170,48,204,157,143,93,133,74,83,249,13,86,122,101,86,168,242,27,13,83,210,48,46,116,101,196,194,5,150,106,174,36,251,208,37,174,165,18,237,74,216,11,237,47,220,65,103,196,106,76,95,181,169,88,204,58,14,47,205,77,225,20,125,216,173,44,145,36,129,180,125,123,106,238,44,100,22,70,162,44,161,43,64,241,73,200,84,87,228,136,228,112,69,130,197,218,22,248,128,186,166,81,234,220,208,253,16,86,79,56,60,11,167,180,241,26,187,99,6,150,53,100,196,12,64,195,165,118,6,76,191,151,231,99,83,173,221,190,207,161,215,137,223,149,134,181,210,105,32,141,149,122,86,10,171,168,44,185,164,249,212,55,88,191,168,60,18,218,175,104,182,34,226,194,14,39,134,217,200,111,244,203,38,240,203,11,92,213,19,97,14,13,46,194,41,57,221,32,122,236,74,16,145,241,248,127,203,174,233,142,60,104,193,78,214,243,73,165,71,230,221,117,247,62,86,194,177,150,77,153,92,147,85,231,77,103,165,17,178,35,79,126,109,93,14,200,104,33,43,116,153,19,200,204,66,133,138,2,54,21,178,50,127,87,121,192,142,219,169,28,81,163,69,100,85,99,171,139,228,105,244,184,3,246,165,96,111,139,198,25,35,251,106,4,87,14,114,243,232,188,64,212,207,51,5,111,184,85,160,179,247,103,143,128,228,50,144,61,10,146,195,65,246,72,0,18,162,124,120,138,45,220,160,204,243,1,149,97,196,230,5,223,23,122,80,54,104,17,122,211,142,78,172,91,85,43,52,36,188,144,249,196,8,84,142,163,114,37,152,134,160,58,210,157,237,132,201,212,232,196,137,145,50,233,182,126,169,168,161,90,134,173,97,235,86,148,99,204,88,86,230,179,50,168,188,116,210,40,46,10,219,243,178,131,246,125,242,207,198,229,7,224,72,233,194,97,151,157,6,69,115,206,38,251,196,210,70,158,14,42,186,26,43,74,153,193,109,150,108,99,114,158,202,198,23,165,241,202,184,225,188,17,85,123,237,10,213,133,108,150,187,194,68,133,155,6,182,86,116,110,193,55,135,244,118,97,230,239,204,169,155,173,224,208,93,32,156,90,145,129,156,100,62,166,8,1,32,239,249,229,84,44,142,214,206,243,45,20,173,227,65,169,80,149,14,65,39,81,156,149,90,244,86,16,96,227,154,151,245,55,85,195,147,84,64,157,35,0,245,178,197,202,197,121,143,209,52,31,238,210,108,52,254,20,251,80,36,42,140,100,21,249,81,70,131,234,164,150,116,158,89,41,26,58,160,92,97,198,234,141,43,90,114,86,139,231,104,61,28,45,50,35,136,65,231,187,58,206,100,78,137,249,154,142,239,97,190,104,133,117,74,172,85,230,189,18,167,116,21,208,149,244,6,219,21,38,185,172,103,113,215,236,28,58,147,199,103,114,9,45,144,217,192,110,4,26,234,131,219,140,216,113,171,174,89,241,39,100,151,195,27,46,137,189,59,163,187,58,102,87,200,2,130,220,185,155,89,162,239,138,55,81,20,16,194,77,70,83,205,122,11,55,248,20,112,146,195,199,63,127,56,128,103,109,246,29,167,124,101,100,237,56,99,5,82,63,164,229,240,48,57,152,254,177,186,20,252,231,25,104,60,79,10,226,158,66,10,118,231,184,201,59,142,88,95,85,134,68,71,25,70,64,92,10,132,221,12,24,13,242,176,111,199,161,125,210,184,35,237,66,0,3,153,149,23,80,95,197,156,249,88,85,4,246,134,120,81,43,158,194,6,40,109,11,241,224,202,225,92,56,62,81,249,168,5,232,231,82,143,146,96,83,178,144,85,84,138,108,172,163,17,95,184,42,201,182,82,229,62,57,154,76,17,203,41,45,132,117,215,151,170,173,129,156,115,147,158,195,42,114,16,56,3,153,35,233,154,114,155,57,2,58,234,38,80,220,128,98,207,17,60,195,58,129,76,16,56,14,157,28,90,157,151,178,189,231,204,239,60,132,20,184,10,205,65,20,53,5,126,76,78,143,112,215,208,144,34,238,1,9,164,7,245,108,37,228,54,101,58,253,84,195,130,194,43,105,119,210,93,204,65,44,52,37,165,237,108,160,120,117,170,38,1,207,96,154,54,183,68,51,72,70,249,64,71,145,66,64,131,127,54,52,129,20,174,9,46,21,60,35,229,183,226,178,77,238,252,4,16,160,162,24,86,215,201,234,101,224,60,242,105,135,103,32,215,208,160,72,165,233,239,90,19,155,161,77,235,51,0,7,186,140,106,93,230,127,203,150,213,142,160,169,182,192,183,154,183,122,242,157,179,211,116,232,225,218,222,20,122,119,127,204,111,3,211,21,240,87,55,71,82,60,148,125,25,118,97,191,81,249,222,174,122,36,168,53,1,151,118,80,232,116,89,154,149,9,106,103,177,206,116,179,28,117,205,242,194,134,197,95,7,141,184,52,219,171,132,249,246,62,114,5,225,162,66,6,85,25,32,237,145,170,105,20,189,3,226,173,6,1,215,244,32,246,221,40,55,151,51,173,123,47,238,205,176,119,215,182,119,65,0,25,73,68,44,18,177,76,65,66,17,71,173,160,177,130,234,42,62,172,56,179,195,172,1,253,38,212,28,241,246,26,110,47,232,191,16,136,230,166,5,194,219,125,208,108,150,154,213,176,96,236,66,66,3,153,237,168,48,17,233,21,50,158,8,125,97,5,2,236,138,164,44,173,26,64,113,91,196,98,181,169,53,196,56,80,148,122,165,4,28,86,99,16,153,229,82,120,173,213,207,55,101,68,138,34,83,230,200,180,67,146,36,61,216,213,56,105,215,108,233,51,9,76,109,68,78,176,69,250,93,79,255,136,178,165,26,11,219,187,130,243,150,143,83,210,220,160,222,62,117,143,123,207,218,48,115,87,173,104,35,99,149,128,114,184,115,114,95,21,240,100,250,182,43,17,4,216,31,33,123,67,199,16,23,106,28,105,118,71,211,43,201,143,76,65,101,27,18,95,209,49,30,10,249,216,247,182,219,82,55,201,49,99,134,219,144,174,127,118,93,251,54,235,69,169,166,128,145,172,5,233,196,89,186,55,56,35,21,183,36,120,37,134,69,20,132,211,255,112,198,140,241,212,211,173,219,206,53,253,47,35,12,147,176,54,87,168,118,196,133,209,210,24,238,13,63,232,73,25,124,176,231,64,92,7,14,98,92,231,171,233,82,219,113,130,132,10,40,1,142,26,74,43,42,39,137,69,146,174,157,120,235,223,89,3,200,202,239,114,13,32,20,191,8,202,144,70,23,242,42,115,111,244,21,73,158,185,55,158,21,128,158,21,128,126,131,10,64,162,80,255,18,21,128,36,65,233,179,2,208,179,2,208,75,168,62,0,249,226,186,16,255,151,95,49,98,123,24,229,30,70,150,170,253,241,106,53,79,182,187,243,238,188,63,30,175,199,243,198,43,228,108,46,251,227,229,124,58,156,14,86,29,98,112,218,163,20,206,245,184,185,238,206,103,43,153,2,102,240,186,200,30,47,126,244,167,227,232,250,118,119,216,80,197,151,193,146,157,78,219,205,118,115,62,236,188,48,210,246,116,30,83,49,74,193,108,230,156,72,197,140,221,102,123,58,109,182,86,96,5,54,255,235,224,62,95,126,85,156,81,238,230,114,58,236,142,231,89,243,101,63,10,161,28,247,215,125,172,148,51,2,150,207,99,168,251,75,168,22,50,154,82,205,24,136,6,139,9,226,165,15,254,178,44,218,24,249,126,248,177,96,145,7,91,127,189,142,202,39,231,195,118,36,170,194,102,88,196,198,253,249,180,25,171,62,234,194,248,68,93,143,215,81,1,42,156,111,126,39,146,231,238,17,22,255,176,223,95,246,231,139,213,185,249,232,213,31,90,76,199,26,22,163,190,248,131,60,194,182,223,142,76,230,92,231,105,217,245,135,227,249,56,106,2,81,81,176,177,233,119,231,203,101,115,113,228,56,166,98,84,61,219,210,182,89,188,122,116,211,15,193,242,97,17,254,101,148,3,26,24,222,225,254,35,240,189,142,126,76,198,147,80,255,94,211,26,66,101,52,8,27,87,78,249,122,235,181,7,212,190,108,42,90,56,137,13,171,181,104,56,6,59,64,121,101,212,57,104,234,231,84,113,107,78,212,174,199,189,34,24,78,174,169,158,203,211,229,100,38,69,22,157,139,0,159,56,140,217,185,103,57,75,43,39,192,107,109,42,165,212,169,4,234,97,114,13,187,212,44,197,184,48,92,240,60,37,247,24,151,198,221,33,173,162,41,242,231,196,140,220,183,164,136,83,63,181,165,54,115,76,85,59,230,83,157,214,229,168,107,40,118,162,45,65,97,135,217,215,232,2,75,10,175,39,203,89,2,201,164,178,67,146,25,91,4,244,1,133,149,230,80,236,44,36,75,201,87,190,87,25,87,231,89,141,133,87,42,95,34,36,66,135,73,246,131,209,16,13,25,212,160,86,34,133,4,83,185,1,92,204,55,52,102,38,30,195,129,111,161,90,100,16,37,207,9,141,110,204,156,205,65,152,37,204,91,152,75,120,154,202,186,169,15,100,179,69,210,50,214,101,14,80,208,64,73,132,162,6,204,2,24,22,32,141,64,28,161,188,221,8,113,13,111,103,238,188,75,101,105,251,52,232,44,71,35,112,16,41,45,199,18,23,173,165,180,125,105,215,29,44,36,5,141,132,128,32,115,153,112,143,12,160,49,182,35,155,35,163,95,14,166,43,152,64,205,106,22,210,221,133,32,39,51,30,114,138,5,179,240,113,222,109,59,142,188,53,173,42,90,24,0,26,224,62,111,54,199,56,92,50,88,239,68,207,45,10,149,143,91,127,237,80,92,126,25,87,92,125,189,119,88,252,165,233,213,169,172,135,56,249,84,89,191,34,190,202,34,14,40,8,104,38,30,66,74,36,11,194,117,91,176,237,123,143,161,78,65,11,92,73,138,243,49,186,15,137,165,63,52,135,116,193,67,20,98,152,250,133,80,92,77,102,68,17,20,218,192,209,12,138,28,39,49,6,101,154,206,53,64,61,41,233,107,108,129,135,17,89,99,45,180,2,19,3,199,23,78,238,98,5,124,83,79,180,179,66,203,36,250,105,190,117,81,113,60,209,221,66,52,43,213,38,175,242,127,137,16,64,74,178,0,165,233,63,109,127,167,252,2,24,179,147,29,220,43,4,221,113,135,97,101,47,243,16,103,171,155,207,58,225,211,206,105,12,58,44,170,126,137,25,192,70,25,68,157,122,204,194,98,224,74,116,37,40,122,5,65,112,28,218,238,46,63,116,3,144,170,56,172,59,195,89,242,158,104,182,77,221,91,117,150,203,66,240,74,33,90,207,137,39,223,180,223,51,113,44,237,88,115,194,157,50,91,205,140,70,96,95,205,196,118,23,205,214,171,5,146,13,88,142,52,27,67,9,68,123,153,141,87,72,180,159,53,30,94,149,50,228,10,207,50,200,44,168,205,128,15,247,42,81,95,124,243,210,87,225,144,138,26,227,24,69,75,228,221,111,101,33,56,159,40,10,192,132,54,235,5,53,176,30,218,100,221,153,111,118,182,89,212,129,43,59,84,124,89,170,182,96,92,97,124,172,0,162,68,12,232,228,116,155,195,69,168,197,147,149,114,58,97,194,115,158,150,152,43,68,89,42,228,233,197,84,46,226,33,158,190,0,32,215,84,124,26,254,77,75,143,232,40,206,67,13,114,101,177,169,118,87,86,162,4,23,34,72,232,158,243,220,87,131,230,7,177,206,234,59,29,83,110,67,206,55,82,25,66,90,145,120,93,69,122,214,161,65,28,71,57,165,185,166,203,169,208,28,232,202,163,129,151,80,155,160,100,48,122,129,101,133,222,66,72,41,10,140,64,195,128,38,212,40,153,211,110,218,40,42,81,107,144,114,114,24,87,239,35,78,60,173,245,141,24,196,85,93,99,203,167,249,153,49,209,26,90,102,1,69,158,54,196,90,76,185,129,136,22,75,185,133,98,134,156,111,0,9,120,41,218,147,140,84,30,169,55,83,2,27,95,20,43,45,112,210,83,3,122,143,159,52,13,79,104,65,199,56,51,61,131,130,152,227,77,125,105,123,69,87,135,182,238,84,99,205,21,193,178,81,13,116,173,178,68,133,183,0,34,93,11,157,4,93,169,141,50,244,5,123,221,54,96,72,74,107,252,47,229,153,207,77,233,76,185,218,92,108,71,131,86,163,153,18,150,35,228,41,68,109,163,92,13,173,200,2,142,169,220,73,188,60,2,207,109,43,19,46,176,24,242,146,141,145,221,21,161,53,36,223,99,219,228,211,189,47,28,230,123,59,222,19,9,96,196,173,152,243,208,40,74,33,207,109,164,56,91,244,232,148,240,69,28,132,67,176,191,242,222,33,165,34,142,154,218,62,59,200,208,181,174,187,171,161,20,220,185,133,59,40,160,37,234,64,185,224,182,207,29,82,240,141,25,0,72,171,57,250,4,173,167,180,160,170,204,98,18,199,255,182,19,21,83,140,3,64,21,61,160,16,18,136,215,85,27,45,48,48,120,88,137,121,212,19,26,67,162,31,159,242,105,101,128,14,116,5,31,54,56,147,198,41,204,17,124,67,1,128,184,155,38,38,231,251,155,250,120,198,40,64,233,75,45,86,186,201,67,237,71,147,98,8,46,65,136,232,19,170,28,135,108,228,52,43,177,83,138,88,42,6,88,67,18,19,53,198,147,112,25,199,65,192,253,138,219,189,65,53,131,68,140,172,74,29,121,214,134,235,232,166,128,210,159,138,246,143,38,247,234,7,39,131,170,253,190,91,21,126,40,200,10,128,220,182,100,246,138,178,234,171,41,129,169,50,246,94,168,54,2,87,102,66,60,177,223,209,4,195,245,46,45,139,148,39,186,90,218,52,247,60,3,85,96,211,10,43,215,241,123,45,91,8,42,55,103,206,124,254,185,142,167,194,94,106,194,81,142,147,237,150,220,47,204,40,87,201,176,205,194,232,60,77,132,85,0,178,203,221,226,218,34,115,215,177,127,76,106,42,7,105,117,27,217,67,221,46,16,146,158,133,184,26,220,199,162,6,17,242,10,218,94,244,74,28,50,221,209,193,142,92,66,213,69,149,83,38,133,224,82,45,113,150,40,41,40,211,46,163,64,148,70,197,72,18,95,253,6,153,98,106,70,1,34,96,127,57,167,159,251,242,243,88,186,10,57,85,113,55,147,64,133,180,36,214,16,110,102,8,15,221,97,29,226,204,60,69,217,76,44,204,96,174,103,152,36,153,182,142,127,176,98,27,156,43,198,24,8,176,187,94,247,12,6,55,27,170,130,146,66,154,195,190,197,105,76,182,5,214,190,0,160,38,211,145,74,204,174,139,248,73,220,152,114,0,116,188,78,26,18,160,3,233,38,38,246,156,45,52,57,41,47,173,237,60,66,131,90,28,40,28,130,202,40,174,229,131,136,136,38,72,184,17,61,0,77,51,51,166,45,190,97,148,63,139,45,40,52,64,43,76,163,2,239,100,28,79,178,137,15,238,193,150,72,13,193,49,180,81,23,218,83,105,24,240,15,162,68,229,9,245,218,156,250,39,222,239,206,114,6,45,159,34,11,12,52,44,236,206,12,173,145,145,204,58,27,147,208,123,145,17,111,201,85,120,136,105,32,118,192,100,47,226,7,26,254,163,50,41,13,39,67,96,25,248,38,50,14,87,177,177,112,82,29,187,213,48,101,22,90,164,172,201,58,127,71,147,43,211,237,9,46,156,85,132,28,232,8,141,0,4,240,146,83,228,142,38,219,180,115,230,154,168,160,209,1,160,135,57,60,42,149,225,77,134,156,252,250,158,227,99,142,207,52,8,100,99,201,195,17,184,71,28,146,35,90,8,255,33,153,234,152,93,18,29,72,83,51,19,72,16,69,118,54,171,97,87,58,106,222,16,253,142,55,104,88,8,71,88,19,33,120,19,73,122,69,248,107,68,68,117,37,226,168,250,14,213,118,24,217,80,118,139,208,43,202,103,130,144,8,198,170,96,10,247,16,102,25,189,41,77,80,148,123,235,116,79,205,199,92,20,67,184,129,5,104,216,9,132,179,177,244,10,139,78,46,26,21,47,213,80,211,74,114,153,46,179,85,199,162,226,61,137,34,235,192,42,11,208,49,10,29,59,81,43,155,118,242,121,35,198,55,194,254,45,254,136,152,40,243,216,46,135,112,194,58,91,176,42,233,51,31,215,176,123,189,18,165,104,76,38,146,161,138,93,204,136,174,176,170,37,83,45,208,28,89,166,44,204,23,138,60,176,216,33,141,28,188,80,56,255,60,140,129,179,55,86,77,157,143,82,34,100,20,152,101,140,200,209,88,224,232,52,7,15,205,55,199,141,50,178,83,236,87,24,138,86,166,171,130,159,42,1,189,59,214,50,135,1,162,229,139,109,90,121,130,36,53,99,250,239,201,204,248,200,157,191,185,193,241,132,81,112,38,68,142,199,53,30,200,202,16,194,202,71,229,54,209,99,202,238,140,59,229,124,207,49,209,161,38,23,99,107,33,114,247,121,67,42,52,135,155,115,45,52,99,15,9,86,16,50,206,74,120,107,74,105,7,61,221,197,61,85,207,26,102,199,168,24,209,22,147,200,105,191,78,5,16,205,189,177,59,68,121,13,243,83,190,178,185,141,68,68,55,13,22,231,18,54,249,4,162,36,20,30,41,71,174,17,36,76,92,85,115,87,85,120,163,47,111,180,234,141,238,189,215,208,103,13,81,175,71,106,212,77,13,51,201,171,32,241,99,69,71,143,45,3,154,12,43,214,194,30,77,167,91,138,2,7,121,50,149,39,103,43,32,141,189,147,133,168,225,143,45,166,57,12,70,130,216,191,105,242,15,213,188,129,109,144,224,12,132,168,86,252,99,164,233,174,118,70,238,160,109,96,199,187,94,229,239,45,220,19,85,167,37,29,92,213,229,23,5,91,81,193,129,55,14,45,85,147,71,55,98,159,144,72,114,90,181,70,213,126,84,202,212,144,47,190,124,184,35,83,167,86,37,163,248,141,210,236,106,182,21,242,47,154,89,186,216,0,200,229,137,16,113,239,227,192,57,30,162,111,13,186,170,179,66,219,36,48,200,120,224,139,89,73,96,67,39,3,49,109,136,109,164,198,157,10,10,134,228,78,123,144,25,223,134,59,238,204,32,141,173,132,181,12,157,30,34,106,42,58,46,27,198,132,202,137,245,28,91,199,217,177,62,169,211,56,5,149,212,154,222,42,117,33,116,43,104,156,34,91,218,113,174,45,111,27,213,82,172,183,234,56,91,216,181,132,190,51,119,3,191,41,93,9,197,203,156,83,220,68,2,86,60,32,102,129,114,108,153,189,154,179,81,164,10,18,86,88,185,242,183,141,229,138,116,69,85,243,2,171,75,212,144,81,94,83,163,65,164,174,135,48,72,27,85,217,58,42,68,97,78,242,174,3,183,67,108,106,124,234,224,39,85,120,146,204,181,36,221,19,198,94,43,21,187,122,162,26,224,170,9,12,3,39,68,28,250,98,6,204,202,244,85,45,87,163,248,242,211,160,212,42,150,189,168,119,90,85,79,53,90,172,198,38,24,175,223,185,170,208,2,127,61,21,37,102,143,51,195,156,109,71,109,212,53,48,197,142,169,219,116,117,116,35,169,184,63,100,103,249,229,244,34,59,44,52,62,13,197,231,33,38,249,14,14,19,157,45,221,114,147,103,166,170,113,70,169,14,43,217,165,101,42,103,9,200,146,166,108,230,14,139,233,166,20,179,219,12,100,165,160,149,90,135,178,2,202,76,57,200,150,103,6,138,56,130,157,217,205,136,18,145,122,167,150,233,161,42,41,150,141,124,57,46,39,145,87,70,35,156,10,91,158,169,35,178,49,116,226,40,208,134,160,202,32,230,195,18,181,19,19,211,185,69,53,222,69,197,251,161,248,71,0,115,145,140,2,52,68,194,15,96,138,228,53,53,227,122,33,252,112,31,221,146,216,70,68,201,167,122,82,127,185,85,137,210,61,53,110,85,209,172,215,25,254,146,109,112,85,41,151,148,119,173,130,47,168,0,87,21,133,44,96,131,254,51,195,11,169,216,99,67,140,33,8,202,198,152,90,94,217,19,26,181,102,6,116,184,133,74,177,42,25,89,105,83,77,190,157,93,120,150,115,240,140,83,84,34,37,173,221,93,181,79,166,232,67,53,110,44,162,135,156,161,144,213,41,219,186,231,144,12,132,73,3,18,197,195,53,33,114,69,216,180,62,185,210,60,246,147,74,97,17,73,172,178,126,171,16,176,109,146,184,52,176,52,96,94,33,112,133,172,85,133,221,141,172,55,131,65,225,221,153,187,167,80,183,137,152,44,161,63,251,128,23,130,158,105,62,207,192,92,110,100,158,147,192,153,117,19,13,235,8,96,50,64,242,46,181,23,25,243,44,12,11,180,3,211,94,209,219,29,170,66,191,209,251,199,219,195,138,209,24,36,102,68,34,93,140,180,103,43,246,136,206,106,209,26,55,248,142,224,11,26,15,139,102,227,166,205,157,118,191,33,255,224,244,90,20,109,69,21,87,181,117,89,163,87,188,61,98,127,161,44,116,228,213,34,183,140,252,146,246,49,234,39,215,180,152,141,174,179,83,137,118,138,211,34,88,34,8,54,113,241,65,24,173,156,127,149,15,26,41,34,202,26,189,52,226,44,55,241,176,44,164,67,56,228,208,69,158,99,152,217,59,255,18,84,97,9,70,141,233,208,98,117,94,200,73,183,183,131,52,77,213,166,210,25,94,214,125,9,201,14,213,88,171,26,183,152,48,58,232,110,213,60,155,173,4,43,62,28,119,184,122,176,41,161,177,56,172,154,37,110,217,116,26,195,79,99,30,106,140,72,80,45,76,197,180,92,200,61,167,201,201,150,239,196,46,60,179,41,119,135,166,144,244,194,43,186,227,94,193,156,149,208,171,138,234,27,174,14,213,29,162,115,153,88,113,171,136,242,180,123,13,87,125,55,215,233,78,26,249,164,182,47,154,253,86,143,149,41,110,36,203,29,217,102,178,190,74,251,185,127,144,110,171,56,79,34,127,171,18,96,157,193,170,98,97,93,68,190,97,96,169,54,24,234,157,116,93,32,245,162,161,95,50,131,157,73,161,177,21,80,53,39,246,212,160,13,210,241,10,45,73,239,44,254,157,41,130,123,1,146,21,153,231,204,90,23,230,187,97,208,11,142,174,136,188,209,76,69,237,11,105,103,214,20,56,25,40,242,194,116,246,179,74,250,27,246,192,134,114,103,21,177,150,15,226,186,214,13,187,124,131,171,14,220,119,99,12,138,214,162,21,147,82,183,218,61,84,52,238,34,213,167,132,198,39,219,65,189,134,100,69,66,146,216,144,248,182,74,238,85,190,111,213,0,157,190,160,211,43,32,179,178,9,173,220,198,106,10,155,11,206,49,98,218,126,178,95,181,202,21,64,68,57,79,185,63,214,192,128,19,101,91,184,177,171,100,170,112,183,244,60,65,98,38,161,28,38,43,85,17,86,38,162,42,98,162,190,166,215,232,176,206,135,212,145,80,12,117,154,163,164,92,90,85,65,213,153,236,230,187,174,75,179,124,253,42,135,73,16,152,20,81,73,178,149,111,47,43,229,254,26,237,79,175,36,234,148,73,85,233,212,129,120,93,231,30,26,26,152,209,150,92,60,153,213,129,216,63,202,188,220,8,32,203,97,102,102,27,112,239,57,187,148,251,183,205,184,51,158,29,229,108,200,159,14,220,140,21,241,33,222,58,77,42,53,57,198,80,149,199,10,77,236,20,113,237,130,149,219,213,62,117,253,214,53,165,166,121,37,22,243,224,72,154,28,37,140,15,96,154,1,146,100,24,194,44,235,235,142,239,141,119,124,23,91,217,4,96,150,32,205,56,85,128,237,27,1,75,220,180,46,157,240,188,243,197,100,165,60,189,142,230,178,109,22,176,155,245,0,83,28,204,168,197,13,232,136,26,207,148,249,247,44,57,68,185,72,87,238,131,82,95,21,14,235,74,53,203,217,46,122,7,27,9,128,26,32,107,64,49,204,156,240,144,74,234,101,210,100,234,219,226,165,105,154,210,92,222,156,237,66,148,9,19,180,232,162,134,174,214,80,137,86,206,244,78,134,94,119,113,7,209,65,174,198,175,181,241,3,124,53,105,23,69,187,231,4,106,107,61,100,250,148,13,45,41,126,182,15,177,173,81,184,41,80,55,134,242,222,64,216,25,173,87,212,223,208,135,142,136,52,220,73,101,97,104,240,106,159,19,13,156,176,122,167,21,88,107,183,82,221,113,205,198,172,123,119,69,22,143,128,68,82,125,39,244,147,78,96,77,113,208,248,168,118,142,172,65,205,211,42,130,92,79,212,96,21,9,63,208,194,34,66,125,68,92,104,55,107,209,155,117,202,181,162,127,75,26,186,224,29,210,122,143,184,115,201,186,224,94,132,123,118,237,235,156,255,170,122,164,209,52,52,218,136,226,3,80,188,4,120,86,238,44,63,213,91,196,216,234,18,172,50,171,182,27,211,139,83,81,105,179,56,208,137,40,49,195,76,114,49,234,40,2,216,202,154,28,56,217,203,125,25,200,112,215,152,130,12,85,69,41,155,137,25,182,67,58,19,109,124,133,9,77,48,19,207,132,38,175,34,161,201,204,255,101,238,58,198,126,104,11,244,19,19,135,3,57,171,71,42,188,156,167,2,217,130,89,80,88,26,22,151,121,174,215,186,93,174,28,110,12,197,6,208,198,244,28,242,159,211,182,238,2,244,76,216,52,83,55,20,135,206,89,178,208,204,98,80,126,145,101,82,185,32,115,169,163,14,220,206,125,122,111,54,165,130,126,186,92,74,72,33,196,169,148,246,175,17,243,60,75,246,60,75,246,180,149,85,144,161,45,213,77,121,173,173,90,32,254,227,254,249,2,173,159,14,47,0,80,62,119,105,161,221,198,64,253,179,223,24,60,234,231,191,113,91,76,201,210,56,151,27,131,112,125,146,59,127,170,250,81,191,186,140,211,19,217,60,48,178,121,93,229,166,166,7,251,16,193,31,173,231,130,84,68,137,242,112,61,183,160,212,7,43,121,2,107,248,162,119,121,178,166,159,150,53,85,92,8,165,229,13,108,249,60,226,121,196,103,60,226,147,85,247,20,159,171,47,82,221,243,11,241,254,219,235,23,226,253,85,65,255,69,110,220,43,126,63,195,141,145,115,252,243,75,59,159,234,198,191,86,230,80,191,36,243,181,57,200,155,216,109,98,97,85,177,197,136,115,152,216,214,244,184,229,231,48,46,134,227,196,110,41,217,116,151,127,245,184,229,231,168,62,30,142,19,115,145,28,39,158,180,114,156,196,243,121,25,90,97,1,68,11,154,142,91,230,110,184,168,217,113,162,3,94,61,206,57,119,209,237,250,113,146,144,209,143,243,162,182,98,128,242,227,36,218,197,143,115,252,39,10,221,121,220,65,202,57,248,113,94,8,247,55,57,78,52,194,50,132,121,220,81,170,241,122,201,93,117,52,88,142,147,33,136,134,93,142,147,164,6,190,190,154,107,108,25,170,92,74,4,27,57,78,226,221,124,125,197,53,80,124,38,211,113,203,196,158,125,125,229,150,162,224,79,199,193,254,103,199,169,133,213,28,137,232,56,17,44,124,125,197,166,41,68,70,14,241,227,150,14,13,239,149,9,47,98,231,22,5,191,144,35,63,80,66,179,124,129,245,192,229,31,61,80,222,228,192,165,75,122,224,175,151,234,166,101,91,172,205,47,191,66,227,245,124,60,206,138,147,75,0,199,246,114,220,29,182,167,235,213,107,149,118,109,249,76,115,144,88,108,234,15,48,234,205,168,61,122,60,206,34,171,203,192,71,97,222,81,145,245,180,29,69,43,103,149,210,182,177,57,29,222,34,226,168,240,242,71,127,190,156,70,157,89,46,62,58,198,182,57,158,15,215,227,118,212,27,157,203,222,53,214,179,197,187,231,1,10,177,94,199,112,54,199,211,214,43,177,106,225,209,203,40,206,235,195,105,155,186,115,167,99,207,96,99,94,254,216,15,219,90,101,122,12,244,116,30,149,117,105,87,119,109,205,201,72,164,187,184,234,60,192,178,15,236,181,223,140,34,227,113,213,183,163,36,239,101,63,202,169,240,186,151,198,230,116,179,251,62,2,200,127,218,157,110,222,132,143,48,242,235,102,127,57,141,109,59,75,78,3,197,199,37,207,13,221,121,22,216,240,32,200,253,122,30,21,163,183,3,146,169,172,246,66,192,247,163,126,252,229,60,139,141,175,52,118,231,35,163,192,203,167,236,143,204,139,229,190,35,68,81,51,65,60,64,145,243,205,121,119,218,199,162,222,187,227,40,243,125,61,134,90,246,93,91,115,182,187,17,155,224,240,146,203,251,15,202,112,189,92,118,206,75,34,137,141,70,202,165,191,45,160,123,225,31,94,250,208,206,155,195,168,72,63,140,180,190,92,75,232,209,102,96,140,243,113,148,118,63,56,139,180,210,88,206,135,39,169,110,205,151,62,126,11,174,58,157,6,67,120,28,245,249,39,11,180,210,200,11,188,148,41,127,216,5,30,101,247,119,151,227,246,104,50,207,218,242,94,54,251,195,105,112,140,39,157,129,233,237,253,0,139,219,236,219,195,32,127,151,195,249,48,138,15,59,73,252,208,54,126,0,30,248,163,208,243,254,48,24,225,203,137,24,193,155,248,249,73,88,63,171,166,66,153,214,177,227,14,135,61,175,102,211,218,157,110,201,7,197,15,245,17,68,246,145,113,39,202,104,231,49,208,40,202,113,75,61,201,120,192,37,56,224,229,15,120,96,220,17,243,122,61,29,46,115,64,219,221,24,209,254,176,221,111,88,79,215,180,182,231,91,136,154,100,206,125,56,129,85,69,211,195,110,183,63,237,9,79,215,198,230,92,47,169,252,196,80,159,217,63,104,169,123,245,242,97,237,114,57,111,46,135,235,137,68,226,195,97,144,185,64,19,5,181,150,214,238,116,100,22,145,128,247,151,63,248,227,97,104,186,46,140,60,54,215,161,228,63,238,79,35,126,144,198,94,26,187,147,17,70,245,24,67,31,108,205,160,145,167,43,19,202,161,216,221,12,194,97,75,41,1,28,161,165,61,15,217,200,31,2,218,207,231,253,80,226,94,54,167,169,215,25,220,222,230,114,26,246,141,205,49,40,71,155,214,246,124,141,92,28,133,23,31,96,205,15,215,243,110,55,198,180,217,155,90,111,164,155,24,180,243,116,56,158,143,99,107,187,126,180,105,109,207,71,158,200,37,243,198,3,172,253,224,134,246,39,182,97,141,69,62,156,142,199,243,105,42,124,117,229,83,99,119,242,172,100,240,16,234,208,3,13,122,59,228,213,243,254,116,28,107,121,130,100,43,118,144,210,26,79,92,134,43,209,218,79,90,252,121,212,182,22,54,55,50,39,61,2,37,221,94,135,200,188,61,76,197,136,144,205,237,49,224,207,210,208,157,135,226,53,75,190,159,151,79,69,119,65,25,180,236,163,161,27,57,156,54,137,176,118,141,229,228,89,151,248,229,107,123,135,61,240,176,29,180,113,55,70,69,186,148,243,113,83,150,184,109,236,207,7,184,63,130,136,118,25,162,229,101,147,250,63,124,67,246,151,193,28,159,247,83,65,182,210,216,157,143,212,253,146,231,250,17,68,212,195,208,140,70,91,250,34,144,14,134,56,57,18,116,141,221,249,200,89,39,185,160,159,168,250,183,84,166,29,246,199,195,110,128,223,1,250,234,101,233,246,155,193,230,15,53,18,75,119,109,99,119,62,242,180,44,227,127,8,216,189,230,209,47,106,237,211,101,240,246,71,107,93,105,44,39,91,205,184,7,25,250,117,55,156,119,6,201,13,74,211,97,235,31,22,144,160,71,234,218,186,179,145,140,242,17,134,255,123,136,60,243,252,146,143,224,96,56,204,37,67,172,136,64,52,228,199,221,126,55,204,109,65,143,219,180,182,231,91,206,226,37,157,232,203,55,173,13,206,118,63,134,224,98,228,80,161,13,219,210,241,112,152,142,101,139,185,173,52,214,83,45,71,215,146,135,245,197,91,83,79,227,177,59,94,207,46,71,158,134,245,101,184,211,12,74,50,24,159,185,232,77,107,115,182,165,211,90,18,81,190,244,161,15,91,248,16,102,46,65,117,63,204,165,195,116,120,56,14,126,215,12,201,139,113,185,182,118,167,91,202,41,205,223,246,250,86,158,10,62,188,202,221,254,8,202,165,223,6,203,91,181,186,39,125,254,77,37,129,205,225,58,188,26,88,17,184,88,140,247,217,251,163,109,236,206,183,2,101,15,18,2,112,202,248,118,97,251,143,231,237,16,123,194,14,109,27,187,243,205,57,248,17,86,127,248,249,144,171,179,232,235,134,233,252,16,221,44,106,83,57,209,18,135,62,136,230,226,146,85,223,67,243,61,150,245,176,119,103,223,190,173,156,170,37,220,159,40,234,179,117,221,202,41,140,8,192,7,64,174,195,72,56,172,104,12,84,195,155,112,40,78,50,194,173,173,221,233,179,60,242,67,12,62,238,20,217,79,215,227,38,216,24,115,83,187,55,81,2,243,49,226,233,78,215,195,133,253,96,135,171,232,8,153,25,198,68,247,195,90,198,93,91,235,201,86,135,115,25,249,67,24,24,135,111,196,105,48,8,228,42,176,221,12,150,46,210,214,220,212,158,57,235,103,61,202,216,187,101,63,236,206,209,54,80,27,251,69,127,168,145,15,119,224,193,21,157,135,87,132,155,248,238,221,232,233,204,69,42,196,208,31,35,192,232,52,56,223,225,54,78,222,225,31,137,222,211,249,132,223,31,207,202,254,96,148,121,120,119,132,48,63,89,166,211,8,2,27,238,45,68,179,106,83,119,174,218,237,190,222,62,70,28,232,128,197,225,219,126,24,66,55,129,232,240,99,59,158,220,4,223,181,116,103,90,89,199,49,244,135,240,246,59,13,229,82,112,95,18,188,60,98,60,162,233,163,180,116,103,170,223,215,50,244,71,240,252,26,130,250,121,184,110,178,14,110,104,223,6,120,31,93,174,43,13,245,44,43,3,246,32,131,46,140,215,117,152,162,147,163,124,219,152,78,181,10,101,11,156,63,183,248,11,71,237,213,77,254,110,204,158,78,157,69,185,30,32,187,193,3,16,228,95,152,117,80,90,191,171,73,2,245,192,217,155,183,223,142,27,110,254,54,174,189,124,254,97,63,174,184,121,255,253,15,63,127,243,143,111,223,255,231,219,119,127,125,243,246,191,222,252,244,195,155,49,140,175,254,112,212,217,88,14,149,175,127,252,195,126,116,227,79,63,254,240,221,56,233,171,49,109,227,252,255,219,174,246,199,229,231,232,196,248,31,87,31,29,250,15,156,33,119,248,249,195,119,144,46,219,245,244,84,25,244,102,228,173,26,227,178,27,232,32,48,88,12,226,140,227,255,231,251,31,222,46,173,95,241,223,250,28,7,81,47,227,233,127,126,243,254,251,111,190,123,251,238,221,79,95,201,215,177,252,127,127,247,207,175,150,227,255,109,158,184,12,105,84,243,246,142,217,208,126,122,247,238,253,55,255,120,247,254,221,191,255,248,247,191,188,127,247,47,189,185,13,225,227,70,191,13,35,223,5,144,120,1,25,37,99,102,191,87,254,235,211,101,48,252,82,41,181,37,207,213,139,72,108,205,147,235,9,192,36,71,216,103,254,21,19,57,123,78,48,201,157,246,121,126,253,250,212,98,230,107,246,128,190,232,179,236,201,35,112,145,67,69,51,66,105,55,206,253,47,185,82,246,199,253,240,89,136,130,68,211,218,158,175,233,146,30,36,2,179,136,249,11,211,120,61,239,135,238,46,6,203,55,173,237,249,179,6,253,163,69,97,162,230,244,99,40,229,50,204,173,129,231,253,48,43,57,61,31,32,135,197,154,86,171,129,206,123,65,22,129,125,47,40,100,252,67,34,132,144,222,200,84,230,163,254,255,51,18,9,222],"type":"zlib"} \ No newline at end of file +{"buffer":[120,156,236,189,91,239,93,183,177,39,248,105,22,144,52,176,5,146,235,254,120,146,158,110,204,195,153,121,56,64,99,94,149,88,137,221,80,172,192,214,153,238,124,251,217,155,117,251,21,171,214,255,34,203,142,148,81,16,201,90,181,121,45,22,235,198,98,113,218,255,48,181,246,243,199,183,127,125,119,255,239,52,255,219,212,1,255,235,135,239,62,126,79,128,185,148,169,253,241,254,239,239,223,253,240,215,239,63,50,240,60,8,248,151,191,255,76,144,218,8,240,167,191,254,241,195,251,15,63,113,99,247,191,219,252,151,254,191,199,191,247,255,74,133,254,252,253,219,159,222,254,249,227,187,159,184,242,180,254,129,250,125,247,191,63,190,251,241,187,159,181,246,143,119,64,251,238,205,119,63,252,252,247,247,111,255,241,230,223,63,252,191,63,188,251,227,251,31,254,222,27,126,180,244,241,195,199,183,239,255,219,79,111,255,198,195,223,185,131,15,63,126,252,233,195,251,247,239,126,210,14,126,252,207,247,239,31,63,174,127,40,211,250,95,233,95,85,255,213,244,95,179,254,107,209,127,173,250,175,237,241,175,149,167,241,221,15,127,254,248,195,135,31,223,254,244,143,97,26,63,234,120,116,14,58,98,157,251,255,249,29,227,178,210,15,247,137,195,68,184,244,125,101,126,250,8,96,46,251,231,59,14,254,235,187,191,203,26,21,198,236,235,59,95,207,172,243,57,239,188,125,230,206,143,61,235,124,201,59,159,63,115,231,181,166,83,95,243,222,151,207,221,251,154,174,250,150,247,190,126,238,222,143,180,247,61,239,125,251,204,189,183,154,246,126,228,189,239,215,189,203,62,188,243,134,63,191,251,247,183,127,255,53,247,122,239,227,255,254,211,255,124,247,231,143,35,211,250,219,219,143,63,253,240,191,21,248,64,87,225,63,143,127,215,181,188,121,44,96,61,207,55,91,129,255,245,113,0,18,159,111,231,254,119,43,229,11,175,246,79,157,236,114,190,217,79,248,159,140,229,64,224,193,141,202,218,190,237,108,124,92,214,191,4,174,75,229,148,206,63,126,255,195,207,111,126,254,248,225,239,191,251,253,52,255,193,228,219,88,187,93,215,254,235,187,143,127,252,254,135,247,223,253,225,31,255,215,189,248,239,166,245,143,182,127,250,191,127,255,230,231,63,191,125,255,238,255,153,90,153,230,123,235,229,119,255,254,246,227,247,111,254,242,254,195,135,159,232,159,63,189,253,241,187,15,127,187,15,161,149,255,114,255,211,126,255,251,94,246,191,221,255,190,109,253,159,247,222,202,246,228,8,231,47,126,132,203,23,63,194,245,139,31,225,246,197,143,112,255,178,70,232,89,207,207,255,248,219,159,62,188,215,81,169,124,123,70,103,253,143,239,223,254,253,157,22,254,211,15,31,255,246,246,239,34,9,89,179,254,235,79,63,48,64,4,87,107,63,252,248,135,94,148,224,127,121,251,254,231,119,244,195,79,239,254,252,225,187,119,198,172,78,102,127,235,155,206,236,110,243,155,181,51,189,251,159,227,205,210,65,237,13,124,21,255,35,253,198,149,161,238,220,217,248,250,166,172,218,126,145,223,110,238,199,91,172,124,115,141,223,134,158,111,126,92,183,100,228,220,195,13,250,191,193,0,252,175,67,125,169,32,127,186,166,181,43,179,255,211,135,255,180,213,234,11,251,191,255,253,7,38,54,25,89,7,190,101,49,99,176,127,88,65,238,186,3,165,96,135,237,142,102,126,177,61,35,250,254,179,246,204,235,108,146,107,229,236,51,25,35,47,85,205,158,85,175,190,182,109,120,171,229,77,125,144,198,73,84,201,4,223,214,190,229,30,221,223,246,254,159,245,205,174,191,111,111,136,170,103,38,235,173,255,183,244,114,188,69,150,222,54,83,250,250,134,171,109,218,196,242,230,88,185,251,131,54,67,239,171,182,55,167,20,169,220,126,165,214,26,239,66,254,124,20,217,104,232,2,58,180,141,67,250,169,133,97,133,26,59,185,219,173,239,200,214,33,143,170,197,54,235,73,37,231,55,92,191,119,193,195,109,4,218,104,27,31,2,185,143,180,143,102,211,54,143,62,156,170,223,189,201,157,230,209,127,234,205,109,196,1,24,210,1,203,240,109,191,159,212,196,186,250,70,121,187,119,166,65,101,206,55,212,246,204,243,151,10,180,106,39,77,136,0,5,86,190,67,168,138,224,119,166,127,213,62,177,66,13,54,46,202,13,227,119,111,171,72,91,119,122,96,12,30,6,233,237,53,69,204,157,50,24,129,199,72,25,247,122,125,170,247,111,158,213,182,90,173,157,106,33,73,18,249,86,98,181,187,126,218,120,24,119,136,146,27,45,201,105,67,220,9,157,103,39,195,161,154,142,154,8,237,14,81,196,141,219,168,255,153,221,95,173,55,243,24,248,213,222,187,106,59,25,1,175,98,173,126,8,143,105,212,25,230,199,164,89,103,163,155,219,253,131,86,18,112,243,104,200,40,57,155,81,185,70,161,67,117,182,26,126,189,26,149,152,137,124,220,60,251,248,87,28,23,83,221,2,48,218,177,149,55,40,225,76,176,177,173,201,48,75,36,163,148,210,60,49,94,80,108,37,8,149,237,144,153,80,183,178,14,65,179,131,66,210,23,32,196,15,166,75,126,219,93,97,231,193,174,140,219,22,212,161,71,235,192,86,238,24,58,172,4,109,149,165,183,194,173,47,110,162,213,79,75,247,183,45,53,140,177,27,176,145,159,32,203,9,28,41,50,172,83,127,230,225,55,94,143,25,248,183,246,185,19,158,103,236,112,7,50,35,137,208,112,73,221,16,203,20,57,179,99,221,213,150,122,23,26,155,109,22,92,126,228,70,178,79,14,16,41,214,73,23,37,125,10,181,19,192,222,123,102,86,240,34,29,143,7,225,116,60,131,129,142,199,82,208,233,120,68,149,95,187,146,199,115,253,166,228,77,159,168,228,53,210,199,26,74,1,218,41,15,152,16,50,237,166,27,48,247,198,12,74,183,7,171,103,204,141,137,173,27,71,109,168,168,213,254,43,151,233,141,208,46,98,113,194,187,152,182,247,100,234,94,101,157,142,198,117,227,79,54,178,10,255,36,69,112,86,189,216,209,71,93,23,251,251,53,91,173,17,6,220,86,107,111,142,176,211,172,220,63,160,220,62,110,180,47,159,42,120,41,148,40,102,213,185,118,192,186,72,199,131,177,254,104,64,5,56,129,72,83,223,68,169,103,74,2,253,150,5,204,77,84,228,250,166,65,163,157,243,114,101,214,171,197,214,54,82,100,64,177,10,27,15,118,129,234,180,94,131,184,38,98,42,170,220,20,182,240,77,33,41,157,78,139,201,22,194,202,173,40,129,178,37,65,5,25,206,95,252,195,177,26,136,73,122,21,208,138,223,168,101,25,8,182,230,140,104,108,190,9,147,69,108,93,85,213,85,233,95,178,63,154,117,117,107,168,19,74,41,83,169,154,216,107,115,2,50,72,133,145,96,83,69,45,31,134,20,84,225,8,47,197,13,106,64,246,141,153,195,173,192,8,138,52,190,0,104,129,85,97,80,179,182,120,128,36,238,105,2,133,237,187,109,242,152,196,105,184,141,80,108,241,103,83,144,184,53,7,153,185,208,62,130,90,168,215,176,208,186,14,32,225,197,179,106,95,6,153,13,66,128,101,114,4,202,35,122,154,251,129,205,17,55,125,130,16,68,90,138,83,192,249,245,194,132,229,227,166,80,8,9,85,7,122,25,96,39,80,201,5,233,37,244,153,17,113,160,244,100,63,196,93,19,183,86,220,126,217,38,77,55,115,190,233,145,55,164,236,195,115,152,102,248,6,158,227,184,148,227,97,23,92,110,100,132,35,171,108,108,252,235,162,145,221,213,220,226,19,196,44,43,145,253,27,238,6,168,225,136,240,241,103,238,24,221,251,90,214,61,167,220,148,31,68,182,17,153,75,202,129,34,155,202,89,217,64,116,25,109,38,52,60,18,186,31,123,206,98,194,14,79,153,192,192,40,18,110,146,177,156,132,47,37,220,43,178,184,145,197,180,153,12,219,254,239,35,93,39,36,160,209,106,14,50,218,203,112,47,227,137,250,22,250,249,48,8,87,16,98,227,125,203,46,248,246,6,23,138,42,52,94,159,213,64,3,77,227,152,123,187,93,251,58,250,152,202,246,196,52,97,28,236,118,185,67,250,127,105,209,238,163,218,244,119,193,56,43,207,7,161,98,134,129,194,208,179,169,65,143,180,24,93,25,63,15,91,146,48,204,176,91,103,34,193,69,189,39,204,172,22,220,54,139,113,24,26,231,226,54,47,238,231,184,223,29,59,8,28,163,227,134,12,249,222,251,153,251,198,220,48,169,17,210,242,213,165,50,83,7,236,13,97,172,110,200,177,217,5,160,227,40,82,70,21,52,54,85,54,97,84,59,180,152,207,222,33,40,160,207,141,186,87,233,78,135,94,118,43,48,209,23,153,35,60,101,103,142,24,12,236,17,158,163,179,71,30,179,252,218,237,126,62,1,254,114,237,254,95,140,210,182,190,8,167,15,82,147,48,159,111,95,159,237,235,115,209,233,154,210,233,69,112,220,107,67,34,175,187,77,195,17,63,161,219,23,237,143,223,98,81,154,251,154,221,215,226,190,86,247,181,185,175,221,125,29,238,235,244,189,23,255,57,140,205,15,167,206,191,238,231,75,184,79,203,195,202,186,226,63,89,196,194,44,162,239,153,40,182,187,86,186,173,103,219,107,91,202,93,179,155,205,255,183,110,91,45,181,236,75,171,7,91,135,41,48,169,207,186,218,195,25,253,76,231,199,182,149,218,214,125,110,218,226,67,67,62,247,186,213,99,91,181,197,28,150,212,94,89,90,63,59,237,189,236,247,121,172,203,124,46,235,92,155,88,85,101,47,103,107,199,90,215,173,177,89,148,130,198,186,124,76,251,208,4,158,157,242,122,158,251,92,23,236,247,49,187,185,206,203,190,105,39,9,40,86,229,67,157,229,161,66,190,96,157,171,67,224,171,151,217,87,39,125,231,225,158,123,178,231,111,148,249,141,50,191,82,202,252,218,78,120,42,153,65,106,114,139,221,91,208,249,37,32,243,76,24,12,28,105,100,148,175,230,217,162,99,156,155,197,167,104,189,221,185,94,4,166,22,22,187,203,119,141,17,154,233,19,14,149,201,198,181,80,23,245,176,131,31,66,183,160,89,119,212,45,66,56,134,15,220,170,139,1,196,220,21,51,188,136,221,8,70,44,7,254,80,103,141,131,156,0,161,128,226,151,218,223,233,168,24,162,128,240,61,84,33,207,192,130,254,10,182,66,53,2,145,34,5,36,162,129,102,178,58,116,77,46,134,139,81,186,82,201,194,33,94,232,124,63,124,11,183,42,246,246,136,144,21,206,22,20,132,238,2,246,135,52,128,60,129,89,240,229,66,136,199,176,56,97,245,96,105,221,178,71,202,32,231,205,34,107,104,68,180,106,247,114,162,104,179,111,130,81,240,214,157,147,197,27,116,0,99,204,181,79,113,62,52,191,77,3,171,132,184,87,231,153,92,45,162,163,72,128,24,181,220,38,23,44,166,191,110,10,224,14,44,70,202,245,217,161,253,26,75,163,181,106,151,78,173,48,241,221,247,221,56,186,76,194,244,216,71,181,139,35,249,236,31,224,115,169,244,51,112,132,211,32,66,85,187,225,81,8,102,83,103,33,127,2,27,155,7,106,77,201,46,16,167,163,96,166,170,195,218,190,113,180,205,27,168,48,175,126,246,55,89,139,101,202,240,156,175,69,88,174,176,160,18,133,178,143,223,70,92,11,47,85,229,5,25,143,1,109,216,142,50,115,226,245,235,220,119,82,103,31,143,78,54,140,80,65,210,8,60,136,88,208,102,0,33,181,113,59,132,17,37,99,134,89,141,19,6,92,228,200,2,108,134,205,19,247,214,176,249,226,10,102,139,156,16,130,17,75,78,75,3,183,12,28,213,49,221,200,147,29,203,6,145,183,90,252,148,99,250,94,38,4,177,241,248,211,37,213,214,29,210,7,50,128,151,6,71,76,33,54,130,65,224,139,220,13,38,197,246,127,1,87,100,122,249,242,75,114,69,126,233,10,42,31,147,226,97,105,119,186,239,232,91,39,85,16,194,243,56,210,231,64,102,86,169,154,133,36,45,220,78,255,232,187,207,24,139,2,236,80,77,14,81,173,201,169,253,17,226,80,155,232,22,35,187,154,245,76,171,114,24,37,75,111,86,112,228,80,75,56,202,44,34,238,240,29,232,233,148,33,3,177,179,234,206,108,253,136,228,250,4,106,241,252,131,206,95,68,226,137,25,20,120,62,72,1,214,123,68,150,87,57,0,105,246,177,219,105,136,66,44,60,83,32,36,168,136,103,3,199,234,159,254,11,216,31,235,1,242,91,97,25,32,150,66,25,184,114,65,6,203,88,131,227,27,134,172,6,145,163,41,214,38,24,207,195,239,141,121,189,156,210,159,134,129,230,32,120,218,69,120,22,85,148,34,190,131,206,147,105,219,20,61,231,165,139,10,23,85,63,105,225,28,5,175,90,92,165,57,28,28,2,33,244,46,95,114,124,57,18,185,168,220,121,179,87,61,15,99,115,35,15,19,195,153,7,180,120,172,181,136,218,4,247,126,113,252,122,9,89,221,100,30,68,87,50,100,212,20,25,50,52,1,100,54,176,174,108,255,194,30,143,60,32,176,8,199,64,28,123,137,28,200,41,230,81,133,3,190,181,57,210,149,239,97,181,156,38,133,91,60,112,0,199,31,34,11,97,182,62,110,193,184,77,221,86,14,59,221,241,1,218,62,171,7,112,188,209,238,130,240,173,87,224,151,225,111,79,242,1,31,212,15,42,76,4,49,134,248,168,114,136,145,188,216,7,143,139,175,29,33,103,159,140,31,78,122,130,76,99,191,233,16,140,246,8,161,104,65,15,212,232,8,54,33,232,140,224,83,150,118,201,18,215,97,5,179,53,245,11,16,150,40,44,226,192,236,7,73,128,130,34,147,35,40,103,114,89,20,104,217,173,238,227,207,210,101,233,131,0,246,79,8,4,150,3,245,167,149,221,195,194,240,237,250,229,252,245,7,220,231,25,47,190,169,187,175,81,119,187,86,186,186,93,53,117,61,213,174,73,41,136,29,158,61,70,236,128,157,46,97,149,135,176,202,6,95,96,234,42,136,247,60,180,65,28,73,92,178,242,1,58,221,65,227,68,127,194,228,156,191,204,14,110,96,234,87,98,103,96,107,234,80,87,180,154,1,7,196,147,251,78,173,221,49,234,118,37,114,105,185,85,10,130,109,31,32,114,19,0,148,133,153,67,1,23,3,45,122,111,251,48,144,220,122,128,182,22,4,145,34,125,184,138,90,194,130,32,31,223,16,41,199,209,94,43,132,43,201,52,158,28,179,128,132,74,154,221,152,245,140,237,54,227,10,73,204,31,94,182,228,107,180,122,147,81,28,244,139,115,246,159,140,35,129,240,189,91,192,154,220,188,88,221,185,1,67,160,80,13,160,161,150,4,70,130,116,227,155,120,22,206,200,17,135,162,24,208,88,38,149,196,30,15,115,64,150,146,74,132,136,134,34,87,25,12,87,116,22,87,85,200,139,230,78,171,73,23,245,230,64,50,203,184,144,78,13,62,173,39,42,82,173,45,2,180,225,155,3,197,54,43,64,0,211,1,249,52,203,171,115,179,46,221,108,67,129,131,10,161,88,254,143,74,88,9,199,163,14,229,132,1,77,65,107,195,240,15,199,43,124,203,209,168,112,81,150,163,0,196,116,1,106,128,83,4,89,80,227,18,228,32,4,130,180,213,97,0,15,214,136,93,226,33,17,194,227,109,0,241,0,61,22,48,0,31,33,1,164,2,218,72,175,217,125,153,194,113,126,166,248,108,138,56,98,200,139,18,132,106,253,246,163,211,235,229,103,48,137,121,137,13,176,78,206,199,74,177,149,70,71,61,22,6,61,40,68,224,22,239,77,186,35,156,182,177,74,111,227,103,155,110,188,118,79,119,118,53,0,210,156,23,139,82,37,203,128,19,102,225,87,188,208,66,236,204,135,116,135,207,42,81,96,1,235,8,146,205,188,160,126,13,203,111,203,115,107,232,102,229,88,78,84,202,229,190,88,179,182,217,53,115,142,99,194,152,252,89,85,236,197,64,226,52,134,82,114,17,192,24,45,223,87,30,96,194,94,161,42,226,166,131,201,229,179,208,223,125,188,49,18,62,197,95,194,199,71,102,159,137,132,32,56,18,233,18,69,80,34,167,162,48,75,37,94,20,139,163,228,4,52,55,163,37,196,91,213,117,9,71,196,120,83,219,211,74,74,79,9,217,121,228,118,142,182,119,197,164,60,237,79,169,40,121,26,128,18,113,21,101,90,148,96,86,205,137,66,39,38,157,0,77,4,108,38,131,131,156,206,68,121,20,248,170,40,226,137,240,30,65,219,8,42,54,4,91,43,26,230,112,60,125,3,31,45,21,56,70,92,90,210,141,1,225,196,8,247,213,104,236,81,104,99,177,171,82,146,79,112,22,177,121,241,24,120,133,188,25,84,141,35,187,23,43,65,220,119,214,111,236,144,182,230,36,71,155,66,95,147,158,135,50,154,251,33,27,239,31,62,19,179,237,192,158,106,83,12,110,36,18,236,166,62,149,157,29,155,226,129,158,0,98,223,157,173,232,102,92,189,249,145,246,177,61,239,50,76,108,154,168,244,71,203,160,42,211,177,50,137,65,17,140,14,1,12,69,108,91,92,110,56,200,204,18,8,105,160,180,72,138,9,189,102,84,157,210,126,178,67,6,11,232,160,51,120,186,57,147,223,124,200,48,152,224,43,34,21,171,149,28,167,215,182,94,186,16,171,14,240,233,147,136,212,208,98,49,188,40,128,175,212,85,5,48,97,150,117,132,128,76,17,31,214,150,128,116,217,25,215,45,0,116,86,19,203,3,253,128,91,93,114,21,170,224,217,84,101,144,203,144,49,22,171,114,29,242,28,87,28,10,177,240,172,232,209,19,72,16,58,254,6,238,168,163,36,138,76,84,119,162,36,76,196,229,32,84,19,163,119,48,139,121,125,34,200,173,124,175,72,151,123,122,179,71,174,192,56,226,32,150,202,183,43,55,96,100,55,75,235,177,248,11,212,139,78,200,120,181,64,218,56,52,91,138,69,238,70,30,35,32,80,87,9,134,60,196,158,53,169,22,9,238,146,72,147,102,174,134,227,118,68,216,52,128,185,98,184,42,80,98,180,119,131,161,22,76,185,104,237,53,60,0,48,64,69,192,236,91,213,180,15,128,4,33,45,253,26,183,191,25,126,11,223,41,30,16,86,208,81,99,39,157,89,243,121,113,107,81,122,168,235,69,151,11,90,109,160,1,16,114,249,14,106,96,12,145,125,140,12,70,106,211,132,185,48,120,224,248,106,117,117,229,189,239,92,170,219,69,236,58,64,100,72,196,249,15,79,196,74,177,213,175,103,9,142,64,152,107,100,101,21,115,165,193,30,112,163,241,56,213,58,24,57,51,182,162,23,7,71,80,113,170,186,220,134,110,207,214,67,110,235,166,193,230,147,132,0,168,122,180,200,221,113,99,191,139,226,21,97,220,36,130,162,165,151,89,132,169,225,136,227,192,161,149,55,195,132,6,217,17,13,82,219,118,6,57,176,167,201,57,85,6,167,139,104,200,111,112,246,147,122,51,92,145,58,142,63,118,109,137,20,244,226,47,8,44,162,182,121,4,152,186,51,57,70,83,93,125,201,50,6,128,234,249,16,95,160,55,197,40,54,215,48,104,109,96,116,226,38,178,208,202,193,3,148,120,137,132,38,3,164,6,178,143,144,54,58,99,219,72,224,224,44,211,229,127,182,89,194,80,71,77,235,168,89,76,119,139,18,153,233,80,27,17,17,236,184,101,144,52,129,93,142,252,52,48,92,105,85,32,216,47,153,112,158,80,57,118,64,49,18,77,188,209,38,139,86,219,44,81,4,139,2,168,226,169,223,163,67,55,248,124,157,87,56,58,141,113,216,236,248,28,134,169,105,109,118,128,128,171,44,243,165,153,167,141,215,30,92,113,209,85,231,60,121,205,86,6,162,142,43,134,210,102,38,225,104,53,38,150,165,155,153,92,158,24,165,221,109,16,60,160,150,93,105,235,198,214,19,85,41,170,101,154,65,2,83,5,172,158,30,155,104,0,215,82,47,10,198,32,59,45,45,150,65,130,12,159,64,194,3,62,202,244,148,46,8,86,77,52,125,46,205,163,2,135,8,151,136,226,148,157,58,195,250,132,106,55,112,196,145,95,142,236,84,244,203,33,204,180,130,203,55,147,249,91,42,215,80,192,39,210,60,170,10,174,105,22,153,65,47,176,91,2,64,201,65,230,167,18,57,113,248,102,150,89,48,224,46,173,188,226,207,45,96,168,236,171,35,57,139,222,156,81,5,136,114,54,17,198,137,192,134,150,139,141,8,20,163,125,108,36,72,235,40,93,162,4,10,66,42,136,177,236,116,134,0,1,55,30,20,142,130,50,205,102,192,77,208,144,108,218,197,144,95,225,140,100,31,52,138,228,11,221,67,163,96,199,6,209,27,146,24,158,227,126,71,219,15,43,1,223,120,198,34,130,5,141,246,209,80,60,151,207,166,6,142,38,154,111,62,216,119,178,131,77,140,242,177,214,104,77,23,101,70,68,145,112,143,101,247,128,104,62,4,3,227,138,37,60,227,151,73,188,55,79,56,121,128,215,79,158,179,143,118,25,48,162,68,47,204,142,24,195,41,228,184,195,174,40,204,55,140,125,245,127,118,74,34,7,221,156,103,80,74,164,95,20,144,81,136,210,42,239,35,224,244,85,144,46,130,103,96,16,65,81,134,68,41,19,180,250,65,239,23,9,235,163,141,139,55,35,220,133,193,96,102,39,166,120,20,245,169,37,93,236,140,187,141,221,140,185,166,170,145,8,240,9,252,93,82,171,201,238,85,200,1,88,2,42,133,46,31,127,46,2,221,208,221,134,254,180,71,237,85,141,86,237,84,83,182,195,137,177,170,113,140,149,196,60,24,121,203,232,186,69,246,53,178,135,72,73,129,212,34,53,142,106,95,84,13,51,110,27,57,114,226,47,68,167,98,234,117,68,52,90,4,62,70,77,96,92,69,18,118,49,70,101,184,160,13,8,232,48,108,88,188,7,69,60,14,215,24,204,255,159,157,236,219,74,18,128,150,94,5,223,52,196,14,12,161,5,99,236,1,51,179,101,212,149,103,56,147,51,124,128,172,45,104,76,79,201,38,5,129,16,54,117,176,247,39,207,5,6,225,29,253,11,137,78,19,244,158,65,51,138,42,88,84,211,22,217,164,224,67,154,61,105,202,73,51,170,166,224,85,74,64,67,127,183,68,47,244,26,108,162,231,94,120,201,138,11,136,24,181,241,168,177,227,210,117,96,15,70,168,251,99,7,205,121,230,183,36,184,135,201,17,114,197,110,58,64,218,147,18,166,12,39,17,183,77,114,167,113,27,231,100,186,57,31,162,174,128,37,217,152,139,243,77,133,168,147,36,254,226,137,48,141,26,215,250,202,61,248,228,114,71,154,136,116,147,208,214,148,59,223,172,200,228,28,120,14,243,157,153,208,106,61,149,80,113,60,239,94,229,202,162,114,47,62,76,148,104,82,14,134,135,56,242,153,155,227,115,110,187,184,53,158,131,59,95,67,244,69,56,87,69,51,108,160,51,99,96,111,129,1,38,65,120,163,91,39,58,126,6,207,80,118,228,15,163,156,50,174,28,194,244,144,77,99,113,83,193,252,185,202,58,66,188,80,65,38,75,204,15,174,190,199,112,180,193,91,57,186,51,221,0,232,172,96,228,234,73,208,217,16,150,230,235,116,218,232,1,75,181,116,198,64,248,142,234,167,45,35,234,69,152,1,218,235,61,168,23,93,168,78,131,106,53,234,94,131,166,116,118,210,237,193,237,245,82,71,30,214,51,4,102,102,161,155,147,143,237,28,130,63,3,101,38,180,235,137,6,198,96,231,57,24,162,21,215,44,68,14,98,112,33,177,147,52,248,176,234,207,24,184,104,65,141,38,182,103,13,250,115,36,136,131,235,189,95,165,8,125,209,205,11,98,1,238,226,197,70,115,24,111,94,196,148,135,71,184,103,252,133,223,18,176,252,158,182,61,55,134,160,30,200,2,18,52,185,99,88,187,85,151,224,230,72,129,89,45,64,92,246,141,74,0,151,172,215,212,115,250,102,99,206,199,112,3,191,153,148,253,19,105,74,216,157,17,187,76,201,120,38,78,219,152,69,118,125,235,179,94,215,153,227,221,244,142,149,175,138,104,52,138,115,117,94,57,86,156,64,203,157,89,191,194,67,41,130,185,59,215,164,59,29,120,7,112,101,16,208,197,161,167,8,124,171,249,224,235,162,164,148,138,88,231,112,167,133,121,143,209,27,243,65,102,61,74,26,236,58,152,253,104,76,207,41,163,119,68,18,189,3,237,179,152,144,132,92,147,147,25,150,33,26,172,252,153,32,112,191,155,47,224,44,30,226,143,5,128,109,154,104,191,21,96,226,114,115,57,20,1,95,121,225,50,96,228,202,137,129,2,216,18,63,2,192,234,204,64,9,224,114,182,132,25,55,119,106,24,122,189,233,201,199,16,10,7,189,72,144,153,3,49,100,25,1,112,39,92,250,154,132,83,33,174,237,176,27,73,210,91,30,187,163,1,25,35,6,25,176,163,82,89,156,28,156,136,169,0,41,150,152,31,161,195,156,239,84,222,44,73,245,173,234,219,34,43,79,136,235,65,92,60,71,23,78,102,48,224,109,39,141,153,197,93,233,118,106,153,128,97,138,44,45,58,100,252,53,108,217,25,253,150,17,194,241,217,184,213,135,248,59,169,214,240,228,125,30,64,110,116,79,51,230,112,149,252,22,124,132,158,240,47,55,199,224,210,8,251,210,237,194,124,163,222,156,199,64,140,98,160,218,99,4,13,131,14,75,115,129,160,20,139,17,211,201,114,196,53,27,23,214,45,254,53,105,248,165,169,103,191,74,219,46,86,102,96,184,156,120,29,146,87,131,95,170,188,49,246,206,20,47,169,173,69,128,211,167,37,153,98,49,143,47,206,197,189,231,247,166,219,187,87,219,59,48,128,145,73,120,46,226,185,76,96,66,158,71,93,176,177,192,234,34,63,140,60,51,227,172,142,253,14,172,217,243,237,43,222,30,216,127,16,16,73,167,129,194,211,125,144,108,150,105,220,80,163,116,76,68,168,19,179,153,20,6,33,125,33,198,7,65,31,84,1,71,187,143,127,109,29,74,151,48,158,54,222,208,33,43,0,195,238,62,137,109,86,21,219,171,190,115,213,123,114,33,22,143,223,229,5,96,113,115,224,6,160,159,13,240,104,255,176,79,126,198,115,13,144,73,183,71,155,236,182,190,250,57,140,146,41,199,211,58,206,175,255,171,203,47,190,79,155,135,147,227,150,111,99,27,99,7,177,251,97,120,56,122,153,47,48,133,132,109,140,92,165,122,87,184,13,174,247,75,166,99,71,95,189,184,133,208,36,166,30,246,86,166,16,7,105,236,101,118,38,211,163,200,247,74,65,84,27,6,189,34,83,60,22,37,107,137,232,46,65,105,128,72,16,189,178,3,167,8,58,116,26,155,112,139,219,130,105,108,228,238,131,196,104,3,150,122,59,47,184,224,49,60,176,6,244,10,10,203,141,175,28,157,171,193,135,75,198,208,117,58,184,100,252,97,134,14,9,87,184,106,46,171,79,75,230,96,146,242,233,43,12,185,40,219,140,141,161,89,123,83,97,28,241,149,12,41,29,56,80,66,36,20,71,71,137,164,125,252,57,31,213,122,178,190,186,225,214,127,225,211,18,29,175,147,127,90,130,147,156,57,55,203,58,5,47,203,191,64,126,11,158,213,151,155,223,226,55,194,233,131,248,62,39,94,151,207,131,215,246,186,135,16,186,168,248,173,150,115,64,217,103,72,215,207,90,68,127,6,247,107,204,61,205,50,224,52,123,156,88,186,229,179,124,124,30,170,115,241,121,146,60,211,124,202,13,96,115,33,216,171,86,164,137,73,188,133,41,102,252,100,55,181,73,65,14,205,106,115,38,177,133,154,151,179,37,169,75,239,76,83,54,78,62,224,82,41,179,161,190,215,38,61,69,58,98,106,175,83,239,224,81,163,42,32,119,190,194,201,185,86,68,51,87,196,240,59,245,179,92,199,235,95,46,37,221,66,248,164,152,152,131,62,84,165,96,179,240,244,18,24,30,57,190,9,190,216,136,168,244,187,104,63,52,234,77,115,117,155,228,222,36,89,119,27,107,45,18,43,233,91,126,169,116,141,120,38,235,255,132,148,184,27,225,20,14,174,24,96,38,194,236,1,100,246,157,54,71,57,237,144,183,70,137,162,44,157,215,237,148,99,200,133,39,51,158,188,62,133,57,193,129,195,82,75,112,201,135,210,7,173,245,150,111,145,97,25,227,50,59,42,72,168,196,83,81,66,102,142,12,3,145,122,34,246,84,158,110,4,191,134,180,242,29,3,73,58,159,151,61,108,205,251,212,41,33,149,12,62,175,133,156,170,173,152,26,210,97,95,149,227,30,222,200,244,20,124,243,254,106,91,70,2,212,201,153,218,82,186,168,46,42,110,51,33,71,123,39,18,169,109,195,206,197,33,133,79,65,210,55,216,248,18,224,128,102,63,54,98,187,191,182,174,188,182,250,90,26,96,142,238,72,192,96,255,192,130,129,2,250,104,190,122,77,244,91,98,225,95,182,171,22,181,193,244,192,115,113,71,153,42,186,192,5,34,14,45,139,164,158,204,6,133,111,136,100,46,208,8,121,52,228,40,129,19,52,192,32,90,28,23,7,251,211,197,91,245,92,8,0,195,131,78,229,2,40,71,212,167,204,236,97,200,151,228,33,155,65,88,46,202,86,102,196,48,199,192,107,147,236,172,153,215,113,108,226,64,232,233,10,236,175,44,204,244,24,112,52,46,68,178,82,233,189,111,251,149,6,197,30,43,252,162,37,104,240,243,192,206,102,241,72,10,91,92,4,117,16,197,138,3,46,23,120,240,216,202,240,25,17,174,230,189,168,177,236,72,176,38,52,34,212,214,208,94,69,213,132,21,34,187,105,37,32,28,140,163,74,241,242,140,121,186,161,131,34,8,198,105,117,116,117,69,224,201,248,176,113,79,36,219,38,238,173,136,229,176,16,184,82,213,102,201,65,13,208,105,190,103,252,92,210,185,42,38,174,176,149,96,212,19,251,101,18,131,23,73,181,69,60,41,38,212,150,76,168,241,84,156,84,123,96,227,107,23,106,141,123,252,38,212,166,79,52,169,79,214,180,78,240,127,178,194,127,128,179,241,144,88,12,227,228,125,15,192,3,44,55,214,233,49,232,67,50,142,98,170,154,93,211,222,24,76,70,1,0,182,132,32,225,137,28,15,97,236,137,4,163,232,14,173,252,184,52,103,79,30,231,135,110,4,184,250,195,131,60,12,178,12,16,203,131,131,153,170,128,15,16,203,160,239,19,24,6,30,103,176,255,197,53,98,49,197,7,192,56,13,144,93,163,87,163,26,75,97,138,51,102,231,141,32,77,122,93,225,219,121,150,87,177,234,150,176,26,128,31,214,213,229,237,108,140,157,152,13,67,38,35,37,159,143,88,174,226,117,22,79,12,27,117,135,248,231,129,197,179,253,121,190,1,0,46,33,129,216,84,93,20,160,105,105,25,194,118,157,216,169,12,90,8,52,91,67,66,75,27,180,205,32,165,241,227,13,162,239,1,161,212,210,72,226,187,36,191,211,67,148,77,142,119,40,150,81,130,210,68,174,24,68,76,228,89,114,67,81,176,221,76,163,192,11,46,52,10,80,18,133,24,125,104,168,102,155,154,245,152,72,175,220,1,101,34,209,91,192,238,77,197,218,184,49,22,60,49,119,164,80,108,105,109,175,156,236,14,128,149,101,103,200,97,144,254,79,120,157,141,18,92,67,206,115,38,145,12,210,6,136,189,208,227,198,194,123,93,54,160,203,119,196,218,18,132,141,159,35,104,168,89,104,221,121,177,141,13,110,122,196,52,27,72,175,4,0,215,43,195,138,60,200,113,82,214,208,98,243,5,104,15,3,58,22,189,180,0,59,86,134,143,233,219,248,252,172,34,136,27,91,98,177,21,64,216,39,95,57,236,167,205,120,243,145,88,10,120,20,248,170,125,5,11,129,79,180,124,170,75,210,77,93,50,143,106,16,119,218,41,236,154,214,125,135,70,218,0,193,1,118,210,234,78,165,222,96,205,47,171,5,126,35,110,100,240,141,213,42,190,179,14,225,132,197,167,29,105,203,78,36,78,81,57,244,4,92,157,181,9,43,172,6,97,55,117,133,66,242,32,141,178,177,42,114,236,180,225,173,220,189,46,124,194,15,19,158,9,243,44,60,169,213,8,176,193,60,55,236,95,156,144,11,128,6,72,209,66,179,129,182,21,54,129,140,156,250,107,214,212,54,96,197,15,138,24,75,228,0,87,76,98,11,16,221,180,164,205,156,200,232,207,14,94,13,176,50,45,43,203,146,7,2,224,192,213,181,83,12,165,78,73,9,138,76,166,237,164,74,17,243,120,53,20,54,149,238,182,127,55,61,240,6,16,151,42,161,75,28,215,161,48,24,170,100,41,133,27,206,69,77,231,19,96,34,76,44,136,145,197,255,130,180,37,29,18,195,168,18,155,171,178,163,178,109,101,115,228,33,32,39,59,57,138,99,28,121,10,1,16,71,130,108,214,14,229,48,89,113,110,20,145,3,215,211,170,52,181,3,8,198,205,44,88,16,5,44,56,42,109,94,183,203,180,63,148,52,81,129,100,103,57,198,130,105,3,46,235,128,139,182,226,126,36,150,116,177,246,48,163,7,136,188,45,129,93,201,60,145,45,147,137,24,39,32,48,9,176,199,18,228,166,65,209,37,2,104,25,1,190,245,39,164,20,10,51,8,27,98,237,23,147,106,88,132,7,206,37,203,189,28,253,90,122,233,88,75,45,0,112,157,9,191,227,225,160,139,77,111,58,195,237,57,9,62,105,0,178,193,118,180,101,234,131,164,113,197,187,137,162,63,208,191,217,45,168,191,30,58,85,34,165,83,40,144,183,135,68,239,204,6,18,63,35,178,13,213,43,198,118,155,112,112,54,108,144,255,4,85,103,152,82,129,101,6,229,82,33,128,156,33,61,210,109,9,59,125,225,109,13,69,58,146,55,112,130,109,162,40,138,152,109,147,79,54,116,8,39,66,93,140,32,27,76,236,12,144,99,224,31,110,86,5,40,162,154,183,146,53,237,106,212,72,103,46,62,224,117,99,24,68,252,85,150,73,10,146,182,241,170,169,239,175,15,239,249,68,153,169,154,178,17,234,236,180,92,3,174,246,201,116,6,120,134,203,210,215,26,4,153,195,160,51,128,54,32,166,23,168,3,137,250,17,117,148,68,145,1,178,116,106,211,129,42,209,104,53,6,69,42,211,182,18,157,172,169,93,59,27,40,81,239,0,185,133,150,94,120,175,105,138,179,176,109,97,104,64,32,76,47,204,183,11,212,145,77,91,13,20,98,197,106,19,246,176,0,4,118,118,3,34,194,189,92,237,154,216,108,237,139,175,121,199,161,227,116,58,221,115,116,154,49,218,67,125,184,198,215,78,137,88,83,38,126,106,41,22,125,166,146,152,38,145,168,41,153,58,147,104,61,153,114,148,232,80,198,176,142,8,2,67,47,216,126,137,133,120,160,239,231,146,213,102,28,121,98,150,157,50,244,200,242,81,32,12,2,35,227,194,2,35,80,75,64,3,130,188,217,27,209,173,142,143,211,32,34,10,64,5,72,212,9,14,114,68,227,117,139,160,216,84,34,77,163,200,69,185,140,135,30,114,52,109,73,59,208,5,22,85,128,76,81,200,212,9,217,30,37,180,214,188,247,142,199,14,51,12,182,254,83,250,17,40,81,235,176,96,90,4,19,36,200,130,69,67,127,113,166,117,88,159,220,135,18,28,38,202,100,102,131,160,34,122,161,170,50,158,81,145,110,4,178,160,130,25,47,221,137,138,237,210,22,112,88,61,166,65,228,179,178,25,32,220,151,149,218,132,255,44,0,98,237,17,53,26,9,39,214,211,210,93,210,176,177,112,1,50,192,12,21,24,205,44,186,66,93,97,200,200,2,88,169,193,52,100,172,131,140,137,201,124,2,10,186,244,141,135,78,116,168,9,0,242,200,129,206,196,231,160,11,148,33,53,10,112,202,1,247,232,171,22,144,225,20,166,73,108,159,39,161,180,40,103,6,48,192,99,248,86,93,107,142,160,45,66,128,179,142,90,91,106,27,70,3,146,28,173,75,128,204,6,176,89,60,74,189,36,157,126,162,235,84,53,226,11,192,132,11,171,254,3,247,148,161,24,239,67,80,109,14,96,119,236,158,226,93,212,45,115,241,95,97,186,43,49,79,26,250,190,101,7,202,254,58,149,38,59,40,58,185,163,35,60,241,150,39,62,245,196,243,158,251,231,185,195,54,14,219,123,145,18,103,83,162,75,226,42,148,41,243,208,31,138,111,154,174,160,200,2,55,9,65,28,85,202,95,122,134,162,87,88,192,95,111,82,193,251,247,61,68,252,134,238,136,192,143,79,15,196,221,51,113,204,108,248,138,252,24,203,37,23,173,28,207,148,59,37,22,164,197,206,6,168,117,225,240,55,8,142,132,156,105,131,7,46,122,242,131,123,45,56,224,14,137,8,140,94,59,128,64,71,18,107,26,206,255,188,227,41,115,77,13,222,171,75,245,113,80,51,83,85,212,41,171,194,55,184,4,28,149,226,82,81,33,92,27,102,45,5,121,22,7,102,130,90,220,191,119,232,134,255,201,179,166,155,141,38,50,79,73,255,55,170,195,179,247,118,13,254,183,204,73,167,137,174,236,198,76,179,209,221,196,188,128,11,37,106,4,85,110,83,44,11,184,106,228,215,14,35,96,188,6,145,122,169,232,63,232,204,138,138,70,162,141,96,243,174,71,84,54,82,15,27,241,126,197,9,155,247,24,77,165,87,241,153,212,8,251,59,20,32,136,205,131,235,24,218,4,80,152,132,55,219,219,160,184,90,50,223,68,163,73,212,30,167,27,37,186,147,87,174,28,166,32,175,255,133,51,104,180,99,18,99,39,59,212,74,78,190,208,105,148,185,149,188,227,169,37,67,226,163,161,168,88,231,10,120,166,168,163,123,48,115,32,58,15,35,47,65,112,67,14,67,112,195,114,14,68,111,101,100,134,72,106,170,120,47,227,50,54,59,116,85,12,189,5,149,85,142,18,43,32,103,49,37,161,88,120,232,71,218,116,192,10,90,37,97,18,216,206,74,212,92,130,211,66,5,115,37,57,135,4,215,95,116,164,237,114,15,13,29,158,36,77,23,158,197,60,240,174,93,58,7,8,165,232,61,135,86,45,245,162,22,17,212,24,234,56,42,44,168,206,163,114,61,121,87,98,147,92,95,24,40,210,239,129,224,91,21,195,113,106,60,208,228,137,239,78,175,183,177,200,113,52,224,232,90,111,190,44,99,194,53,30,212,122,63,162,3,249,151,5,131,87,50,57,226,245,237,103,145,71,176,194,55,117,124,201,241,170,156,179,202,126,36,224,194,153,201,86,249,84,82,225,124,125,117,225,91,196,180,211,77,96,140,241,39,73,136,74,8,97,241,73,2,93,252,11,179,212,44,74,70,238,192,224,75,38,99,108,81,140,63,26,35,148,212,217,14,84,38,155,192,32,133,251,194,11,68,187,192,140,236,192,201,203,58,172,56,159,42,140,230,212,237,127,194,42,33,227,16,85,139,97,115,128,105,222,243,226,182,143,150,3,194,102,125,107,180,115,229,74,12,51,164,186,194,200,28,147,58,157,75,107,230,133,68,215,23,59,101,209,46,228,255,160,55,50,4,139,133,96,150,16,238,178,107,142,181,85,33,108,38,131,253,196,236,13,244,230,158,136,77,247,150,235,167,215,238,145,12,221,62,200,227,23,42,220,190,224,70,106,129,172,106,12,224,203,190,214,47,51,192,211,58,22,153,7,101,6,72,102,70,94,152,155,50,166,150,192,244,76,36,48,209,232,196,72,61,29,130,87,131,176,108,49,146,159,89,72,176,255,112,29,240,158,43,107,19,104,115,65,219,67,125,144,25,208,98,35,19,202,119,15,95,70,17,48,74,9,196,128,46,55,39,36,40,53,95,240,38,126,82,179,175,103,1,9,151,170,139,170,91,93,196,177,127,224,132,10,163,164,79,61,250,137,227,223,119,207,199,24,200,122,184,49,189,215,6,141,49,8,206,77,198,3,137,236,216,34,61,221,192,30,89,144,36,81,4,137,61,212,1,24,229,234,140,42,225,22,46,232,53,184,178,130,155,40,122,146,70,111,83,136,104,240,227,5,167,89,193,83,86,217,50,196,202,128,208,50,247,163,119,80,10,103,156,76,22,51,136,89,53,158,171,71,159,104,230,57,13,166,72,27,1,108,53,130,249,18,117,197,168,81,38,122,167,215,78,115,253,213,148,52,80,113,138,91,92,190,186,182,15,171,89,44,52,48,143,176,169,4,114,167,26,84,76,70,163,167,33,120,62,58,28,132,36,160,120,168,146,157,188,112,197,36,150,240,24,90,247,99,76,2,131,220,236,10,172,44,172,244,16,173,148,132,186,60,29,235,177,134,182,220,145,195,58,204,249,234,232,194,157,120,36,39,63,201,249,80,114,138,116,90,111,180,80,48,70,105,100,65,10,229,2,225,216,105,9,195,1,20,130,195,187,1,98,22,52,203,51,207,249,52,120,215,47,61,240,0,24,99,29,98,60,68,22,51,113,17,87,225,45,176,230,103,17,29,249,249,81,3,139,91,152,198,228,248,108,234,249,24,37,174,23,203,153,216,70,177,126,41,251,113,124,108,15,69,3,16,140,196,212,136,68,43,147,171,68,83,244,218,130,10,16,56,239,238,67,193,83,14,24,93,31,122,167,212,131,174,70,117,12,102,135,10,201,105,65,11,144,113,207,100,186,66,42,210,179,35,255,236,48,2,71,193,34,203,251,36,167,193,99,25,124,154,137,223,51,240,232,200,200,19,95,134,183,215,193,158,111,248,59,8,135,145,40,198,133,201,78,168,162,232,79,212,3,153,74,7,61,159,182,62,213,131,216,78,139,241,49,78,173,207,180,106,167,125,39,199,65,254,188,136,215,113,60,84,202,86,59,167,138,36,94,36,6,149,192,252,250,118,160,176,161,190,34,46,119,144,203,135,20,77,189,104,16,166,118,99,102,96,102,134,40,39,220,170,232,245,172,210,5,250,130,29,81,49,76,50,217,226,217,119,180,198,153,34,66,189,19,237,8,134,128,201,46,49,70,238,22,40,99,99,156,37,35,232,241,135,198,60,155,157,144,62,162,158,33,34,90,238,222,192,207,93,0,232,36,224,134,192,147,144,185,26,6,111,4,34,192,249,44,34,38,51,124,199,117,73,150,47,95,101,135,132,78,147,221,84,234,73,236,234,145,111,212,204,93,144,123,21,50,239,67,244,82,100,36,30,215,57,167,134,132,102,8,130,222,109,206,239,162,172,117,17,53,22,252,46,217,5,178,241,154,153,120,147,247,208,212,129,234,141,96,194,121,183,39,99,155,4,225,27,131,16,4,90,199,106,30,207,198,49,200,229,113,33,19,51,207,77,186,96,161,187,56,166,108,220,203,58,128,180,37,52,243,56,146,212,0,66,183,120,96,178,49,108,51,144,24,108,168,162,208,42,44,6,9,247,3,178,187,149,201,5,204,112,73,211,163,138,105,251,137,11,75,8,34,72,102,157,32,222,177,177,190,82,150,164,165,158,23,219,43,195,186,163,41,62,251,16,53,193,151,136,247,153,0,48,26,56,140,73,28,113,89,35,44,177,250,162,113,24,87,42,89,206,116,209,51,218,24,8,40,33,178,132,20,29,230,30,63,46,36,234,59,210,58,234,83,116,103,27,118,220,214,233,222,143,247,80,227,197,135,212,104,28,22,102,88,189,39,215,215,14,178,242,232,183,44,72,142,32,209,26,29,238,16,96,107,29,254,248,129,228,94,203,189,172,137,136,26,157,243,195,21,218,10,99,185,233,45,219,120,17,119,184,171,235,111,243,62,193,179,71,206,30,185,127,34,34,50,57,146,40,40,81,139,129,201,247,145,83,92,114,215,246,182,11,114,75,119,83,220,116,201,222,140,219,247,194,28,95,162,119,192,50,237,142,118,63,184,5,26,64,102,231,153,10,113,170,89,48,171,243,244,164,190,32,115,21,37,140,229,241,103,163,148,179,93,0,117,139,33,125,221,42,184,206,50,255,90,95,4,244,13,12,78,58,23,82,144,134,28,88,68,2,242,27,111,187,7,251,30,195,22,179,192,198,232,33,73,156,13,137,67,34,28,28,135,163,101,196,202,170,168,123,50,49,121,30,175,50,53,139,103,113,241,46,164,51,38,81,49,226,26,135,135,204,228,208,1,42,114,242,97,212,147,93,247,52,232,71,145,218,215,100,193,124,40,47,75,101,54,39,121,172,36,25,38,36,252,144,195,80,151,241,131,128,95,125,206,143,121,250,150,243,227,151,228,252,96,19,79,118,163,156,25,86,253,222,149,96,233,155,41,24,31,25,224,76,59,135,53,183,25,68,18,247,184,151,0,93,31,16,156,136,7,227,18,202,50,3,76,202,193,35,97,124,24,112,184,9,220,108,52,98,229,186,241,53,207,52,62,53,143,28,15,220,239,191,55,53,108,64,234,123,242,105,228,254,5,18,238,172,223,54,223,47,204,34,199,196,234,50,192,101,73,170,54,146,65,114,154,170,186,165,220,198,32,47,223,44,238,22,9,104,90,244,128,151,143,10,176,63,54,7,88,150,97,224,155,188,146,32,234,12,108,121,46,49,243,158,146,160,66,251,2,7,190,252,46,207,187,153,70,108,47,159,202,63,209,10,199,17,245,63,121,14,184,23,38,197,138,41,199,53,81,150,75,138,53,143,91,180,143,224,171,223,163,251,151,190,71,127,49,78,133,13,189,32,233,56,61,21,38,164,243,207,128,138,228,249,6,205,160,143,61,184,253,115,160,159,45,181,234,145,110,184,237,213,59,174,189,46,27,125,43,89,191,251,175,222,237,150,78,183,228,253,238,191,242,116,175,208,44,165,63,71,199,237,159,131,231,156,172,126,125,60,167,211,253,45,240,156,63,234,240,250,125,244,226,231,21,190,9,135,47,27,250,5,8,135,207,240,236,134,92,243,155,7,53,232,217,106,124,3,96,89,95,91,241,19,251,171,100,49,188,190,63,49,53,94,93,241,19,123,188,233,171,210,123,250,144,201,111,171,96,138,21,39,46,190,45,236,251,111,37,190,149,248,86,226,201,18,159,75,25,255,92,58,196,43,117,151,127,146,9,80,95,165,19,127,198,126,95,165,35,126,198,126,115,231,255,175,223,111,238,83,249,245,77,188,243,51,245,251,66,149,152,124,227,143,191,244,246,8,157,209,21,183,139,191,212,98,117,34,13,110,44,70,33,182,90,236,241,235,158,20,235,14,201,230,138,29,223,138,125,61,197,206,231,139,245,31,74,82,174,159,38,205,90,174,195,106,82,174,159,132,47,95,67,185,103,45,152,231,213,108,9,162,232,129,13,79,106,232,229,205,121,158,251,94,107,61,234,182,148,77,78,224,74,61,214,182,212,237,60,91,61,56,17,65,6,203,106,203,153,195,35,138,226,249,206,203,58,159,235,90,246,163,106,223,203,188,220,219,95,142,163,49,48,135,37,149,37,220,184,7,134,124,242,196,231,115,105,199,94,203,57,195,204,3,240,233,169,63,215,255,47,88,179,177,170,29,29,109,207,79,122,219,235,54,151,99,229,105,116,139,172,156,91,157,203,140,147,75,129,99,101,139,233,106,207,245,123,236,229,152,151,121,45,43,118,125,95,206,189,205,195,178,166,192,164,190,197,133,237,207,78,123,111,101,158,183,179,194,66,111,231,188,149,121,173,235,198,93,4,192,88,105,213,155,226,207,227,249,122,190,229,88,206,205,112,154,128,210,185,242,9,223,75,214,119,217,143,118,255,251,88,220,18,239,155,78,108,248,76,234,172,146,14,100,254,213,104,241,194,109,242,72,0,253,186,141,195,241,215,245,241,162,15,214,124,213,222,147,59,193,47,225,88,109,109,115,61,231,25,22,246,78,55,243,177,214,185,30,10,189,0,102,245,151,73,66,43,158,237,124,111,219,177,237,219,190,34,191,220,239,132,123,204,167,44,94,6,201,106,234,53,140,79,158,243,82,202,124,22,161,163,0,200,234,73,184,234,243,211,253,244,85,10,53,37,108,165,110,207,79,245,216,142,125,95,22,100,21,101,57,106,125,240,67,227,5,23,192,164,122,229,203,53,143,240,197,103,59,95,219,177,150,121,169,251,185,29,138,231,243,206,153,206,114,108,174,247,12,152,213,151,168,193,186,190,128,77,62,134,191,183,229,46,236,148,13,210,244,203,185,238,101,54,97,60,0,178,122,18,148,240,152,248,107,87,58,172,151,232,68,111,187,147,97,84,135,254,18,29,128,84,80,45,181,247,239,62,78,173,112,185,50,205,247,230,74,157,230,63,76,235,31,127,252,95,223,255,240,254,1,253,29,254,76,255,191,23,250,253,3,176,247,130,190,250,191,191,253,248,253,155,191,188,255,240,225,167,223,245,127,254,244,246,199,239,62,252,237,119,143,242,255,229,254,103,239,21,219,31,160,163,62,145,63,254,248,241,251,31,126,126,243,211,135,15,31,223,252,245,195,199,15,255,246,227,119,255,241,241,195,223,169,243,223,115,201,94,228,231,119,31,255,251,251,15,127,122,251,254,127,188,253,233,135,183,127,122,255,238,119,247,159,30,102,226,135,255,252,241,35,253,179,207,245,49,198,249,129,134,127,149,71,194,115,31,197,244,43,155,236,115,238,146,121,117,183,47,62,196,250,44,170,62,39,38,59,95,203,18,245,121,193,252,69,241,175,47,122,102,174,191,225,242,125,150,165,171,165,240,223,217,10,124,225,241,112,171,230,169,214,139,63,150,10,14,190,138,255,145,47,81,203,165,107,173,75,105,54,86,203,14,178,186,215,52,225,199,91,172,124,115,141,223,134,158,111,126,92,183,100,228,220,195,13,250,191,193,0,252,175,67,125,169,32,127,214,71,141,23,70,188,241,200,38,140,120,51,24,132,188,173,26,189,106,49,111,29,246,181,199,188,205,223,130,194,127,217,62,212,107,179,39,220,236,176,23,215,30,95,148,57,97,133,160,208,141,83,219,200,205,37,201,37,211,164,128,166,99,63,185,4,87,179,156,126,139,93,225,230,156,144,189,47,126,73,139,149,184,89,20,64,190,176,130,159,221,229,43,10,253,202,111,201,75,27,122,165,89,178,14,203,245,113,73,237,186,193,107,131,143,170,240,248,174,166,233,225,250,124,84,141,89,139,229,89,59,129,80,26,2,123,160,226,228,188,127,85,191,123,147,187,198,214,115,94,176,13,147,229,82,198,186,101,248,182,223,79,106,2,94,175,154,105,145,44,123,49,149,161,171,197,155,228,134,214,88,124,90,53,184,179,204,183,159,78,187,123,179,81,21,75,125,71,238,70,206,224,208,27,108,147,68,223,211,141,22,248,238,109,97,92,63,99,16,18,222,81,244,61,166,40,97,4,30,35,101,232,67,28,139,204,202,110,39,233,67,36,72,146,167,26,241,77,175,92,86,124,150,71,114,70,20,151,155,99,209,245,18,0,227,36,86,211,81,31,242,224,157,123,165,20,183,81,255,147,199,50,227,37,37,95,233,170,237,100,4,188,138,181,250,33,116,127,249,144,251,119,38,24,92,161,231,20,97,152,40,149,51,68,84,72,168,49,12,174,92,163,208,161,58,91,13,191,94,141,74,80,20,122,115,243,236,227,199,11,132,124,127,191,98,74,37,218,177,21,114,187,28,138,13,185,131,235,134,89,34,25,165,148,230,137,241,130,98,41,215,70,93,241,25,67,202,225,22,222,18,224,66,210,23,32,196,15,166,139,126,219,93,97,231,193,174,140,219,22,244,161,90,229,5,36,154,254,108,187,74,184,55,221,253,227,214,23,55,209,234,167,165,251,219,150,26,198,88,166,148,159,32,203,9,28,41,50,172,83,127,230,225,203,219,146,246,244,16,244,185,203,107,56,208,225,14,100,70,18,161,225,146,186,33,150,41,114,102,199,186,171,45,245,46,52,54,219,44,184,252,200,141,100,159,28,32,82,172,147,46,74,232,174,118,39,128,189,247,252,202,171,127,172,228,192,205,163,217,238,48,88,65,146,130,78,201,35,170,252,234,181,60,86,94,191,105,121,211,39,106,121,77,50,4,97,38,21,121,120,72,41,249,141,249,251,25,212,228,70,144,236,15,214,207,36,115,18,221,123,85,150,218,80,83,227,139,62,250,252,153,136,52,185,36,72,219,24,30,151,148,103,14,42,140,75,82,236,179,153,229,114,69,14,179,234,197,232,157,51,122,250,213,61,0,251,162,189,198,215,125,221,94,107,118,163,47,41,135,119,136,246,113,167,125,249,84,193,75,161,68,49,171,210,181,3,214,93,58,2,190,227,133,15,196,105,82,1,73,11,98,73,129,48,39,50,169,6,74,108,13,26,237,172,87,147,37,80,162,46,182,36,140,20,25,80,172,130,156,167,45,80,221,222,44,4,121,221,56,101,180,104,55,37,228,32,147,235,175,213,0,188,25,132,64,139,220,116,219,13,142,175,66,89,182,46,120,214,115,21,208,138,223,168,102,25,8,182,230,140,104,108,190,9,19,70,122,20,114,26,4,246,71,179,174,110,205,37,113,194,84,77,13,118,18,14,194,64,6,169,48,18,108,202,229,225,162,27,128,160,195,113,86,101,55,168,1,217,23,151,128,185,113,124,240,100,129,85,97,80,179,182,120,128,124,77,121,153,84,133,131,17,22,121,24,97,135,185,194,70,40,68,157,43,209,190,244,83,37,163,135,221,143,230,18,170,68,233,83,11,0,145,23,180,246,17,212,66,189,134,133,98,102,94,56,43,31,33,221,198,152,158,226,126,46,177,201,184,233,19,132,32,210,82,156,2,206,175,23,38,44,31,55,133,66,72,168,58,208,203,0,59,129,74,46,72,47,161,207,140,136,3,165,39,251,33,238,154,184,181,226,246,203,54,105,186,153,243,77,143,188,33,101,31,158,195,52,195,55,240,28,199,165,28,15,187,224,114,35,35,28,89,101,99,235,223,46,46,243,115,50,184,248,124,36,176,218,200,119,173,170,164,238,222,30,1,34,124,252,161,212,50,59,5,236,97,122,12,160,220,148,31,68,182,17,153,75,202,129,34,155,202,89,217,64,116,25,109,38,52,60,18,186,31,251,37,139,25,182,120,194,7,50,102,145,112,148,132,239,68,230,52,50,176,192,227,34,139,105,148,70,143,38,150,167,249,66,2,26,205,230,32,163,189,12,247,50,158,168,111,161,159,15,131,112,5,33,54,75,101,73,84,134,11,69,21,220,129,114,74,211,56,230,222,110,215,190,142,62,166,178,61,49,77,24,135,60,90,177,200,29,21,14,129,217,244,119,89,20,86,158,57,141,230,12,3,133,161,103,83,131,30,105,49,186,50,126,30,182,36,97,152,97,183,206,152,39,152,150,128,211,13,195,182,177,7,10,120,173,22,183,121,113,63,199,253,238,216,65,224,24,29,55,100,201,247,222,207,220,57,230,134,73,141,144,150,175,62,21,14,248,97,119,8,99,117,67,142,205,62,0,72,33,194,101,84,65,99,83,101,19,70,181,67,139,249,236,29,130,2,250,220,168,123,149,238,117,232,101,93,222,172,23,153,35,60,101,103,142,24,12,236,145,45,201,250,243,152,229,87,111,248,231,215,43,166,47,199,240,255,58,35,36,230,207,148,42,226,181,33,18,249,173,134,95,103,57,7,148,125,150,251,156,204,80,218,215,120,226,46,170,43,164,55,19,201,88,80,61,22,16,166,172,213,152,87,3,145,216,134,20,145,156,121,220,142,176,180,222,238,148,51,129,41,15,46,146,83,120,131,193,220,118,244,59,75,78,97,131,72,46,40,128,112,109,123,188,70,242,207,3,132,207,249,193,170,90,12,32,2,81,4,117,17,201,2,98,142,207,6,37,54,174,142,8,5,20,191,84,66,167,163,98,136,2,194,247,80,133,116,135,5,53,26,150,83,150,38,188,47,159,28,122,200,235,53,136,174,201,29,243,22,121,7,149,95,22,108,246,193,42,237,225,91,184,85,145,200,35,66,252,35,57,12,66,133,130,53,166,6,144,39,48,11,214,30,156,2,13,139,19,86,15,150,214,45,123,164,12,82,239,52,115,159,17,209,170,221,139,207,209,102,47,89,140,80,157,62,39,59,146,232,0,198,152,107,159,142,2,105,126,155,165,43,44,242,30,25,218,46,171,29,250,20,57,67,166,150,219,228,206,147,245,215,77,1,117,208,134,124,159,29,218,111,150,52,90,171,118,169,246,134,137,239,190,239,198,7,208,114,146,207,90,236,46,166,230,57,233,227,187,48,50,199,17,78,131,8,85,237,241,41,184,77,205,9,254,4,54,54,15,212,154,146,93,32,78,71,193,76,85,135,181,125,227,3,57,72,7,73,93,108,222,177,174,88,141,120,206,215,34,44,87,88,80,57,168,218,199,111,35,174,133,151,170,242,130,140,142,194,13,60,253,64,153,57,241,250,117,238,59,169,179,143,71,39,27,30,98,33,105,4,30,68,44,104,51,128,144,218,184,29,194,136,146,49,195,172,198,9,3,46,114,100,1,54,195,230,137,123,107,216,124,113,5,179,69,78,8,193,136,37,167,165,129,91,6,142,234,152,110,228,201,142,101,131,200,131,140,196,142,233,123,153,16,196,198,227,79,151,84,91,55,89,15,100,0,47,61,62,153,194,233,9,131,192,90,217,13,38,197,246,127,1,99,101,225,30,191,92,99,229,75,215,80,217,147,138,254,84,206,67,13,230,55,231,79,183,35,124,125,191,19,184,89,165,106,118,106,185,112,59,253,163,111,191,13,78,150,24,96,110,175,240,238,10,149,59,173,10,43,23,35,191,154,213,237,85,57,212,130,197,55,107,56,154,153,180,138,66,195,50,238,240,29,168,3,11,158,42,7,236,172,186,53,249,53,144,75,39,213,226,25,8,185,104,68,228,245,206,87,199,176,131,24,96,197,71,132,121,21,31,73,179,143,29,30,140,17,136,133,112,8,132,243,45,47,246,33,158,28,75,178,206,177,23,182,218,172,8,200,111,133,133,128,152,10,101,96,203,5,57,44,99,13,60,60,12,89,13,34,222,43,86,39,24,207,195,239,141,153,189,56,242,79,195,64,115,16,116,136,17,158,69,23,229,135,33,71,165,39,83,183,233,128,221,139,23,149,46,170,127,210,194,57,10,182,7,10,84,156,131,111,17,8,161,119,249,18,15,231,72,228,162,115,231,205,94,245,60,140,205,141,60,76,12,103,30,208,226,177,214,34,106,19,220,251,197,241,235,37,100,117,147,121,232,107,167,211,168,42,50,100,104,2,200,108,96,93,217,254,133,61,30,121,64,96,17,142,129,56,246,18,57,144,211,204,163,14,7,124,107,115,164,43,223,195,106,57,85,10,183,120,224,0,142,63,68,22,194,108,125,220,130,113,155,186,173,28,118,186,227,3,180,125,86,15,224,35,201,29,87,8,122,5,126,25,254,246,36,31,240,65,253,160,198,68,16,99,136,143,42,135,88,201,139,125,240,184,56,52,25,57,251,100,252,112,82,39,243,46,41,116,55,143,154,198,215,23,208,132,30,168,209,17,108,66,208,25,193,167,44,237,146,37,174,195,10,102,107,234,23,32,44,81,88,196,129,217,15,146,0,5,69,38,71,80,206,228,178,40,208,178,91,221,199,159,139,199,150,95,168,236,138,207,253,105,109,247,136,233,134,143,127,133,116,195,203,183,171,23,191,88,221,237,90,233,234,118,213,212,245,84,11,165,86,16,123,60,251,49,50,62,167,35,145,23,135,176,202,6,95,96,235,42,40,62,201,67,28,73,124,178,242,1,58,29,191,52,131,14,133,201,121,127,171,190,2,107,113,177,196,206,240,173,88,25,234,138,102,51,224,128,120,114,223,169,148,171,229,226,9,116,9,55,115,130,109,31,32,18,44,8,202,130,220,29,135,55,109,229,173,37,56,60,95,52,48,18,218,90,16,68,138,244,225,42,106,9,151,224,29,79,215,103,121,70,202,78,52,199,167,127,210,49,11,72,168,164,217,173,26,207,216,240,105,27,9,29,193,160,22,189,106,3,47,6,201,145,53,122,251,249,225,28,120,182,181,13,88,147,224,204,213,29,28,48,4,10,213,0,26,106,73,236,4,72,55,142,214,183,160,8,142,91,16,197,128,198,50,169,36,246,120,152,3,178,148,84,34,68,52,20,137,118,52,92,81,12,98,85,33,47,154,187,188,61,123,76,170,153,1,201,44,227,66,58,53,248,180,158,168,72,181,182,8,208,134,111,62,75,222,172,0,1,76,7,220,9,224,213,57,123,194,118,182,161,192,73,133,80,44,255,71,37,172,156,216,243,213,222,21,75,17,137,91,27,134,127,56,95,225,155,16,70,133,250,20,209,172,0,196,116,1,106,112,15,118,113,104,176,114,9,242,16,2,65,218,234,48,128,7,139,143,35,70,8,143,183,1,196,3,244,92,192,0,227,27,198,242,180,173,139,28,245,101,10,135,2,152,226,179,41,226,136,33,47,74,16,170,245,219,143,78,175,151,159,193,36,230,37,54,192,58,57,39,43,133,95,24,29,209,117,88,240,160,16,129,91,72,24,233,142,112,220,198,42,189,141,159,109,186,241,106,30,63,193,37,49,18,230,188,88,148,42,89,6,156,48,11,191,226,133,22,66,159,24,180,181,17,137,2,11,88,71,144,108,102,124,175,176,194,242,219,242,220,26,250,89,57,220,3,149,114,9,41,111,214,54,187,102,206,113,76,24,182,55,171,138,189,24,72,188,198,80,74,98,5,241,41,190,146,192,132,189,66,85,196,77,7,147,203,103,161,191,251,120,99,176,92,138,191,132,143,143,204,62,19,9,65,112,36,210,37,138,160,68,78,69,97,150,74,188,40,22,71,201,9,104,110,70,75,136,183,170,235,18,206,136,241,54,151,167,149,148,158,18,178,243,200,237,28,141,30,97,44,79,251,83,228,165,52,192,17,231,27,211,239,68,179,185,150,96,86,205,137,66,39,38,157,0,77,4,108,38,131,131,156,206,68,121,20,248,170,40,226,145,112,120,211,180,202,235,146,24,198,169,67,176,181,162,97,14,231,211,55,240,209,82,129,99,196,165,93,204,29,16,78,140,112,95,141,198,30,133,54,22,187,42,37,249,8,103,17,155,23,207,129,87,184,91,75,213,56,248,107,177,18,196,125,103,253,198,14,105,107,78,114,182,41,244,53,233,129,40,163,185,159,178,241,254,225,67,49,120,32,146,198,100,138,193,141,68,2,190,141,56,76,82,246,37,50,233,89,124,119,182,162,155,113,245,230,71,218,199,246,188,203,48,177,105,162,210,31,45,131,170,76,199,202,36,6,69,48,58,4,48,20,177,109,113,185,225,224,246,118,32,164,129,210,34,41,38,244,154,81,117,74,251,201,14,25,44,160,131,14,225,41,184,54,15,142,204,48,152,224,43,34,21,171,149,28,167,215,182,94,186,16,171,14,240,233,147,136,212,208,98,49,188,40,128,163,238,171,2,152,48,203,58,66,64,166,136,15,107,75,64,186,236,140,235,22,0,58,171,137,229,129,126,64,224,183,4,84,23,60,155,170,12,114,183,104,199,98,85,110,76,156,227,138,67,33,22,158,21,61,122,2,9,66,199,95,210,25,117,148,68,145,137,234,78,148,132,137,184,28,132,106,98,244,14,102,49,175,79,4,185,149,239,21,41,254,183,55,123,228,10,140,35,14,98,169,124,1,99,3,70,118,179,171,191,146,57,176,10,251,150,9,25,175,22,72,27,135,102,75,177,200,245,137,99,186,38,193,64,165,48,212,98,131,43,80,98,52,48,131,101,20,108,167,104,94,53,244,184,27,160,34,96,246,173,234,85,204,166,221,96,88,190,72,37,244,116,48,100,155,112,254,112,117,66,0,86,0,236,24,144,137,52,123,190,184,17,182,74,220,80,227,150,147,218,52,69,46,12,62,41,190,143,84,93,121,239,77,150,234,118,123,169,14,16,25,146,133,175,220,28,174,6,54,98,145,129,139,71,71,36,152,18,217,81,9,158,159,50,174,229,173,36,28,106,18,94,125,248,86,180,74,245,141,148,224,186,179,181,8,235,223,107,121,126,107,150,246,184,214,151,244,226,27,212,133,143,156,174,98,186,21,152,177,91,26,223,169,214,193,200,154,177,21,189,122,48,130,138,211,228,229,62,85,123,182,30,50,99,55,13,182,174,36,66,64,181,167,69,110,159,25,119,94,148,200,16,198,77,34,40,26,130,153,193,152,218,149,56,14,28,90,121,51,76,104,16,45,209,94,53,194,55,200,129,61,77,206,231,50,248,100,68,129,198,103,204,193,217,225,138,212,113,252,177,107,187,138,169,87,135,64,158,17,149,206,35,192,180,161,201,177,69,116,110,77,9,31,21,183,143,197,74,14,30,157,196,235,35,68,20,32,53,208,105,132,180,209,185,218,70,138,4,231,151,174,215,179,205,2,175,112,24,147,212,44,0,168,94,78,240,165,67,211,20,35,2,171,62,165,91,251,83,204,109,49,69,47,138,111,166,74,29,161,200,107,39,72,130,148,12,146,100,20,53,65,22,73,171,2,193,126,201,222,243,100,203,129,6,138,137,104,15,142,6,92,52,241,102,9,57,88,20,64,21,79,253,30,189,191,193,65,236,92,200,209,195,140,195,102,47,233,48,76,189,38,191,3,4,252,106,153,227,205,220,114,76,88,224,183,139,126,61,231,246,107,182,50,16,163,92,49,240,54,179,31,71,19,51,49,67,221,204,52,233,222,160,8,220,6,153,7,58,220,149,106,111,76,62,145,182,81,36,235,141,84,188,122,184,122,122,108,34,254,174,5,110,148,201,65,108,91,154,13,131,4,245,102,2,229,7,240,81,166,167,212,18,48,129,162,157,116,105,75,161,234,114,169,14,143,13,23,56,166,184,196,46,39,14,155,132,183,22,216,33,146,52,125,168,243,140,174,49,153,28,11,170,45,246,97,250,92,125,66,127,30,228,194,192,244,18,126,62,74,30,121,41,217,133,52,140,95,131,7,11,152,172,212,30,194,113,43,120,198,51,221,103,75,229,59,42,58,137,86,19,85,38,215,52,171,14,65,63,178,219,20,176,135,131,238,147,106,38,137,95,60,51,96,131,157,123,105,12,23,127,188,3,67,101,151,38,233,27,232,244,26,85,161,168,111,36,74,73,162,184,64,203,197,70,4,10,226,62,54,18,180,150,40,180,163,96,15,178,63,104,7,217,33,22,1,2,110,60,40,156,152,101,26,222,128,155,160,41,218,180,83,91,98,141,159,197,185,6,166,40,205,77,133,28,141,17,111,75,212,201,109,3,205,111,48,236,77,151,231,131,0,131,26,31,183,192,51,238,154,196,169,243,132,239,7,184,250,228,121,248,104,156,194,198,75,206,29,71,98,185,98,70,168,0,36,90,106,118,128,105,125,245,159,58,35,39,175,221,156,103,94,200,204,239,40,195,82,235,212,137,198,40,61,163,132,37,86,182,143,128,211,87,65,174,31,92,30,3,219,143,108,54,50,226,160,14,15,10,179,136,95,31,183,92,188,197,225,238,30,6,247,132,195,97,209,118,161,202,152,164,162,26,133,216,168,221,239,146,147,69,54,158,66,14,152,49,16,41,116,249,248,115,17,254,134,78,56,244,178,61,106,175,106,171,106,167,154,236,21,206,145,85,95,227,73,39,118,192,200,22,70,135,46,106,2,163,178,16,169,34,144,77,164,172,81,191,139,58,96,166,237,68,141,40,241,34,162,171,49,245,69,34,26,45,46,31,99,41,48,218,34,9,198,24,99,53,92,40,7,132,121,24,54,44,10,132,226,32,135,203,13,118,42,144,157,247,219,74,18,128,150,94,213,158,105,136,40,24,2,14,198,136,4,102,66,203,168,20,207,112,82,103,248,96,151,161,231,230,129,223,7,121,16,54,104,48,122,39,191,163,7,213,45,186,21,18,17,30,196,252,160,8,68,141,35,106,37,139,108,82,112,29,205,158,52,229,252,25,53,49,112,38,37,160,161,191,91,162,6,121,133,45,81,235,46,156,99,197,133,73,140,202,103,84,80,113,233,58,176,135,40,212,253,177,131,230,60,101,76,18,242,195,228,8,73,230,54,29,32,237,73,9,94,134,243,137,219,38,73,87,184,141,115,50,85,148,143,86,87,192,146,108,204,197,185,164,66,44,74,18,149,241,68,240,70,141,107,125,229,21,124,114,185,35,77,68,186,73,104,107,202,125,110,86,100,66,165,203,99,190,51,19,90,173,167,50,49,141,167,224,171,220,100,84,238,197,71,140,18,99,202,33,242,16,93,62,115,115,124,250,109,215,185,198,211,113,231,84,136,78,7,231,147,104,134,13,244,90,12,236,45,48,192,36,52,111,244,223,68,15,207,224,2,202,2,1,96,148,83,198,149,67,240,30,178,105,44,110,214,172,63,252,89,71,136,23,42,200,100,137,249,193,141,248,24,164,54,248,60,71,167,168,27,0,105,133,35,87,79,66,209,134,96,53,95,167,211,70,15,99,170,133,222,97,92,83,122,11,154,18,234,53,153,222,131,122,209,133,234,52,168,86,163,238,53,104,74,103,39,93,122,120,241,66,73,14,235,25,194,53,179,128,206,201,71,124,14,33,161,129,50,19,218,245,68,3,99,176,51,35,12,220,138,107,22,226,9,49,228,144,216,73,26,146,88,245,103,12,103,180,80,71,19,219,179,134,2,58,18,196,193,245,222,175,114,139,189,232,62,6,177,0,119,29,99,203,222,194,56,146,92,73,71,184,126,252,133,223,29,176,196,96,182,61,55,134,160,30,200,2,18,52,185,99,88,187,85,151,224,230,72,129,89,45,64,92,82,142,74,0,151,229,207,212,115,250,102,195,204,71,118,3,191,153,148,253,19,105,214,9,156,23,29,34,83,50,158,137,211,54,102,145,93,234,250,172,151,120,230,120,101,125,254,26,243,253,74,152,32,58,161,88,113,2,45,119,102,253,10,143,182,8,230,110,98,147,238,116,224,205,192,149,65,64,23,135,30,23,240,93,231,131,47,145,146,82,42,98,157,131,160,22,230,61,70,111,204,7,153,245,40,105,176,27,96,246,163,49,61,167,140,30,20,201,16,11,180,207,98,130,179,159,146,30,59,222,61,246,94,143,153,32,112,235,155,175,229,44,30,226,253,255,192,54,77,180,223,10,48,113,185,207,28,138,128,107,184,112,25,48,114,229,104,64,1,108,137,31,1,96,117,102,160,4,240,176,90,30,141,155,59,123,12,189,222,244,136,99,8,144,131,94,36,244,204,129,24,178,140,0,184,41,46,125,77,194,169,16,215,118,198,141,36,233,45,143,221,209,128,140,17,99,11,216,199,168,44,78,78,72,196,84,128,204,75,204,143,208,63,204,55,45,111,150,221,242,38,111,13,54,205,223,202,245,32,90,158,99,14,39,51,24,240,14,148,70,210,226,174,116,59,181,76,192,48,69,150,22,29,50,254,26,182,236,140,110,203,8,225,168,109,220,234,67,84,158,84,107,120,224,62,15,32,55,186,167,25,115,184,96,126,11,254,62,79,248,151,155,99,112,105,132,125,233,118,97,190,81,111,206,99,224,210,236,66,203,8,26,6,29,150,230,2,65,41,22,35,166,147,229,136,107,54,46,172,91,252,107,210,240,75,83,207,126,193,182,93,172,204,192,112,57,99,43,100,189,4,191,84,121,99,236,157,41,94,114,98,138,0,167,79,203,61,197,98,30,223,170,137,123,207,239,77,183,119,175,182,119,96,0,35,147,240,92,196,115,153,192,132,60,143,186,96,99,129,213,69,126,24,121,102,198,89,29,251,29,88,179,231,219,87,188,61,176,255,32,32,146,78,3,133,167,251,32,217,44,211,184,161,70,233,152,136,80,39,102,51,41,12,66,250,66,140,15,130,62,168,2,142,118,31,255,218,58,148,174,102,60,109,188,161,67,86,0,134,221,125,18,219,172,42,182,87,125,32,163,247,228,98,41,30,191,203,227,129,226,230,192,13,64,63,27,224,209,254,97,159,252,0,216,26,32,147,110,143,54,217,29,126,245,115,24,37,83,234,167,117,156,95,255,87,151,95,124,203,54,15,50,199,45,223,198,54,198,14,98,247,195,240,112,244,50,95,96,10,9,219,24,185,74,245,174,112,27,92,239,151,76,199,142,190,122,113,55,161,73,164,61,236,173,76,33,14,210,216,203,236,76,166,71,145,239,149,130,168,54,12,122,69,166,120,44,74,214,18,231,93,130,210,0,33,31,122,145,7,78,17,116,232,52,54,225,22,183,5,147,219,200,141,8,137,220,6,44,245,118,94,112,237,99,120,153,5,232,21,20,150,27,95,68,58,87,131,15,87,143,161,235,116,112,201,248,195,12,29,18,174,112,213,92,174,159,150,204,193,36,229,211,23,27,114,81,182,25,27,67,179,246,166,194,56,226,43,25,82,58,112,160,132,72,40,142,142,18,73,251,248,115,62,170,245,28,126,117,195,173,255,194,156,212,29,175,147,207,73,125,78,209,205,178,78,193,203,242,47,144,245,130,253,0,95,110,214,139,175,51,35,117,15,38,253,12,120,125,101,70,234,229,183,76,48,62,160,236,51,100,164,102,45,162,63,160,247,53,166,164,102,25,112,154,61,78,44,221,210,92,62,62,15,213,185,248,60,73,30,120,60,229,94,176,185,16,236,197,12,210,196,36,222,194,20,51,126,236,147,218,164,32,135,102,181,57,191,216,66,205,203,217,146,212,165,23,42,41,73,39,31,112,169,148,217,80,223,107,147,158,34,29,49,225,215,169,55,243,168,81,21,144,59,95,236,228,12,44,162,153,43,98,248,133,219,89,46,233,245,47,151,168,110,33,124,82,124,203,65,31,170,82,176,89,120,122,9,12,207,35,222,4,95,108,68,84,250,93,180,31,26,245,166,41,188,77,114,111,146,195,187,141,181,224,161,95,108,249,165,210,53,226,153,172,255,19,50,229,110,132,83,56,184,98,128,153,8,179,7,144,217,119,218,28,229,180,67,30,41,35,138,178,36,95,183,83,142,33,23,158,204,120,242,250,20,230,4,7,14,75,45,193,37,31,74,31,180,214,91,190,69,134,101,140,203,236,168,32,161,18,79,69,9,153,57,50,12,68,234,137,216,83,121,186,17,252,26,210,202,119,12,36,73,126,94,246,36,38,239,83,167,132,240,83,207,94,11,57,85,91,49,53,164,195,190,42,199,61,60,174,229,41,248,230,253,213,182,140,4,168,147,51,181,165,116,81,93,84,220,102,66,142,246,192,20,82,219,134,157,139,67,10,223,144,162,111,176,241,37,192,1,205,126,108,196,118,127,109,93,121,109,245,181,52,192,28,221,145,128,193,254,129,5,3,5,244,209,124,237,154,232,202,61,126,185,154,232,23,190,171,22,181,193,244,192,115,113,71,153,42,186,192,5,34,14,45,187,148,48,153,13,10,223,112,175,161,64,35,228,209,144,163,4,78,219,0,131,104,113,92,28,219,78,183,131,213,115,33,0,12,15,58,149,11,160,28,81,159,50,179,135,33,139,146,135,108,6,97,185,40,91,153,17,195,28,3,111,75,178,179,102,94,199,177,137,3,225,217,135,208,61,162,179,133,72,86,42,189,13,110,191,210,160,216,99,133,95,180,4,13,126,30,216,217,44,30,73,97,139,139,160,14,162,88,113,192,229,2,15,30,91,25,62,35,194,213,188,23,53,150,29,9,214,132,70,132,218,26,218,115,106,154,198,66,100,55,173,4,132,131,113,84,41,222,21,49,79,55,116,80,4,193,56,173,142,174,174,8,60,25,31,54,238,137,100,219,196,189,21,177,28,22,2,87,170,218,44,57,168,1,58,205,247,140,159,75,58,87,197,196,21,182,18,140,122,98,191,76,109,240,34,169,182,136,39,197,132,218,146,9,181,252,1,226,227,235,23,106,243,244,77,168,253,34,147,250,100,77,235,4,255,39,43,252,7,56,27,15,137,197,48,78,222,247,0,188,203,114,99,157,30,131,62,36,15,41,38,176,217,53,25,142,193,100,20,0,96,75,8,210,160,200,241,16,198,158,72,48,138,238,208,202,15,87,114,78,229,113,126,232,70,128,155,63,60,200,195,32,203,0,177,236,56,152,191,10,248,0,177,12,250,62,129,97,224,113,6,251,95,92,35,22,83,124,0,140,147,3,217,237,121,53,170,177,20,38,62,99,118,222,8,34,239,112,30,43,124,59,207,242,42,86,221,18,86,3,240,195,186,186,60,186,137,177,19,179,97,200,100,164,100,249,17,203,85,188,206,226,137,97,163,238,16,255,60,176,120,182,63,207,55,0,192,37,36,16,155,170,139,2,52,89,45,67,216,174,19,59,149,65,11,129,102,107,72,104,105,131,182,25,164,52,126,188,65,244,61,32,148,112,26,73,124,151,148,120,122,136,178,201,241,14,197,50,74,80,154,200,21,131,136,137,60,75,198,40,10,182,155,105,20,120,193,133,70,1,74,162,16,163,15,13,213,28,84,179,30,19,233,109,57,160,76,36,122,11,216,189,169,88,27,55,198,130,39,230,142,20,138,45,173,237,149,147,221,1,176,178,236,12,57,12,210,255,9,143,182,81,218,107,200,132,206,36,146,65,218,0,177,135,123,220,88,120,175,203,6,116,89,144,88,91,130,176,241,115,4,13,53,11,173,59,47,182,177,193,77,143,152,102,3,233,149,0,224,122,101,88,145,7,57,78,202,26,90,108,190,0,237,97,64,199,162,151,22,96,199,202,240,49,169,27,159,159,85,4,113,99,75,44,182,2,8,251,228,27,135,253,180,25,47,62,18,75,113,207,117,191,225,221,134,121,48,30,16,159,0,147,116,83,151,195,163,26,196,157,118,10,187,166,117,223,161,145,54,64,112,128,157,180,186,83,169,55,120,241,178,121,224,55,226,70,6,223,88,173,226,59,235,16,78,99,124,218,145,182,236,68,226,20,149,67,79,192,213,89,155,176,194,106,16,118,83,87,40,36,207,212,40,27,171,34,199,78,27,222,202,221,235,194,39,252,48,225,153,48,207,194,147,90,141,0,27,204,115,195,254,197,9,185,0,104,128,20,45,52,27,104,91,97,19,200,200,169,191,102,77,109,3,86,252,160,136,177,68,14,112,197,36,182,0,209,77,75,218,204,137,140,254,236,224,213,0,43,211,178,178,44,121,54,0,14,92,93,59,197,80,234,148,148,160,200,100,218,78,170,20,49,143,87,67,97,83,233,110,251,119,211,3,111,0,113,169,18,186,196,113,29,10,131,161,74,238,82,184,224,92,212,116,62,1,38,194,196,130,24,89,252,47,72,91,210,33,49,140,42,177,185,42,59,42,219,86,54,71,30,2,114,178,147,163,56,198,145,167,16,0,113,36,200,102,237,80,178,146,21,231,70,17,57,112,61,173,74,83,59,128,96,220,204,130,5,81,192,130,163,210,230,117,187,76,251,67,73,19,21,72,118,150,99,44,152,54,224,46,217,187,104,43,238,71,98,73,23,107,15,83,119,128,200,219,18,216,149,204,19,217,50,153,136,113,2,2,83,3,123,44,65,18,26,20,93,34,128,150,17,224,91,127,66,74,161,48,131,176,33,214,126,49,135,132,69,120,224,92,178,140,204,209,175,165,151,142,181,212,2,0,215,153,240,59,30,14,186,216,244,166,51,220,158,147,224,147,6,32,27,108,71,91,166,62,72,114,87,188,155,40,250,3,253,155,221,130,250,235,161,83,37,82,58,133,2,121,123,72,244,206,108,32,241,51,34,219,80,189,98,108,183,9,7,103,195,6,249,79,80,117,134,41,21,88,102,80,46,21,2,200,25,242,32,221,150,176,211,23,222,214,80,164,35,121,3,39,216,38,138,162,136,217,54,249,172,66,135,112,34,212,197,8,178,193,196,206,0,57,6,254,225,102,85,128,34,170,121,43,89,211,174,70,141,116,230,226,3,94,55,134,65,196,95,101,153,164,32,105,27,175,154,250,254,250,240,158,79,159,153,170,41,27,161,206,78,203,53,224,106,159,76,103,128,199,185,44,169,173,65,144,57,12,58,3,104,3,98,122,129,58,144,168,31,81,71,73,20,25,32,75,167,54,29,168,18,141,86,99,80,164,50,109,43,209,201,154,218,181,179,129,18,245,14,144,91,104,233,133,247,154,166,56,11,219,22,134,6,4,194,244,194,124,187,64,29,217,180,213,64,33,86,172,54,97,15,11,64,96,103,55,32,34,220,203,213,174,137,205,214,190,248,154,119,28,58,78,167,211,61,71,167,25,163,61,212,135,107,124,237,148,136,53,101,226,167,150,98,209,103,42,137,105,18,137,154,146,169,51,137,214,147,41,71,137,14,101,12,235,136,32,48,244,130,237,151,88,136,7,250,126,46,89,109,198,145,39,102,217,41,67,143,44,31,5,194,32,48,50,46,44,48,2,181,4,52,32,200,155,189,17,221,234,248,56,13,34,162,0,84,128,68,157,224,32,71,52,94,183,8,138,77,37,210,52,138,92,148,203,120,232,33,71,211,150,180,3,93,96,81,5,200,20,133,76,157,144,237,81,66,107,205,123,239,120,236,48,195,96,235,63,165,31,129,18,181,14,11,166,69,48,65,130,44,88,52,244,23,103,90,135,245,201,125,40,193,97,162,76,102,54,8,42,162,23,170,42,227,25,21,233,70,32,11,42,152,241,210,157,168,216,46,109,1,135,213,99,190,67,62,43,155,1,194,125,89,169,77,248,207,2,32,214,30,81,163,145,112,98,61,45,221,37,235,24,11,23,32,3,204,80,129,209,204,162,43,212,21,134,140,44,128,149,26,204,186,197,58,200,152,135,203,39,160,160,75,223,120,232,68,135,154,0,32,143,28,232,76,124,14,186,64,25,82,163,0,167,28,112,143,190,106,1,25,78,97,154,196,246,121,18,74,139,114,102,0,3,60,134,111,213,181,230,8,218,34,4,56,235,168,181,165,182,97,52,32,201,209,186,4,200,108,0,155,197,163,212,75,146,236,39,186,78,85,35,190,0,76,184,176,234,63,112,79,25,138,241,62,4,213,230,0,118,199,238,41,222,69,221,50,23,255,21,166,174,18,243,164,161,239,91,118,160,236,175,83,105,178,131,162,147,59,58,194,19,111,121,226,83,79,60,239,185,127,158,59,108,227,176,189,23,41,113,54,37,186,36,174,66,153,50,15,253,161,248,166,233,10,138,44,112,147,16,196,81,165,252,165,103,40,122,133,5,252,245,38,21,188,127,223,67,196,111,232,142,8,252,248,244,64,220,61,30,199,204,134,175,200,143,177,92,114,209,202,241,76,185,83,98,65,90,236,108,128,90,23,14,127,131,224,72,200,153,54,120,224,162,39,63,184,215,130,3,238,144,136,192,232,181,3,8,116,36,177,166,225,252,207,59,158,50,215,212,224,189,186,84,31,7,53,51,85,69,157,178,42,124,131,75,192,81,41,46,21,21,194,181,97,214,82,144,103,113,96,38,168,197,253,123,135,110,248,159,60,107,186,217,104,34,243,148,180,125,163,58,60,123,111,215,224,127,203,156,116,154,232,202,110,204,52,27,221,77,204,11,184,80,162,70,80,229,54,197,178,128,171,70,126,237,48,2,198,107,16,169,151,138,254,131,206,172,168,104,36,218,8,54,239,122,68,101,35,245,176,17,239,87,156,176,121,143,209,84,122,21,159,73,141,176,191,67,1,130,216,60,184,142,161,77,0,133,73,120,179,189,13,138,171,101,237,77,52,154,68,237,113,186,81,162,59,121,229,202,97,10,222,54,184,112,6,141,118,76,98,236,100,135,90,201,201,23,58,141,50,183,146,119,60,181,100,72,124,52,20,21,235,92,1,207,20,117,116,15,102,14,68,231,97,228,37,8,110,200,97,8,110,88,206,129,232,173,140,204,16,73,77,21,239,101,92,198,102,135,174,138,161,183,160,178,202,81,98,5,228,44,166,36,20,11,15,253,72,155,14,88,65,171,36,76,2,219,89,137,154,75,112,90,168,96,174,36,231,144,224,250,139,142,180,93,238,161,161,195,147,164,233,194,179,152,7,222,181,75,231,0,161,140,180,231,208,170,165,94,212,34,130,26,67,29,71,133,5,213,121,84,174,39,239,74,108,146,235,11,3,69,250,61,16,124,162,98,56,78,141,7,154,60,241,221,233,245,54,22,57,142,6,28,93,235,205,151,101,76,184,198,131,90,239,71,116,32,255,222,96,240,74,38,71,188,190,253,44,242,8,86,248,166,142,47,57,94,149,115,86,217,143,4,92,56,51,217,42,159,74,42,156,175,175,46,124,139,152,118,186,9,140,49,254,36,9,81,9,33,44,62,73,160,139,127,97,150,154,69,201,200,29,24,124,192,100,140,45,138,241,71,99,132,146,58,219,129,202,100,19,24,164,112,95,120,129,104,23,152,145,29,56,121,89,135,21,231,83,133,209,156,186,253,79,88,37,100,28,162,106,49,108,14,48,77,243,93,220,246,209,114,64,216,172,111,141,118,174,92,137,97,134,84,87,24,153,99,82,167,115,105,205,188,144,232,250,98,167,44,218,133,252,31,244,70,134,96,177,16,204,18,194,93,118,205,177,182,42,132,205,100,176,159,152,189,129,222,220,19,177,233,222,114,253,244,218,61,146,161,219,7,121,252,66,133,219,23,220,72,45,144,85,141,1,124,217,215,250,101,6,120,90,199,34,243,160,204,0,201,204,200,11,115,83,198,212,18,152,158,137,4,38,26,157,24,169,167,67,240,106,16,150,45,70,242,51,11,9,246,31,174,3,222,115,101,109,2,109,46,104,123,168,15,50,3,90,108,100,66,249,238,57,204,40,2,70,41,129,24,208,229,230,132,4,165,230,11,222,196,79,106,246,245,44,32,225,82,117,81,117,171,139,56,246,15,156,80,97,148,244,169,71,63,113,252,251,238,249,24,3,89,15,55,166,247,218,160,49,6,193,185,201,120,32,145,29,91,164,167,27,216,35,11,146,36,138,32,177,135,58,0,163,92,157,81,37,220,194,5,189,6,87,86,112,19,69,79,210,232,109,10,17,13,126,188,224,52,43,120,202,42,91,134,88,25,16,90,230,126,244,14,74,225,140,147,201,98,6,49,171,198,115,245,232,19,205,60,167,193,20,105,35,128,173,70,48,95,162,174,24,53,202,68,239,244,218,105,174,191,154,146,6,42,78,113,139,203,87,215,246,97,53,139,133,6,230,17,54,149,64,238,84,131,138,201,104,244,52,4,207,71,135,131,144,4,20,15,85,178,147,23,174,152,196,18,30,67,235,126,140,73,96,144,155,93,129,149,133,149,30,162,149,146,80,151,167,99,61,214,208,150,59,114,88,135,57,95,29,93,184,19,143,228,228,39,57,31,74,78,145,78,235,141,22,10,198,40,141,44,72,161,92,32,28,59,45,97,56,128,66,112,120,55,64,204,130,102,121,230,57,159,6,239,250,165,7,30,0,99,172,67,140,135,200,98,38,46,226,42,188,5,214,252,44,162,35,63,63,106,96,113,11,211,152,28,159,77,61,31,163,196,245,98,57,19,219,40,214,47,101,63,142,143,237,161,104,0,130,145,152,26,145,104,101,114,149,104,138,94,91,80,1,2,231,221,125,40,120,202,1,163,235,67,239,148,122,208,213,168,142,193,236,80,33,57,45,104,1,50,238,153,76,87,72,69,122,118,228,159,29,70,224,40,88,100,121,159,228,52,120,44,131,79,51,241,123,6,30,29,25,121,226,203,240,246,58,216,243,13,127,7,225,48,18,197,184,48,217,9,85,20,253,137,122,32,83,233,160,231,211,214,167,122,16,219,105,49,62,198,169,245,153,86,237,180,239,228,56,200,159,23,241,58,142,135,74,217,106,231,84,145,196,139,196,160,18,152,95,223,14,20,54,212,87,196,229,14,114,249,144,162,169,23,13,194,212,110,204,12,204,204,16,229,132,91,21,189,158,85,186,64,95,176,35,42,134,73,38,91,60,251,142,214,56,83,68,168,119,162,29,193,16,48,217,37,198,200,221,2,101,108,140,179,100,4,61,254,208,152,103,179,19,210,167,213,51,68,68,203,221,27,248,185,11,0,157,4,220,16,120,18,50,87,195,224,141,64,4,56,159,69,196,100,134,239,184,46,201,242,229,171,236,144,208,105,178,155,74,61,137,93,61,242,141,154,185,11,114,175,66,230,125,136,94,138,140,196,227,58,231,212,144,208,12,65,208,187,205,249,93,148,181,46,162,198,130,223,37,187,64,54,94,51,19,111,242,30,154,58,80,189,17,76,56,239,246,100,108,147,32,124,99,16,130,64,235,88,205,227,217,56,6,185,60,46,100,98,230,185,73,23,44,116,23,199,148,141,123,89,7,144,182,132,102,30,71,146,26,64,232,22,15,76,54,134,109,6,18,131,13,85,20,90,133,197,32,225,126,64,118,183,50,185,128,25,46,105,122,84,49,109,63,113,97,9,65,4,201,172,19,196,59,54,214,87,202,146,180,212,243,98,123,13,20,196,39,29,162,20,248,18,241,246,18,0,70,115,134,241,134,227,43,107,132,37,54,94,52,5,227,186,36,139,151,46,113,70,9,3,185,36,36,149,16,94,70,157,14,115,143,63,11,9,251,142,200,142,252,231,17,126,177,177,211,221,31,111,162,198,171,15,169,217,56,44,214,176,162,79,174,185,29,101,229,241,111,89,152,28,65,162,61,58,220,34,192,214,58,252,241,3,73,190,150,251,89,19,33,53,186,231,135,75,180,21,198,114,211,123,182,241,42,238,112,91,215,223,231,125,130,107,143,188,61,242,255,68,72,100,146,36,81,81,162,30,3,147,239,35,167,200,228,174,239,109,23,228,150,238,176,184,17,147,253,26,183,244,133,65,190,68,255,128,229,218,29,45,127,112,12,52,128,204,206,55,21,34,85,179,112,86,231,235,73,189,65,230,44,74,152,205,227,207,70,73,103,187,8,234,54,67,250,190,85,112,158,101,30,182,190,8,232,29,24,220,116,46,168,32,13,58,176,152,4,228,65,222,122,15,22,62,6,46,102,161,141,209,71,146,184,27,18,151,68,56,58,14,135,203,136,149,85,81,247,100,106,242,60,98,101,106,22,209,226,34,94,72,107,76,226,98,196,57,14,79,153,201,177,3,84,228,244,195,168,41,187,238,105,208,143,34,181,175,201,130,25,81,94,150,204,108,78,50,89,117,55,191,79,249,33,199,161,46,231,7,1,191,250,172,31,60,175,47,55,235,199,111,152,84,149,200,108,254,172,248,45,159,7,191,175,76,174,186,182,127,78,183,203,63,167,219,207,148,193,246,197,169,100,19,66,249,12,41,101,37,132,117,30,118,192,179,213,58,243,237,242,230,85,21,111,250,158,216,158,166,176,253,229,59,239,120,245,214,163,215,136,186,108,103,212,126,43,241,173,196,47,40,241,185,24,249,156,242,152,238,86,249,85,121,219,146,10,144,223,160,223,84,130,252,6,253,166,34,228,55,232,55,85,132,126,131,126,207,127,78,191,61,28,234,115,244,251,82,161,217,163,59,30,155,104,85,11,163,59,142,207,170,27,185,155,92,253,208,167,95,183,94,181,220,226,203,117,235,164,95,238,232,249,172,55,45,183,250,114,221,60,239,34,210,2,192,122,185,205,151,235,86,209,227,135,190,217,122,224,16,149,219,125,185,110,113,116,14,211,143,29,79,45,119,248,114,221,134,233,81,74,143,95,187,101,79,229,78,95,142,12,150,137,253,78,253,89,136,94,238,40,190,92,55,83,31,141,246,205,209,223,212,161,114,213,151,235,118,101,63,248,238,236,111,214,114,109,192,115,247,53,244,164,30,143,86,55,93,144,99,92,144,206,86,123,56,217,163,217,77,87,228,24,86,164,91,129,115,79,40,218,163,68,117,73,142,97,73,234,163,135,238,152,238,132,191,233,154,28,195,154,116,51,172,187,70,186,10,189,233,162,28,195,162,144,125,220,93,166,143,102,55,93,149,99,88,149,254,54,77,63,177,232,218,241,174,203,114,12,203,210,253,9,20,136,214,81,168,235,114,218,186,60,171,246,61,175,125,137,79,165,251,57,94,164,184,61,162,118,202,89,150,99,217,234,89,151,178,241,171,176,231,57,159,123,219,247,99,110,101,174,154,207,140,91,111,47,111,188,30,165,172,243,94,203,57,243,69,135,243,216,143,99,89,91,189,119,58,139,207,122,167,134,95,168,167,62,26,158,75,89,150,117,93,183,13,70,125,212,245,220,207,82,230,147,97,236,118,122,93,211,203,125,200,203,220,106,59,78,107,122,95,231,117,47,216,31,251,189,200,239,244,154,113,175,247,113,222,199,206,120,165,97,31,109,91,234,86,234,250,11,198,157,227,122,59,219,214,182,115,181,101,148,163,192,246,25,136,100,221,215,138,109,111,175,36,192,95,74,187,107,59,151,253,60,143,178,108,135,76,250,92,91,57,246,165,180,217,8,108,123,125,219,117,190,211,255,118,108,171,182,243,104,187,204,109,61,239,59,3,219,254,4,124,182,214,238,139,61,31,229,88,97,181,214,251,174,155,231,227,216,246,122,236,191,96,181,230,178,214,125,221,15,163,176,251,150,104,203,186,221,9,123,59,246,129,194,94,209,240,183,173,241,85,108,13,169,186,104,60,241,246,76,205,199,144,247,118,204,231,188,26,137,220,39,183,151,59,57,238,247,217,192,162,164,192,88,93,179,122,31,207,119,221,202,185,222,55,114,219,100,145,203,155,218,218,220,206,189,58,188,166,192,88,157,39,125,62,63,233,99,127,252,175,156,231,38,164,209,195,122,239,84,177,236,5,100,212,5,48,169,175,247,210,94,210,251,54,175,199,182,52,221,170,143,206,183,101,61,183,117,221,183,42,92,224,2,24,171,115,223,207,108,140,95,3,225,112,103,247,217,190,183,251,150,86,173,226,65,78,231,114,30,237,172,186,197,115,152,175,40,39,157,221,243,255,108,151,119,110,117,182,58,3,99,125,240,155,115,223,207,109,155,145,7,167,192,164,254,162,17,87,251,175,185,37,239,236,111,118,34,168,135,89,239,247,237,119,103,241,168,250,164,192,164,62,140,251,5,221,47,117,93,239,173,238,202,237,31,100,82,238,2,119,159,183,185,169,120,73,64,73,93,229,7,47,32,145,251,42,151,109,59,140,193,60,58,190,75,153,165,217,150,240,159,73,157,215,16,229,177,215,86,61,93,222,41,239,174,167,22,20,246,23,192,80,251,235,224,1,245,206,205,230,121,179,157,221,153,192,189,237,86,202,118,204,70,255,41,48,169,255,42,46,176,46,119,214,98,36,243,32,236,187,138,242,96,168,103,59,85,153,203,96,161,174,241,130,23,136,154,227,190,141,23,84,224,250,230,217,206,121,241,170,71,10,140,213,95,183,161,238,156,101,153,11,40,74,15,85,112,189,211,108,221,86,179,90,46,128,177,250,162,239,141,188,214,193,207,207,108,189,4,95,119,117,180,150,187,104,63,0,97,203,124,220,229,2,108,191,8,73,106,118,19,255,69,180,113,28,165,162,102,118,239,224,222,238,94,234,93,215,66,234,200,128,177,58,199,73,157,47,217,142,231,93,142,111,13,232,173,115,158,90,151,59,164,222,5,31,240,159,4,24,171,211,109,128,90,158,231,3,119,154,110,203,157,143,160,34,114,39,193,182,110,235,89,119,155,95,10,140,213,37,163,202,243,61,95,77,249,206,111,214,98,70,68,2,202,166,187,189,24,211,15,190,117,55,176,170,219,13,247,102,142,117,89,0,167,9,40,169,187,240,179,112,199,75,164,234,177,151,99,113,42,223,75,41,218,87,92,94,212,229,47,217,125,123,91,231,5,23,250,174,124,239,199,186,222,215,218,13,63,66,147,218,51,231,122,121,190,223,187,208,190,155,120,200,106,238,235,191,220,57,225,114,58,35,50,133,166,245,27,191,210,247,252,238,191,155,147,123,155,29,219,109,245,206,111,209,194,186,37,176,172,106,123,197,206,95,183,59,226,238,250,238,195,188,209,142,143,135,90,113,215,68,149,12,110,25,48,173,93,229,93,194,231,187,190,147,89,153,215,13,167,60,111,247,137,45,75,245,58,80,2,205,170,211,85,131,243,37,34,105,93,231,59,227,216,84,203,110,119,129,91,207,101,86,73,127,75,96,161,30,223,102,120,9,105,237,247,81,222,181,235,138,244,210,218,227,179,236,59,56,5,83,104,90,191,189,124,235,223,21,210,187,108,216,42,250,116,30,173,31,115,219,183,25,173,131,4,154,214,111,47,95,229,243,174,79,180,243,152,77,32,62,54,238,93,69,95,209,91,115,203,128,105,237,89,50,53,189,150,1,73,48,123,125,60,143,244,60,11,186,175,62,250,215,238,211,47,107,185,171,247,224,102,77,161,177,242,141,175,190,60,231,94,233,38,102,189,115,174,230,237,140,251,126,59,118,216,98,183,4,150,214,189,217,155,160,47,81,201,219,93,169,94,156,83,241,174,255,182,109,107,243,58,175,21,76,230,8,205,170,115,148,98,191,8,243,236,246,40,109,187,227,175,84,80,242,239,140,166,108,235,130,242,121,4,165,53,57,240,187,150,151,32,252,62,234,86,218,124,54,32,186,87,206,122,168,47,97,181,148,173,247,5,11,94,235,125,82,200,23,238,139,123,23,36,203,224,48,72,160,105,125,185,120,95,94,162,114,222,237,212,165,29,232,33,124,29,157,15,213,95,74,233,191,108,107,174,71,153,239,28,161,20,100,30,199,93,48,213,213,115,205,20,152,213,231,36,154,245,37,43,118,103,143,91,29,77,131,250,56,127,41,131,190,150,2,179,250,114,175,252,37,179,223,238,36,48,123,223,68,219,142,118,148,210,208,90,204,96,89,93,65,251,115,49,79,15,121,139,194,113,190,171,93,199,32,187,35,232,68,225,201,215,1,159,243,141,151,55,199,157,233,223,149,110,103,19,44,119,173,227,78,111,200,240,18,80,168,41,113,180,245,89,39,242,99,176,199,93,194,238,131,63,100,190,155,189,119,121,120,95,50,96,201,41,48,175,47,105,135,150,231,87,246,49,230,251,62,115,92,231,206,241,230,195,187,58,46,128,121,253,227,229,116,125,151,90,119,42,69,70,250,176,126,206,249,110,134,180,226,77,162,4,152,213,231,132,125,245,69,78,191,243,174,226,157,101,111,232,156,45,243,242,80,72,80,26,38,160,172,174,222,55,29,102,254,170,3,8,73,166,82,95,192,72,215,227,78,121,72,14,119,43,96,160,225,1,146,85,211,11,23,245,185,227,230,126,218,114,39,183,125,59,86,148,29,119,29,224,174,70,213,195,29,104,36,208,180,190,220,238,169,207,157,50,145,177,179,47,110,247,221,45,16,231,187,185,69,80,82,79,15,122,94,178,71,226,193,195,195,57,121,223,10,199,58,151,134,222,173,4,154,31,124,44,146,182,228,249,222,175,16,126,110,187,243,172,5,216,21,178,215,151,34,251,190,185,131,236,47,119,203,235,174,18,12,75,157,64,211,250,182,212,47,81,75,207,54,239,94,73,185,179,153,115,65,238,123,75,96,89,85,185,191,247,60,137,255,178,29,121,23,176,251,209,188,62,112,183,161,218,185,12,171,149,64,211,250,55,73,223,250,18,89,242,192,195,121,231,209,206,234,121,136,226,163,140,102,79,132,166,245,245,50,222,203,86,236,78,227,187,119,39,212,135,99,162,150,90,118,52,235,19,104,86,29,122,127,94,128,223,13,198,187,206,115,159,216,134,14,188,229,174,43,159,219,3,217,168,213,70,104,90,223,182,233,75,186,255,231,114,137,187,248,189,91,103,231,134,199,168,119,227,168,221,119,230,178,161,169,159,64,211,250,175,154,252,185,150,213,155,250,119,68,222,247,224,221,126,217,80,180,39,208,164,182,49,169,151,16,221,190,149,123,61,103,197,221,169,171,12,97,18,25,48,173,253,74,146,191,27,97,109,174,78,231,188,43,250,119,241,179,142,94,245,8,77,235,3,171,122,117,248,130,100,3,169,98,252,250,234,191,229,157,0,31,223,253,255,131,47,9,42,252,197,177,234,255,164,24,234,245,248,76,253,186,232,202,167,46,226,32,10,155,251,154,221,215,226,190,86,247,229,47,18,236,238,235,112,95,167,95,178,226,63,135,5,245,195,169,126,60,213,15,168,250,17,213,225,110,131,31,83,61,144,86,62,61,0,149,239,44,215,126,179,249,85,76,162,189,57,150,211,254,183,46,148,15,240,68,224,254,202,67,78,73,91,247,172,199,239,162,226,252,9,179,224,138,175,84,231,180,222,43,239,105,253,226,254,62,113,130,159,140,210,103,15,232,175,59,252,180,25,126,34,94,158,81,170,191,173,251,39,175,187,48,153,183,93,30,141,252,229,47,81,170,83,65,21,21,239,223,125,156,90,249,243,135,255,252,241,241,223,105,190,55,87,62,126,255,195,207,111,254,250,238,227,127,127,255,225,79,111,223,255,143,183,63,253,240,246,79,239,223,253,110,90,73,43,120,20,237,255,252,253,52,255,225,254,175,31,127,248,203,189,210,239,230,94,255,255,144,214,126,255,248,220,251,239,220,250,31,30,255,167,26,189,135,159,159,239,161,15,89,218,163,170,29,89,229,221,251,159,223,89,7,52,9,158,44,79,162,113,249,255,245,253,15,239,31,208,223,225,207,244,255,123,33,24,165,175,254,239,111,63,126,255,230,47,239,63,124,248,233,119,253,159,63,189,253,241,187,15,127,251,221,163,252,127,185,255,217,123,197,199,148,74,133,129,201,212,126,250,240,225,227,155,191,126,248,248,225,223,126,252,238,63,62,126,248,59,117,254,251,79,154,125,117,51,111,191,134,194,55,189,68,223,251,140,218,207,154,222,168,250,39,94,105,127,118,223,213,34,254,86,250,71,166,120,255,252,143,191,253,233,195,251,56,253,103,214,231,63,190,127,251,247,119,90,248,79,63,124,252,219,219,191,11,162,10,1,255,250,211,15,12,144,137,181,246,195,143,127,232,69,9,254,151,183,125,67,60,126,248,233,221,159,63,124,247,206,230,39,169,33,86,125,35,79,211,16,217,51,20,240,85,252,143,156,192,81,18,62,106,93,74,241,187,90,102,226,21,210,132,184,31,111,177,242,205,53,126,27,122,190,249,113,221,146,145,115,15,55,232,255,6,3,240,191,14,245,165,130,252,233,151,146,94,152,143,130,71,54,97,58,10,131,65,66,10,238,122,194,124,20,29,182,127,229,123,119,171,95,216,222,253,218,246,161,166,236,59,33,167,140,62,9,213,179,168,80,214,86,201,129,243,128,108,156,86,91,114,38,73,30,235,38,5,244,41,200,147,75,112,53,123,79,100,177,244,145,7,237,6,73,245,162,217,70,53,127,224,42,169,114,240,179,223,221,19,63,41,129,14,109,67,211,41,202,139,103,146,186,82,158,149,218,52,149,12,37,255,47,182,91,53,69,56,215,231,100,9,248,98,218,70,251,248,16,8,165,64,181,199,113,79,126,115,164,234,119,111,114,215,116,58,252,38,193,134,15,117,29,29,176,12,223,246,251,73,77,172,171,111,244,128,151,211,168,12,165,53,220,32,56,128,42,208,170,65,190,68,206,187,116,90,214,159,141,170,216,179,27,11,77,143,178,199,246,6,27,23,229,134,241,187,183,133,143,109,48,6,15,131,244,246,32,29,44,231,81,170,144,0,115,193,176,130,166,73,207,224,197,178,155,62,130,140,36,73,228,91,37,207,165,124,226,243,72,235,58,160,132,159,24,57,241,197,164,133,113,18,171,233,168,137,208,228,1,19,33,48,220,70,253,207,236,254,202,210,35,249,74,87,109,39,35,224,85,172,213,15,161,159,130,14,239,142,205,4,131,244,157,252,60,1,62,210,84,53,50,0,95,106,195,193,149,107,20,58,84,103,171,225,215,171,81,9,114,38,52,55,207,62,126,76,93,198,185,67,43,166,115,167,29,91,33,175,244,161,216,144,140,128,110,152,37,146,81,74,105,158,24,47,40,150,130,239,234,106,249,180,56,252,7,83,70,110,88,72,250,2,132,248,193,116,209,111,187,43,236,60,216,149,113,219,130,62,84,171,188,190,78,211,159,109,87,9,247,166,195,48,110,125,113,19,173,126,90,186,191,109,169,97,140,221,15,22,249,9,178,156,192,145,34,195,58,245,103,30,126,227,245,176,103,207,161,207,93,94,226,134,14,37,234,65,202,111,218,4,99,2,134,216,61,114,3,103,118,172,187,218,82,239,66,99,179,205,130,203,143,220,72,246,201,1,34,197,58,233,162,132,142,232,59,1,244,203,225,175,77,58,54,79,131,146,103,48,204,58,70,82,208,41,121,68,149,95,189,150,199,147,253,166,229,77,159,168,229,53,201,78,142,89,156,37,130,68,41,89,31,35,212,45,223,228,149,67,217,31,172,159,73,214,118,202,184,167,44,181,161,166,198,41,233,169,76,111,132,182,17,203,19,222,198,246,26,156,62,177,90,97,92,242,188,39,155,89,238,157,154,97,86,189,88,79,93,209,234,98,127,191,102,175,113,162,65,183,215,40,4,216,111,53,43,247,15,40,183,143,59,237,203,167,10,94,10,37,138,89,149,174,29,176,238,18,161,242,139,70,42,193,9,68,170,186,164,36,182,132,228,248,30,27,169,6,74,108,13,26,237,172,87,211,180,118,109,76,172,109,35,69,6,20,171,32,175,190,45,80,189,105,198,77,144,215,141,159,171,19,237,166,132,247,15,40,239,58,228,47,47,242,12,144,16,104,145,231,59,119,131,223,224,69,122,123,41,64,40,94,223,8,26,30,12,184,161,154,101,32,216,154,51,162,177,249,38,76,24,177,121,5,111,26,200,37,76,151,133,157,64,160,20,186,52,241,13,118,18,14,194,64,6,169,48,18,108,202,189,1,64,207,72,128,14,199,47,186,185,65,13,200,190,21,125,75,115,70,24,253,7,31,91,94,96,85,24,212,172,45,30,32,201,251,55,252,98,39,25,120,248,208,242,176,246,126,35,20,91,124,120,213,67,223,112,5,200,204,133,246,17,212,66,189,134,133,226,147,95,154,86,185,5,200,108,16,2,44,147,35,80,30,209,211,220,207,165,84,30,55,125,130,16,68,90,138,83,192,249,245,194,132,229,227,166,80,8,9,85,7,122,25,96,39,80,201,5,233,37,244,153,17,113,160,244,100,63,196,93,19,183,86,220,126,217,38,77,55,115,190,233,145,55,164,236,195,115,152,102,248,6,158,227,184,148,227,97,23,92,110,100,132,35,171,108,108,253,235,162,113,102,94,183,248,4,49,211,74,100,255,134,187,193,189,123,12,68,248,248,67,73,173,119,122,143,7,19,243,2,229,166,252,32,178,141,200,92,82,14,20,217,84,206,202,6,162,203,104,51,161,225,145,208,253,216,115,22,19,118,120,202,4,6,70,145,112,147,140,229,36,124,41,225,94,145,197,141,44,166,209,19,30,52,177,35,93,39,36,160,209,108,14,50,218,203,112,47,227,137,250,56,63,253,97,16,174,32,196,102,207,232,16,149,225,66,81,5,9,110,90,13,52,208,52,142,185,183,219,181,175,158,181,172,149,237,137,105,194,56,228,193,220,69,178,164,206,52,170,77,127,23,140,179,242,204,183,187,103,24,40,12,61,155,26,244,72,139,209,149,241,243,176,37,9,195,12,187,117,198,55,202,104,9,248,169,51,216,54,246,56,42,175,213,226,54,47,238,231,184,223,29,59,8,28,163,227,134,44,249,222,251,153,59,199,220,48,169,17,210,242,213,167,194,23,109,217,29,194,88,221,144,99,179,15,64,199,81,164,140,42,104,108,170,108,194,168,118,104,49,159,189,67,80,64,159,27,117,175,210,189,14,189,172,203,216,255,34,115,132,167,236,204,17,131,129,61,178,37,249,198,31,179,252,234,13,255,223,50,81,243,39,25,254,191,97,182,241,207,137,215,245,243,224,181,189,46,222,111,75,115,136,254,74,203,57,160,236,19,242,109,223,213,173,109,43,205,165,73,188,203,200,243,60,143,101,199,100,12,23,192,80,123,101,102,178,124,141,39,246,162,250,194,195,12,34,89,11,170,215,238,198,221,0,195,71,213,59,8,30,183,105,146,38,114,25,235,237,78,185,19,152,242,240,34,239,161,109,48,24,121,150,23,216,62,28,250,169,13,15,154,142,222,192,51,249,193,111,103,2,132,227,4,192,112,91,12,32,2,85,4,125,17,201,4,98,146,207,22,119,86,131,234,136,80,64,241,75,37,124,58,42,134,40,32,124,15,85,72,247,88,80,35,98,57,103,79,28,246,229,147,67,19,121,121,27,209,53,185,99,98,70,41,63,80,84,248,20,25,205,251,195,183,112,171,34,209,71,132,248,7,190,25,132,10,9,107,92,13,32,79,96,22,172,69,56,69,26,22,39,172,30,44,173,91,246,72,25,164,30,234,155,35,70,68,171,118,47,62,75,155,125,19,140,130,61,208,83,222,218,113,74,21,140,185,246,233,40,145,230,183,217,67,43,76,220,171,179,125,86,59,52,42,114,6,77,45,183,201,157,71,235,175,155,2,234,160,77,249,62,59,148,242,255,210,90,181,75,181,57,76,124,247,125,55,62,192,150,72,0,214,130,119,49,85,123,198,94,212,234,42,253,12,28,225,52,136,80,213,14,175,63,49,193,108,106,142,240,39,190,207,52,80,107,74,118,129,56,29,5,51,85,29,214,54,223,20,53,70,36,68,183,121,199,188,98,53,226,57,95,139,176,92,97,65,229,160,107,31,191,141,184,22,94,170,202,11,50,58,26,55,56,41,0,202,204,137,215,175,115,223,73,150,145,26,15,193,144,52,2,15,34,22,180,25,64,72,109,220,14,97,68,201,152,97,86,227,132,1,23,57,178,0,155,97,243,196,189,53,108,190,184,130,217,34,39,132,96,196,146,211,210,192,45,3,71,117,76,55,242,100,199,178,65,228,193,91,106,142,233,123,153,16,196,198,227,79,151,84,93,109,231,199,149,95,121,252,50,133,211,23,6,129,181,179,27,76,138,237,255,10,198,206,151,22,135,250,213,105,168,236,137,69,127,44,191,160,7,230,59,191,6,105,33,0,124,152,120,32,55,171,84,205,78,61,23,110,167,127,244,237,183,193,201,20,3,204,111,23,222,140,166,114,167,85,97,229,98,228,87,179,186,205,42,135,106,176,248,102,13,71,252,102,194,82,102,145,113,135,239,64,29,96,134,12,196,206,170,91,147,95,50,190,116,114,45,158,129,144,139,71,68,94,239,124,117,12,59,136,1,86,124,68,152,87,241,177,52,251,216,225,177,107,129,88,8,136,64,72,82,17,211,6,150,213,63,253,23,240,63,86,4,228,183,194,66,64,76,133,50,176,229,130,28,150,177,6,30,34,134,172,6,17,239,23,171,19,140,231,225,247,198,204,94,14,2,78,195,64,115,16,116,168,17,158,69,23,165,168,178,160,244,100,234,54,29,208,123,241,162,210,69,245,79,90,56,71,193,246,220,170,138,115,240,77,2,33,244,46,95,226,33,29,137,92,116,238,188,217,171,158,135,177,185,145,135,137,225,204,3,90,60,214,90,68,109,130,123,191,56,126,189,132,172,110,50,15,162,43,25,50,170,138,12,25,154,0,50,27,88,87,182,127,97,143,71,30,16,88,132,99,32,142,189,68,14,228,52,243,168,195,1,223,218,28,233,202,247,176,90,78,149,194,45,30,56,128,227,15,145,133,48,91,31,183,96,220,166,110,43,135,157,238,248,0,109,159,213,3,248,72,115,199,21,130,94,129,95,134,191,61,201,7,124,80,63,168,49,17,196,24,226,163,202,33,86,242,98,31,60,46,14,109,70,206,62,25,63,156,212,73,189,75,90,226,205,163,166,241,245,7,52,161,7,106,116,4,155,16,116,70,240,41,75,187,100,137,235,176,130,217,154,250,5,8,75,20,22,113,96,246,131,36,64,65,145,201,17,148,51,185,44,10,180,236,86,247,241,103,177,119,130,62,33,214,72,188,176,79,107,187,135,133,250,217,29,143,249,235,15,234,219,185,199,111,234,238,244,201,234,110,215,74,87,183,171,166,174,167,90,40,182,130,216,227,217,143,161,241,33,112,137,220,56,132,85,54,248,2,91,87,65,241,49,113,226,72,226,147,149,15,208,233,14,26,39,58,20,38,231,253,101,118,112,3,91,191,18,59,3,99,83,135,186,162,217,12,56,32,158,220,119,106,165,139,240,121,12,140,132,171,57,193,182,15,16,9,54,4,101,65,30,105,95,12,36,153,59,224,100,93,146,105,52,108,107,65,16,41,210,135,171,168,37,44,206,226,241,13,135,241,124,160,188,194,137,232,248,104,121,58,102,1,9,149,52,187,149,227,25,27,62,202,45,161,39,24,20,163,87,117,244,182,68,211,35,111,244,246,243,147,223,122,130,204,119,123,0,107,18,220,185,186,131,3,134,64,161,26,64,67,45,137,189,0,233,198,209,254,22,49,193,65,13,162,24,208,88,38,149,196,30,15,115,64,150,146,74,132,136,134,34,209,146,134,43,58,233,169,42,228,69,115,167,213,164,203,0,115,32,153,101,92,72,167,6,159,214,19,21,169,214,22,1,218,240,205,103,209,155,21,32,128,233,128,59,1,188,58,55,235,210,205,54,20,56,169,16,138,229,255,168,132,149,19,127,126,181,124,197,82,68,226,214,134,225,31,206,87,248,38,133,81,161,62,162,62,43,0,49,93,128,26,224,24,65,22,20,222,86,159,196,255,215,140,130,33,110,75,174,199,0,177,75,200,5,66,120,188,13,32,30,160,231,2,6,224,51,36,128,84,64,27,233,53,187,47,83,56,148,192,20,159,77,17,71,12,121,81,130,80,173,223,126,116,122,189,252,12,38,49,47,177,1,214,201,57,89,41,124,195,232,136,174,211,130,7,133,8,220,66,202,72,119,132,227,54,86,233,109,252,108,211,141,87,251,232,94,144,198,88,152,243,98,81,170,100,25,112,194,44,252,138,23,90,8,201,99,164,59,124,86,137,2,11,88,71,144,108,230,5,245,107,88,126,91,158,91,67,63,43,135,139,160,82,46,33,233,205,218,102,215,204,57,142,9,195,254,102,85,177,23,3,137,215,24,74,73,172,161,49,218,69,50,47,57,152,176,87,168,138,184,233,96,114,249,44,244,119,31,111,12,182,75,241,151,240,241,145,217,103,34,33,8,142,68,186,68,17,148,200,169,40,204,82,137,23,197,226,40,57,1,205,205,104,9,241,86,117,93,194,25,49,222,6,243,180,146,210,83,66,118,30,185,157,163,245,231,37,91,121,218,159,82,81,242,52,0,37,226,42,202,180,40,193,172,154,19,133,78,76,58,1,154,8,216,76,6,7,57,157,137,242,40,240,85,81,196,35,225,61,130,182,17,84,108,8,182,86,52,204,225,124,250,6,62,90,42,112,140,184,180,139,189,3,194,137,17,238,171,209,216,163,208,198,98,87,165,36,31,225,44,98,243,226,57,240,10,119,115,169,26,7,143,45,86,130,184,239,172,223,216,33,109,205,73,206,54,133,190,38,61,16,101,52,247,83,54,222,63,124,40,102,219,129,61,213,166,24,220,72,36,216,109,64,42,59,59,54,197,3,61,1,196,190,59,91,209,205,184,122,243,35,237,99,123,222,101,152,216,52,81,233,143,150,65,85,166,99,101,18,131,34,24,29,2,24,138,216,182,184,220,112,112,251,59,16,210,64,105,145,20,19,122,205,168,58,165,253,100,135,12,22,208,65,135,240,20,156,155,7,87,102,24,76,240,21,145,138,213,74,142,211,107,91,47,93,136,85,7,248,244,73,68,106,104,177,24,94,20,192,81,251,85,1,76,152,101,29,33,32,83,196,135,181,37,32,93,118,198,117,11,0,157,213,196,242,64,63,32,112,92,162,173,11,158,77,85,6,185,91,184,99,177,42,55,46,206,113,197,161,80,147,188,153,53,66,130,208,241,151,124,70,29,37,81,100,162,186,19,37,97,34,46,7,161,154,24,189,131,89,204,235,19,65,110,229,123,69,138,31,238,205,30,185,2,227,136,131,88,42,95,224,216,128,145,221,236,234,176,60,221,87,133,125,203,132,140,87,11,164,141,67,179,165,88,228,250,197,49,93,147,96,160,82,24,106,177,193,21,40,49,26,152,193,50,10,182,83,52,175,26,122,220,13,80,17,48,251,86,245,42,103,211,110,48,172,95,164,18,122,58,24,178,77,56,127,184,122,33,0,43,0,118,12,200,68,154,61,95,252,8,91,37,110,168,113,203,73,109,154,34,23,6,159,20,223,103,170,174,188,247,38,75,117,187,253,84,7,136,12,201,194,87,110,14,87,3,27,177,200,192,197,163,35,18,76,137,236,168,4,207,79,25,215,146,189,232,129,101,17,175,62,124,43,90,165,250,70,74,112,221,217,90,72,0,220,21,57,244,70,60,251,53,195,123,92,250,75,242,209,149,143,172,174,98,190,22,152,178,91,27,223,141,214,193,208,154,177,21,189,187,48,130,138,83,229,229,66,86,123,182,30,114,99,55,13,54,175,36,68,64,213,167,69,174,175,25,123,94,148,202,16,198,77,34,40,90,130,153,197,152,26,150,56,14,28,90,121,51,76,104,144,45,209,96,53,202,55,200,129,61,77,206,233,50,56,101,68,131,126,131,179,159,212,219,225,138,212,113,252,177,107,187,203,169,119,143,64,160,17,93,206,35,192,212,161,201,241,69,244,110,77,9,35,21,191,143,5,75,14,46,157,196,237,35,68,20,32,53,208,105,132,180,209,187,218,70,138,4,239,151,174,215,179,205,2,179,112,24,147,220,46,0,168,94,80,240,173,69,83,21,35,2,169,118,175,214,122,181,197,52,189,40,191,153,42,117,132,34,176,157,36,9,98,50,136,146,81,214,4,97,36,173,10,4,251,37,131,207,147,45,71,26,40,38,162,65,56,90,112,209,198,155,37,230,96,81,0,85,60,245,123,116,255,6,15,177,243,33,71,23,51,14,155,221,164,195,48,245,158,253,14,16,112,172,101,158,55,243,203,49,97,129,227,46,58,246,156,223,175,217,202,64,144,114,197,200,219,204,128,28,109,204,196,14,117,51,211,172,125,131,38,112,27,132,30,40,113,87,186,189,49,249,68,220,70,153,172,87,90,241,238,226,234,233,177,137,192,187,150,184,81,40,7,185,109,121,58,12,18,244,155,9,180,31,192,7,200,240,68,47,1,27,40,26,74,151,198,20,234,46,151,250,240,216,112,129,115,138,75,236,114,230,49,69,75,125,66,153,29,120,244,192,128,18,222,58,74,1,121,67,201,197,23,140,95,131,59,9,24,158,212,30,98,99,43,184,169,51,61,100,75,101,45,42,29,137,134,17,213,23,215,52,139,241,160,171,216,213,6,216,79,65,15,73,181,132,196,73,157,89,147,193,232,188,180,76,139,63,107,129,161,178,127,145,100,63,122,160,70,181,36,202,254,68,65,72,148,8,104,185,216,136,64,89,219,199,70,130,6,17,5,104,20,178,65,14,7,73,157,157,40,17,32,224,198,131,194,241,85,166,109,13,184,9,90,155,77,27,152,194,51,202,57,224,41,152,134,66,185,38,196,248,8,106,52,100,138,238,234,104,77,12,93,230,2,220,180,198,209,226,72,205,83,153,34,173,59,92,113,217,61,32,26,14,193,180,184,218,120,207,120,108,18,191,206,19,238,31,224,235,147,231,226,163,125,10,219,61,57,122,28,73,244,138,5,162,10,144,232,169,217,25,166,245,213,127,234,172,156,28,119,115,158,188,33,179,192,163,20,75,13,84,39,28,163,252,140,50,150,200,112,31,1,167,175,130,132,27,188,30,131,176,137,204,61,178,255,160,16,15,42,179,8,96,31,186,92,188,205,225,174,31,6,15,133,195,97,209,118,161,202,152,231,162,26,133,216,168,221,239,146,214,69,54,138,66,14,152,49,16,41,116,249,248,115,17,1,135,126,56,116,180,61,106,175,106,173,106,167,154,47,22,142,146,85,99,227,73,39,150,192,200,37,70,159,46,50,179,145,23,69,170,8,100,19,41,107,212,240,162,22,152,233,59,81,39,74,28,137,232,109,76,221,145,136,70,11,205,199,112,10,12,184,72,226,49,198,112,13,23,205,1,145,30,134,13,11,4,161,80,200,225,126,131,29,12,100,71,254,182,146,4,160,165,87,101,107,26,130,10,134,152,131,49,40,129,153,208,50,170,197,51,28,214,25,62,216,107,232,185,121,224,247,65,30,132,13,26,204,222,201,239,232,65,97,140,142,133,68,113,8,202,197,160,126,68,61,39,234,66,139,108,82,112,30,205,158,52,245,77,167,130,234,145,186,147,18,208,208,223,45,81,190,188,154,152,40,147,23,238,177,226,34,37,70,149,55,170,197,184,116,29,216,163,20,234,254,216,65,115,158,117,38,137,250,97,114,132,60,117,155,14,144,246,164,196,47,195,17,197,109,147,188,45,220,198,57,153,2,204,167,171,43,96,73,54,230,226,156,82,33,28,37,9,204,120,34,126,163,198,181,190,242,11,62,185,220,145,38,34,221,36,180,53,229,94,55,43,50,161,14,230,49,223,153,9,173,214,83,201,156,198,131,240,85,46,51,42,247,226,83,70,9,51,229,40,121,8,48,159,185,57,62,0,183,27,93,227,1,185,115,43,68,183,131,243,74,52,195,6,250,45,6,246,22,24,96,18,157,55,122,112,162,143,103,112,2,101,177,0,48,202,73,244,18,127,128,179,142,16,47,21,144,75,18,247,130,91,237,49,208,108,112,91,142,126,77,55,0,187,239,128,114,34,68,20,162,224,192,226,150,3,203,197,158,13,209,105,145,239,187,58,157,52,122,32,83,45,157,47,16,186,99,232,140,173,34,170,69,152,124,210,171,61,168,22,93,104,78,131,102,53,170,94,131,162,116,118,202,237,23,228,235,133,142,28,144,23,2,54,179,144,206,201,199,124,14,65,161,129,48,19,210,245,43,4,99,40,3,141,4,2,26,101,112,182,90,33,220,16,35,18,137,213,164,17,139,85,127,198,104,71,139,132,108,195,224,122,7,87,217,201,94,116,35,131,56,128,187,144,177,101,175,105,28,73,182,165,35,92,64,254,194,111,15,88,106,49,219,220,27,67,80,13,100,249,8,138,220,49,44,207,170,36,112,115,171,205,156,22,32,46,45,71,37,128,203,19,104,218,57,125,179,93,230,99,187,129,91,77,202,253,137,250,234,4,30,147,14,145,41,25,131,194,105,27,179,200,174,117,125,214,107,60,115,188,180,62,127,141,25,131,37,80,16,61,95,172,55,129,146,59,179,122,133,103,91,4,115,119,177,73,117,58,240,110,224,202,32,160,139,67,207,11,248,182,243,193,215,72,73,39,21,169,206,97,80,11,179,23,163,55,230,131,204,93,148,52,216,11,48,251,209,152,154,83,70,7,138,228,152,5,218,103,49,33,89,160,38,39,51,44,57,37,56,61,102,130,192,189,111,190,152,179,120,136,63,0,0,206,104,114,244,86,128,137,203,141,230,80,4,252,209,133,203,128,141,43,103,3,10,96,67,252,8,0,171,51,3,37,128,91,215,50,105,220,220,225,99,232,245,166,103,28,67,136,28,244,34,193,103,14,196,144,101,4,192,93,113,233,107,18,78,133,184,182,67,110,36,73,111,120,236,142,6,100,140,24,92,192,30,71,101,113,114,68,34,150,2,228,94,98,126,132,78,105,190,107,121,179,252,152,55,121,66,183,105,6,88,174,7,241,242,28,117,56,153,189,128,183,160,52,150,22,119,165,219,169,38,202,111,38,203,139,14,25,127,13,91,118,70,175,101,132,112,220,54,110,245,33,46,79,170,53,60,113,159,7,144,27,221,211,140,57,92,49,191,5,119,159,39,252,203,205,49,120,52,194,190,116,187,48,223,168,55,231,48,112,137,122,161,101,4,13,131,14,75,115,129,160,20,139,17,211,201,114,196,53,27,23,214,45,254,53,105,248,165,169,103,191,98,219,46,86,102,96,184,156,243,21,242,102,130,91,170,188,49,246,206,20,47,89,53,69,128,211,167,101,159,98,49,143,175,221,196,189,231,247,166,219,187,87,219,59,48,128,145,73,120,46,226,185,76,96,66,158,71,93,176,177,192,234,34,63,140,60,51,227,172,142,253,14,172,217,243,237,43,222,30,216,127,16,16,73,167,129,194,211,125,144,108,150,105,220,80,163,116,76,68,168,19,179,153,20,6,33,125,33,198,7,65,31,84,1,71,187,143,127,109,29,74,151,51,158,54,222,208,31,43,0,195,238,62,137,109,86,21,219,171,62,177,209,123,114,193,20,143,223,229,249,65,241,114,224,6,160,159,13,240,104,255,176,79,126,66,108,13,144,73,183,71,155,236,22,191,186,57,140,146,41,249,211,58,206,175,255,171,203,47,190,103,155,135,153,227,150,111,99,27,99,7,177,251,97,120,56,122,153,47,48,133,132,109,140,92,165,122,79,184,13,174,247,75,166,99,71,95,189,184,157,208,36,214,30,246,86,166,16,7,105,236,101,118,38,211,163,200,247,74,65,84,27,6,189,34,83,60,22,37,107,137,244,46,65,105,128,152,15,189,202,3,135,8,58,116,26,155,112,139,219,130,233,109,228,78,132,196,110,3,150,122,59,47,184,248,49,188,237,2,244,10,10,203,141,175,34,157,171,193,135,203,199,208,117,58,184,100,252,97,134,14,9,87,184,106,46,219,79,75,230,96,146,242,233,171,13,185,40,219,140,141,161,89,123,83,97,28,241,149,12,41,29,56,80,66,36,20,71,71,137,164,125,252,57,31,213,122,22,191,186,225,214,127,97,86,235,142,215,201,103,181,230,228,103,206,205,178,78,193,203,242,47,144,247,130,103,245,229,230,189,248,58,115,90,239,203,231,193,235,43,115,90,247,83,142,223,106,57,7,148,125,66,78,235,135,42,215,246,90,142,125,91,182,229,88,102,81,212,218,81,247,54,151,214,150,77,50,88,63,160,251,126,182,121,61,230,83,138,222,235,215,101,59,142,187,228,159,215,186,110,114,234,116,144,50,114,124,149,169,173,89,146,156,102,213,147,96,176,116,153,143,207,67,53,55,62,148,146,135,38,79,185,95,108,142,8,123,150,131,244,57,9,218,48,245,142,31,29,165,54,41,82,162,89,109,206,83,182,80,243,114,64,37,117,233,165,76,74,246,201,167,100,42,171,54,212,26,219,164,71,81,71,76,28,118,234,13,63,106,84,197,236,206,23,68,57,147,139,232,247,138,24,126,105,119,150,203,126,253,203,37,188,91,8,159,20,36,115,208,135,42,38,108,92,158,94,142,195,51,141,55,193,23,155,34,149,126,23,29,138,70,189,105,42,112,147,255,155,228,2,111,99,45,120,112,24,91,126,169,140,142,120,38,31,194,9,25,119,55,194,41,28,158,49,96,85,200,236,1,100,60,158,54,71,57,22,145,199,210,136,162,44,89,216,237,148,179,204,133,39,51,30,223,62,133,57,193,129,195,82,75,112,201,39,219,7,173,245,150,111,145,97,25,227,50,59,42,72,168,196,83,81,66,102,142,12,3,145,122,34,246,84,158,110,4,191,134,180,242,29,3,73,178,160,151,61,205,201,251,212,169,50,252,228,180,215,101,78,213,121,76,153,233,176,175,202,253,15,143,124,121,10,190,121,175,183,45,35,1,234,228,12,118,41,93,84,163,21,231,155,144,163,61,116,133,212,182,97,231,226,214,194,183,172,232,27,60,5,18,37,129,206,3,108,196,118,127,109,93,5,110,245,181,52,192,28,221,145,128,193,254,129,5,3,5,244,209,124,245,250,236,183,180,197,191,108,87,45,106,201,233,177,233,226,14,68,85,116,129,35,69,220,98,22,156,61,153,37,11,223,16,123,93,160,17,242,139,200,129,4,167,127,128,65,180,56,46,14,203,167,91,198,234,255,16,0,198,24,157,202,5,80,142,168,103,154,217,195,144,141,201,67,54,131,176,92,148,173,204,136,97,142,129,151,46,89,61,157,215,113,108,226,134,120,246,65,118,143,232,108,33,146,149,74,111,149,219,175,52,40,246,123,225,23,45,65,131,159,7,118,54,139,95,83,216,226,34,168,131,80,88,28,112,185,192,131,199,86,134,207,136,112,117,18,136,26,203,238,8,107,66,195,74,109,13,237,89,55,77,135,33,178,155,86,2,98,202,56,52,21,175,185,152,191,28,58,40,130,96,156,86,71,87,87,4,158,12,50,27,247,68,178,109,226,222,138,88,14,11,129,43,85,109,150,28,26,1,157,230,123,198,207,37,157,171,98,226,10,91,9,70,61,177,95,166,72,120,145,84,91,196,31,99,66,109,201,132,90,254,16,242,241,213,11,181,131,123,252,38,212,166,79,52,169,79,214,180,78,240,162,178,194,127,128,203,242,144,136,14,227,228,125,15,192,251,46,55,214,233,49,116,68,242,153,98,34,156,93,147,234,24,76,70,1,0,182,132,32,157,138,28,50,97,4,139,132,180,232,14,173,252,58,38,231,102,30,231,135,110,4,184,62,196,131,60,12,178,12,16,203,178,131,121,176,128,15,16,203,160,239,19,24,6,30,138,240,89,144,107,196,2,147,15,128,113,146,33,187,132,175,70,53,150,194,4,106,204,206,27,65,228,249,209,99,133,111,231,159,94,197,170,91,194,106,0,126,88,87,151,199,63,49,2,99,54,12,153,140,148,108,65,98,185,138,239,90,60,49,135,56,160,216,203,15,44,158,237,207,243,13,0,112,9,9,196,166,234,162,0,77,122,203,16,182,235,196,78,101,208,66,160,217,26,18,90,218,160,109,6,41,141,31,111,16,125,15,8,37,174,70,18,223,37,181,158,30,197,108,114,72,68,65,143,18,218,38,114,197,32,98,34,207,146,121,138,66,246,102,26,5,222,146,161,81,128,146,40,196,232,3,76,53,151,213,172,135,77,122,3,15,40,19,137,222,130,134,111,42,214,198,141,177,224,185,187,35,133,98,75,107,123,229,100,119,0,172,44,59,67,14,131,244,127,194,227,111,148,62,27,50,170,51,137,100,144,54,64,236,1,32,55,22,222,235,178,1,93,54,37,214,150,32,246,252,28,65,67,205,66,235,206,139,109,108,80,30,167,130,76,123,155,221,43,0,174,87,134,21,121,144,227,164,172,161,197,230,11,208,30,134,133,44,122,243,1,118,172,12,31,147,195,241,41,92,69,16,55,182,196,98,43,128,176,79,190,182,216,207,172,241,246,36,177,20,247,108,248,27,222,109,152,78,227,1,241,137,52,73,55,117,169,64,170,65,220,153,169,176,107,90,247,29,26,105,3,4,7,216,73,171,59,149,122,131,23,47,172,7,126,35,110,100,240,141,213,42,190,179,14,225,116,200,167,29,140,203,78,36,78,81,57,128,5,92,157,181,9,43,172,6,97,55,117,133,66,242,220,141,178,177,42,114,236,180,225,173,220,189,46,124,194,15,19,158,9,243,44,60,169,213,8,176,193,60,55,236,95,156,144,11,128,6,72,209,66,179,129,182,21,54,129,140,156,250,107,214,212,54,96,197,15,138,24,75,228,0,87,76,98,11,16,221,180,164,205,156,200,232,207,14,94,13,176,50,45,43,203,146,231,7,224,216,214,181,67,155,162,74,20,171,242,199,202,246,131,41,252,188,34,184,91,79,142,119,80,192,33,134,103,2,1,16,199,76,108,214,14,229,245,128,248,133,194,177,43,112,143,171,74,83,59,128,96,220,222,145,143,15,153,20,149,34,22,3,201,114,127,65,162,114,106,90,80,229,50,125,47,85,11,89,202,41,230,54,213,111,140,131,109,26,56,0,32,46,85,66,151,56,174,67,97,48,84,201,2,91,16,131,136,8,230,193,82,14,120,112,212,218,188,114,151,169,127,40,106,162,6,201,222,114,12,41,211,6,92,130,0,23,180,197,253,72,72,234,98,237,97,10,16,144,121,91,2,187,18,122,34,92,38,147,49,78,66,96,142,97,143,37,72,102,131,178,75,36,208,50,2,124,235,79,136,41,148,102,16,125,196,234,47,230,191,176,64,17,156,75,150,218,57,58,182,244,234,178,150,90,0,224,58,19,134,199,195,65,31,155,222,151,134,59,120,18,195,210,0,100,131,45,83,203,245,7,201,18,139,55,28,69,129,160,127,179,95,80,127,61,116,170,68,74,167,80,32,211,190,4,1,205,6,18,71,35,238,26,85,44,198,118,155,176,112,182,108,112,251,5,93,103,152,82,129,101,6,237,82,33,128,156,33,159,210,109,9,108,112,97,158,7,69,58,146,55,240,130,109,162,41,138,156,109,147,207,78,116,8,155,70,101,140,32,27,76,236,12,144,99,96,174,110,86,5,40,162,154,187,146,85,237,106,212,72,135,46,62,110,118,99,24,4,14,86,22,74,10,146,182,241,194,170,239,175,15,239,249,60,156,169,158,178,17,234,236,184,92,227,182,246,201,148,6,120,229,203,178,227,26,4,153,195,160,52,128,58,32,182,23,232,3,137,254,17,149,148,68,147,1,178,116,122,211,129,58,209,104,54,6,77,42,83,183,18,165,172,169,97,59,27,40,209,239,0,185,133,150,94,120,175,169,138,179,176,109,97,104,64,32,76,47,204,183,11,212,145,77,91,13,20,66,206,106,19,246,176,0,4,118,118,3,34,194,189,92,237,182,217,108,237,139,179,121,199,161,227,116,58,221,115,144,155,49,218,67,157,184,198,215,78,9,124,83,38,126,106,41,22,125,38,145,77,205,74,212,149,76,154,39,66,63,211,13,18,21,194,24,214,17,65,96,233,5,227,47,49,17,15,116,254,92,178,218,140,35,79,204,178,83,134,30,89,62,10,132,65,96,100,92,88,96,4,106,9,104,64,144,183,123,35,186,213,243,113,26,68,68,1,168,0,137,58,193,177,146,104,189,110,17,20,155,74,164,105,20,185,40,151,241,212,67,206,166,45,245,7,250,192,162,10,144,41,10,153,58,33,219,163,132,214,154,119,223,241,216,97,134,193,216,127,74,63,2,37,106,29,22,76,139,96,154,5,89,176,104,233,47,206,182,14,235,147,59,81,130,199,68,153,204,108,16,84,68,47,84,85,198,51,42,210,141,64,22,85,48,227,221,61,81,177,93,242,3,142,206,199,188,137,124,88,54,3,132,251,178,82,155,240,159,5,64,172,61,162,70,35,81,201,122,92,186,75,198,52,22,46,64,6,196,253,130,66,145,218,116,209,240,35,39,224,242,255,177,247,102,59,115,29,201,185,232,211,44,64,109,160,136,156,214,116,105,27,7,190,242,149,129,125,175,62,238,118,55,32,139,134,90,134,207,126,251,179,42,51,134,47,50,162,254,42,82,164,72,182,9,136,20,87,84,206,25,25,115,70,58,72,85,192,240,232,21,5,140,145,2,38,29,211,183,8,51,213,131,54,15,129,206,97,22,152,191,3,131,189,89,6,202,43,108,5,146,54,18,214,48,19,26,245,52,231,70,179,233,57,198,157,120,244,166,13,111,45,0,134,169,17,100,65,114,240,54,40,51,196,67,192,21,186,143,128,70,120,6,41,174,192,52,239,255,122,37,93,127,32,236,100,81,98,19,192,152,12,139,0,4,247,157,161,24,29,68,144,109,14,160,119,100,160,162,99,212,85,116,182,96,97,6,44,214,79,10,90,191,249,8,242,1,59,101,243,58,200,155,185,189,41,60,176,151,7,86,245,192,246,30,91,232,169,195,50,15,219,218,145,2,115,83,32,76,226,46,164,37,178,209,31,178,222,99,186,188,68,26,186,57,22,136,226,74,233,75,188,40,114,21,6,44,246,202,22,172,133,223,66,216,114,104,156,4,118,124,226,18,55,207,208,17,181,161,171,246,115,52,23,95,216,50,68,147,239,166,104,152,22,89,27,160,214,3,147,191,66,112,36,195,156,54,217,224,188,45,223,25,216,156,9,238,224,152,64,111,183,3,8,116,132,49,19,150,229,132,102,141,165,88,254,27,113,166,128,125,97,243,166,71,228,78,161,73,102,208,55,145,79,73,31,196,248,27,185,2,190,40,3,131,206,153,98,193,60,168,142,222,255,96,64,66,58,171,151,0,249,58,141,110,166,103,129,1,159,52,204,52,96,182,150,27,155,149,130,172,250,15,172,7,179,224,27,72,199,145,27,36,240,149,160,149,33,178,67,88,75,69,9,134,68,206,4,47,137,197,18,91,36,217,161,61,41,178,56,25,147,20,202,163,213,242,53,28,130,25,150,177,56,89,177,52,146,92,67,217,214,154,165,218,220,236,212,85,210,229,77,40,221,80,92,81,2,186,140,153,240,88,37,64,195,195,38,3,22,208,202,137,122,64,217,18,164,166,18,148,204,200,201,183,129,231,10,108,69,222,242,178,243,253,39,180,144,13,234,219,104,22,36,204,64,35,212,57,64,70,250,213,115,106,85,51,254,73,17,94,26,93,58,138,35,114,50,201,44,181,44,214,246,84,56,197,20,134,22,244,155,3,248,54,194,228,128,243,46,48,154,248,110,4,38,29,11,59,48,105,141,116,126,222,166,21,25,190,180,26,25,181,156,103,207,218,157,12,200,62,116,231,172,88,129,79,208,182,31,133,170,192,6,223,196,80,194,254,56,118,204,241,113,28,192,70,233,180,86,254,20,76,161,44,113,185,209,229,213,113,208,149,95,204,1,11,65,76,131,139,121,176,169,233,76,192,4,81,212,40,172,130,47,77,224,195,25,115,48,138,15,88,153,67,90,196,56,11,72,198,103,64,33,137,250,194,27,39,59,195,20,235,192,40,72,34,15,27,43,50,140,230,148,211,127,194,46,33,221,96,239,17,193,170,131,73,74,235,100,78,143,148,3,188,38,83,209,172,63,240,29,10,162,71,121,133,145,25,26,117,26,19,72,165,141,68,83,9,25,241,80,89,163,255,161,245,202,69,23,185,232,7,23,31,177,75,106,175,85,32,164,126,128,184,77,212,13,196,172,158,255,75,206,150,233,39,17,206,39,229,219,153,48,152,86,175,255,165,94,37,184,75,28,132,85,89,183,94,228,248,155,124,131,220,82,228,67,68,227,93,104,224,51,38,64,150,27,168,4,68,160,65,21,226,255,132,110,124,10,71,104,38,168,219,116,223,5,182,171,127,239,208,205,2,66,217,73,105,39,14,216,94,18,211,102,35,99,181,14,214,201,229,27,249,133,37,9,169,94,103,46,58,186,105,239,58,50,244,72,134,174,29,196,241,11,25,110,95,80,55,57,65,250,53,2,208,149,97,69,35,98,103,167,0,140,15,130,202,76,144,72,137,124,160,108,242,152,74,0,19,151,136,99,137,94,215,15,13,2,124,76,20,66,11,173,136,90,137,229,147,249,112,157,142,81,44,122,35,26,56,217,29,165,123,226,39,77,71,198,56,105,158,213,244,12,125,230,249,184,2,178,221,148,214,32,229,120,195,11,155,73,85,187,174,12,226,35,159,155,8,207,93,96,33,235,192,9,21,104,35,209,239,224,13,250,129,221,223,118,79,94,12,228,36,212,152,220,107,131,198,8,4,110,147,217,31,17,121,45,66,231,6,246,72,114,65,16,97,17,28,220,197,30,238,233,244,51,241,55,65,175,206,208,230,76,113,222,90,55,91,244,92,180,135,29,111,210,158,18,58,89,45,113,3,68,139,172,143,214,62,201,140,110,236,22,154,231,137,208,162,91,221,155,68,35,195,169,83,44,203,12,32,242,6,202,168,151,252,189,126,16,104,17,86,215,136,181,17,21,185,65,134,77,102,115,233,234,218,62,237,102,82,75,102,28,95,146,7,200,56,53,70,49,30,141,56,67,208,61,58,249,65,2,144,247,169,68,142,23,170,24,196,18,30,83,235,118,140,65,88,140,153,93,130,157,133,157,158,98,117,130,72,151,183,67,61,86,215,150,241,56,172,211,156,31,121,46,140,195,35,112,252,4,238,161,192,137,116,106,111,99,163,96,140,220,72,67,12,165,2,206,235,212,220,112,96,9,193,46,92,96,97,26,26,89,34,3,243,50,25,161,31,26,170,1,48,135,58,248,112,136,40,100,226,65,88,133,213,167,139,157,133,153,87,130,229,110,222,114,97,98,81,39,203,126,104,199,154,57,174,101,203,17,219,70,182,254,144,247,227,248,72,187,245,234,60,168,252,161,73,0,109,6,84,197,27,22,30,171,200,14,2,238,238,62,20,244,193,192,232,250,208,59,166,30,227,106,84,95,193,200,165,16,248,10,138,131,204,103,38,146,21,66,150,30,121,252,35,87,4,142,130,88,150,21,158,151,73,180,118,194,119,32,160,59,26,237,9,121,96,153,178,214,23,176,206,20,252,29,152,195,140,20,243,198,68,254,51,207,250,3,241,128,167,210,65,207,115,223,135,114,16,169,221,62,60,198,136,245,145,84,109,164,239,192,25,100,189,69,180,143,179,75,41,218,237,24,43,130,112,17,31,83,2,243,235,199,97,68,13,245,29,49,25,136,76,86,37,175,185,123,253,62,52,3,68,246,130,200,174,64,105,187,50,218,176,51,119,129,150,125,131,84,4,227,124,184,232,250,246,198,21,194,8,87,239,68,61,130,32,96,129,225,16,35,115,11,148,86,99,158,37,45,208,253,207,24,115,85,61,33,124,162,61,90,8,111,136,177,246,154,216,162,131,54,31,106,8,12,67,145,229,104,50,46,225,2,24,19,148,95,201,104,189,253,190,4,219,23,239,178,89,132,142,147,93,85,234,169,240,242,17,31,212,200,250,19,27,137,34,99,146,55,58,69,40,238,247,57,198,134,0,103,6,4,125,21,148,223,69,72,107,99,49,22,204,104,209,5,178,249,154,25,251,6,118,215,212,129,226,13,175,132,241,85,44,74,54,7,132,110,12,66,12,104,158,171,217,117,86,138,49,76,30,15,120,98,100,136,11,55,204,117,231,199,20,141,187,173,19,72,90,66,53,143,2,73,21,192,120,139,238,175,141,96,155,130,88,97,67,17,101,236,66,83,136,139,142,143,238,86,6,23,48,221,37,77,187,84,132,219,111,92,88,66,208,128,68,218,9,174,59,54,214,119,74,147,180,228,243,193,241,154,48,136,252,86,44,20,216,18,254,246,18,0,102,117,134,214,13,199,151,86,15,11,116,60,175,10,250,125,9,54,47,220,226,8,19,38,116,9,80,42,64,188,8,59,205,202,221,255,180,193,236,251,66,246,197,15,31,221,153,150,110,90,223,55,119,192,177,101,160,5,33,193,240,151,87,253,101,137,80,211,212,65,154,81,71,55,15,108,136,220,128,120,101,116,186,65,128,173,117,248,253,135,193,246,74,108,100,13,56,212,236,106,153,110,208,102,24,203,77,46,217,250,123,184,211,85,93,123,153,247,13,146,61,19,118,79,252,3,14,17,177,145,64,62,241,66,12,76,190,143,124,68,37,119,97,111,123,128,107,225,241,242,167,48,56,172,254,60,63,208,198,155,55,14,104,186,222,89,237,7,171,64,1,72,53,134,41,23,165,26,133,178,26,67,79,104,10,82,75,81,64,105,238,127,182,145,183,182,243,159,174,48,132,135,213,89,206,34,243,90,223,4,52,13,76,54,58,19,31,18,198,143,104,120,9,18,32,171,186,59,245,30,131,251,162,240,63,111,32,9,108,13,129,61,194,69,1,184,56,1,92,149,85,150,238,205,236,230,177,79,108,1,191,139,241,203,12,145,49,240,222,176,101,28,30,67,99,159,3,84,164,12,198,40,38,59,183,206,32,0,185,239,73,195,116,40,175,101,50,171,65,26,171,76,25,53,33,223,7,187,182,77,194,143,1,252,230,83,126,212,229,43,79,249,241,59,230,101,29,104,86,63,105,158,176,227,211,172,239,7,230,103,61,210,151,233,182,124,153,110,63,81,18,220,151,179,209,6,136,242,17,89,105,217,127,203,109,114,244,106,157,78,192,211,106,157,248,118,126,243,65,21,111,242,234,216,30,230,175,253,205,39,239,248,224,147,55,222,51,234,172,157,86,246,127,81,137,79,69,115,182,240,56,156,159,251,20,110,33,169,251,236,221,238,33,169,251,252,221,134,164,238,243,119,27,242,235,207,223,237,254,69,186,229,244,177,191,181,219,23,9,123,23,35,187,0,122,63,65,93,47,235,239,125,180,44,7,248,222,73,119,158,12,97,83,138,53,91,172,11,197,253,176,119,21,99,147,114,171,45,55,140,13,247,191,186,78,176,75,185,205,150,27,105,90,239,69,186,154,120,72,185,221,150,235,226,112,215,74,59,149,57,165,220,97,203,117,23,66,87,6,250,175,73,202,157,182,92,151,192,187,160,125,111,180,91,19,123,185,150,164,220,83,6,248,156,15,177,118,217,53,190,55,89,88,122,119,158,103,217,246,117,63,50,61,156,153,234,90,215,182,229,86,4,120,15,109,168,237,204,37,115,82,247,171,222,177,157,245,104,251,198,201,219,27,95,127,126,194,110,239,93,238,229,60,47,205,168,214,85,218,75,123,109,45,173,107,222,77,183,123,222,74,219,215,245,208,146,87,237,109,207,107,58,246,227,76,27,63,156,66,26,237,246,202,124,215,82,243,105,58,191,230,124,172,185,230,67,128,52,231,178,215,237,200,91,163,142,198,188,75,189,116,228,253,26,112,221,237,212,219,7,10,12,223,55,234,205,249,166,107,169,115,61,174,70,14,238,188,213,107,114,181,66,139,17,48,172,45,134,190,158,109,225,89,239,199,185,173,109,109,57,241,235,4,233,93,110,215,142,151,45,75,131,30,20,85,108,236,246,124,38,79,166,119,71,61,75,42,199,145,96,21,239,77,93,155,156,114,221,160,227,0,26,85,215,123,34,199,211,206,175,205,43,103,219,207,243,72,109,227,38,183,117,189,16,106,175,185,181,181,202,110,7,208,176,62,187,101,187,247,237,217,138,167,227,154,78,59,206,2,56,222,238,232,211,142,122,28,56,249,0,26,214,231,123,109,119,143,239,87,185,223,231,158,218,222,202,133,191,66,97,238,74,68,221,207,182,174,235,6,100,39,130,5,181,87,190,173,244,2,61,169,229,106,46,95,180,80,159,239,168,91,58,247,61,239,229,88,117,25,66,160,171,173,246,235,250,161,164,172,83,173,227,162,168,237,76,210,94,12,155,106,54,246,241,31,31,70,120,43,191,178,240,164,222,189,195,139,160,230,124,108,102,157,242,69,120,143,178,219,131,26,2,131,250,141,159,251,56,159,47,212,86,202,117,206,128,170,246,215,84,74,185,144,173,154,126,66,160,175,46,111,129,188,208,247,53,242,178,94,12,112,159,38,110,232,131,3,248,106,141,158,184,120,214,229,199,111,210,177,29,235,190,37,59,144,59,239,46,121,189,126,192,3,28,64,227,250,11,5,163,63,233,122,205,87,123,235,81,83,82,162,117,92,235,93,175,6,183,45,153,167,109,28,52,170,222,211,99,236,47,32,102,75,245,58,32,85,25,251,117,82,47,2,120,145,9,96,215,183,8,24,85,198,103,70,62,76,134,161,184,128,124,207,52,253,108,204,23,58,26,114,117,141,238,184,152,200,129,210,216,45,2,6,117,229,254,71,122,202,216,210,37,34,221,121,70,85,249,96,79,231,89,83,203,23,61,81,228,240,192,168,50,123,149,247,223,123,194,116,114,63,227,254,28,233,204,23,26,182,227,40,74,155,243,37,79,174,117,219,80,168,140,96,81,109,114,100,244,180,71,79,215,106,61,114,222,45,95,168,251,126,209,175,182,25,33,48,4,250,234,137,227,204,158,72,229,119,154,149,215,188,229,92,113,214,151,228,123,177,246,210,144,253,132,64,95,155,174,209,228,153,126,124,144,102,192,215,55,242,11,72,86,44,123,30,24,181,94,210,217,133,188,167,80,196,8,22,84,150,103,110,159,203,108,199,86,215,99,179,10,200,122,29,160,11,19,210,81,146,136,134,17,204,215,149,247,148,247,231,124,241,162,227,233,146,251,79,148,74,47,182,211,114,219,172,160,18,2,163,250,21,194,201,62,84,139,123,125,175,214,243,146,216,47,12,2,85,165,92,34,115,186,216,247,166,187,55,131,162,138,55,125,116,96,123,129,16,93,27,125,9,236,155,32,233,93,174,59,215,75,104,184,68,118,236,58,128,70,213,245,110,247,43,146,68,201,5,31,138,187,31,164,245,218,152,122,222,247,70,5,223,0,26,212,190,53,120,13,249,195,118,138,227,114,51,83,163,47,102,160,183,6,236,207,244,245,201,12,224,95,198,54,123,132,143,34,126,54,107,165,93,192,98,190,170,249,106,230,107,53,95,214,55,177,155,175,227,211,216,247,40,56,38,247,16,154,231,170,86,189,56,22,28,189,192,170,245,208,214,53,85,230,144,136,87,236,39,231,113,105,231,57,153,55,31,47,130,123,28,205,106,20,14,22,214,165,144,240,23,56,195,85,165,93,26,107,5,106,159,214,114,120,29,46,128,70,213,199,221,197,250,210,148,247,115,93,107,65,178,157,174,213,92,183,122,154,71,50,61,48,170,76,234,79,125,197,116,242,121,54,249,11,237,241,11,220,236,239,120,147,153,60,252,216,73,246,76,25,254,236,120,205,40,39,212,244,167,63,253,186,148,244,255,190,255,239,159,239,255,95,234,213,90,250,245,47,127,253,219,187,255,248,211,175,255,242,211,251,63,254,248,211,255,249,241,151,191,254,248,199,159,254,244,195,178,14,94,117,47,218,255,249,135,165,254,211,245,175,159,255,250,231,171,210,15,107,175,255,255,112,107,127,184,127,238,253,119,106,253,159,238,255,141,26,189,135,191,61,239,161,15,153,219,27,85,251,106,167,63,245,167,96,184,131,49,9,154,43,77,162,82,249,255,249,203,95,127,186,67,127,192,159,199,127,87,33,24,165,173,254,175,63,254,250,151,119,127,254,233,253,251,95,126,232,255,252,229,199,159,255,253,253,127,254,112,47,255,15,215,159,189,87,188,79,41,101,24,24,79,237,151,247,239,127,125,247,31,239,127,125,255,143,63,255,251,191,253,250,254,191,70,231,127,248,168,217,103,51,243,242,197,2,116,62,101,208,83,232,205,252,130,65,79,79,89,232,73,47,128,166,244,46,22,5,191,242,135,145,86,73,159,42,33,234,154,112,10,190,146,253,145,46,247,241,101,64,169,59,174,127,175,122,107,125,53,175,188,193,143,55,95,249,102,26,191,77,61,223,236,184,110,193,200,169,135,27,244,127,131,1,216,95,167,250,92,129,255,172,247,26,47,134,43,210,200,22,140,86,84,24,196,43,82,215,11,134,43,118,216,55,31,173,120,126,101,7,247,91,59,135,114,157,235,132,144,99,125,9,232,254,53,40,13,135,72,47,133,227,174,171,132,212,115,142,131,194,5,36,75,240,137,170,246,6,153,195,224,29,106,202,60,199,145,192,114,19,85,238,150,173,28,73,141,159,247,34,28,16,78,160,67,218,144,171,118,156,11,147,175,53,114,110,156,13,94,193,186,87,133,71,33,37,125,4,213,167,88,58,204,165,201,207,45,49,100,92,143,213,188,233,39,101,23,203,242,221,155,220,37,218,154,18,240,108,152,194,113,36,198,106,211,183,254,126,142,38,224,85,149,58,54,73,115,106,142,50,227,202,219,198,25,75,37,90,122,236,26,220,165,163,176,252,19,222,138,30,85,52,195,86,91,10,167,124,39,107,36,71,153,83,195,248,221,219,194,188,90,180,130,144,87,107,132,173,224,213,121,90,192,99,198,12,201,15,223,120,86,26,54,47,249,241,17,37,7,250,102,190,3,201,159,152,8,145,159,161,193,59,227,77,246,139,1,180,38,190,26,220,74,34,68,48,175,231,225,49,234,127,170,249,43,138,158,183,149,30,181,29,140,224,20,179,180,25,66,143,87,154,146,39,213,1,131,171,157,148,186,6,211,49,210,205,229,12,23,189,167,193,165,199,75,104,150,58,218,13,187,95,20,63,49,76,0,197,204,179,143,31,111,182,208,189,210,140,169,62,198,137,205,144,115,224,80,35,253,26,12,51,121,52,10,49,205,34,227,3,140,29,119,192,243,138,207,107,141,220,66,46,197,53,21,226,190,96,65,236,96,58,235,215,211,229,78,30,156,74,127,108,65,30,202,153,31,230,24,211,175,122,170,152,122,55,210,19,219,248,192,137,102,59,45,57,223,186,213,48,198,110,40,242,244,4,73,142,163,72,158,96,157,242,51,13,191,208,126,232,139,24,208,231,206,143,52,64,135,59,160,217,224,8,5,183,212,12,113,120,68,45,101,54,164,59,235,86,239,140,99,85,103,65,229,103,106,196,231,228,0,150,162,157,116,86,50,220,56,29,1,246,222,243,7,222,73,161,16,79,184,146,34,48,188,148,50,184,160,17,242,6,86,126,235,82,222,73,61,126,151,242,150,143,148,242,10,135,244,224,13,127,118,90,9,38,75,218,97,57,242,133,243,25,243,249,40,230,161,115,186,144,37,36,181,160,164,70,233,74,228,85,30,102,105,196,79,216,74,39,121,95,37,249,118,134,113,137,3,118,41,146,48,131,115,152,77,179,234,197,198,243,59,35,146,213,60,76,248,210,89,211,119,156,255,63,243,142,243,124,212,226,247,158,247,249,164,125,253,88,65,91,33,72,81,69,232,218,97,213,205,61,89,118,175,194,187,69,114,219,117,195,112,185,33,102,79,28,70,238,245,74,22,121,149,213,229,22,239,72,32,67,154,132,162,34,1,146,86,224,4,175,13,170,235,83,90,192,175,11,101,166,101,233,38,185,220,56,35,39,7,228,182,72,156,34,142,17,52,113,162,238,93,225,248,88,137,102,145,129,215,230,86,6,173,248,141,98,150,130,224,104,86,92,198,98,155,80,102,68,234,21,228,187,225,228,32,38,67,199,0,97,114,17,76,33,82,224,36,101,147,26,163,77,67,165,29,192,132,66,153,93,237,155,133,36,148,225,40,121,171,25,212,180,216,55,206,146,138,233,103,18,55,142,105,248,27,236,10,129,138,182,69,3,164,135,234,41,55,247,80,240,48,5,255,180,247,246,32,36,173,11,25,159,146,188,209,178,207,160,130,165,240,213,21,66,163,117,2,101,185,99,95,28,164,42,100,0,218,98,208,177,186,190,8,242,54,245,51,55,238,231,67,31,44,8,46,90,184,166,176,230,143,55,198,109,31,53,133,76,136,177,218,225,203,4,59,1,75,30,160,94,128,159,17,18,59,76,15,206,131,63,53,254,104,249,227,23,29,210,240,48,199,135,30,105,67,72,62,44,133,41,186,222,64,115,12,149,50,52,236,1,149,155,9,225,76,42,11,105,255,178,105,116,113,219,108,254,128,168,106,197,188,127,91,224,124,152,23,14,0,9,239,127,70,206,131,125,228,106,195,123,219,128,185,33,61,240,100,195,19,151,144,2,121,50,21,147,178,9,233,34,220,12,112,120,70,116,59,246,71,36,102,62,226,142,10,132,132,98,34,38,1,197,137,200,82,64,187,2,10,55,147,152,50,210,59,141,137,197,233,103,16,129,102,181,217,241,104,203,195,45,143,31,216,71,217,82,14,133,80,5,70,54,77,177,54,176,12,55,106,84,224,160,182,85,65,19,78,227,152,123,187,93,250,234,215,136,75,218,222,152,38,140,67,95,141,39,207,40,69,178,111,242,59,175,47,9,207,20,250,93,97,160,48,244,104,106,208,227,216,140,46,140,159,135,110,137,27,166,59,173,21,243,87,142,45,160,52,152,112,108,52,15,58,237,85,51,135,23,207,179,63,239,134,28,56,138,209,215,102,104,242,189,247,51,54,142,153,97,142,70,134,148,47,54,21,114,61,147,57,132,86,117,67,138,77,54,0,25,71,226,50,34,160,145,170,178,49,161,218,161,197,120,246,102,129,220,242,153,81,247,42,221,234,208,203,154,132,46,47,169,35,52,101,163,142,40,12,244,145,45,72,71,113,159,229,55,175,248,255,158,247,248,63,74,241,255,237,107,186,190,180,168,229,247,10,185,251,252,95,159,12,57,194,155,207,121,251,96,236,40,31,22,213,199,25,98,126,115,191,31,21,214,247,177,95,159,38,28,240,55,125,189,114,186,202,107,129,176,149,105,251,243,24,175,237,126,151,39,99,196,123,55,112,173,219,150,83,78,123,211,155,18,33,48,168,223,248,65,154,23,238,67,222,47,203,148,117,175,165,21,188,195,179,231,109,138,233,138,96,65,237,149,248,209,243,59,106,123,218,175,153,172,83,136,249,5,77,103,49,177,228,49,104,174,187,113,38,231,23,66,54,75,61,90,173,135,189,228,90,247,107,41,235,89,19,222,0,12,129,65,125,74,103,215,62,244,242,136,195,147,111,205,108,75,201,190,68,142,102,97,54,161,70,43,55,23,86,15,195,39,139,58,8,18,7,82,18,107,245,58,75,189,221,232,83,12,131,247,213,41,61,237,6,131,185,237,232,42,226,244,180,10,33,179,25,232,27,114,30,84,100,163,84,230,0,161,208,28,176,158,52,5,176,12,203,178,117,98,97,16,36,83,114,231,239,164,121,228,121,65,97,137,95,21,170,195,81,17,68,0,238,123,170,50,196,253,134,74,8,137,150,154,113,186,111,31,251,41,249,33,20,92,174,197,68,102,36,126,80,147,158,28,44,250,65,90,232,97,91,184,101,22,162,231,5,177,239,173,16,8,117,0,82,114,10,64,222,88,89,48,208,128,227,118,218,28,183,123,176,181,102,219,61,102,12,141,76,178,192,41,18,173,210,61,187,9,116,246,133,87,20,20,238,115,81,47,98,7,208,138,153,246,135,247,126,204,111,211,212,119,137,25,3,154,27,86,245,211,38,14,251,24,45,151,197,132,128,200,175,155,0,242,164,192,216,62,59,180,39,11,41,99,175,202,67,77,213,77,124,183,125,23,138,25,225,224,27,82,60,119,182,14,157,139,188,226,10,35,51,20,225,84,8,99,213,238,31,137,219,196,2,64,159,152,49,115,194,214,16,237,28,114,26,12,38,172,58,180,109,186,203,166,132,136,145,110,51,102,200,34,171,234,215,57,222,11,183,93,110,67,217,183,188,207,223,138,92,141,182,42,211,134,204,182,253,13,156,115,128,153,49,242,218,125,238,39,169,147,143,123,39,27,250,157,17,53,28,13,26,36,104,83,0,163,218,124,28,220,136,130,49,195,172,230,9,195,90,196,139,5,171,233,14,143,63,91,211,225,243,59,24,109,114,128,8,138,44,49,46,77,212,210,81,84,67,116,61,77,54,36,27,88,30,100,183,53,68,223,242,4,199,54,238,127,58,167,218,186,149,233,64,2,240,170,199,115,113,14,79,2,129,129,97,87,24,23,219,255,30,236,11,95,91,220,247,55,39,161,146,243,3,93,32,148,211,24,44,102,148,156,91,163,110,228,77,65,160,102,121,84,211,64,131,70,237,244,143,126,252,54,112,6,19,64,13,227,238,9,143,81,238,212,42,36,92,204,244,170,138,165,58,83,116,20,177,111,146,112,36,191,111,102,129,134,120,220,97,59,16,155,51,60,207,8,171,179,202,209,164,135,37,30,218,149,155,37,32,195,170,202,44,175,119,190,26,130,237,216,0,9,62,204,204,51,155,53,139,126,236,240,246,8,67,52,234,138,33,131,83,13,162,13,36,107,225,23,236,245,11,232,31,9,2,252,91,34,38,192,170,66,154,200,114,66,10,75,171,6,70,89,130,172,10,97,131,51,137,19,180,206,211,239,133,136,61,251,222,78,93,129,98,32,104,195,30,235,204,178,40,189,49,56,11,61,145,184,61,98,98,44,123,17,238,34,242,231,216,56,131,193,154,253,94,216,57,184,3,0,17,122,151,175,56,37,102,36,103,153,59,110,246,81,207,211,216,204,200,221,196,112,230,110,89,236,170,21,191,180,193,218,219,205,177,251,197,104,117,227,121,200,195,153,203,44,42,18,100,106,2,208,108,34,93,209,249,133,51,238,105,128,35,17,134,128,24,242,226,41,144,145,204,189,12,7,116,107,51,168,203,223,211,110,25,81,10,143,184,163,0,134,62,120,18,66,100,125,62,130,254,152,154,163,236,78,186,161,3,227,248,172,22,64,81,4,59,238,16,244,10,244,210,253,109,81,222,173,199,232,7,37,166,1,81,130,120,175,114,176,150,220,244,131,198,69,183,9,144,178,47,74,15,23,241,11,237,252,30,253,102,151,166,208,141,35,84,161,39,108,52,8,27,32,116,132,240,33,73,123,72,18,215,105,7,163,61,181,27,224,182,200,109,226,68,236,39,78,128,140,34,226,35,200,103,98,94,228,112,217,236,238,253,207,131,119,123,95,20,118,217,77,246,182,180,123,104,116,173,94,171,170,127,7,113,180,223,111,75,253,102,113,183,75,165,171,57,85,75,151,83,245,246,131,128,200,226,217,35,63,240,37,24,14,150,58,152,84,22,248,2,93,87,64,254,53,153,65,145,216,38,203,31,32,211,29,99,156,104,80,88,140,245,55,203,131,162,26,202,62,200,25,62,59,202,67,93,81,109,134,53,24,52,185,159,212,145,222,246,193,107,218,28,33,106,24,219,62,65,56,190,23,132,5,126,0,7,158,71,229,135,124,32,116,165,73,44,51,180,213,16,52,4,233,195,84,148,18,26,218,116,255,134,248,155,202,111,20,105,16,194,252,140,76,56,102,6,49,150,20,189,8,103,9,27,62,147,194,209,94,24,135,38,183,227,228,130,82,145,40,19,180,246,211,35,44,240,2,104,153,86,141,227,169,87,227,56,32,8,20,202,14,52,213,226,112,39,224,110,116,193,70,67,146,40,106,136,5,131,49,150,69,56,177,93,135,234,22,75,80,197,67,88,66,225,0,101,93,171,225,25,203,194,228,89,114,231,103,76,123,138,100,135,50,109,222,72,35,6,159,218,211,40,146,181,173,1,40,211,55,133,127,108,90,96,0,84,6,36,23,162,21,231,244,53,212,170,67,1,79,5,99,44,253,79,56,44,7,217,208,59,50,43,150,26,40,174,109,232,250,131,127,133,46,47,41,22,202,179,54,85,0,184,210,9,176,193,60,254,68,209,252,250,218,205,194,246,191,162,24,12,161,146,124,35,205,188,179,231,33,52,222,2,16,11,16,191,128,2,230,231,112,249,149,84,19,236,109,203,36,138,222,81,193,103,147,133,27,4,185,9,66,136,212,175,63,26,185,158,127,6,149,152,182,88,1,235,98,140,172,137,94,171,103,60,26,55,216,193,130,50,16,92,163,56,135,236,8,238,54,18,233,117,252,164,211,205,183,105,233,57,39,14,107,82,227,69,19,172,36,30,112,194,44,236,142,167,177,17,156,203,74,78,120,21,142,2,27,152,103,16,31,102,124,250,46,195,246,235,246,192,187,244,108,86,178,97,236,124,11,164,104,219,100,154,57,231,49,97,164,173,102,213,109,10,98,171,49,148,226,240,94,124,160,45,5,48,38,175,80,21,215,166,131,135,201,167,141,191,251,120,125,124,107,184,126,1,29,159,137,125,196,18,28,227,8,184,139,103,65,1,159,242,204,44,228,120,158,45,206,156,19,150,185,40,46,225,186,101,217,23,231,35,198,11,152,22,87,66,124,10,208,206,46,110,167,104,227,53,191,244,182,61,133,95,221,130,53,26,160,128,93,121,158,230,57,152,86,51,172,208,176,73,195,64,3,6,27,241,96,199,167,35,86,238,25,190,8,138,232,18,118,207,99,102,126,115,16,35,175,101,8,186,87,99,152,147,127,90,94,163,167,190,76,44,47,47,239,225,32,194,234,9,207,192,132,181,17,219,21,46,73,46,156,198,58,47,250,129,87,184,14,63,170,81,188,102,211,18,131,250,86,249,198,14,199,209,92,216,183,201,248,181,136,67,148,150,185,123,217,48,65,59,218,204,200,82,13,79,205,15,150,128,239,236,77,147,228,115,137,68,186,178,237,78,119,116,83,170,94,236,72,251,216,158,155,12,3,157,198,11,253,94,51,200,66,116,180,76,160,80,56,165,131,1,83,17,61,22,15,15,28,36,92,112,136,52,97,154,71,197,0,95,35,172,14,113,63,56,33,147,6,116,12,39,252,136,135,143,227,153,163,21,12,214,203,47,42,86,75,241,154,62,214,245,194,141,88,101,128,111,123,34,66,69,139,216,112,19,0,93,148,201,2,32,196,76,235,12,1,158,194,54,172,45,0,201,182,211,90,23,7,144,89,45,196,15,228,3,238,106,240,117,134,132,190,169,76,32,115,241,125,46,150,249,146,211,57,239,56,20,34,230,153,209,162,199,16,199,116,236,189,186,89,70,9,4,25,47,238,120,78,24,176,203,137,169,6,74,239,164,22,211,254,120,144,217,249,94,113,132,236,247,102,143,88,128,49,200,49,72,42,221,153,218,128,144,221,244,182,126,179,215,34,155,76,72,105,53,67,202,60,52,221,138,198,55,158,142,25,224,176,43,57,69,30,130,207,10,87,243,8,247,16,73,131,102,30,13,199,156,8,119,104,96,229,146,174,85,130,18,179,190,235,20,53,167,202,121,109,175,160,3,64,1,25,1,213,182,42,151,185,97,17,24,181,228,107,62,254,170,248,53,186,41,56,45,88,66,67,141,122,58,163,230,227,226,218,34,247,144,215,7,93,54,212,218,64,2,24,139,75,55,203,28,97,240,228,99,38,48,92,123,76,152,10,131,5,142,46,76,102,83,222,218,206,185,186,94,175,204,19,132,135,52,40,255,97,145,88,48,54,219,253,76,206,16,8,115,245,164,44,99,10,36,56,3,102,52,118,77,165,14,134,206,204,173,200,117,160,25,148,140,168,206,119,28,203,211,122,72,109,205,52,72,125,226,16,0,17,143,26,223,8,85,242,219,100,93,17,70,77,34,200,107,122,145,70,24,42,142,56,14,28,90,122,55,77,104,226,29,94,33,213,99,167,144,3,123,90,140,81,101,50,186,176,132,140,111,94,131,53,195,20,201,243,248,125,215,122,61,90,174,243,1,195,26,216,86,103,128,138,59,139,33,52,217,212,231,228,65,0,200,150,14,209,181,88,21,140,124,115,5,163,214,38,66,199,102,34,141,173,156,44,64,129,149,136,113,210,65,178,67,123,15,41,179,49,182,204,8,14,198,50,217,254,167,205,142,21,234,75,211,95,96,43,77,101,55,207,145,9,15,165,17,102,193,134,90,58,78,227,200,229,76,79,29,193,229,86,25,130,253,14,21,206,34,42,197,14,200,138,120,21,111,214,201,188,214,198,239,204,203,42,86,178,146,157,242,61,27,116,157,205,215,88,133,189,209,24,135,77,134,207,105,152,146,172,98,7,8,152,202,34,91,154,90,218,104,239,193,20,231,77,117,198,146,87,116,103,32,236,56,99,44,109,164,18,206,90,99,160,89,154,153,241,237,137,153,219,221,38,198,3,98,217,35,105,93,201,122,32,42,121,177,76,238,133,227,5,224,213,226,99,97,9,224,49,215,243,140,209,241,78,77,118,163,16,199,195,23,224,240,176,30,105,121,75,22,4,173,198,171,62,15,213,163,4,78,132,135,11,69,153,248,100,134,249,13,209,110,162,136,51,189,156,201,41,203,151,83,156,105,6,147,111,196,243,183,144,175,33,131,15,184,185,23,21,76,211,196,50,157,92,160,215,4,0,147,29,207,15,57,114,96,240,141,52,51,167,192,61,212,242,146,245,91,192,80,201,86,55,248,44,90,115,102,17,192,243,217,128,25,7,12,27,90,78,58,34,16,140,246,185,17,199,173,61,119,241,28,200,49,41,199,198,34,239,204,0,184,181,177,32,231,10,138,36,155,105,109,156,132,164,211,78,186,248,25,124,36,251,36,81,4,95,104,30,154,25,59,54,136,214,144,64,241,156,207,59,234,126,88,9,232,198,19,141,8,54,212,235,71,83,241,152,63,171,24,56,171,104,182,121,167,223,241,9,86,54,74,110,173,89,155,78,66,140,6,70,194,69,150,221,2,188,250,224,20,140,71,36,225,137,93,38,176,222,188,97,228,1,90,191,88,202,62,235,101,64,136,2,185,48,114,49,58,47,228,124,194,30,97,152,109,24,251,234,255,236,152,52,12,116,53,206,139,18,112,63,207,32,61,19,29,187,188,207,128,211,86,65,188,112,150,129,137,5,121,30,226,185,140,147,234,39,185,159,57,172,141,54,78,86,141,48,55,6,157,154,29,168,226,158,213,135,154,116,82,31,119,153,187,153,51,200,100,69,17,160,19,248,59,39,76,226,211,43,144,3,86,9,176,20,186,188,255,121,16,232,134,230,54,180,167,221,107,175,162,180,74,167,146,137,25,60,198,34,198,209,170,4,234,193,76,91,102,211,45,146,175,153,60,120,76,114,168,230,177,113,22,251,188,104,24,81,91,79,145,3,123,33,26,21,67,171,35,46,163,70,224,99,212,4,198,85,4,97,23,115,84,134,9,218,128,128,14,93,13,141,247,24,17,143,211,53,6,181,255,71,158,125,221,201,1,24,91,47,140,111,153,98,7,166,208,130,57,246,32,243,213,234,73,86,174,224,147,211,245,0,94,155,80,153,94,130,67,10,12,193,29,106,167,239,47,150,10,76,204,219,219,23,2,153,198,201,61,147,100,228,69,48,47,166,53,62,164,96,67,170,22,53,217,211,140,162,41,88,149,2,208,212,223,45,144,11,173,4,27,200,185,15,172,100,201,4,68,204,210,184,151,216,113,235,58,176,7,35,228,253,126,130,106,156,207,41,8,238,33,116,132,12,144,155,12,112,156,73,14,83,6,79,196,109,227,140,72,212,198,185,168,108,78,78,212,21,86,137,15,102,51,182,41,23,117,18,196,95,188,17,166,145,253,94,63,50,15,190,185,221,30,39,60,222,4,184,181,196,198,55,45,178,24,3,158,89,249,78,76,198,110,189,149,38,109,246,119,175,124,103,81,168,23,57,19,57,154,148,130,225,33,142,188,82,115,228,231,214,139,91,179,31,220,216,26,188,45,194,152,42,138,174,6,26,51,38,242,230,8,96,16,132,55,155,117,188,225,103,178,12,69,46,127,24,229,18,81,101,23,166,135,100,26,139,171,8,102,253,42,235,12,177,76,5,137,236,32,126,112,247,221,135,163,77,214,202,217,156,105,6,48,124,5,51,85,15,130,206,166,176,52,91,167,227,70,15,88,202,169,19,134,177,222,94,252,212,109,68,185,8,243,186,90,185,7,229,162,7,162,211,36,90,205,178,215,36,41,157,29,117,251,69,248,252,80,70,158,246,211,5,102,70,161,155,139,141,237,156,130,63,29,102,6,184,107,145,6,198,160,254,28,12,209,242,123,230,34,7,49,184,112,144,147,48,248,48,203,207,24,184,168,65,141,202,182,171,4,253,25,20,196,193,245,222,31,37,254,123,233,230,197,32,1,230,226,197,54,230,48,223,188,240,137,204,14,119,209,248,43,191,37,160,89,251,244,120,110,4,65,57,144,24,36,72,114,199,180,119,171,108,193,205,160,2,145,90,128,152,244,27,121,0,76,10,78,21,207,199,55,41,115,54,134,27,232,205,34,228,127,160,38,135,221,41,178,243,148,148,102,226,180,149,88,68,215,183,62,233,117,157,234,47,167,215,111,49,25,55,7,4,162,85,142,4,39,144,114,43,201,87,232,148,26,48,115,231,122,200,78,7,222,1,92,9,4,120,113,136,23,129,110,53,31,116,93,116,8,165,204,214,41,220,169,17,237,81,124,35,58,72,164,71,80,131,76,7,213,142,70,229,156,52,91,71,56,125,51,224,62,177,9,78,143,181,24,158,161,121,95,65,203,175,3,2,247,187,233,2,78,179,16,235,22,0,178,169,172,253,150,128,136,243,205,101,87,4,108,229,137,202,128,146,203,30,3,1,144,38,126,56,128,214,169,128,9,96,114,214,140,25,55,227,53,116,189,222,196,243,49,133,194,65,47,28,100,102,64,4,105,51,0,238,132,115,95,11,83,42,92,107,117,118,35,74,90,205,99,55,56,192,99,196,32,3,50,84,10,137,99,199,9,171,10,144,99,137,232,17,26,204,233,78,229,77,83,207,222,248,189,228,34,201,149,169,30,196,197,83,116,225,162,10,3,222,118,146,152,89,60,149,230,164,166,5,8,38,243,210,36,67,198,95,221,145,173,104,183,244,16,138,207,198,163,62,197,223,113,181,130,158,247,58,129,204,232,222,38,204,238,42,249,205,217,8,45,226,63,60,28,147,73,195,157,75,115,10,227,131,122,51,22,3,147,3,27,90,70,208,52,104,183,53,15,22,40,92,69,191,210,193,118,248,61,155,55,214,108,254,99,212,176,91,147,123,230,211,189,60,216,153,137,224,82,58,101,72,73,11,118,169,244,78,201,59,97,60,39,172,101,6,62,62,53,203,84,229,92,127,24,166,51,159,61,123,54,205,217,125,116,188,29,1,152,137,132,165,34,150,202,56,34,100,105,212,3,50,230,72,157,167,135,158,102,70,148,213,144,223,137,52,91,186,253,136,182,59,242,239,24,68,208,169,195,240,240,28,4,135,101,153,15,212,204,29,3,22,106,216,108,196,133,129,73,63,96,227,19,163,119,162,128,193,221,251,191,250,211,236,116,9,227,109,229,13,13,178,12,208,213,221,23,214,205,178,172,246,42,175,215,244,158,76,136,197,253,119,126,217,147,205,28,120,0,198,207,10,184,183,127,232,39,189,206,183,58,200,34,199,163,44,122,91,95,236,28,138,201,35,201,211,58,207,175,255,171,243,47,186,79,27,135,147,227,145,47,115,27,115,7,190,251,105,120,56,122,158,47,16,133,128,108,204,84,37,91,83,184,14,174,247,59,84,199,190,124,249,193,45,132,194,49,245,112,182,34,129,216,113,99,203,179,35,158,238,89,190,21,10,188,216,48,201,21,145,224,209,4,173,57,162,59,57,161,1,34,65,228,202,14,120,17,100,232,99,108,76,45,110,13,211,216,240,221,7,142,209,134,85,234,237,188,112,193,99,122,54,9,240,21,4,150,27,93,57,58,87,133,79,151,140,161,235,112,112,193,248,221,12,205,34,60,90,171,98,178,250,148,96,14,202,41,223,190,194,16,179,178,77,201,24,170,181,55,97,198,126,189,130,33,133,3,7,76,240,136,98,240,40,224,180,247,63,253,173,179,158,173,47,111,120,244,95,76,24,223,215,117,177,9,227,41,235,131,49,179,172,139,179,178,124,251,249,45,114,162,188,29,95,111,130,139,239,249,226,63,248,235,211,97,71,137,176,227,243,39,140,207,169,125,162,142,191,103,140,255,232,140,241,36,211,245,183,70,159,229,47,223,247,122,108,109,111,91,58,57,21,123,73,71,169,219,118,182,90,215,83,211,200,123,104,84,253,54,98,170,251,171,207,207,250,206,151,234,151,215,114,212,146,40,243,250,197,77,210,94,219,177,213,114,72,30,247,25,20,214,228,123,168,247,135,117,159,37,170,79,219,182,231,220,202,186,75,139,235,153,83,170,45,239,231,38,169,235,29,44,170,122,79,31,190,140,76,83,207,166,219,206,99,111,199,190,159,69,27,172,233,2,183,148,143,117,109,218,115,0,13,235,243,123,228,119,233,253,131,114,197,123,12,249,182,114,19,145,204,118,170,253,108,136,96,154,128,246,254,121,136,142,68,254,95,126,45,249,228,27,251,106,242,211,151,164,134,230,196,241,81,170,72,209,203,217,163,205,17,148,84,180,54,101,254,107,163,121,246,5,115,221,241,220,243,72,159,75,14,105,145,10,55,212,207,238,0,146,201,14,159,138,239,148,59,179,163,81,17,104,119,186,114,77,185,145,88,147,150,133,161,231,226,43,95,159,45,227,196,128,236,221,198,122,142,24,182,99,124,136,10,64,102,156,211,74,204,240,214,240,141,215,139,148,254,60,126,103,109,197,156,208,27,164,171,187,109,156,93,191,204,181,26,199,54,219,150,95,149,134,253,58,15,107,221,9,57,172,183,177,166,224,104,38,192,42,144,106,1,195,76,115,234,28,217,59,201,47,126,14,140,210,244,123,183,147,195,6,26,77,102,142,148,120,107,229,120,13,204,42,149,96,45,41,136,228,24,123,189,197,71,100,218,70,191,205,6,11,2,44,177,88,20,160,153,65,67,135,164,22,137,45,150,135,7,193,238,225,216,249,190,2,65,250,173,215,222,151,166,115,106,148,134,60,12,52,86,107,56,69,187,80,181,161,195,190,41,71,27,188,84,105,49,248,102,253,75,186,141,3,144,181,110,134,210,73,116,71,54,115,51,58,234,107,141,136,109,27,118,206,6,100,124,144,113,124,131,77,142,3,146,208,76,135,141,232,233,207,165,43,155,37,127,40,14,16,69,55,40,160,176,255,139,5,29,6,244,209,124,251,154,227,247,76,224,191,237,88,53,49,154,72,132,66,51,177,7,194,187,192,102,201,22,104,189,250,176,168,209,8,190,225,234,65,130,70,134,9,146,125,127,148,81,5,6,81,252,184,232,118,206,184,41,47,166,70,6,96,60,223,41,100,0,25,137,56,129,136,62,76,9,206,44,100,83,8,49,70,62,203,180,48,68,50,240,158,51,203,192,235,60,54,182,248,245,252,34,250,87,20,23,126,76,107,52,111,68,176,83,97,162,6,253,117,12,138,76,204,248,53,182,160,192,207,19,61,171,236,66,96,186,216,120,233,32,236,28,7,156,30,172,131,93,173,104,61,253,130,139,61,142,229,88,178,252,105,19,18,194,173,123,168,143,147,74,134,25,102,222,99,39,32,126,147,194,192,241,182,155,186,166,160,131,196,11,140,211,234,203,213,37,129,55,3,58,231,51,17,28,27,127,182,252,42,187,141,192,157,202,58,75,138,66,130,78,227,51,99,231,18,206,85,86,226,209,106,5,43,106,145,253,97,214,145,151,216,90,99,211,167,114,181,22,113,53,154,138,97,107,247,213,248,246,185,26,205,255,59,87,91,62,82,169,62,73,214,58,193,99,65,34,255,1,238,129,131,163,167,148,148,247,67,0,111,38,221,72,170,199,48,45,206,17,140,201,165,118,73,84,165,48,30,5,0,72,23,130,20,69,236,208,197,104,49,14,31,147,35,154,233,73,103,202,119,62,207,15,13,9,112,89,143,6,121,40,164,77,16,205,92,133,185,229,128,16,12,154,49,190,79,160,24,232,128,36,11,140,105,68,111,1,28,0,163,196,93,154,248,66,212,106,44,133,73,9,137,158,151,1,41,220,235,10,223,198,23,180,178,94,215,220,110,192,250,144,180,206,111,88,99,180,83,213,21,82,38,201,25,184,88,119,101,63,17,219,98,72,173,59,216,163,6,52,158,52,208,243,29,0,112,11,7,136,148,213,38,0,73,36,77,16,210,236,88,83,37,80,27,160,170,13,49,46,109,208,54,129,4,199,143,119,184,124,119,200,72,6,143,40,190,115,186,74,113,123,110,236,144,29,209,199,28,70,202,140,69,33,172,36,87,206,230,54,194,99,235,24,5,94,73,27,163,0,41,145,145,209,6,115,75,126,184,42,142,93,185,36,11,152,137,72,175,33,246,55,225,107,243,193,104,24,227,98,80,33,233,214,234,89,57,201,32,0,59,75,230,144,67,33,253,159,240,160,226,72,73,15,175,20,16,138,68,144,50,65,244,81,45,51,22,58,235,124,0,77,134,50,18,151,224,162,199,57,131,166,154,105,236,59,109,182,146,65,126,240,13,178,87,110,122,137,7,168,94,154,118,132,140,200,55,141,143,159,154,79,128,123,24,130,213,228,154,17,156,88,30,62,38,92,36,143,119,70,16,53,214,124,177,21,64,216,39,93,18,238,241,33,120,87,121,144,20,176,41,80,114,140,12,42,2,249,160,109,114,218,33,156,154,244,59,89,33,38,62,129,201,245,216,247,29,26,41,19,4,7,216,81,171,155,149,122,131,57,190,94,234,232,13,27,146,193,58,150,51,91,207,58,132,82,140,159,26,132,194,39,113,80,138,76,193,98,96,236,204,133,73,97,86,8,25,170,51,20,226,39,164,132,140,101,230,99,167,14,111,165,238,101,227,3,122,24,208,76,152,103,162,73,173,138,128,5,230,185,97,255,108,134,108,0,154,32,73,10,85,5,109,43,28,2,30,249,232,175,104,83,219,180,42,118,80,131,176,120,10,240,136,72,108,14,34,135,118,72,51,39,18,250,225,172,90,21,176,18,46,11,201,226,39,61,32,68,194,180,51,14,69,230,136,113,161,143,153,20,8,149,248,105,71,240,180,158,20,91,36,128,131,53,207,0,2,32,138,79,218,180,157,145,89,7,98,133,18,197,137,193,165,201,204,77,237,0,130,113,91,83,62,62,14,148,132,139,104,188,49,241,253,134,72,101,196,52,39,202,69,242,94,40,22,18,151,147,149,219,68,190,81,10,182,73,144,14,128,168,84,114,93,226,184,14,129,193,80,57,179,114,194,21,196,133,32,26,204,229,128,6,123,169,205,10,119,145,248,135,172,198,75,144,100,47,199,240,77,105,192,36,10,49,1,146,212,15,135,127,55,109,15,147,240,0,207,219,2,216,35,166,199,204,101,81,30,99,56,4,230,237,182,171,68,11,55,243,46,230,64,109,6,216,214,223,96,83,200,205,32,210,143,196,95,204,131,163,65,89,56,151,40,93,186,183,108,73,158,0,41,213,0,96,58,99,130,71,195,65,35,155,36,39,128,11,175,28,47,86,0,164,131,77,75,137,229,7,206,188,140,215,137,89,128,24,255,38,195,160,252,122,200,84,7,42,157,140,129,132,251,28,112,87,21,196,150,70,60,53,34,88,204,237,22,38,225,164,217,224,241,115,178,206,52,165,4,219,12,210,165,64,96,113,166,140,102,183,230,200,96,35,154,7,69,250,34,111,96,6,219,88,82,100,62,91,22,155,31,236,96,50,141,194,216,128,108,48,177,211,65,142,137,184,154,89,37,192,136,172,246,74,18,181,179,98,227,112,187,216,24,245,141,96,16,164,155,137,41,9,136,219,198,219,225,182,191,62,188,231,185,109,67,57,101,27,75,167,14,115,137,145,220,23,21,26,224,229,60,205,56,173,16,36,14,147,208,0,226,0,235,94,32,15,4,242,135,23,82,2,73,6,208,210,200,77,7,202,68,179,218,232,36,169,72,220,10,132,178,34,138,109,85,80,32,223,193,226,166,177,245,76,123,85,84,172,76,182,153,160,1,130,16,190,16,221,78,80,135,15,109,86,144,11,239,204,133,201,67,3,8,156,236,2,72,132,103,57,235,205,206,170,237,179,181,121,199,161,227,116,58,222,83,64,169,18,218,67,172,184,74,215,78,14,50,21,34,126,74,41,98,125,202,145,85,204,10,196,149,136,155,7,76,63,146,13,2,17,66,9,214,225,65,160,233,57,229,47,80,17,15,52,254,60,36,181,17,69,94,136,100,135,4,221,147,124,100,8,19,195,136,168,48,195,6,168,4,160,105,129,172,222,235,151,91,44,31,167,66,152,21,128,8,16,136,19,20,151,140,218,235,230,65,190,169,128,155,122,150,139,124,25,221,30,236,157,214,60,59,104,3,243,34,64,36,40,68,226,4,31,143,228,90,43,214,124,71,99,135,25,58,101,255,45,249,8,132,168,117,218,48,41,130,57,77,120,195,188,166,223,140,110,237,246,39,54,162,56,139,137,16,153,170,16,20,68,31,136,170,180,206,40,72,151,1,210,184,130,138,247,100,89,196,54,153,70,232,38,12,102,46,37,111,89,5,8,245,165,165,54,166,63,13,64,36,61,162,68,195,55,0,196,95,186,115,230,68,98,46,128,6,131,250,57,129,34,212,233,188,226,55,140,128,205,65,170,2,134,75,175,40,96,140,20,48,233,152,190,69,152,169,30,180,121,8,116,14,179,192,100,57,120,177,130,101,160,188,194,86,32,105,35,97,13,51,34,82,79,0,161,220,18,120,133,99,228,159,64,119,218,112,215,2,96,152,26,65,22,36,15,111,131,50,67,60,4,92,161,187,63,104,132,103,144,226,10,76,243,254,175,87,158,192,8,132,157,44,74,108,2,24,147,97,17,128,32,183,0,20,163,131,8,178,205,1,244,142,12,84,116,140,186,138,206,22,44,76,81,199,250,73,65,235,55,31,65,62,96,167,108,94,7,121,51,183,55,133,7,246,242,192,170,30,216,222,99,11,61,117,88,230,97,91,59,82,96,110,10,132,73,220,133,180,68,54,250,67,214,123,76,151,151,72,131,55,199,2,81,100,41,125,137,23,69,174,157,129,197,94,217,130,181,240,91,8,91,14,141,147,192,142,79,124,226,230,105,71,162,54,148,214,98,142,231,226,203,145,134,104,242,61,48,13,212,34,107,3,212,122,96,242,87,8,142,100,152,211,38,27,156,183,229,59,3,155,51,193,29,28,21,232,237,118,0,129,142,48,104,194,178,156,208,172,177,20,203,127,35,206,20,176,47,108,222,244,136,220,41,52,201,12,250,38,242,41,233,131,24,128,35,233,22,22,101,96,208,57,83,44,152,7,213,209,187,86,12,72,72,103,245,194,45,95,93,211,205,244,44,48,224,147,134,153,6,204,214,114,99,179,82,240,118,195,3,235,193,44,248,6,210,113,228,6,9,124,37,104,101,136,236,16,214,82,81,130,33,145,51,193,75,98,177,196,22,73,118,104,79,138,44,78,198,36,133,242,104,181,124,13,135,96,134,101,44,78,86,44,141,36,215,80,182,181,102,169,54,55,59,117,149,116,121,19,74,55,20,88,148,128,46,99,218,73,86,9,208,240,176,201,128,5,180,114,82,44,80,182,4,169,169,4,165,254,114,242,109,224,185,2,91,145,183,188,236,124,215,16,45,100,131,250,54,154,5,9,51,208,8,117,14,144,145,134,249,156,90,213,244,154,82,132,151,70,151,142,2,137,156,76,50,75,45,139,181,61,21,206,231,134,161,5,253,238,0,190,71,50,57,224,188,11,140,38,190,27,129,73,199,194,14,76,90,35,157,159,183,105,69,134,47,173,70,70,45,231,217,179,118,39,3,178,143,71,58,43,86,224,19,180,237,71,161,42,176,193,55,49,148,176,63,142,29,115,124,28,7,176,81,242,185,149,63,5,83,40,37,99,110,116,81,124,28,116,229,23,115,192,66,16,211,224,98,30,108,30,72,19,48,65,20,53,10,171,224,107,19,248,88,205,28,140,226,3,86,230,144,22,49,206,2,146,241,25,80,72,162,190,240,206,201,206,48,197,58,48,10,146,200,195,198,138,12,163,57,229,244,159,176,75,72,55,216,123,68,176,234,96,146,218,62,153,211,35,229,0,175,201,84,52,235,15,124,139,130,232,81,94,97,100,134,70,157,198,4,82,105,35,209,84,66,70,60,84,214,232,127,104,189,114,209,69,46,250,193,197,71,236,146,70,111,21,8,169,31,32,110,19,117,3,49,171,231,218,147,179,101,250,73,132,243,73,249,118,38,12,166,213,235,127,169,87,9,238,237,7,97,85,214,173,23,57,254,38,223,32,183,20,249,16,209,120,23,26,248,140,9,144,229,6,42,1,17,104,80,133,248,63,161,27,159,194,17,155,9,234,54,221,120,129,237,234,223,59,116,179,128,80,118,82,138,151,3,182,151,196,180,217,200,88,173,131,117,114,249,70,126,97,201,248,171,169,3,138,142,110,218,187,142,12,61,146,161,107,7,113,252,66,134,251,23,212,77,78,144,7,145,0,116,61,95,209,136,216,217,41,0,227,131,160,50,19,36,82,34,31,40,155,60,166,18,192,196,37,226,88,162,215,245,67,131,0,31,19,133,208,66,43,162,86,98,249,100,62,92,167,99,20,139,222,136,6,78,118,71,233,158,248,73,211,145,49,78,154,167,106,61,67,159,121,62,174,128,108,55,165,16,73,57,222,240,194,102,82,213,174,43,131,248,200,231,38,194,115,23,88,200,58,112,66,5,218,72,244,59,120,131,126,96,247,183,221,147,23,3,57,9,53,38,55,219,160,49,2,129,219,100,246,71,68,94,139,208,185,129,61,146,92,16,68,88,4,7,119,177,135,123,58,253,76,252,77,208,171,51,180,57,83,156,183,214,205,22,61,23,237,97,199,155,180,167,132,78,86,75,220,0,209,34,235,163,181,79,50,163,27,187,133,230,121,34,180,232,86,247,38,209,200,112,234,20,203,50,3,136,188,129,50,234,37,127,175,31,4,90,132,213,53,98,109,68,69,110,144,97,147,217,92,186,188,182,79,187,153,212,146,25,199,151,228,1,50,78,141,81,140,71,35,206,16,116,143,78,126,144,0,228,125,42,145,227,133,42,6,177,132,199,212,186,29,99,16,22,99,102,151,96,103,97,167,167,88,157,32,210,229,237,80,143,213,181,101,60,14,235,52,231,71,158,11,227,240,8,28,63,129,123,40,112,34,157,218,219,216,40,24,35,55,210,16,67,169,128,243,58,53,55,28,88,66,176,11,23,88,152,134,70,150,200,192,188,76,70,232,135,134,106,0,204,161,14,62,28,34,10,153,120,16,86,97,245,233,98,103,97,230,149,96,185,155,183,92,152,88,212,201,178,31,218,177,102,142,107,217,114,196,182,145,173,63,228,253,56,62,210,110,189,58,15,42,127,104,18,64,155,1,85,241,134,133,199,42,178,131,128,187,187,15,5,125,48,48,186,62,244,142,169,199,184,27,213,87,48,114,41,4,190,130,226,32,243,153,137,100,133,144,165,71,30,255,200,21,129,163,32,150,101,133,231,101,18,173,157,240,29,8,232,142,70,123,66,30,88,166,172,245,5,172,51,5,127,7,230,48,35,197,188,49,145,255,204,179,254,64,60,224,169,116,208,243,135,38,66,57,136,212,110,31,30,99,196,250,72,170,54,210,119,224,12,178,222,34,218,199,217,165,20,237,118,140,21,65,184,136,143,41,129,249,245,227,48,162,134,250,142,152,108,95,38,131,153,215,220,189,126,31,154,1,34,123,65,100,87,160,20,121,25,109,216,153,187,64,203,190,65,42,130,113,238,105,116,125,123,227,10,97,132,171,119,162,30,65,16,176,192,112,136,145,185,6,74,171,49,207,146,22,232,254,103,140,185,170,158,16,172,107,188,16,222,16,99,237,53,177,69,7,109,62,212,16,24,134,34,203,209,100,92,194,5,48,38,40,191,146,209,122,251,125,9,182,47,222,101,179,8,29,39,187,170,212,211,78,230,35,62,168,145,245,39,54,18,69,198,36,111,116,138,80,220,239,115,140,13,1,206,12,8,250,42,40,195,139,144,214,198,98,44,152,209,162,11,100,243,53,51,246,13,236,174,169,3,197,27,94,9,227,171,88,148,108,14,8,221,24,132,24,208,60,87,179,235,172,20,99,152,60,30,240,196,200,16,23,110,152,235,206,143,41,26,119,91,39,144,180,132,106,30,5,146,42,128,241,22,221,95,27,193,54,5,177,194,134,34,202,216,133,166,16,23,29,31,221,173,12,46,96,186,75,154,118,169,8,183,223,184,176,132,160,1,137,180,19,92,119,108,172,239,148,166,105,201,231,131,227,229,167,28,172,75,184,122,209,34,79,59,17,236,86,176,167,209,198,27,180,38,103,26,75,42,182,132,191,82,5,128,89,199,162,205,196,69,75,171,135,5,138,167,215,79,205,202,221,161,109,176,250,62,226,190,244,225,251,86,211,24,167,137,188,57,85,199,148,129,18,132,228,194,95,93,245,87,37,66,61,83,7,105,70,29,221,59,176,1,114,3,226,85,209,233,254,0,182,214,225,247,31,6,211,43,177,137,53,224,79,179,163,101,186,63,155,97,44,55,185,98,235,111,225,78,23,117,237,85,222,55,8,246,76,214,61,233,15,248,67,196,68,2,233,196,139,48,48,249,62,242,17,147,220,69,189,237,1,174,133,120,236,209,61,56,21,254,224,60,208,197,155,55,13,104,98,236,89,233,7,155,64,1,72,53,102,41,23,163,26,5,178,26,51,79,104,8,82,59,81,112,164,239,127,182,190,75,35,13,70,87,23,194,195,234,236,102,145,113,173,111,2,26,6,38,11,157,137,14,9,163,71,52,184,4,105,164,85,220,157,114,143,161,125,81,240,159,55,143,4,150,134,192,26,225,98,0,92,148,0,174,202,42,75,247,230,59,2,177,71,108,1,175,139,241,202,12,129,49,240,221,176,93,28,222,29,100,143,3,84,164,92,225,40,36,59,167,206,32,0,185,239,73,195,108,40,175,101,50,171,65,26,171,76,185,87,33,221,7,59,182,77,190,143,1,252,230,51,126,100,234,242,123,198,143,229,227,50,126,72,6,41,142,103,97,254,92,68,132,195,120,162,149,81,184,72,221,36,22,86,190,237,49,14,55,187,36,164,174,62,1,86,231,142,73,243,167,115,37,161,53,250,41,206,103,213,48,37,229,143,228,54,88,225,155,60,115,27,22,225,199,57,209,117,183,66,31,102,0,74,84,162,36,147,175,230,227,113,231,83,14,34,100,227,169,243,225,188,131,190,253,163,89,191,31,205,223,116,52,201,246,194,156,146,157,249,89,190,119,97,38,227,155,142,38,190,215,67,57,176,14,109,110,83,8,167,212,50,143,234,154,62,32,102,24,3,144,56,98,176,2,140,203,193,123,155,228,165,59,204,4,110,58,26,54,63,153,241,21,115,246,62,58,197,35,13,220,242,198,119,217,157,190,209,247,98,51,60,254,29,164,194,226,28,167,95,239,233,251,61,159,6,24,79,250,49,234,188,2,93,63,224,151,18,182,244,251,66,43,65,183,135,191,124,34,232,167,75,214,182,69,24,250,123,60,79,112,68,29,175,159,189,223,28,79,56,199,29,175,159,123,194,15,87,250,83,78,57,125,161,61,102,53,232,165,61,174,159,187,223,252,136,238,126,202,25,151,79,180,212,47,63,186,241,157,168,126,114,162,250,9,30,254,224,43,100,245,195,94,131,144,219,2,237,201,155,29,159,172,191,206,190,219,71,244,71,241,115,191,83,189,155,188,49,190,135,207,100,252,190,98,76,1,204,233,38,68,119,154,190,151,248,187,42,241,169,196,173,243,83,177,135,15,228,75,231,23,146,242,206,15,147,121,62,89,191,57,125,41,145,39,133,166,208,223,163,227,80,213,252,61,132,188,253,19,117,252,170,200,211,77,49,221,120,217,229,133,46,188,116,123,133,190,22,54,124,98,247,114,247,99,220,95,54,29,229,186,77,81,223,17,235,54,211,225,102,92,40,8,101,148,235,167,127,253,224,114,221,102,218,237,38,247,233,119,195,204,40,215,29,36,74,108,186,57,165,91,50,123,58,218,77,202,221,255,181,170,136,210,141,47,221,37,209,67,218,119,41,215,147,72,29,82,174,199,114,117,11,143,68,186,141,114,247,127,173,167,148,235,206,144,94,164,11,63,167,148,187,255,107,75,82,110,220,120,88,40,242,163,37,46,183,222,255,181,233,139,109,221,9,149,131,114,247,191,54,125,203,173,107,32,29,133,230,130,119,216,6,27,151,223,44,216,62,79,193,167,130,223,115,249,132,157,155,221,225,248,236,253,177,243,44,219,14,111,158,165,186,182,188,110,237,108,185,165,141,205,113,1,212,213,101,251,123,79,165,246,180,219,189,108,199,182,219,174,247,122,172,101,173,39,244,59,129,194,154,55,121,148,232,201,131,103,99,200,117,79,91,130,39,212,174,185,157,231,218,142,90,207,163,201,203,118,1,52,170,174,147,126,38,182,246,218,87,139,165,84,124,181,46,165,171,245,179,236,5,94,203,11,161,97,125,245,45,63,147,98,123,245,185,246,125,154,41,159,123,110,117,53,43,18,0,195,206,249,50,234,75,189,199,147,63,219,90,117,56,6,240,104,202,220,233,43,187,189,150,154,79,124,157,240,190,177,71,42,211,122,59,96,88,155,226,8,94,220,237,47,134,226,235,186,183,115,189,184,97,150,29,45,219,182,207,91,63,195,194,186,58,229,87,78,245,117,86,246,150,75,198,165,205,123,91,237,129,115,144,160,34,197,95,221,99,36,62,76,59,123,157,250,205,85,27,230,10,249,184,221,77,251,177,174,51,110,121,104,88,95,30,169,121,222,249,113,166,189,93,205,234,11,153,185,237,245,90,197,84,170,146,48,7,11,106,114,228,91,15,248,121,218,237,158,215,146,206,19,103,119,113,133,117,191,78,109,91,113,52,17,208,87,95,49,255,198,147,206,143,235,24,94,245,15,125,219,51,189,107,109,171,107,74,231,190,173,124,118,2,144,171,41,55,136,246,103,157,202,33,72,239,182,243,58,164,185,109,77,185,65,0,226,10,171,132,66,62,125,1,244,26,94,62,46,236,231,1,143,121,149,92,246,205,188,244,25,2,231,202,154,240,110,255,248,237,92,215,140,88,29,128,162,173,76,47,111,229,151,66,223,207,114,100,215,151,206,236,199,147,154,7,102,185,243,217,139,182,15,235,125,184,121,141,42,166,23,86,120,43,41,173,219,133,27,186,103,233,168,199,89,142,82,10,96,184,7,134,181,201,38,120,62,199,168,182,31,219,133,149,53,233,217,200,23,5,42,119,177,53,33,187,13,160,97,253,194,143,232,190,240,100,241,182,158,57,31,27,206,186,172,199,145,207,245,72,105,87,142,235,129,81,229,194,111,96,62,125,179,248,60,107,218,203,106,168,93,206,245,44,37,231,19,197,119,15,140,42,83,120,221,115,20,25,130,66,217,206,125,71,185,229,18,40,206,188,217,229,118,176,176,46,63,60,252,140,104,125,170,195,32,129,63,249,67,15,46,212,252,80,241,66,170,166,87,136,243,37,123,158,103,155,48,58,31,185,29,71,186,216,25,146,108,15,13,235,115,18,128,244,138,120,179,167,139,190,95,90,128,138,226,151,226,115,29,218,75,114,3,217,48,132,6,181,89,83,24,175,129,60,235,251,82,59,246,139,244,227,75,220,245,106,233,98,116,167,242,218,91,4,140,42,115,124,109,127,101,247,57,75,188,116,159,84,240,49,238,188,94,90,88,62,46,222,123,32,25,241,208,168,186,100,233,126,222,245,197,233,46,14,83,115,3,245,231,58,54,151,88,108,119,49,132,134,245,57,41,123,254,224,135,192,31,29,143,15,18,195,57,251,197,11,83,223,175,177,175,109,61,140,2,190,93,83,113,154,105,4,140,234,243,205,131,23,58,47,185,229,89,55,186,254,145,211,118,100,195,201,66,96,84,95,35,15,95,16,134,46,140,221,210,126,230,148,149,134,167,243,168,151,168,87,55,56,105,30,24,85,102,189,41,63,115,191,221,143,202,221,184,81,170,177,112,212,251,43,246,235,165,147,150,86,180,239,0,26,214,151,187,28,247,27,158,207,228,222,122,177,158,163,158,102,43,215,107,26,215,129,222,203,177,102,149,22,2,104,88,159,239,122,188,162,66,93,131,79,135,81,11,250,52,243,118,129,87,37,174,51,40,172,121,163,57,191,194,176,63,245,102,83,215,175,40,231,95,26,209,63,227,41,255,8,43,193,139,228,201,213,228,0,200,252,84,179,187,27,53,178,193,157,180,94,170,232,90,154,181,173,58,160,175,122,147,156,116,235,243,147,117,33,202,165,42,30,101,3,150,156,239,170,99,153,152,183,7,198,149,19,119,253,130,44,124,73,241,251,121,105,140,13,88,104,42,229,226,198,117,47,170,184,221,66,104,88,95,210,211,190,54,247,171,246,90,39,109,99,187,102,88,218,177,86,160,31,33,48,168,158,57,131,231,75,211,191,196,145,75,184,181,103,185,29,165,158,185,174,59,16,207,16,232,107,23,62,224,235,115,99,197,125,236,45,165,173,26,91,194,135,205,125,174,143,147,127,101,235,183,86,211,245,23,168,4,23,134,93,157,89,187,227,4,139,170,242,157,242,215,58,254,146,248,126,105,50,87,61,84,193,210,37,156,165,12,118,154,91,0,139,170,114,14,200,215,16,253,174,209,29,41,79,206,155,245,168,237,156,76,219,22,22,214,229,43,253,247,174,63,84,175,113,20,241,203,197,195,216,8,138,111,246,235,147,197,120,124,177,104,203,79,21,108,241,170,35,222,172,97,49,95,245,141,175,102,190,86,243,101,227,113,108,172,222,97,190,78,187,131,233,183,126,254,118,31,48,221,223,205,207,173,118,190,38,93,128,122,133,222,31,91,217,246,116,128,254,144,238,66,204,177,165,138,242,123,202,245,88,219,121,160,186,122,180,139,44,101,117,2,21,205,148,247,188,223,86,82,222,54,16,162,83,109,169,149,122,17,58,235,195,189,180,241,139,155,37,195,100,183,227,162,246,229,4,63,163,132,30,190,162,165,71,115,174,215,36,242,37,197,161,133,224,130,182,178,239,104,188,78,107,185,40,190,172,76,225,59,171,229,249,22,117,223,232,164,128,221,1,23,215,154,212,147,51,31,231,126,45,132,26,25,229,226,221,11,34,196,185,239,249,110,80,66,70,156,202,221,124,104,141,181,23,172,109,103,206,155,186,236,46,54,128,166,15,206,44,219,94,242,211,70,142,195,104,190,86,3,141,230,250,170,254,233,251,124,107,39,47,113,244,172,25,36,155,251,110,230,102,164,53,122,23,224,37,239,225,103,66,225,250,161,81,183,238,184,51,237,249,177,115,158,153,236,252,217,115,229,81,80,152,194,79,127,250,117,41,137,202,165,165,94,205,165,182,212,127,90,214,127,254,249,127,254,242,215,159,238,208,31,240,231,241,223,85,232,15,119,192,222,11,218,234,255,250,227,175,127,121,247,231,159,222,191,255,229,135,254,207,95,126,252,249,223,223,255,231,15,247,242,255,112,253,217,123,197,114,13,47,101,234,168,79,228,159,127,254,245,47,127,253,219,187,95,222,191,255,245,221,127,188,255,245,253,63,254,252,239,255,246,235,251,255,26,157,255,129,74,246,34,127,251,211,175,255,242,211,251,63,254,248,211,255,249,241,151,191,254,248,199,159,254,244,195,245,83,23,56,254,251,231,95,199,63,251,92,83,238,213,174,175,207,32,228,44,175,200,56,159,80,54,200,61,248,202,241,232,47,120,33,236,41,178,230,148,216,150,155,148,177,217,141,248,202,175,112,174,242,234,154,36,145,209,119,42,224,43,217,31,41,39,32,231,16,148,186,195,113,194,119,176,245,159,153,250,80,200,205,87,190,153,198,111,83,207,55,59,174,91,48,114,234,225,6,253,223,96,0,246,215,169,62,87,224,63,61,76,239,197,171,156,52,178,5,175,114,42,12,238,114,174,114,231,83,47,115,118,216,55,127,155,179,132,177,189,95,211,109,206,175,252,32,74,26,184,19,146,149,200,35,67,61,216,106,100,2,229,228,42,119,200,70,87,70,56,25,15,231,70,46,92,64,94,23,60,169,4,85,211,23,71,154,166,36,60,198,113,24,215,170,139,102,176,148,156,116,43,231,96,193,207,30,206,202,214,203,1,58,164,13,73,209,199,111,104,113,58,68,206,169,191,73,142,146,241,62,64,210,227,42,105,167,169,62,201,196,248,6,215,54,14,50,223,223,206,35,173,166,190,183,122,210,171,36,89,190,123,147,187,92,73,167,196,253,27,62,253,116,116,64,155,190,245,247,115,52,1,175,177,215,177,73,250,22,23,59,174,71,219,244,210,153,92,97,31,187,6,57,248,40,161,207,169,233,100,182,81,69,95,230,104,99,122,35,35,105,111,176,44,124,105,125,184,50,225,123,161,240,8,189,100,63,154,59,20,50,46,173,99,202,93,90,192,99,198,12,121,87,182,241,172,52,225,142,188,171,139,40,57,208,55,115,238,68,254,196,7,148,216,239,92,0,214,100,191,24,64,107,226,171,201,168,7,162,241,139,16,140,96,120,140,250,159,106,254,138,242,238,216,74,143,218,14,70,64,187,152,179,29,66,247,115,78,143,46,212,1,131,148,144,148,242,30,159,113,162,140,167,25,18,196,78,131,75,143,151,208,44,117,180,27,118,191,40,130,115,104,230,197,204,179,143,31,115,98,81,62,202,140,41,194,199,137,205,144,171,248,144,213,224,84,120,102,152,201,163,81,136,105,22,25,31,96,236,200,29,155,87,77,212,52,178,95,101,76,67,184,97,33,238,11,22,196,14,166,243,126,61,93,238,228,193,169,244,199,22,4,162,156,249,65,239,49,253,170,167,138,169,247,112,139,82,235,205,76,52,219,105,201,249,214,173,134,49,118,195,144,167,39,72,114,28,69,242,4,235,148,159,105,248,28,29,161,47,105,67,159,59,63,238,12,29,238,128,102,131,35,20,220,82,51,196,110,162,154,40,179,33,221,89,183,122,103,28,171,58,11,42,63,83,35,62,39,7,176,20,237,164,179,146,145,123,176,35,192,222,123,254,192,108,86,116,15,27,18,118,84,205,141,163,5,7,23,52,82,222,192,202,111,95,204,251,158,50,231,55,138,121,69,66,2,148,182,202,67,218,130,202,226,199,150,51,95,56,47,14,31,16,18,208,56,21,248,200,229,38,52,181,160,168,70,121,206,71,153,222,200,56,71,156,92,103,156,99,205,106,37,175,118,102,24,23,63,110,68,138,150,121,252,100,154,85,47,118,244,81,143,155,97,25,211,85,190,116,216,40,133,157,57,108,69,51,225,4,229,48,57,213,62,31,181,175,31,43,104,43,4,41,170,72,93,59,172,186,73,177,73,207,228,8,11,31,160,33,171,115,158,91,205,114,141,111,182,13,217,64,144,173,64,163,157,246,74,2,208,46,142,177,190,173,168,72,128,164,21,248,101,184,6,213,139,100,77,2,134,93,232,73,59,22,111,146,75,170,207,105,163,178,2,232,48,48,130,38,126,225,115,87,248,13,94,57,215,244,243,140,241,242,240,204,148,133,254,134,114,150,130,224,104,86,92,198,98,155,80,110,4,97,70,2,129,243,81,180,171,91,49,89,201,49,247,120,129,147,132,131,80,144,66,50,140,4,155,50,137,229,71,58,46,16,226,232,213,55,51,168,105,177,31,36,207,162,198,241,253,222,6,187,66,160,162,109,209,0,41,189,87,91,68,134,131,17,38,126,183,117,135,185,194,65,72,90,23,158,138,72,242,184,251,62,131,10,150,34,138,4,133,252,171,81,146,158,183,56,72,85,200,0,104,26,179,213,141,8,199,248,54,245,51,201,122,231,67,31,44,8,46,90,184,166,176,230,143,55,198,109,31,53,133,76,136,177,218,225,203,4,59,1,75,30,160,94,128,159,17,18,59,76,15,206,131,63,53,254,104,249,227,23,29,210,240,48,199,135,30,105,67,72,62,44,133,41,186,222,64,115,12,149,50,52,236,1,149,155,9,225,76,42,11,169,255,178,105,148,243,213,108,254,128,168,110,197,188,159,238,114,13,156,53,79,35,3,18,222,255,140,116,201,251,120,228,5,83,190,2,230,134,244,192,147,13,79,92,66,10,228,201,84,76,202,38,164,139,112,51,192,225,25,209,237,216,31,145,152,249,136,59,42,16,18,138,137,152,4,20,39,34,75,1,237,10,40,220,76,98,202,120,23,98,76,236,8,247,9,17,104,214,155,29,143,182,60,220,242,248,129,125,148,104,253,80,8,85,96,100,211,183,89,6,150,225,70,141,10,28,197,181,42,104,194,105,28,115,111,183,75,95,71,31,147,73,112,58,79,19,198,193,143,234,54,78,140,67,201,83,55,249,157,215,151,132,231,99,44,69,133,129,194,208,163,169,65,143,99,51,186,48,126,30,186,37,110,152,238,180,86,124,248,106,108,1,189,159,5,199,70,31,80,165,189,106,230,240,226,121,246,231,221,144,3,71,49,250,218,12,85,190,247,126,198,214,49,51,204,209,200,144,242,197,168,66,151,10,200,30,66,171,186,33,197,38,35,0,164,222,164,50,34,160,145,170,178,49,161,218,161,197,120,246,102,129,220,242,153,81,247,42,221,236,208,203,154,92,240,47,169,35,52,101,163,142,40,12,244,145,45,200,100,125,159,229,183,175,249,135,105,114,168,248,87,161,249,255,78,139,90,62,109,72,220,8,151,248,4,11,91,62,48,36,174,132,185,105,62,211,134,78,139,246,73,178,200,17,77,41,223,162,219,157,165,87,200,218,207,204,49,161,132,172,55,78,60,12,223,78,239,32,120,195,132,94,211,83,55,150,212,219,141,124,198,48,33,195,137,223,201,218,96,48,252,92,43,80,110,112,220,105,26,101,128,80,109,125,144,153,223,84,4,8,57,251,65,27,107,10,96,158,200,188,58,49,115,1,78,71,254,65,14,77,207,243,130,194,18,191,202,164,195,81,17,68,0,238,123,170,50,196,135,134,66,13,177,42,125,250,174,111,31,59,62,248,69,102,92,174,197,184,122,105,73,233,29,26,74,66,109,52,244,195,182,192,161,242,155,91,16,251,240,51,129,80,166,32,161,169,0,228,141,149,5,133,15,60,65,211,230,184,221,131,173,53,219,238,49,99,72,120,242,32,133,34,209,42,221,179,217,81,103,95,120,69,65,128,239,121,156,212,37,146,121,197,76,251,195,29,56,230,183,233,43,28,132,220,171,81,95,86,117,252,36,246,35,143,150,203,98,124,202,242,235,38,128,60,9,68,182,207,14,165,236,76,253,223,229,161,228,235,38,190,219,190,11,57,161,217,155,79,130,236,206,218,230,217,63,64,48,203,227,103,160,8,167,66,24,171,118,120,26,136,16,102,19,141,130,62,129,140,213,9,91,67,180,115,200,105,48,152,176,234,208,182,111,228,148,131,87,78,70,23,155,181,173,203,170,250,117,142,247,194,109,151,219,80,118,86,237,243,183,34,87,163,173,202,180,33,179,173,112,3,99,63,96,102,140,188,118,159,251,73,234,228,163,167,126,69,71,22,162,134,163,65,131,4,109,10,96,84,155,143,131,27,81,48,102,152,213,60,97,88,139,120,177,96,53,221,225,241,103,107,58,124,126,7,163,77,14,16,65,145,37,198,165,137,90,58,138,106,136,174,167,201,134,100,3,203,131,135,182,12,209,183,60,193,177,141,251,159,206,169,182,145,192,238,131,223,246,24,148,96,114,160,16,8,20,150,93,97,92,108,255,187,208,87,190,182,104,210,111,78,68,37,107,42,218,84,233,125,53,80,193,233,45,67,245,227,147,67,240,64,114,150,71,53,245,92,54,106,167,127,244,243,183,129,119,137,0,106,105,115,143,9,143,114,167,86,33,233,98,38,88,85,76,95,153,226,45,136,127,147,136,195,182,47,166,41,149,153,220,97,59,16,35,150,46,6,174,206,42,103,51,122,137,7,105,114,179,20,100,152,105,152,231,245,206,87,67,177,29,31,32,201,135,185,121,102,59,73,209,143,29,94,65,102,136,198,113,48,132,174,72,52,253,96,107,142,62,30,72,1,24,186,219,36,9,240,111,137,184,0,235,10,105,162,203,9,73,44,173,26,88,121,8,178,42,132,45,88,36,79,208,58,79,191,23,162,246,108,204,63,117,5,138,129,160,81,108,172,51,220,14,239,105,183,38,169,39,146,183,135,147,221,242,23,97,47,34,128,142,141,51,24,172,143,133,10,63,7,251,34,32,66,239,242,21,43,231,140,228,44,116,199,205,62,234,121,26,155,25,185,155,24,206,220,45,139,93,181,226,151,54,88,123,187,57,118,191,24,173,110,60,15,124,141,203,202,138,4,153,154,0,52,155,72,87,116,126,225,140,123,26,224,72,132,33,32,134,188,120,10,100,68,115,47,196,1,221,218,12,234,242,247,180,91,70,150,194,35,238,40,128,161,15,158,132,16,89,159,143,160,63,166,230,40,187,147,110,232,192,56,62,171,5,144,91,114,199,29,130,94,129,94,186,191,45,202,187,245,24,253,160,200,52,32,74,16,239,85,14,86,147,155,126,208,184,40,62,25,41,251,162,244,112,17,67,243,24,251,77,134,160,184,55,22,20,117,232,9,27,13,194,6,8,29,33,124,72,210,30,146,196,117,218,193,104,79,237,6,184,45,114,155,56,17,251,137,19,32,163,136,248,8,242,153,152,23,57,92,54,187,123,255,211,51,45,175,253,177,134,143,136,23,98,187,251,219,226,238,225,223,178,235,248,241,205,203,187,149,186,252,46,239,46,31,45,239,118,177,116,53,199,106,233,130,170,6,84,11,136,108,158,221,151,140,207,82,115,248,197,193,180,178,192,23,104,187,2,242,79,91,15,146,196,86,89,254,0,161,238,24,227,68,147,194,98,236,191,68,15,110,160,237,143,167,229,110,160,110,202,80,87,84,156,97,13,6,81,238,71,181,39,41,207,230,88,34,153,230,251,39,192,217,246,9,194,17,131,32,45,112,182,156,166,32,205,159,121,40,136,163,35,161,173,134,160,33,73,31,166,162,148,208,96,137,251,55,120,244,43,191,76,174,110,205,249,77,235,112,204,12,98,44,41,122,183,198,82,54,124,179,153,227,71,48,178,69,46,220,200,157,135,34,126,107,180,247,211,139,208,226,6,166,27,58,176,106,28,161,185,26,215,1,65,160,80,118,160,169,22,7,80,0,123,163,152,125,13,114,160,56,4,150,12,198,88,22,97,197,118,29,170,91,44,65,21,15,97,17,133,67,30,117,173,70,32,98,22,46,207,162,251,216,205,70,87,245,103,148,105,243,70,26,57,248,212,158,70,145,172,109,13,64,153,190,201,161,188,105,129,1,80,33,112,31,0,43,207,85,217,186,170,67,1,95,5,99,44,253,79,88,44,187,237,233,81,235,21,75,13,20,215,54,116,253,193,195,66,247,33,20,11,229,141,237,42,0,92,233,4,216,96,94,162,167,248,96,161,18,195,70,8,8,169,187,67,0,26,172,34,59,199,77,32,132,198,91,0,98,1,226,25,80,0,121,145,0,146,97,217,134,96,179,219,50,137,226,1,84,242,217,100,225,6,65,110,130,16,34,246,235,143,70,176,231,159,65,39,166,45,86,192,186,24,51,235,136,193,80,60,26,183,98,193,132,50,16,92,227,194,134,240,8,14,55,146,233,117,252,164,212,205,23,244,232,109,121,14,148,80,235,69,19,172,36,30,112,194,44,236,142,167,177,17,59,209,33,57,225,85,56,10,108,96,158,65,124,152,219,244,94,43,111,191,110,207,173,160,165,149,98,62,80,42,231,184,242,162,109,147,109,230,156,199,132,177,123,85,100,236,166,32,182,27,67,41,14,24,84,66,219,56,107,144,129,49,121,133,170,184,54,29,60,108,62,109,252,221,199,235,35,230,194,245,11,232,248,76,236,35,150,224,24,71,192,93,60,11,10,248,148,103,102,33,199,243,108,113,230,156,176,204,69,113,9,215,77,18,119,121,47,49,222,233,178,184,18,226,83,128,118,118,113,59,69,219,187,96,146,222,54,168,100,228,60,5,64,1,187,242,60,205,115,48,173,102,88,161,97,147,134,129,6,12,54,226,193,142,79,71,172,220,51,124,17,20,209,41,188,123,208,54,131,146,14,65,247,106,12,115,242,80,223,192,72,59,10,28,243,90,234,245,220,105,193,7,33,220,87,197,177,123,161,141,216,174,112,73,114,226,52,86,122,209,19,188,194,13,219,81,141,34,192,154,150,24,212,183,202,55,118,56,142,230,194,222,77,198,175,69,92,162,180,204,221,207,70,231,135,220,98,122,28,200,84,173,130,193,109,176,4,189,211,55,202,86,67,166,104,160,39,128,200,120,167,59,186,41,85,47,118,164,125,108,207,109,134,129,78,227,133,126,175,25,100,33,58,90,38,80,40,156,210,193,128,169,136,30,139,135,7,14,238,112,59,68,154,48,205,163,98,128,175,17,86,135,184,31,156,144,73,3,58,134,27,126,68,216,198,17,146,209,10,6,235,229,23,21,171,165,120,77,31,235,122,225,70,172,50,192,183,93,17,161,162,69,108,184,9,128,66,239,179,0,8,49,211,58,67,128,167,176,17,107,11,64,178,237,180,214,197,1,100,86,11,241,3,249,128,232,111,14,144,78,232,156,202,4,50,119,105,231,98,153,175,77,156,243,142,67,33,73,80,149,61,196,49,29,123,83,103,150,81,2,65,198,139,59,158,19,6,236,114,98,170,129,210,59,169,197,180,63,30,100,118,190,87,28,65,192,189,217,35,22,96,12,114,12,146,74,183,48,54,32,100,55,189,0,204,47,74,100,38,223,60,33,165,213,12,41,243,208,116,43,26,223,161,56,150,199,40,232,176,20,134,154,116,112,9,74,204,10,166,211,140,156,238,228,213,171,130,38,119,5,100,4,84,219,170,220,199,44,210,13,198,230,51,87,66,75,7,65,182,5,231,15,247,39,24,160,5,64,143,1,158,56,102,79,183,55,220,81,241,7,106,62,114,92,123,76,145,10,131,77,138,46,37,101,83,222,154,147,185,186,94,97,202,19,132,135,164,1,44,55,179,86,19,25,209,216,192,102,151,195,35,76,242,228,40,57,203,79,154,247,146,204,232,142,100,13,90,125,216,86,164,74,182,141,36,103,186,211,189,112,251,223,107,89,122,171,154,246,188,215,15,241,197,54,40,27,239,41,93,198,164,43,48,99,179,53,182,83,169,131,177,53,115,43,114,255,96,6,37,35,201,243,165,170,242,180,30,18,99,51,13,210,174,56,68,64,164,167,198,87,208,148,58,55,65,50,132,81,147,8,242,138,96,164,48,134,122,37,142,3,135,150,222,77,19,154,88,139,215,87,21,241,21,114,96,79,139,177,185,76,54,25,22,160,223,225,236,23,49,118,152,34,121,30,191,239,90,239,99,202,253,33,224,103,3,75,235,12,80,105,104,49,100,17,141,91,75,64,71,217,236,163,209,146,147,69,39,176,250,48,18,57,72,118,120,234,33,101,54,174,150,25,35,193,248,37,251,245,180,89,160,21,102,197,56,65,11,0,178,229,19,116,243,80,37,69,191,128,163,118,175,214,147,50,148,166,130,158,103,223,132,149,50,66,230,215,134,145,56,46,233,56,201,204,106,28,47,226,86,25,130,253,14,125,207,162,45,69,26,200,74,120,125,112,86,224,188,138,87,57,230,160,9,96,84,60,229,123,182,254,58,3,177,49,33,123,11,51,14,155,172,164,211,48,229,174,252,14,16,176,171,69,134,55,53,203,17,98,129,221,206,219,245,140,217,175,232,206,64,148,114,198,208,219,72,127,156,85,204,64,13,53,51,147,220,123,147,32,112,155,120,30,200,112,143,68,123,37,242,1,183,245,44,89,174,165,226,253,195,213,226,99,97,246,247,152,225,122,158,236,216,182,230,218,80,136,19,111,22,16,126,96,61,210,242,150,88,2,42,144,215,147,30,234,82,40,186,60,20,135,231,134,19,184,41,30,174,46,165,15,91,152,182,38,56,33,100,222,158,133,164,39,178,198,162,124,204,137,182,216,135,202,115,249,13,249,121,226,11,19,209,11,232,249,204,121,18,203,245,197,52,81,226,6,29,145,229,218,83,64,110,6,203,120,36,251,108,33,127,71,65,39,144,106,188,200,100,154,38,209,193,201,71,122,159,2,206,176,147,125,66,201,36,176,139,71,10,172,211,115,31,42,195,201,186,119,96,168,100,210,28,242,6,26,189,102,81,200,203,27,129,80,18,8,46,208,114,210,17,129,128,184,207,141,56,169,197,51,109,207,216,29,239,119,210,65,228,196,26,0,183,54,22,228,60,102,145,132,55,173,141,147,20,117,218,161,46,177,250,207,100,76,3,139,231,230,42,66,206,202,136,213,37,242,98,142,129,36,57,152,206,166,73,246,49,0,147,24,239,143,192,19,115,77,96,212,121,195,246,3,84,125,177,52,124,86,78,225,224,5,126,199,25,89,30,17,35,20,0,2,41,53,114,96,106,95,253,167,78,200,135,213,174,198,233,23,34,245,219,243,176,80,59,53,172,209,115,79,207,97,7,41,219,103,192,105,171,32,213,119,38,143,137,236,123,50,235,9,177,19,135,39,129,153,217,175,13,92,78,86,227,48,183,15,157,121,194,172,97,146,118,161,202,156,169,34,43,134,232,168,205,239,156,152,133,15,158,64,14,152,49,32,41,116,121,255,243,32,254,13,141,112,104,101,187,215,94,69,87,149,78,37,229,43,248,145,69,94,163,73,7,122,192,76,22,102,131,46,74,2,179,176,224,177,194,161,141,199,172,89,190,243,50,96,36,237,120,137,40,176,34,162,169,49,180,69,226,50,106,96,62,198,82,96,180,69,16,140,49,199,106,152,80,14,8,243,208,213,208,40,144,17,8,57,221,110,80,175,64,228,239,215,157,28,128,177,245,34,246,44,83,68,193,20,112,48,71,36,16,17,106,179,80,92,193,83,167,235,65,38,67,75,205,29,189,119,252,192,29,80,167,244,46,246,68,79,162,155,55,43,4,44,220,177,249,73,16,240,18,135,151,74,26,31,82,48,29,85,139,154,236,127,70,73,12,140,73,1,104,234,239,22,136,65,86,96,11,196,186,7,198,177,100,194,36,102,225,211,11,168,184,117,29,216,67,20,242,126,63,65,53,206,27,19,132,252,16,58,66,166,185,77,6,56,206,36,71,47,131,127,226,182,113,230,21,106,227,92,84,20,37,215,234,10,171,196,7,179,25,147,148,139,69,9,162,50,222,8,222,200,126,175,31,89,5,223,220,110,143,19,30,111,2,220,90,98,155,155,22,89,80,232,178,43,223,137,201,216,173,183,210,49,205,94,240,149,239,50,10,245,34,23,35,199,152,82,140,60,132,151,87,106,142,188,223,122,159,107,246,142,27,163,130,55,58,24,155,68,209,213,64,171,197,68,222,28,1,12,66,243,102,251,141,183,240,76,38,160,40,16,0,70,185,68,84,217,5,239,33,153,198,226,170,205,90,231,207,58,67,44,83,65,34,59,136,31,220,137,247,65,106,147,205,115,54,138,154,1,12,169,112,166,234,65,40,218,20,172,102,235,116,220,232,97,76,57,117,194,48,214,219,7,206,232,54,162,92,132,249,35,173,220,131,114,209,3,209,105,18,173,102,217,107,146,148,206,142,186,253,130,124,126,32,36,187,253,116,225,154,81,64,231,98,35,62,167,144,80,135,153,1,238,90,164,129,49,168,207,8,3,183,252,158,185,120,66,12,57,28,228,36,12,73,204,242,51,134,51,106,168,163,178,237,42,161,128,6,5,113,112,189,247,71,9,198,94,186,144,49,72,128,185,143,177,69,79,98,28,65,194,164,195,93,64,254,202,239,14,104,118,48,61,158,27,65,80,14,36,6,9,146,220,49,237,221,42,91,112,51,168,64,164,22,32,38,45,71,30,0,147,234,79,197,243,241,77,138,153,141,236,6,122,179,8,249,31,168,153,23,48,94,116,8,79,73,105,38,78,91,137,69,116,171,235,147,222,226,169,254,210,122,253,22,147,254,114,152,32,26,161,72,112,2,41,183,146,124,133,174,173,1,51,87,177,135,236,116,224,213,192,149,64,128,23,135,184,11,232,178,243,65,183,72,135,80,202,108,157,130,160,26,209,30,197,55,162,131,68,122,4,53,200,12,80,237,104,84,206,73,179,5,133,211,196,2,238,19,155,160,20,168,67,142,157,47,31,91,171,71,29,16,184,246,77,215,114,154,133,88,251,63,144,77,101,237,183,4,68,156,47,52,187,34,96,26,78,84,6,148,92,118,13,8,128,52,241,195,1,180,78,5,76,0,11,171,102,210,184,25,223,163,235,245,38,46,142,41,64,14,122,225,208,51,3,34,72,155,1,112,85,156,251,90,152,82,225,90,171,143,27,81,210,106,30,187,193,1,30,35,198,22,144,141,81,72,28,123,72,88,85,128,220,75,68,143,208,62,76,87,45,111,154,226,242,198,143,191,22,73,226,74,245,32,90,158,98,14,23,85,24,240,14,148,68,210,226,169,52,39,53,45,64,48,153,151,38,25,50,254,234,142,108,69,179,165,135,80,212,54,30,245,41,42,143,171,21,116,184,215,9,100,70,247,54,97,118,55,204,111,206,222,103,17,255,225,225,152,76,26,238,92,154,83,24,31,212,155,177,24,152,92,187,208,50,130,166,65,187,173,121,176,64,225,42,250,149,14,182,195,239,217,188,177,102,243,31,163,134,221,154,124,246,27,182,229,193,206,76,4,151,210,182,66,234,75,176,75,165,119,74,222,9,227,57,49,38,51,240,241,169,217,167,136,205,227,139,53,254,236,217,179,105,206,238,163,227,237,8,192,76,36,44,21,177,84,198,17,33,75,163,30,144,49,71,234,60,61,244,52,51,162,172,134,252,78,164,217,210,237,71,180,221,145,127,199,32,130,78,29,134,135,231,32,56,44,203,124,160,102,238,24,176,80,195,102,35,46,12,76,250,1,27,159,24,189,19,5,12,238,222,255,181,117,232,184,154,241,182,242,134,6,89,6,232,234,238,11,235,102,89,86,123,149,87,50,122,79,38,150,226,254,59,191,33,200,102,14,60,0,227,103,5,220,219,63,244,147,158,1,91,29,100,145,227,81,22,189,196,47,118,14,197,228,145,252,105,157,231,215,255,213,249,23,221,178,141,131,204,241,200,151,185,141,185,3,223,253,52,60,28,61,207,23,136,66,64,54,102,170,146,173,41,92,7,215,251,29,170,99,95,190,252,224,110,66,225,72,123,56,91,145,64,236,184,177,229,217,17,79,247,44,223,10,5,94,108,152,228,138,72,240,104,130,214,28,231,157,156,208,0,33,31,114,145,7,188,8,50,244,49,54,166,22,183,134,217,109,248,70,4,71,110,195,42,245,118,94,184,246,49,61,207,2,248,10,2,203,141,46,34,157,171,194,167,171,199,208,117,56,184,96,252,110,134,102,17,30,173,85,49,201,126,74,48,7,229,148,111,95,108,136,89,217,166,100,12,213,218,155,48,99,191,94,193,144,194,129,3,38,120,68,49,120,20,112,218,251,159,243,94,173,103,241,203,27,30,253,23,19,83,247,117,93,108,98,106,202,125,102,204,44,235,226,172,44,127,15,105,47,104,90,95,111,218,139,111,52,45,117,109,159,102,97,63,52,45,117,79,108,249,123,109,232,180,104,159,32,45,53,9,18,253,37,189,111,49,47,53,177,129,83,85,242,65,213,53,215,229,253,243,16,177,139,92,74,252,210,227,201,87,131,213,138,160,143,96,12,97,140,67,46,84,54,163,87,63,71,155,35,206,161,104,109,202,49,214,70,243,236,94,226,186,227,169,202,145,169,147,124,92,194,104,54,20,249,202,34,142,164,195,39,253,58,229,114,222,104,84,120,228,78,119,59,41,9,11,11,231,178,48,244,212,109,229,123,122,253,203,36,171,107,99,61,71,136,203,49,62,68,170,32,205,240,180,76,24,222,73,188,241,122,145,30,145,199,239,44,0,141,81,111,146,199,91,153,247,198,137,188,203,92,11,94,252,197,150,95,101,176,126,157,135,1,224,132,116,185,219,88,83,240,93,17,64,181,132,106,1,67,243,59,117,142,236,240,224,199,202,6,70,105,162,175,219,201,158,200,70,147,153,157,175,111,173,28,175,129,89,165,18,172,37,249,165,143,177,215,91,124,68,166,109,244,219,108,176,32,192,18,139,69,1,154,25,52,116,72,106,145,216,98,121,120,16,236,30,142,157,239,43,16,228,249,121,237,109,76,58,167,70,14,161,55,159,173,32,114,138,192,162,146,72,135,125,83,182,123,120,100,203,98,240,205,154,172,117,27,7,32,47,70,219,230,210,73,196,81,182,156,49,58,234,67,83,136,109,27,118,206,54,41,124,75,106,124,131,154,207,49,14,168,249,99,35,122,250,115,233,242,107,127,208,253,131,112,128,40,186,65,1,133,253,95,44,232,48,160,143,230,219,23,70,191,231,28,254,109,199,170,137,30,38,78,207,102,220,153,194,187,192,12,194,70,45,189,152,176,168,30,10,223,112,183,33,65,35,195,170,193,238,4,74,221,0,131,40,126,92,20,223,62,110,8,139,245,130,1,24,34,116,10,25,64,70,34,118,101,162,15,83,38,37,11,217,20,66,140,145,207,50,45,12,145,12,188,49,73,6,155,186,206,99,99,35,194,211,39,209,237,66,71,27,17,236,84,120,35,92,127,29,131,34,171,21,126,141,45,40,240,243,68,207,42,91,37,153,46,54,94,58,136,100,197,1,167,7,235,96,87,43,90,79,191,224,162,226,179,28,75,198,4,109,66,162,66,117,15,245,93,53,73,101,193,204,123,236,4,132,132,81,100,41,222,23,81,107,55,116,144,120,129,113,90,125,185,186,36,240,102,140,216,124,38,130,99,227,207,150,95,101,183,17,184,83,89,103,73,129,13,208,105,124,102,236,92,194,185,202,74,60,90,173,96,69,45,178,63,76,111,240,18,91,107,108,77,81,174,214,34,174,22,191,68,124,124,251,92,173,81,151,223,185,218,242,145,74,245,73,178,214,9,70,80,18,249,15,176,56,30,28,144,161,164,188,31,2,120,158,229,70,82,61,70,126,112,50,82,204,98,179,75,70,28,133,241,40,0,64,186,16,228,66,97,31,17,6,160,112,68,138,28,209,76,175,81,82,102,229,121,126,104,72,128,235,63,52,200,67,33,109,130,104,138,28,76,98,5,132,96,208,140,241,125,2,197,64,159,6,89,96,76,35,26,88,124,0,140,50,4,233,21,122,81,171,177,20,102,63,35,122,94,6,132,159,251,60,86,248,54,230,229,149,245,186,230,118,3,214,135,164,117,126,126,19,3,40,170,174,144,50,73,78,245,195,186,43,155,158,217,22,67,106,221,193,70,122,160,241,164,129,158,239,0,128,91,56,64,164,172,54,1,72,198,90,130,144,102,199,154,42,129,218,0,85,109,136,113,105,131,182,9,36,56,126,188,195,229,187,67,70,218,105,68,241,157,243,226,137,39,101,99,31,207,8,104,228,200,52,102,44,10,97,37,185,114,218,168,17,113,87,199,40,240,150,203,24,5,72,137,140,140,54,62,84,18,81,85,241,21,201,149,57,192,76,68,122,141,218,189,9,95,155,15,70,67,183,185,65,133,164,91,171,103,229,36,131,0,236,44,153,67,14,133,244,127,194,219,109,35,249,53,228,67,39,20,137,32,101,130,232,251,61,102,44,116,214,249,0,154,84,72,36,46,65,236,248,57,131,166,154,105,236,59,109,182,146,193,77,252,76,85,65,114,47,0,168,94,154,118,228,142,142,139,144,134,226,155,79,128,123,24,213,209,228,230,2,156,88,30,62,102,118,35,39,90,70,16,53,214,124,177,21,64,216,39,93,59,236,46,103,188,253,56,72,138,121,184,251,29,157,54,76,134,113,135,216,44,152,67,56,53,137,60,178,66,140,203,147,201,245,216,247,29,26,41,19,4,7,216,81,171,155,149,122,131,15,222,56,119,244,134,13,201,96,29,203,153,173,103,29,66,185,140,79,245,107,243,73,28,148,34,83,252,9,24,59,115,97,82,152,21,66,134,234,12,133,248,177,26,33,99,153,249,216,169,195,91,169,123,217,248,128,30,6,52,19,230,153,104,82,171,34,96,129,121,110,216,63,155,33,27,128,38,72,146,66,85,65,219,10,135,128,71,62,250,43,218,212,54,173,138,29,212,32,44,158,2,60,34,18,155,131,200,161,29,210,204,137,132,254,236,224,85,1,43,225,178,144,44,126,60,0,188,174,166,157,164,75,106,132,20,39,200,68,210,78,40,20,17,141,23,77,97,19,238,174,231,119,19,175,55,128,168,84,114,93,226,184,14,129,193,80,57,129,41,220,114,78,162,59,159,0,99,102,162,145,140,196,254,27,226,22,119,56,8,70,230,0,93,225,29,153,148,43,157,35,13,1,41,217,73,161,28,243,200,67,8,128,40,28,100,211,118,70,198,146,21,231,54,194,114,224,142,90,230,166,118,0,193,184,137,4,243,66,1,9,246,66,155,149,237,34,233,15,57,141,23,32,201,92,142,1,97,210,128,185,105,111,66,174,168,31,14,40,109,218,30,230,239,0,150,183,5,176,71,60,143,121,203,162,44,198,48,8,204,15,108,87,9,50,209,32,235,98,6,212,102,128,109,253,13,46,133,204,12,98,135,72,250,197,68,18,26,230,129,115,137,210,50,123,195,150,220,60,150,82,13,0,166,51,166,119,52,28,180,177,201,117,103,184,66,199,17,40,5,64,58,216,190,108,145,248,192,25,94,241,130,34,203,15,227,223,100,23,148,95,15,153,234,64,165,147,49,144,142,7,135,240,84,5,177,161,17,201,134,200,21,115,187,133,41,56,41,54,72,127,156,168,51,77,41,193,54,131,112,41,16,88,156,41,25,210,173,185,147,222,232,88,67,145,190,200,27,88,193,54,22,20,153,205,150,197,166,22,58,152,18,161,44,54,32,27,76,236,116,144,99,162,31,102,86,9,48,34,171,185,146,36,237,172,216,56,188,46,54,234,117,35,24,132,253,101,226,73,2,226,182,241,190,169,237,175,15,239,121,14,205,80,76,217,198,210,169,191,92,162,174,246,69,101,6,120,162,75,51,219,42,4,137,195,36,51,128,52,192,170,23,136,3,129,248,225,101,148,64,144,1,180,52,98,211,129,34,209,172,53,58,65,42,146,182,2,153,172,136,94,91,21,20,136,119,176,184,105,108,61,211,94,149,20,43,147,109,38,104,128,32,132,47,68,183,19,212,225,67,155,21,228,2,198,114,97,242,208,0,2,39,187,0,18,225,89,206,122,87,172,106,251,108,108,222,113,232,56,157,142,247,20,162,166,132,246,16,35,174,210,181,147,195,214,132,136,159,82,138,88,159,138,36,42,73,4,98,74,36,206,4,82,79,36,28,5,50,148,18,172,195,131,64,209,115,186,95,160,33,30,104,251,121,72,106,35,138,188,16,201,14,9,186,39,249,200,16,38,134,17,81,97,134,13,80,9,64,211,2,89,181,215,47,183,24,62,78,133,48,43,0,17,32,16,39,40,210,17,149,215,205,131,124,83,1,55,245,44,23,249,50,122,61,216,57,173,153,59,208,4,230,69,128,72,80,136,196,9,62,30,201,181,86,172,245,142,198,14,51,116,186,254,91,242,17,8,81,235,180,97,82,4,179,36,240,134,121,69,191,25,213,218,237,79,108,67,113,6,19,33,50,85,33,40,136,62,16,85,105,157,81,144,46,3,164,97,5,21,111,222,177,136,109,114,23,80,108,61,38,61,36,103,89,5,8,245,165,165,54,166,63,13,64,36,61,162,68,195,49,197,226,46,221,57,245,24,49,23,64,3,76,83,129,33,205,44,43,228,21,134,140,36,128,132,26,76,189,69,50,200,156,140,203,102,161,24,55,191,209,235,52,188,154,0,24,22,57,144,153,200,17,218,160,204,16,163,96,77,41,234,30,109,213,12,210,53,133,105,14,178,79,147,16,92,100,159,1,12,240,152,190,69,214,170,30,180,121,8,80,214,89,106,11,117,67,175,64,14,67,107,115,144,170,0,157,197,189,212,43,153,246,3,89,39,139,18,159,0,198,84,88,228,31,184,172,12,197,232,28,130,104,115,0,185,35,243,20,157,162,174,153,179,253,10,243,87,177,122,82,208,246,205,39,144,207,215,41,56,217,65,222,200,237,13,225,129,181,60,176,169,7,150,247,216,62,79,29,150,121,216,214,138,20,24,155,2,89,18,119,33,45,145,133,254,144,245,30,211,229,37,210,208,205,177,64,20,87,74,95,226,67,145,123,44,96,175,87,174,96,237,251,22,194,118,67,227,34,176,227,19,143,184,121,65,142,136,13,221,147,159,163,185,248,182,149,161,153,124,177,68,195,180,200,216,0,181,30,24,252,21,130,35,25,198,180,201,2,231,45,249,206,188,230,12,112,7,199,4,122,171,29,64,160,35,142,54,117,254,63,107,120,138,76,83,147,245,234,161,248,56,137,153,161,40,106,132,85,166,27,84,2,92,165,184,85,163,16,238,13,145,150,132,52,139,66,51,65,44,238,223,59,116,67,255,164,89,143,235,141,202,50,79,206,221,55,139,195,213,90,187,38,251,91,100,164,147,108,87,122,109,166,232,232,110,172,94,192,173,18,81,130,50,181,201,154,5,220,55,178,123,135,33,48,86,130,8,173,84,227,127,104,204,242,130,70,32,141,96,243,166,71,20,54,66,11,219,160,253,178,38,164,222,99,56,149,220,199,39,84,27,171,191,67,129,1,209,121,80,29,93,54,6,36,66,225,77,207,54,8,174,154,186,55,144,104,2,177,199,200,70,129,236,100,133,43,179,82,240,192,193,3,99,208,172,199,4,202,78,228,212,10,60,95,104,52,138,204,74,214,240,84,130,33,145,107,200,11,214,177,0,30,9,234,104,30,140,12,136,198,194,72,91,224,204,144,211,16,204,176,140,1,209,106,25,145,34,18,170,42,214,202,216,230,102,167,174,146,46,111,66,97,149,194,196,18,240,89,204,75,200,26,30,218,145,54,25,176,128,86,206,154,4,186,179,32,53,149,160,220,80,78,93,9,252,144,96,250,243,134,180,157,47,163,161,193,115,112,211,70,179,168,19,237,218,185,115,128,140,180,180,231,212,170,230,95,148,34,188,52,186,116,20,22,230,68,231,89,184,94,172,41,177,112,194,47,12,20,233,55,65,240,157,138,201,157,234,29,154,52,241,221,200,245,58,22,118,71,195,26,61,150,155,31,150,81,230,234,29,181,214,142,104,64,246,209,65,103,149,12,92,188,182,253,40,242,8,118,248,38,134,47,118,175,178,159,149,207,227,0,54,74,79,182,242,167,160,10,37,237,203,141,174,18,143,147,174,12,99,142,63,9,66,84,92,8,139,205,20,104,226,95,136,164,70,81,50,124,11,6,95,49,153,99,139,124,252,209,28,161,36,198,118,192,50,62,4,10,73,212,23,94,33,218,25,166,104,7,70,94,146,97,217,248,148,97,52,167,28,255,19,118,9,9,7,139,90,4,171,14,38,185,190,147,57,62,82,14,16,155,228,173,89,207,229,75,49,68,144,242,10,35,51,68,234,52,38,173,74,27,137,166,47,50,202,162,94,72,255,67,107,164,11,22,115,193,44,46,220,101,151,68,107,171,64,72,77,6,253,137,200,27,200,205,61,27,155,156,45,211,79,175,221,35,25,186,126,16,199,47,100,184,127,65,141,228,4,169,213,8,64,55,126,181,95,34,128,167,118,204,60,15,202,76,144,72,141,124,160,110,242,152,74,0,19,159,136,35,162,222,136,17,90,58,120,93,21,66,188,69,81,190,18,147,32,251,225,58,173,123,44,172,45,32,205,57,105,15,229,65,34,64,77,71,198,152,111,222,196,244,44,96,230,18,184,2,178,221,148,149,32,229,120,195,11,219,73,85,191,174,12,98,42,149,155,136,91,157,197,145,125,224,132,10,51,167,15,45,250,129,225,223,118,79,110,12,36,61,212,152,220,108,131,198,8,4,126,147,217,33,17,185,45,66,239,6,246,72,140,36,136,34,8,244,161,14,192,40,87,163,84,49,181,48,65,175,206,148,229,204,68,222,146,52,91,155,92,68,131,29,47,24,205,18,122,89,249,200,12,82,6,136,22,153,31,173,129,146,41,227,162,188,152,64,68,170,209,175,238,109,162,145,229,212,169,34,101,6,144,214,8,234,139,151,21,189,68,25,200,157,86,58,141,229,87,21,210,64,196,73,102,115,233,242,218,62,237,102,210,208,192,56,194,38,15,144,241,106,140,98,60,26,241,134,160,127,116,114,132,4,32,239,84,137,60,47,84,49,136,37,60,166,214,237,24,131,192,32,51,187,4,59,11,59,61,69,43,5,161,46,111,199,122,172,174,45,227,114,88,167,57,63,114,93,24,143,71,224,249,9,252,67,129,23,233,212,222,198,70,193,24,185,145,134,24,74,5,156,219,169,185,225,192,18,130,193,187,192,194,52,84,203,35,203,249,50,89,215,31,90,224,1,48,199,58,248,120,136,40,102,226,65,92,133,213,192,138,157,133,55,228,199,174,6,98,183,48,141,197,208,217,208,242,49,115,92,203,150,35,182,141,108,253,33,239,199,241,145,62,228,21,64,80,18,67,37,18,181,76,170,226,85,209,199,26,148,131,128,191,187,15,5,189,28,48,186,62,244,142,169,199,184,27,213,87,48,114,42,4,222,130,226,32,243,153,137,100,133,144,165,71,46,255,200,25,129,163,32,150,101,109,146,203,100,177,116,54,205,192,238,233,104,180,39,228,129,45,195,234,235,160,207,23,252,29,152,195,140,20,243,198,68,30,42,207,250,3,241,128,167,210,65,207,115,215,135,114,16,233,105,62,62,198,136,245,145,84,109,164,239,192,29,100,253,69,180,143,179,83,41,218,237,24,43,130,120,17,31,84,2,243,235,199,97,132,13,245,29,49,9,132,76,82,36,175,234,121,133,48,212,27,35,5,51,82,68,41,235,86,70,171,103,230,46,208,22,108,144,138,96,156,206,22,125,223,94,27,39,140,112,245,78,212,35,8,2,42,59,199,24,153,107,160,180,26,243,44,105,129,238,127,198,152,171,234,9,225,251,234,209,66,120,205,221,42,248,177,9,0,141,4,212,16,88,18,34,83,195,100,141,192,5,48,54,11,191,146,209,122,251,125,9,182,47,222,101,179,8,29,39,187,170,212,51,217,229,35,62,168,145,185,32,182,42,68,214,7,111,165,136,80,220,239,115,140,13,1,206,12,8,90,183,41,195,139,144,214,198,98,44,216,93,162,11,100,243,53,51,182,38,239,174,169,3,197,27,94,9,99,221,94,148,108,14,8,221,24,132,32,208,60,87,179,235,172,20,99,152,60,30,240,196,200,114,19,110,152,235,206,143,41,26,119,91,39,144,180,132,106,30,69,146,42,128,241,22,29,38,27,193,54,5,177,194,134,34,202,216,133,166,16,119,63,32,186,91,25,92,192,116,151,52,237,82,17,110,191,113,97,9,65,3,18,105,39,184,238,216,88,223,41,77,211,146,207,7,199,43,90,117,131,83,228,251,96,49,193,150,240,247,153,0,48,43,56,180,146,56,226,180,122,88,160,245,121,229,208,239,84,176,157,225,166,71,184,49,33,80,128,100,1,42,154,149,187,255,216,6,171,239,139,214,151,62,92,238,232,192,206,199,58,60,251,254,30,170,191,248,16,42,141,211,198,76,187,247,230,254,170,35,43,142,126,139,130,228,6,196,107,163,211,29,2,108,173,195,239,63,12,190,87,98,43,107,192,162,102,227,252,116,133,54,195,88,110,114,203,214,95,196,157,238,234,218,219,188,111,208,236,153,178,123,234,31,176,136,136,143,4,2,138,151,98,96,242,125,228,35,46,185,75,123,219,3,116,11,79,147,63,116,193,217,244,199,247,129,58,222,188,117,64,211,237,206,122,63,152,5,10,64,170,177,76,185,56,213,40,152,213,88,122,66,91,144,154,138,2,194,114,255,179,141,188,179,157,1,117,141,33,124,226,202,153,206,34,251,90,223,4,180,13,76,70,58,19,82,16,134,28,104,68,2,210,27,171,187,59,253,30,195,22,163,192,70,111,33,9,140,13,129,65,194,57,142,157,107,25,87,101,149,165,123,51,59,121,28,175,178,20,141,103,49,241,46,67,102,12,162,98,216,52,14,175,153,177,211,1,42,82,6,98,148,147,77,247,99,208,247,34,185,239,73,195,132,40,175,37,51,171,65,38,171,76,249,48,33,227,7,59,67,77,202,143,1,252,246,147,126,212,229,123,210,143,223,146,244,67,146,72,113,16,4,115,245,34,82,28,6,161,172,140,194,69,234,38,49,178,242,141,143,113,184,217,43,33,117,245,97,161,58,119,76,202,63,157,43,137,199,208,79,9,235,83,37,83,178,254,72,122,131,21,190,201,57,183,97,17,126,242,15,189,119,43,244,97,6,160,68,37,202,51,249,106,74,30,119,62,229,32,66,66,158,58,31,206,59,232,219,63,154,235,247,163,249,219,242,241,64,16,30,155,98,240,60,38,182,23,78,57,112,249,193,181,113,56,229,248,37,50,134,82,136,242,96,124,69,106,45,106,72,133,126,129,181,126,124,190,69,159,250,91,97,200,167,36,55,39,176,169,107,132,223,254,73,216,191,246,147,240,155,23,181,165,151,86,149,88,12,32,207,199,67,215,143,248,229,67,160,219,71,252,242,245,65,203,119,232,27,208,250,191,5,250,233,114,199,30,75,64,203,56,247,222,103,76,184,207,20,198,118,156,247,207,223,113,56,227,154,30,116,188,127,238,41,63,90,107,30,209,39,233,185,124,169,93,14,159,85,216,226,126,219,231,238,55,63,216,228,227,19,118,220,62,209,74,191,252,144,196,119,254,251,157,255,126,45,208,175,142,79,126,110,254,251,9,158,110,225,139,162,117,146,225,95,172,182,126,92,181,15,238,173,235,114,221,138,252,161,21,23,186,179,253,187,212,187,201,195,228,123,248,16,206,239,171,25,21,192,155,238,33,112,20,230,123,137,239,37,190,151,248,94,226,123,137,7,37,62,153,166,91,62,149,100,254,161,42,65,249,82,42,54,107,144,191,127,199,95,74,221,172,161,251,240,247,232,56,52,9,255,30,10,246,249,137,58,126,85,223,236,194,85,151,205,238,99,90,239,176,245,254,185,77,218,211,247,114,255,91,202,213,23,203,181,23,203,173,143,202,221,63,251,171,206,163,220,38,229,238,35,221,14,41,215,157,96,187,148,219,165,220,125,164,219,41,229,70,152,176,148,59,164,92,179,229,186,163,236,148,114,167,148,91,109,185,238,92,75,92,174,43,10,163,220,102,203,141,75,33,82,46,75,185,221,150,235,17,36,69,202,233,126,28,182,92,143,27,170,82,78,247,227,180,229,122,160,79,147,114,178,31,61,216,11,202,117,51,89,145,13,105,178,33,253,181,96,44,216,185,182,236,72,147,29,233,111,173,99,193,251,119,145,45,105,178,37,253,226,192,158,180,96,143,97,147,61,105,178,39,91,87,189,179,22,188,127,23,217,148,38,155,50,50,43,20,91,176,166,160,224,246,189,224,151,42,248,212,124,242,92,207,231,24,192,30,151,247,166,137,32,189,59,207,115,219,207,117,91,91,57,183,131,227,74,82,41,199,186,111,219,150,242,186,145,143,61,130,69,181,57,162,243,30,4,248,180,243,99,91,247,82,54,106,176,95,117,205,87,123,121,223,246,117,63,50,119,29,1,93,229,38,119,47,210,43,211,190,198,92,234,86,11,53,216,103,189,231,182,214,107,150,173,228,99,231,105,7,192,160,122,147,7,76,94,232,251,220,206,118,20,105,240,222,119,90,203,214,202,81,116,66,15,128,65,117,142,152,126,113,195,143,179,230,227,104,59,116,148,91,110,237,56,247,182,165,179,202,152,60,52,172,207,23,12,122,186,233,143,157,124,59,83,169,141,123,241,144,112,218,52,235,242,209,219,93,83,46,219,185,86,193,180,0,22,111,246,7,44,248,119,36,255,95,136,228,233,104,109,55,211,60,142,115,61,246,166,72,125,11,161,81,117,237,252,137,113,122,84,158,182,237,222,77,107,235,186,110,91,75,138,132,51,44,172,171,49,222,207,166,253,27,216,208,92,181,97,66,188,103,243,109,215,38,229,180,157,181,174,186,171,245,82,59,175,153,237,103,59,21,161,67,96,80,127,229,24,201,250,180,247,253,60,243,126,166,253,58,62,135,238,234,122,30,109,107,231,182,30,37,9,25,9,129,65,125,137,245,127,74,213,214,61,29,103,169,181,158,208,247,81,242,133,210,45,41,71,142,97,190,50,223,76,120,214,237,177,167,237,184,232,20,16,201,123,118,167,11,145,235,94,247,253,132,78,66,96,80,95,239,168,236,175,208,211,92,143,86,246,29,207,209,117,120,47,194,125,172,114,132,61,196,87,148,247,81,143,231,88,214,210,125,167,84,68,170,215,225,92,107,181,135,60,4,78,117,249,222,208,43,232,117,228,51,31,87,123,39,82,172,117,175,107,222,142,118,237,160,34,87,0,243,149,5,181,94,224,29,229,76,247,243,82,146,180,120,159,244,118,237,217,177,229,35,3,213,8,129,65,125,185,175,244,204,81,118,213,190,232,113,186,234,237,245,0,214,149,91,205,215,246,165,148,129,59,135,192,160,254,170,201,79,191,242,201,127,185,77,63,46,28,93,211,122,0,33,109,245,34,140,57,173,77,207,180,131,204,213,36,187,201,254,116,161,215,186,167,118,88,10,86,206,253,146,131,182,139,57,37,21,132,66,160,175,46,164,251,5,38,125,28,181,221,117,154,172,130,89,190,19,172,75,28,169,219,46,12,34,130,185,186,140,90,159,139,207,121,31,112,87,230,207,103,148,203,49,101,190,24,144,159,121,199,239,244,114,43,151,112,182,229,21,5,243,163,94,108,3,133,181,91,4,12,107,75,210,196,252,130,196,126,180,227,210,56,81,40,203,215,94,151,181,229,53,213,83,197,152,0,26,212,166,235,130,35,165,196,179,174,183,245,188,228,225,98,100,178,178,30,71,106,181,228,114,64,231,1,52,172,79,151,206,198,179,129,79,137,207,37,19,94,164,235,184,164,18,153,123,61,238,122,246,213,213,217,128,231,6,208,176,62,223,182,60,95,152,253,69,203,202,118,151,13,14,153,251,154,46,198,89,206,10,132,230,22,66,131,218,116,23,240,124,65,99,40,166,211,107,110,71,78,245,210,76,128,205,123,224,84,239,54,8,192,249,2,233,249,190,203,223,119,249,251,46,127,182,93,70,155,224,125,118,251,213,126,78,192,107,103,144,171,197,55,236,159,50,185,251,54,213,227,40,173,109,184,119,23,203,206,165,172,70,156,113,176,176,46,219,26,94,219,227,243,218,154,173,24,21,39,215,124,33,176,145,44,44,36,170,70,41,198,243,147,213,125,153,165,127,144,170,206,73,61,159,111,237,190,213,11,71,82,194,53,44,215,244,46,49,56,137,108,118,11,96,97,93,182,108,188,34,143,164,173,94,124,126,69,178,208,174,46,246,116,78,98,92,0,141,170,115,154,130,242,130,104,188,95,155,181,79,72,189,93,114,207,37,24,110,57,163,129,45,128,70,213,229,25,167,242,138,206,91,215,75,210,175,198,60,87,215,84,210,133,182,187,81,132,3,104,84,157,175,171,223,94,48,157,94,180,120,55,231,52,93,66,221,121,238,151,222,133,4,44,128,6,181,57,149,71,126,69,66,223,235,118,201,113,187,161,200,151,84,119,169,2,246,80,79,160,176,38,101,74,24,137,195,158,146,175,150,118,20,102,47,53,178,228,221,0,111,33,212,213,149,133,206,175,232,157,23,183,217,47,221,17,69,217,139,88,173,151,116,141,198,155,91,8,141,170,243,205,225,251,109,253,167,251,156,47,28,49,72,155,235,117,82,47,164,181,134,143,0,26,212,22,235,95,126,193,204,241,104,222,151,88,127,158,96,63,118,176,7,115,230,215,73,94,176,30,126,169,157,94,183,245,146,42,214,156,85,169,44,199,113,157,209,178,162,118,227,96,81,85,221,229,231,242,208,145,46,33,167,53,53,118,94,27,26,152,27,28,44,170,170,180,251,21,46,121,17,166,245,162,192,104,144,191,88,239,110,38,18,192,162,170,226,11,120,78,69,62,158,213,185,154,124,103,56,191,112,150,142,227,18,156,236,146,58,170,236,201,180,175,198,79,132,230,245,153,109,161,175,147,247,246,156,235,133,46,151,96,137,50,96,8,244,181,11,117,252,92,250,58,247,139,20,21,20,82,59,59,216,175,99,154,178,241,113,69,192,160,122,230,23,73,94,154,246,85,57,101,240,75,223,123,175,119,193,121,7,190,225,33,65,69,202,36,249,108,135,159,163,134,173,254,123,70,214,219,200,209,239,95,223,191,130,47,14,50,249,237,145,195,95,42,156,117,77,159,168,99,19,111,243,214,101,194,47,190,105,31,241,85,204,87,53,95,205,124,173,230,203,6,160,219,112,196,195,124,157,182,247,100,63,167,177,217,225,100,59,158,108,7,148,237,136,242,20,19,191,127,51,159,6,193,62,42,160,139,94,79,123,106,119,241,245,70,46,177,23,76,222,206,53,122,143,71,217,183,173,220,173,35,27,202,103,30,26,85,175,31,208,245,37,219,29,231,118,162,203,52,95,210,231,89,78,35,108,134,208,176,190,36,107,123,161,247,75,202,77,155,141,19,201,251,177,93,146,174,85,61,60,48,170,188,74,154,184,231,186,237,165,157,30,213,74,36,151,66,145,215,75,204,6,239,218,45,132,134,245,55,126,131,227,5,239,238,209,46,109,173,238,24,230,116,119,150,30,103,54,98,148,131,69,85,87,78,150,247,194,94,183,171,74,189,16,8,204,161,249,154,217,209,14,107,76,240,192,176,182,164,238,123,46,163,94,226,101,221,142,150,48,250,226,154,213,181,140,59,184,246,110,17,48,172,205,15,223,188,130,100,251,117,54,38,229,113,50,117,206,128,168,18,165,89,124,30,1,116,15,176,64,92,201,235,158,243,185,175,233,220,65,167,13,160,174,46,229,124,125,105,107,175,29,57,39,235,92,206,249,210,228,74,77,128,205,14,22,214,165,23,162,94,217,215,118,15,49,185,52,39,176,91,108,246,232,110,246,208,206,21,214,215,105,213,126,233,227,107,174,215,193,3,219,231,133,16,53,95,36,8,241,215,3,195,218,27,191,195,240,218,145,189,72,175,181,1,94,231,115,95,175,246,44,193,8,160,97,253,21,146,90,62,223,222,116,92,135,226,88,17,175,242,69,153,236,217,177,144,176,30,189,226,241,138,98,119,228,235,184,31,155,241,63,223,13,187,23,221,155,153,210,4,12,107,115,166,220,167,59,253,148,145,50,79,255,177,139,207,51,59,255,179,87,220,70,65,17,108,127,250,211,175,75,73,84,46,45,245,106,238,194,128,250,79,203,250,207,63,255,207,95,254,250,211,29,250,3,254,60,254,187,10,253,225,14,216,123,65,91,253,95,127,252,245,47,239,254,252,211,251,247,191,252,208,255,249,203,143,63,255,251,251,255,252,225,94,254,31,174,63,123,175,88,174,225,165,76,29,245,137,252,243,207,191,254,229,175,127,123,247,203,251,247,191,190,251,143,247,191,190,255,199,159,255,253,223,126,125,255,95,163,243,63,80,201,94,228,111,127,250,245,95,126,122,255,199,31,127,250,63,63,254,242,215,31,255,248,211,159,126,184,126,234,58,233,127,255,252,235,248,103,159,107,202,189,90,41,159,65,15,102,57,254,247,75,104,182,82,151,95,77,66,179,167,200,154,83,162,191,35,83,196,87,158,8,112,165,148,156,85,19,162,235,19,185,240,149,236,143,244,184,12,63,70,35,117,135,71,141,51,121,234,63,243,34,238,54,142,11,243,149,111,166,241,219,212,243,205,142,235,22,140,156,122,184,65,255,55,24,128,253,117,170,207,21,248,79,199,195,23,211,16,210,200,22,76,67,168,48,72,67,72,93,47,152,134,176,195,246,111,254,216,126,79,150,251,219,14,162,188,39,114,66,202,107,121,175,190,155,134,199,147,82,156,162,123,145,248,128,42,41,221,249,145,189,194,5,86,118,254,157,84,130,170,233,99,199,77,223,182,57,198,113,24,102,232,162,79,33,201,227,38,44,157,54,252,236,247,240,216,198,63,64,135,180,33,111,189,228,68,176,36,49,6,235,24,74,63,241,11,191,76,10,73,69,229,253,66,170,79,89,95,244,237,41,122,44,84,51,210,231,145,129,116,147,84,217,39,61,136,156,229,187,55,185,75,182,111,122,48,117,211,148,254,7,61,229,219,166,111,253,253,28,77,172,171,109,244,208,180,252,244,0,195,120,115,101,60,25,146,225,77,37,137,234,80,64,130,157,239,144,81,133,215,151,222,221,204,244,180,85,111,176,80,81,106,24,191,123,91,248,18,48,173,224,161,144,222,30,188,85,69,105,222,51,188,206,67,75,157,249,225,227,198,179,210,180,237,35,130,157,159,237,34,220,26,232,155,249,17,30,254,196,183,219,215,117,90,18,122,255,248,196,231,220,27,173,137,175,38,163,30,136,198,175,43,51,130,225,49,234,127,170,249,43,202,222,110,43,61,106,59,24,193,41,17,150,102,8,61,246,17,95,10,37,212,204,248,120,68,166,183,83,241,5,121,122,58,43,195,75,99,211,224,210,227,37,52,75,29,237,134,221,175,50,74,140,199,241,138,153,103,31,63,190,172,64,15,27,101,124,107,114,156,216,12,143,222,29,178,26,252,56,137,25,102,242,104,20,98,154,69,198,7,24,59,92,71,121,213,116,255,227,13,133,140,239,217,108,88,136,251,130,5,177,131,233,188,95,79,151,59,121,112,42,253,177,5,129,40,211,99,105,68,86,114,213,83,197,212,123,68,101,80,235,205,76,52,219,105,201,249,214,173,134,49,118,227,177,167,39,72,114,28,69,242,4,235,148,159,105,248,133,246,67,30,78,204,208,231,120,61,47,87,236,112,7,52,27,28,161,224,150,154,33,118,51,246,68,153,13,233,206,186,213,59,227,88,213,89,80,249,153,26,241,57,57,128,165,104,39,157,149,244,41,140,55,17,246,222,243,7,190,137,64,66,14,60,137,80,53,195,186,22,28,92,208,72,121,3,43,191,125,49,143,196,215,239,98,222,242,145,98,94,225,183,19,241,141,57,242,255,11,226,102,121,112,64,206,60,189,112,144,228,128,144,128,198,111,74,142,23,65,132,166,22,20,213,232,193,204,81,102,25,49,45,75,225,71,80,248,29,59,125,27,129,95,128,214,183,13,6,84,95,63,152,94,209,158,102,213,139,29,125,212,35,55,194,248,251,67,14,27,61,132,98,14,219,120,202,110,153,94,56,224,114,248,196,193,62,31,181,175,31,43,104,43,4,41,170,72,93,59,172,186,121,168,137,222,91,23,22,62,64,124,81,154,99,178,56,146,88,241,141,146,251,179,144,156,249,129,40,21,214,229,25,169,46,142,177,190,173,168,72,128,164,21,54,26,108,131,234,69,94,4,2,134,61,144,73,223,133,76,238,117,214,241,42,36,188,174,152,248,145,114,70,80,210,37,18,63,215,93,245,139,126,224,119,76,25,227,229,5,243,233,57,211,27,202,89,24,64,39,176,138,203,88,108,19,202,141,72,191,130,23,87,249,166,163,121,35,114,128,64,42,52,143,88,22,56,73,56,8,5,41,36,195,72,176,41,243,66,233,120,228,22,132,56,122,124,193,12,106,90,236,27,17,7,243,84,123,226,198,27,128,26,236,10,129,138,182,69,3,28,12,127,76,32,145,134,183,45,118,37,113,26,230,32,36,173,11,111,14,39,185,207,185,207,160,130,165,136,34,65,33,136,255,21,212,167,166,138,131,84,133,12,64,91,12,58,86,215,23,65,222,166,126,230,201,183,249,208,7,11,130,139,22,174,41,172,249,227,141,113,219,71,77,33,19,98,172,118,248,50,193,78,192,146,7,168,23,224,103,132,196,14,211,131,243,224,79,141,63,90,254,248,69,135,52,60,204,241,161,71,218,16,146,15,75,97,138,174,55,208,28,67,165,12,13,123,64,229,102,66,56,147,202,66,234,191,108,26,189,28,102,54,159,220,39,171,142,124,151,170,114,62,160,134,65,194,251,159,241,232,222,62,18,67,225,195,97,128,185,33,61,240,100,195,19,151,144,2,121,50,21,147,178,9,233,34,220,12,112,120,70,116,59,246,71,36,102,62,226,142,10,132,132,98,34,38,1,197,137,200,82,64,187,2,10,55,147,152,50,30,24,30,19,59,194,125,66,4,154,245,102,199,163,45,15,183,60,126,96,95,27,63,31,10,161,10,140,108,250,200,247,192,50,220,168,81,129,163,62,87,5,77,56,141,99,238,237,118,233,235,232,99,50,207,100,205,211,132,113,84,121,235,178,255,191,242,29,229,77,126,231,245,37,225,249,24,75,81,97,160,48,244,104,106,208,227,216,140,46,140,159,135,110,137,27,166,59,173,244,160,103,19,251,9,17,171,134,199,166,41,133,25,227,108,230,240,226,121,246,231,221,144,3,71,49,250,218,12,85,190,247,126,198,214,49,51,204,209,200,144,242,197,168,66,151,163,201,30,66,171,186,33,197,38,35,128,140,35,113,25,17,208,72,85,217,152,80,237,208,98,60,123,179,64,110,249,204,168,123,149,110,118,232,101,205,139,162,47,169,35,52,101,163,142,40,12,244,145,45,120,15,241,62,203,111,95,243,39,221,235,235,213,252,127,167,69,45,159,56,162,119,253,68,47,120,149,15,13,232,13,179,181,126,166,13,157,22,237,147,60,85,64,52,165,124,139,110,119,150,94,225,237,87,102,142,9,37,100,185,47,188,122,24,72,219,131,115,195,251,217,133,211,87,181,185,222,110,228,51,134,9,25,38,157,122,23,87,98,29,159,101,162,220,224,184,19,53,28,228,23,150,146,155,178,128,209,45,66,200,217,15,218,88,83,0,243,68,230,213,137,153,11,112,58,242,15,238,36,201,228,121,65,97,137,95,101,210,225,168,8,34,0,247,61,85,25,226,67,67,161,134,88,149,132,42,12,135,2,59,62,198,76,86,179,92,139,113,245,210,146,210,13,237,68,158,96,212,208,15,219,2,95,233,217,220,130,172,96,128,16,16,202,20,36,52,21,128,188,177,178,160,240,129,39,104,218,28,183,123,176,181,102,219,61,102,12,9,143,243,176,23,69,162,85,186,103,179,163,206,190,240,138,130,0,223,51,208,170,75,36,243,138,153,246,135,59,112,204,111,211,183,156,9,185,87,163,190,172,234,248,73,236,71,30,45,151,197,248,148,229,215,77,0,121,18,136,108,159,29,58,50,218,142,189,42,15,37,95,55,241,221,246,93,200,9,205,222,124,18,100,119,214,54,207,254,1,130,89,30,63,3,69,56,21,194,88,181,195,3,243,132,48,155,104,20,244,9,100,172,78,216,26,162,157,67,78,131,193,132,85,135,182,125,35,167,28,188,149,61,186,216,172,109,93,86,213,175,115,188,23,110,187,220,134,178,179,106,159,191,21,185,26,109,85,166,13,153,109,133,27,24,251,1,51,99,228,181,251,220,79,82,39,31,61,57,52,58,178,16,53,28,13,26,36,104,83,0,163,218,124,28,220,136,130,49,195,172,230,9,195,90,196,139,5,171,233,14,143,63,91,211,225,243,59,24,109,114,128,8,138,44,49,46,77,212,210,81,84,67,116,61,77,54,36,27,88,222,170,110,86,67,244,45,79,112,108,227,254,167,115,170,158,170,56,31,31,252,66,244,160,4,147,3,133,64,160,176,236,10,227,98,251,223,131,190,178,81,151,95,175,190,242,181,139,168,100,77,69,155,106,215,205,119,84,193,135,48,8,126,124,114,8,30,72,206,242,168,166,158,203,70,237,244,15,202,112,11,212,111,49,162,107,22,91,171,54,57,6,166,85,72,186,152,9,86,21,211,87,166,120,11,226,223,36,226,176,237,139,105,74,101,38,119,216,14,196,136,165,139,129,171,179,202,217,140,222,115,71,154,220,44,5,25,102,26,185,217,210,83,209,27,138,237,248,0,73,62,204,205,51,219,73,138,126,236,106,52,17,136,198,113,48,100,176,170,65,181,129,102,45,227,29,55,252,2,2,72,146,0,255,150,136,11,176,174,144,38,186,156,144,196,210,170,129,149,135,32,171,66,216,130,69,242,4,173,243,244,123,33,106,207,198,252,83,87,160,24,8,26,197,198,58,179,48,58,66,195,156,212,19,201,219,195,201,110,249,139,176,23,17,64,23,78,194,168,24,188,74,113,225,231,96,95,4,68,232,93,190,98,229,156,145,156,133,238,184,217,71,61,79,99,51,35,119,19,195,153,187,101,177,171,86,252,210,6,107,111,55,199,238,23,163,213,141,231,49,240,138,135,140,178,34,65,166,38,0,205,38,210,21,157,95,56,227,158,6,56,18,97,8,136,33,47,158,2,25,209,220,11,113,64,183,54,131,186,252,61,237,150,145,165,240,136,59,10,96,232,131,39,33,68,214,231,35,232,143,169,57,202,238,164,27,58,48,142,207,106,1,228,150,220,77,180,158,246,10,244,210,253,109,81,222,173,199,232,7,69,166,1,81,130,120,175,114,176,154,220,244,131,198,69,241,201,72,217,23,165,135,139,24,154,199,216,111,50,4,197,189,177,160,168,67,79,216,104,16,54,64,232,8,225,67,146,246,144,36,174,211,14,70,123,106,55,192,109,145,219,196,137,216,79,156,0,25,69,196,71,144,207,196,188,200,225,178,217,221,251,159,241,60,71,127,19,244,35,226,133,216,238,254,182,184,123,104,188,158,222,212,168,127,7,145,121,219,247,11,24,191,89,222,237,98,233,106,142,213,210,5,85,13,168,22,16,217,60,187,47,249,128,163,206,225,23,7,211,202,2,95,160,237,10,136,14,61,180,49,72,18,91,101,249,3,132,186,99,140,19,77,10,139,177,255,114,22,35,208,246,243,160,103,160,110,202,80,87,84,156,97,13,6,81,238,71,53,143,244,10,113,32,11,199,156,25,206,182,79,16,142,24,4,105,161,82,200,64,83,16,231,153,2,103,120,147,232,72,104,171,33,104,72,210,135,169,40,37,52,88,226,254,13,30,125,242,10,175,224,214,228,105,188,57,102,6,49,150,20,189,91,99,41,219,173,226,14,113,36,0,94,203,160,11,55,114,231,161,136,223,26,237,253,39,173,17,67,232,134,14,172,26,71,104,174,198,117,64,16,40,148,29,104,170,197,1,20,192,222,40,102,95,131,28,56,173,58,47,124,255,125,17,86,108,215,161,186,197,18,84,241,16,22,81,56,228,81,215,106,4,34,102,225,242,114,145,186,239,230,8,233,175,14,101,218,188,145,70,14,62,181,167,81,36,107,91,3,80,166,111,114,40,111,90,96,0,84,8,164,251,214,86,158,171,178,117,85,135,2,190,10,198,88,250,159,176,88,118,219,211,93,232,21,75,13,20,215,54,116,253,193,195,66,247,33,20,11,155,144,28,1,224,74,39,192,6,112,36,240,134,42,149,24,54,66,64,72,221,29,2,208,96,21,217,57,110,2,33,52,222,2,16,11,16,207,128,2,200,139,4,144,12,203,54,4,155,221,150,73,20,15,160,146,207,38,11,55,8,114,19,132,16,177,95,127,52,130,61,255,12,58,49,109,177,2,214,197,152,89,71,12,134,226,209,184,21,11,38,148,129,224,26,23,54,132,71,112,184,145,76,175,227,39,165,110,190,160,71,239,137,112,160,132,90,47,154,96,37,241,128,19,102,97,119,60,141,141,216,137,14,201,9,175,194,81,96,3,243,12,226,195,220,80,192,134,237,215,237,185,21,180,180,82,204,7,74,229,28,87,94,180,109,178,205,156,243,152,48,118,175,138,140,221,20,196,118,99,40,197,1,131,74,104,249,161,39,11,99,242,10,85,113,109,58,120,216,124,218,248,187,143,215,71,204,133,235,23,208,241,153,216,71,44,193,49,142,128,187,120,22,20,240,41,207,204,66,142,231,217,226,204,57,97,153,139,226,18,174,155,36,24,244,94,98,188,211,101,113,37,196,167,0,237,236,226,118,138,182,119,193,36,189,109,80,201,200,121,10,128,2,118,229,121,154,231,96,90,205,176,66,195,38,13,3,13,24,108,196,131,29,159,142,88,185,103,248,34,40,162,83,120,247,160,109,6,37,29,130,238,213,24,230,228,161,190,129,145,118,20,56,230,181,212,235,185,211,130,15,66,72,137,66,100,212,27,177,93,225,146,228,196,105,172,244,162,39,120,133,27,182,163,26,69,128,53,45,49,168,111,149,111,236,112,28,205,133,189,155,140,95,139,184,68,105,153,187,159,141,206,15,185,197,244,56,144,169,90,5,131,219,96,9,122,167,111,148,173,134,76,209,64,79,0,145,241,78,119,116,83,170,94,236,72,251,216,158,219,12,3,157,198,11,253,94,51,200,66,116,180,76,160,80,56,165,131,1,83,17,61,22,15,15,28,220,225,118,136,52,97,154,71,197,0,95,35,172,14,113,63,56,33,147,6,116,12,55,252,136,176,141,35,36,163,21,12,214,203,47,42,86,75,241,154,62,214,245,194,141,88,101,128,111,187,34,66,69,139,216,112,19,0,133,222,103,1,16,98,166,117,134,0,79,97,35,214,22,128,100,219,105,173,139,3,200,172,22,226,7,242,1,209,223,28,32,157,208,57,149,9,100,238,210,206,197,50,95,155,56,231,29,135,66,196,60,51,154,244,24,226,152,142,189,169,51,203,40,129,32,227,197,29,207,9,3,118,57,49,213,64,233,157,212,98,218,31,15,50,59,223,43,142,32,224,222,236,17,11,48,6,57,6,73,165,91,24,27,16,178,155,94,0,230,167,150,50,147,111,158,144,210,106,134,148,121,104,186,21,141,239,80,28,51,192,97,87,114,138,60,132,159,21,174,230,17,238,33,146,6,205,60,26,142,57,17,238,208,192,202,37,93,171,4,37,102,125,215,41,106,78,149,243,218,94,65,15,128,2,50,2,170,109,85,174,135,194,34,48,106,201,215,124,252,85,241,107,116,247,104,90,176,132,134,26,117,117,70,205,199,197,181,69,238,33,175,15,186,108,168,181,129,4,48,22,151,238,170,56,194,224,201,199,76,96,184,246,152,48,21,6,11,28,93,193,202,166,188,53,158,115,117,189,176,149,39,8,15,105,80,254,195,34,177,96,108,182,251,153,156,33,16,230,234,73,89,198,172,42,112,6,204,104,236,154,74,29,12,158,153,91,145,11,6,51,40,25,81,157,111,77,149,167,245,144,218,154,105,144,250,196,49,0,34,30,53,190,99,166,228,183,201,186,34,140,154,68,144,215,244,34,141,48,84,28,113,28,56,180,244,110,154,208,196,59,188,66,170,199,78,33,7,246,180,24,163,202,100,116,97,9,249,29,206,126,17,107,134,41,146,231,241,251,174,245,194,165,92,16,2,134,53,176,173,206,0,21,119,22,67,104,178,169,207,249,72,0,144,45,29,162,139,118,42,24,249,230,10,198,173,77,132,142,205,68,26,93,57,89,128,2,43,17,227,164,131,100,135,246,30,82,102,99,108,153,17,28,140,101,178,253,79,155,29,43,212,151,166,244,165,105,42,187,121,142,76,120,40,141,48,11,54,212,210,113,26,71,46,103,122,234,8,46,183,202,16,236,119,168,112,22,81,41,120,64,86,196,171,120,179,78,230,181,182,202,97,4,77,0,255,127,123,223,214,107,71,110,156,251,107,26,24,7,88,2,201,102,223,30,227,224,32,79,121,10,144,247,241,177,29,27,152,140,130,177,130,224,252,251,211,139,172,98,125,117,233,189,214,150,53,218,91,99,25,150,70,93,139,119,22,235,206,98,175,120,140,111,107,208,117,54,95,101,21,246,70,99,28,54,25,62,205,48,199,245,247,13,32,96,42,139,108,105,98,105,163,189,7,83,156,55,213,41,75,94,145,157,129,192,227,140,209,180,145,74,104,181,198,64,179,84,51,27,233,244,12,183,187,25,198,3,98,217,149,180,46,100,61,16,149,188,88,54,110,154,226,149,194,69,227,99,97,9,224,154,235,121,198,232,120,167,164,207,16,136,227,225,19,112,120,88,143,52,189,36,11,130,86,227,85,159,75,245,40,129,19,225,114,161,40,185,215,152,97,126,65,180,51,20,209,210,75,75,78,89,190,52,145,166,25,76,190,17,207,95,67,190,134,12,62,224,230,94,84,80,77,19,203,116,114,129,92,20,0,76,118,60,63,228,200,129,193,55,210,204,156,2,119,169,229,37,237,183,128,161,146,173,174,243,89,180,230,88,17,192,243,217,128,25,7,12,27,90,78,50,34,16,140,54,219,136,227,214,158,187,120,14,228,152,148,99,99,145,119,166,3,220,218,104,144,115,5,69,146,141,89,27,39,33,201,180,147,44,126,6,31,201,102,36,138,224,11,205,67,150,177,99,131,104,13,9,20,79,123,222,81,247,195,74,64,55,30,104,68,176,161,94,63,50,197,99,254,44,98,160,85,209,116,243,78,191,227,19,44,108,148,220,90,86,155,78,131,24,117,140,132,171,44,155,6,120,245,193,41,24,87,36,225,129,93,38,176,222,188,96,228,1,90,63,105,202,110,245,50,32,68,129,92,24,185,24,157,23,210,158,176,43,12,211,13,99,95,237,159,13,147,186,129,110,142,51,45,68,186,167,231,109,161,234,168,88,166,231,170,158,243,118,212,216,44,224,208,85,16,153,156,57,193,240,45,207,120,60,107,114,170,128,81,22,152,45,235,24,229,164,117,15,117,209,208,233,230,106,13,73,217,246,101,248,71,160,12,248,59,39,93,225,243,58,32,59,76,17,240,178,216,97,169,155,99,211,101,180,27,154,220,208,166,118,111,100,25,138,235,24,198,72,240,10,94,227,33,202,209,188,3,21,193,210,23,107,190,69,18,102,73,132,71,12,135,57,30,185,172,232,231,197,195,136,226,122,170,28,216,12,209,176,24,90,30,113,25,37,12,31,35,39,48,182,34,8,189,176,145,25,42,112,3,130,58,100,53,36,230,163,135,61,154,187,12,226,3,136,188,251,178,147,29,208,183,126,48,191,201,196,15,152,240,2,27,127,64,4,173,90,121,121,6,191,156,172,7,240,219,132,10,245,20,156,57,96,10,238,140,58,157,127,210,135,218,48,112,111,99,8,228,26,39,251,24,233,200,139,97,94,84,171,124,108,193,142,52,107,212,100,111,51,138,167,96,89,10,64,166,191,91,32,27,106,41,54,144,117,47,44,101,73,5,69,88,137,220,75,237,184,117,13,216,2,18,242,118,63,65,115,156,37,38,8,240,33,116,132,188,114,235,24,96,63,147,28,171,12,222,136,219,202,121,86,168,141,99,18,249,156,28,169,11,172,18,31,76,76,104,18,68,158,4,49,24,47,132,106,100,191,215,87,38,194,23,183,219,227,132,199,155,0,183,166,216,0,39,69,38,101,196,83,43,223,136,73,223,173,151,146,47,89,159,247,194,55,23,7,245,34,135,34,71,148,82,68,60,4,147,207,212,28,249,186,229,246,150,245,133,43,123,131,183,71,40,115,69,145,213,64,131,134,33,111,142,0,6,129,120,214,180,227,141,63,198,58,20,185,253,97,148,83,68,149,93,168,30,146,105,44,46,26,185,246,173,44,22,162,153,10,18,217,78,252,224,6,188,15,73,51,22,75,107,210,84,3,232,34,140,165,234,65,224,153,9,77,211,117,26,110,180,160,165,156,26,97,232,235,29,136,160,86,88,114,162,13,202,62,145,108,132,178,211,133,120,101,196,47,43,44,29,13,123,219,141,248,124,33,42,187,45,117,241,153,81,4,231,164,67,60,77,12,168,67,206,0,125,53,222,192,24,196,173,131,145,90,126,219,92,0,33,198,24,118,138,18,198,32,230,241,51,198,47,74,108,163,112,238,121,196,254,41,44,196,193,181,222,175,50,138,61,117,3,163,83,1,117,1,99,141,222,192,216,131,12,73,187,187,113,252,206,47,11,72,58,48,57,161,43,65,80,20,36,30,9,194,220,110,246,110,25,91,112,83,168,64,212,22,32,42,15,71,238,0,149,219,79,36,244,254,77,234,153,14,229,6,146,51,13,14,208,81,147,163,239,4,217,121,74,66,54,113,218,66,47,162,107,92,95,244,218,206,236,111,169,207,223,98,150,95,142,11,68,227,28,201,78,32,232,206,36,98,161,111,170,195,212,221,235,46,62,237,120,23,112,33,16,224,197,62,156,9,116,187,121,167,107,163,93,46,101,206,78,81,79,149,104,143,224,27,209,65,34,61,3,53,200,24,48,235,209,136,168,147,172,145,132,243,194,2,238,19,95,160,156,167,93,148,181,183,141,181,237,99,238,16,184,231,77,247,112,170,134,104,239,0,144,77,225,238,183,4,68,156,111,48,187,34,96,50,79,84,6,244,92,118,28,12,0,41,227,187,3,72,157,25,48,1,44,207,146,58,227,166,156,135,174,215,219,112,128,152,136,56,232,133,99,205,20,136,32,213,2,224,110,56,247,53,49,165,194,181,22,159,55,162,164,86,62,54,133,3,60,70,140,53,32,123,229,32,113,236,63,97,109,1,146,45,17,61,66,187,57,221,173,188,73,78,203,27,63,5,94,70,214,86,170,7,225,241,20,100,56,137,206,128,151,158,70,232,44,158,74,117,82,211,4,4,147,121,105,26,67,198,95,221,145,157,209,124,233,33,20,166,141,71,221,132,225,113,181,130,14,248,217,128,212,232,94,38,204,238,74,249,205,89,253,52,226,95,30,14,99,213,112,231,82,157,194,248,160,222,148,209,64,37,215,133,150,17,100,6,237,182,230,98,129,194,85,244,43,29,108,135,223,51,187,177,106,243,175,81,67,111,77,62,218,149,218,114,177,51,134,224,82,158,86,200,117,9,166,169,244,65,200,59,97,60,103,194,100,6,222,63,37,221,20,177,121,124,162,198,159,61,125,54,213,217,189,58,222,142,0,88,34,161,169,136,166,50,142,8,105,26,117,65,198,28,169,243,244,208,211,204,136,178,42,242,107,72,179,166,219,87,180,221,145,127,199,32,130,78,29,134,135,231,32,56,44,147,61,80,150,59,6,44,84,177,217,136,11,3,147,190,96,227,134,209,59,81,64,225,238,253,95,107,131,246,187,24,47,43,111,104,147,101,128,172,238,54,177,110,150,199,106,47,227,89,140,214,147,138,180,184,255,206,143,6,178,165,3,15,64,255,89,0,247,246,119,249,164,119,191,22,7,153,198,241,40,147,220,218,31,166,14,193,228,158,237,105,177,243,107,255,106,252,139,174,213,198,81,229,120,228,139,109,195,118,224,187,55,195,195,209,243,124,129,40,4,100,195,82,149,172,173,225,50,184,214,111,87,29,219,242,229,139,203,8,133,67,235,225,108,69,2,177,227,198,154,103,71,60,221,179,124,45,20,120,177,193,200,21,145,224,81,7,90,115,96,119,114,66,3,4,132,140,155,59,224,72,24,67,239,99,99,106,113,171,152,206,134,175,64,112,168,54,172,82,107,231,137,123,30,230,61,22,192,87,16,88,110,116,243,232,88,4,110,238,26,67,215,225,224,130,241,187,25,170,69,184,90,171,162,178,251,148,96,14,194,41,95,190,201,16,179,178,85,200,24,170,181,183,193,140,253,122,5,67,10,7,14,152,224,17,69,225,81,192,105,239,127,142,123,181,150,159,172,103,109,120,101,38,234,182,174,147,206,68,125,76,222,204,178,76,206,202,242,91,200,115,65,134,128,247,155,231,226,27,205,67,221,242,12,126,129,133,125,109,30,234,245,107,38,22,55,139,246,5,242,80,147,32,209,158,206,251,22,19,81,19,27,56,68,37,239,84,93,146,91,222,63,247,33,118,145,87,137,159,118,60,248,46,176,88,17,228,213,139,46,140,113,224,133,200,102,244,204,103,111,179,135,58,20,169,77,73,197,106,111,158,61,76,92,183,191,77,217,83,115,146,155,107,48,154,21,69,190,50,13,95,210,238,179,124,29,227,54,94,111,116,240,200,141,46,115,82,214,21,22,206,199,194,208,219,182,51,95,204,107,95,42,59,93,237,235,217,3,93,246,254,49,164,10,210,12,15,205,132,225,97,196,27,175,23,233,17,185,255,206,2,80,31,245,58,18,119,11,243,94,57,115,119,177,181,224,137,95,108,249,89,6,235,215,185,27,0,14,200,143,187,246,53,5,247,21,1,68,75,152,53,160,107,126,135,204,145,29,30,252,58,89,199,40,201,236,117,59,216,25,89,105,50,214,255,250,210,202,241,26,168,85,42,193,90,146,107,122,239,123,189,198,71,196,108,163,223,102,133,5,1,150,104,44,10,208,76,161,161,67,82,141,196,26,203,195,131,160,247,176,239,124,91,129,32,177,207,115,143,97,210,57,85,114,8,61,242,172,5,145,99,8,44,34,137,52,216,55,101,187,135,87,181,52,6,223,180,201,90,182,177,3,242,164,180,109,46,157,134,56,202,150,51,70,71,121,89,10,177,109,197,206,217,38,133,143,71,245,111,80,243,57,204,1,53,127,108,68,78,127,46,77,126,45,249,181,56,64,20,93,161,128,192,254,31,22,116,24,208,70,243,205,11,163,27,117,249,126,133,209,119,126,172,234,208,195,134,211,179,42,119,230,224,93,96,6,97,163,150,4,85,79,162,135,194,55,4,53,39,104,164,91,53,216,157,64,185,26,96,16,197,143,139,226,254,251,29,220,97,189,96,0,70,9,29,131,12,32,35,25,118,101,162,15,38,117,146,134,172,2,33,198,200,103,153,22,134,72,6,222,160,36,131,205,188,216,177,177,17,225,225,27,232,122,161,163,141,8,118,42,188,2,46,191,246,65,145,213,10,191,250,22,20,248,217,208,179,153,173,146,76,23,43,47,29,4,179,226,128,211,197,58,232,213,138,214,211,47,248,80,241,89,142,37,99,130,52,49,2,67,101,15,229,33,181,145,187,130,153,119,223,9,136,10,163,224,82,188,71,35,214,110,232,32,241,2,227,180,218,114,53,73,224,197,48,49,123,38,130,99,227,207,150,95,101,183,17,184,83,89,102,73,129,13,208,105,124,102,244,92,194,185,142,149,184,90,173,96,69,53,178,95,230,51,120,138,173,85,182,166,8,87,171,17,87,139,159,30,222,127,3,92,109,158,190,115,181,191,75,169,62,72,214,58,192,8,74,34,255,14,22,199,157,3,50,132,148,183,67,0,239,177,220,72,170,199,200,15,206,62,138,105,107,182,145,2,71,96,60,10,0,144,46,4,201,79,216,71,132,1,40,28,145,50,142,104,166,231,39,41,149,178,157,31,26,18,224,26,16,13,114,23,72,53,16,201,137,131,89,171,128,16,116,154,209,191,15,160,24,232,211,32,11,140,106,68,98,139,119,128,81,74,32,185,82,63,212,106,44,133,233,206,136,158,151,14,225,247,61,247,5,190,149,121,121,97,189,174,186,221,128,245,33,105,157,223,219,196,0,138,89,86,72,152,36,231,246,97,221,149,77,207,108,139,33,181,110,103,35,61,208,120,210,64,143,15,0,192,45,236,32,82,86,235,0,140,20,181,4,33,205,142,53,85,2,213,14,154,165,33,198,165,21,218,38,208,192,241,253,3,46,223,29,210,243,76,35,138,111,156,8,111,120,82,86,246,241,244,128,70,142,76,99,198,34,16,86,146,103,206,19,213,35,238,230,62,10,188,232,210,71,1,82,34,35,163,142,15,29,153,167,230,225,43,26,215,239,0,51,17,233,37,112,247,54,248,154,61,24,21,221,230,10,21,146,108,173,156,149,131,12,2,176,179,100,14,217,5,210,254,9,143,181,245,108,215,144,0,157,80,36,130,20,3,145,7,123,212,88,232,172,243,1,84,185,143,72,92,130,240,241,195,130,76,205,212,247,157,54,91,200,224,58,252,76,179,128,198,213,0,160,122,201,236,200,29,29,167,65,26,138,111,62,1,238,97,84,71,29,151,23,224,196,242,240,49,149,27,57,209,50,130,168,177,234,139,45,0,194,62,233,250,97,115,57,227,45,200,78,82,212,75,221,31,232,180,97,54,139,59,68,167,189,236,194,169,74,236,145,5,162,92,158,76,174,251,190,111,208,72,49,16,28,96,67,173,102,86,106,13,94,60,106,238,232,13,27,146,193,58,150,51,91,207,26,132,146,23,31,226,215,230,147,216,41,69,166,248,19,48,118,230,194,164,48,11,132,12,213,25,10,241,235,52,131,140,101,230,99,135,12,111,161,238,199,198,7,244,48,160,153,48,207,68,147,90,4,1,11,204,115,197,254,217,12,89,1,100,32,105,20,154,5,180,46,112,8,120,228,189,191,34,77,173,102,85,244,160,58,97,241,20,224,138,72,172,14,50,14,109,151,102,14,36,244,71,3,47,2,88,8,151,7,201,226,215,2,192,235,170,218,73,178,164,74,72,113,130,76,36,237,132,66,17,209,248,161,41,172,131,187,203,249,93,135,215,27,64,84,42,185,46,113,92,251,128,193,80,57,99,41,220,118,78,67,119,62,0,198,204,68,34,25,137,253,87,196,45,238,176,19,140,204,1,186,131,119,100,82,174,100,142,52,4,164,100,7,133,114,216,145,135,16,0,81,56,200,42,237,244,124,38,11,206,173,135,229,192,53,181,204,77,109,0,130,113,19,9,230,133,2,18,236,133,54,45,219,69,210,31,114,26,47,64,146,185,28,3,194,70,3,42,3,129,10,185,162,126,56,160,180,74,123,152,221,3,88,222,26,192,174,120,30,243,150,73,88,140,98,16,152,16,88,175,18,228,169,65,214,197,12,168,90,128,110,253,5,46,133,204,12,98,135,72,250,197,4,27,18,230,129,115,137,242,48,123,195,214,184,124,60,74,85,0,168,206,152,222,209,112,208,198,54,110,60,195,45,58,142,64,41,0,146,193,182,101,139,196,7,78,233,138,119,20,89,126,232,255,38,187,224,248,117,31,83,237,168,116,48,6,210,241,224,16,158,89,64,108,104,68,178,49,228,10,219,110,97,10,78,138,13,210,31,39,234,152,41,37,216,102,16,46,7,4,22,199,164,74,186,85,119,210,43,29,107,40,210,22,121,5,43,216,202,130,34,179,217,50,233,196,67,59,83,34,148,197,58,100,133,137,29,14,178,27,250,161,102,149,0,35,178,152,43,73,210,206,130,141,221,235,162,163,94,87,130,65,216,95,38,158,52,64,220,54,94,57,213,253,181,225,61,78,154,25,138,41,107,95,58,241,151,143,168,171,109,18,153,1,222,228,146,84,182,2,65,226,96,100,6,144,6,88,245,2,113,32,16,63,188,140,18,8,50,128,150,74,108,218,81,36,178,90,163,19,164,34,105,43,144,201,202,208,107,103,1,5,226,29,44,110,234,91,207,180,87,36,197,153,201,54,19,52,64,16,194,23,162,219,9,234,240,161,205,2,114,1,99,185,48,121,168,0,129,147,93,0,137,240,44,103,185,43,54,75,251,108,108,222,112,232,56,157,134,247,20,162,38,132,118,31,70,92,161,107,7,135,173,13,34,126,140,82,196,250,68,36,17,73,34,16,83,34,113,38,144,122,34,225,40,144,161,132,96,237,30,4,138,158,211,253,2,13,113,71,219,207,37,169,141,40,242,68,36,59,36,232,158,228,35,67,48,12,35,162,194,12,235,160,18,128,204,2,105,181,215,47,247,48,124,28,2,97,86,0,34,64,32,78,80,164,35,42,175,171,7,249,166,2,110,234,89,46,242,101,244,122,176,115,90,146,119,160,9,204,139,0,145,160,16,137,19,124,60,146,107,173,104,235,29,141,29,102,232,116,253,151,228,35,16,162,22,179,97,163,8,38,74,224,13,243,138,126,85,170,181,219,159,216,134,226,12,38,131,200,204,2,65,65,244,66,84,165,117,70,65,186,116,144,132,21,204,120,243,142,69,108,149,190,128,98,235,49,37,34,57,203,102,128,80,95,82,106,101,250,83,1,68,210,35,74,52,28,83,60,220,165,27,167,100,35,230,2,104,128,153,42,48,164,153,101,133,188,192,144,145,4,144,80,131,41,201,72,6,177,73,202,116,34,138,126,243,27,189,78,221,171,9,128,110,145,3,153,137,28,161,21,202,116,49,10,214,148,162,238,209,86,205,32,89,83,152,102,39,251,52,137,129,139,236,51,128,1,238,230,123,200,90,179,7,173,30,2,148,213,74,109,161,110,232,21,200,110,104,173,14,50,11,64,102,113,47,245,76,106,253,64,214,201,67,137,79,0,99,42,60,228,31,184,172,12,197,232,28,130,104,179,3,185,35,243,20,157,162,166,153,179,253,10,179,88,177,122,82,208,246,205,39,144,207,215,49,112,178,129,188,145,219,27,194,3,107,121,96,83,15,44,239,177,125,158,58,44,118,216,218,138,20,24,155,2,89,18,119,33,77,145,133,126,31,235,221,167,203,75,36,161,155,125,129,40,174,148,190,134,15,101,220,99,1,123,189,112,5,109,223,215,16,182,27,42,23,129,30,223,240,136,171,39,227,136,216,208,61,121,27,205,197,183,173,20,205,228,139,37,18,166,69,198,6,168,117,97,240,23,8,142,164,27,211,140,5,206,91,242,157,121,205,25,224,118,142,9,244,86,59,128,64,71,28,109,234,252,127,218,240,20,153,166,140,245,234,82,124,52,98,102,40,138,42,97,149,233,6,149,0,87,41,110,85,47,132,123,67,164,37,33,205,162,208,76,16,139,219,247,6,221,208,63,105,214,253,122,163,176,204,131,83,1,90,113,120,214,214,46,99,127,139,140,116,35,225,149,92,155,41,50,186,27,171,23,112,171,100,40,65,153,218,100,205,2,238,27,233,189,195,16,24,45,65,132,86,170,254,31,52,102,121,65,35,144,70,176,121,213,35,10,27,161,133,173,211,254,177,38,164,222,99,56,213,184,143,79,168,214,87,127,131,2,29,34,243,160,58,178,108,12,72,132,194,171,156,109,16,92,37,177,111,32,209,4,98,143,146,141,2,217,73,11,87,106,165,32,199,255,133,49,200,234,49,129,178,19,57,181,2,207,23,26,141,34,179,146,54,60,149,96,72,228,26,242,130,117,44,128,71,130,58,154,7,35,3,162,178,48,210,22,56,51,164,25,130,26,150,50,32,106,45,35,82,68,66,85,69,91,25,171,109,214,116,149,100,121,19,10,171,20,38,150,128,207,98,106,66,214,240,208,142,180,142,1,15,208,194,105,146,64,119,30,72,77,37,40,61,148,83,87,2,63,36,152,254,188,33,109,227,203,104,104,240,236,220,180,210,44,102,67,187,54,238,28,32,61,93,239,97,90,149,20,140,163,8,47,141,44,29,133,133,57,209,217,10,215,147,54,37,22,206,249,133,129,34,237,38,8,190,91,97,220,169,222,161,73,19,223,148,92,47,99,97,119,52,172,209,181,220,124,89,70,152,171,119,212,106,59,162,2,233,87,6,157,85,50,112,241,234,246,163,200,35,216,225,219,48,124,177,123,149,253,172,124,30,59,176,82,134,178,133,63,7,170,80,222,190,92,233,42,113,63,233,194,48,108,252,73,16,162,226,66,88,116,178,64,21,255,66,36,53,138,146,225,91,48,248,170,137,141,45,242,241,71,54,66,105,24,219,1,203,248,16,8,36,81,95,120,133,104,99,152,160,29,24,121,73,134,101,227,83,134,209,28,227,248,31,176,75,72,56,88,212,34,216,236,96,35,7,122,82,199,103,148,3,196,38,121,203,234,185,124,41,134,8,82,94,96,100,138,72,29,202,164,53,211,70,162,233,139,140,178,168,23,210,127,208,26,233,130,197,92,48,139,11,119,217,70,162,181,101,64,72,77,6,253,137,200,27,200,205,45,27,219,56,91,170,159,86,187,69,50,52,253,32,142,95,200,112,255,130,26,201,9,82,171,17,128,110,252,74,191,68,0,15,233,152,121,30,148,49,144,72,141,188,80,55,121,76,37,128,13,159,136,35,162,222,136,17,90,58,120,93,5,66,188,69,80,126,38,38,65,246,195,197,172,123,44,172,77,32,205,57,105,15,229,65,34,64,85,70,198,152,175,30,193,244,44,192,114,9,92,129,177,221,148,149,32,229,120,195,11,219,73,69,191,158,25,196,84,42,215,33,110,53,22,71,246,129,3,42,88,78,31,90,244,3,195,191,238,158,220,24,72,122,168,177,113,179,13,26,35,16,248,77,172,67,34,114,91,132,222,13,236,145,24,73,16,69,16,232,67,13,128,81,174,74,169,98,106,161,130,94,157,41,203,153,137,188,37,201,90,155,92,68,131,30,47,24,205,18,122,89,249,200,116,82,6,136,22,153,31,181,129,146,41,227,36,188,152,64,68,170,209,175,238,109,162,145,229,212,169,34,197,2,72,107,4,245,197,203,138,94,162,12,228,78,45,157,198,242,171,8,105,32,226,36,181,185,116,121,109,51,187,153,36,52,48,142,176,201,29,164,188,26,189,24,143,102,120,67,208,63,106,28,33,1,200,59,85,34,207,11,85,12,98,9,119,211,186,30,99,16,24,164,102,151,96,103,97,167,77,180,82,16,234,242,114,172,199,226,218,82,46,135,197,204,249,202,117,161,60,30,129,231,39,240,15,5,94,164,67,122,235,27,5,99,228,70,42,98,40,21,112,110,167,234,134,3,75,8,6,239,2,11,83,81,45,143,44,231,147,177,174,95,90,224,1,96,99,29,124,60,68,20,51,113,17,87,161,53,176,162,103,225,13,249,177,171,129,216,45,76,99,82,116,54,180,124,88,142,171,217,114,196,182,145,173,95,242,126,28,31,233,67,94,1,4,37,49,84,34,81,203,164,42,94,21,189,214,160,28,4,252,221,109,40,232,229,128,209,181,161,55,76,221,251,221,168,182,130,145,83,33,240,22,20,7,177,103,38,146,21,66,150,30,185,252,35,103,4,142,130,88,150,182,73,78,198,98,233,108,154,129,221,211,209,104,79,200,3,91,134,214,215,65,159,47,248,59,48,7,139,20,118,99,34,15,149,103,253,129,120,192,83,105,160,199,233,235,67,57,136,244,52,31,31,163,196,250,72,170,86,210,119,224,14,210,254,34,218,71,235,84,138,118,59,198,138,32,94,196,7,149,192,252,218,113,232,97,67,109,71,84,2,33,149,20,201,171,122,94,33,12,245,198,72,193,140,20,81,202,186,149,209,234,153,185,11,180,5,43,164,34,24,167,179,69,223,183,215,198,9,35,92,189,3,245,8,130,128,202,206,49,70,234,26,40,173,134,157,37,45,208,253,79,31,243,44,122,66,248,160,122,180,16,94,115,215,10,126,108,2,64,35,1,53,4,150,132,200,212,96,172,17,184,0,202,102,225,87,50,90,111,191,47,193,246,197,187,172,22,161,225,100,83,149,218,205,193,188,199,7,53,50,23,196,86,133,200,250,224,173,20,17,138,251,125,142,177,33,192,153,14,65,235,54,101,120,25,164,181,178,24,11,118,151,232,2,153,189,102,198,214,228,205,53,181,163,120,195,43,161,172,219,147,144,205,14,161,27,131,16,4,154,109,53,189,206,66,49,186,201,227,130,39,70,150,155,112,195,92,119,126,76,209,184,235,98,64,163,37,84,243,40,146,84,0,140,183,232,48,89,9,182,10,136,21,54,20,81,250,46,84,129,184,251,1,209,221,202,224,2,166,187,164,169,151,138,112,251,133,11,75,8,234,144,72,59,193,117,199,198,218,78,73,154,150,124,92,28,47,63,229,96,93,194,213,139,22,217,236,68,176,91,193,158,70,27,175,208,154,220,47,44,169,232,18,254,74,21,0,172,142,69,155,137,139,150,22,15,11,20,79,175,159,170,149,187,67,107,103,245,109,196,109,233,131,229,142,15,172,61,214,225,217,247,247,80,253,197,135,80,105,52,171,98,150,238,197,197,21,71,86,28,253,22,5,201,117,136,215,70,205,29,2,108,173,193,239,63,116,190,87,98,43,107,192,162,172,113,222,92,161,205,48,150,219,184,101,235,47,226,154,187,186,250,54,239,11,52,219,82,118,79,253,3,22,17,241,145,64,64,241,82,12,76,190,141,188,199,37,55,105,111,189,64,183,16,149,61,198,7,7,195,159,157,11,117,188,122,235,128,164,219,181,122,63,152,5,10,64,102,101,153,114,113,170,81,48,171,178,244,132,182,32,49,21,5,167,250,254,103,237,121,103,27,3,106,26,67,248,202,149,51,157,69,246,181,182,9,104,27,48,70,58,21,82,16,134,28,72,68,2,146,73,173,187,59,253,30,195,22,163,192,70,111,33,9,140,13,129,65,194,57,142,157,107,25,87,101,25,75,247,98,118,242,56,94,101,42,18,207,162,226,93,186,204,24,68,197,176,105,28,30,52,99,167,3,84,164,12,196,40,39,171,238,251,160,239,69,114,219,147,138,9,81,158,75,102,54,7,153,172,154,145,95,103,252,96,103,168,74,249,209,129,223,126,210,15,154,216,247,164,31,211,231,37,253,24,73,164,56,8,130,185,122,25,82,28,6,161,44,140,194,101,212,77,195,200,202,55,62,250,225,102,175,196,168,43,15,11,205,182,99,82,254,233,92,141,120,12,249,28,97,125,162,100,142,172,63,35,189,193,2,223,228,156,91,177,8,191,250,135,222,187,5,250,80,3,16,162,18,229,153,124,54,37,143,59,159,227,32,66,66,158,217,30,206,59,232,219,63,154,219,123,63,154,127,247,162,214,229,169,85,37,244,191,31,46,26,229,119,104,4,157,191,255,242,213,126,249,14,125,51,232,151,163,176,36,8,104,10,91,41,35,250,175,152,252,124,43,111,213,113,125,171,142,247,168,227,178,95,116,92,191,96,207,97,130,251,207,152,242,211,153,230,223,217,113,121,151,208,183,39,224,255,56,191,124,135,190,57,171,250,2,47,78,240,253,182,217,8,225,15,171,53,221,173,153,163,94,91,113,162,203,159,175,170,119,27,47,21,111,225,203,24,95,87,105,232,167,130,188,41,211,253,5,9,187,87,223,75,124,237,18,248,235,250,189,196,55,84,162,76,143,246,246,123,137,239,37,222,172,196,23,83,12,151,47,165,51,188,86,89,89,67,141,52,207,111,212,241,213,140,203,250,5,123,126,43,93,120,125,43,93,152,157,73,239,4,187,202,85,199,243,23,236,249,120,163,41,111,95,170,227,39,181,255,230,179,108,113,1,141,82,53,159,100,139,98,93,21,9,147,98,249,185,98,229,97,177,230,219,157,31,22,91,158,43,182,126,211,197,118,95,108,110,18,206,54,138,221,215,253,8,138,53,241,85,248,77,9,58,108,215,148,26,19,58,70,185,249,123,185,223,126,185,20,224,75,19,68,146,46,151,131,114,237,206,98,30,229,90,0,69,128,92,45,42,166,150,81,110,121,178,220,250,219,44,87,159,44,183,60,89,110,125,92,110,123,178,220,254,100,185,227,183,94,238,161,141,235,177,201,136,227,203,90,204,215,139,214,166,244,225,56,142,117,173,115,58,255,74,107,191,245,249,33,149,178,148,124,108,101,93,58,232,22,192,162,170,28,197,220,114,218,62,236,120,95,247,109,171,53,67,199,117,47,199,249,185,205,123,217,243,232,218,67,163,234,55,121,157,178,62,238,252,156,200,190,110,235,182,108,163,201,116,118,176,148,101,62,146,204,218,128,194,154,55,234,117,125,147,41,211,140,223,106,163,231,215,218,51,159,71,78,91,181,98,10,166,135,179,93,234,82,246,61,237,203,49,83,146,161,116,228,99,173,91,201,235,118,156,11,201,243,245,208,168,58,15,187,60,179,212,123,89,206,109,90,203,46,120,147,247,229,196,154,57,29,203,150,230,177,207,1,52,170,78,9,195,202,195,213,126,227,190,207,85,155,183,181,148,4,45,222,215,183,30,216,226,45,2,134,181,159,95,244,207,199,21,111,168,167,103,120,247,39,142,115,173,243,154,230,37,143,163,146,150,101,91,150,53,47,101,174,243,64,49,7,140,42,207,244,184,239,19,100,100,62,21,177,185,100,181,199,121,174,231,25,93,150,42,168,237,96,97,221,30,65,219,114,31,62,196,173,37,213,117,62,177,38,115,123,121,43,101,95,143,253,196,35,236,216,67,131,218,252,36,96,11,115,125,183,107,125,30,143,178,33,7,72,39,101,60,214,180,30,243,204,196,225,22,66,131,218,252,204,249,163,9,127,46,82,58,106,203,49,134,247,183,0,31,78,117,61,242,182,149,186,38,152,214,182,207,39,24,88,134,5,4,213,40,23,237,61,176,241,97,159,101,205,117,83,93,230,19,65,243,249,131,224,152,5,248,90,148,18,48,63,69,156,183,147,212,207,203,62,159,88,33,157,250,205,11,64,81,221,126,177,181,37,119,127,151,11,124,148,115,225,82,6,113,229,236,227,156,211,73,109,247,89,230,113,1,140,234,143,59,188,175,244,157,94,34,227,117,19,247,140,84,165,158,194,200,50,215,12,252,249,220,128,188,108,57,213,10,104,177,28,57,157,92,101,67,238,179,175,105,217,207,98,85,182,145,174,169,180,244,90,175,21,93,56,173,206,19,235,190,174,101,219,211,182,102,38,119,125,179,143,163,110,75,58,54,145,174,66,96,84,95,242,233,61,26,121,195,212,116,30,145,45,45,9,246,61,159,8,93,142,130,184,116,1,140,234,207,156,234,228,120,185,247,123,144,117,153,183,125,63,69,168,92,225,144,205,233,196,173,179,197,179,55,16,192,202,94,115,222,87,69,176,151,125,59,119,46,167,173,242,246,142,75,188,105,56,194,223,229,228,175,183,254,56,231,147,204,206,123,88,84,187,231,141,255,181,144,213,213,228,4,6,249,9,138,118,206,224,46,42,239,72,71,78,218,156,242,188,226,228,13,40,172,201,233,39,159,234,183,164,117,169,69,8,66,62,181,150,101,7,126,172,1,97,149,103,59,219,203,93,27,203,73,36,143,19,93,231,122,34,115,81,226,180,129,133,53,247,247,56,193,227,164,64,181,156,188,77,142,192,125,199,242,137,137,139,224,230,45,132,70,213,159,222,201,199,168,167,171,127,205,96,23,29,132,241,253,235,251,215,175,246,197,38,191,191,223,209,254,86,62,216,253,85,254,238,47,17,21,252,230,155,54,190,138,250,154,213,87,253,38,191,22,245,101,93,134,255,112,95,10,39,63,203,34,79,23,218,115,187,246,254,42,142,56,110,4,62,97,141,58,106,170,71,218,10,88,110,239,178,72,170,165,204,235,140,214,101,15,13,235,115,146,165,103,58,223,78,233,103,223,183,245,88,196,242,119,182,115,234,93,57,161,77,202,3,195,218,156,243,233,41,211,208,146,106,218,15,101,231,74,231,108,150,117,211,66,137,7,134,181,235,135,237,174,10,143,255,245,109,184,155,32,248,127,219,3,205,247,133,5,57,69,54,107,57,242,208,151,151,228,25,84,152,247,99,173,168,219,191,6,15,84,229,103,145,224,33,230,242,49,250,177,49,57,123,130,254,236,133,180,94,112,176,159,159,254,244,105,42,137,202,165,105,62,155,75,235,52,255,126,90,254,229,231,255,253,203,95,127,186,67,127,192,159,251,255,207,66,191,187,3,182,86,80,87,255,183,31,63,253,229,195,159,127,250,248,241,151,31,218,63,127,249,241,231,63,126,252,175,31,238,229,255,233,252,179,181,138,229,28,94,202,212,81,155,200,191,252,252,233,47,127,253,219,135,95,62,126,252,244,225,63,63,126,250,248,207,63,255,241,223,63,125,252,239,222,249,239,168,100,43,242,183,63,125,250,215,159,62,254,225,199,159,254,227,199,95,254,250,227,31,126,250,211,15,231,79,77,254,252,159,159,63,245,127,182,185,166,220,170,157,95,95,94,230,101,110,251,245,174,218,238,212,229,187,185,106,251,16,89,143,141,109,209,89,34,244,245,62,188,243,139,243,203,120,84,111,164,8,146,119,43,224,43,233,31,41,227,35,103,136,28,117,187,161,154,175,215,203,63,51,245,33,144,155,175,124,83,141,223,76,207,55,61,174,91,48,114,234,225,6,253,223,96,0,250,87,83,159,43,240,159,37,3,87,127,112,67,158,70,54,225,13,121,129,193,37,121,234,122,194,91,242,13,246,205,95,147,223,231,119,118,118,191,181,131,56,146,252,29,144,135,102,60,34,117,239,158,242,188,114,222,156,169,112,50,158,121,228,89,226,204,215,133,11,140,199,35,15,42,65,213,228,5,146,42,9,39,247,126,28,90,95,185,72,126,210,145,113,112,225,244,58,248,121,47,194,89,130,8,180,143,54,70,2,70,126,35,141,147,93,30,35,232,162,157,248,137,159,11,72,114,92,71,82,113,170,79,55,168,240,141,181,181,31,228,145,191,179,39,77,149,231,116,15,122,165,36,143,239,214,228,54,82,240,208,43,6,43,62,237,181,55,64,53,223,242,251,209,155,88,22,221,232,14,111,173,245,50,61,17,226,202,47,217,141,20,58,125,215,32,195,34,229,106,58,36,83,208,218,171,200,67,29,195,89,116,95,162,214,96,161,162,212,48,126,183,182,240,121,14,90,193,93,32,61,242,13,19,42,211,2,238,22,51,198,179,193,149,103,37,185,148,198,179,201,136,146,29,125,51,103,198,228,79,124,80,105,89,204,146,208,163,36,7,190,177,84,105,77,124,181,49,234,142,104,252,228,9,35,24,30,163,246,103,86,127,69,41,149,116,165,171,182,131,17,208,46,230,172,135,208,66,95,205,75,101,115,135,65,194,79,122,208,0,159,117,202,195,71,55,95,204,40,93,47,161,90,234,104,55,244,126,149,94,162,235,152,69,205,179,141,31,211,157,81,182,209,140,9,224,251,137,205,144,137,122,31,171,193,137,14,213,48,147,71,163,16,211,52,50,94,96,44,57,80,23,201,193,213,19,155,101,76,50,185,98,33,238,11,22,68,15,166,241,126,57,93,238,228,193,169,244,199,22,4,162,156,249,189,246,62,253,89,78,21,83,239,158,169,140,90,175,106,162,89,79,107,156,111,217,106,24,99,179,180,120,122,130,36,199,81,36,79,176,142,241,51,13,191,208,126,200,67,233,208,231,198,111,119,67,135,27,160,89,231,8,5,183,84,13,49,77,158,50,43,210,157,101,171,55,198,177,89,102,65,229,45,53,226,115,178,3,75,145,78,26,43,233,14,232,134,0,91,235,249,149,137,202,72,200,129,60,101,179,164,61,146,130,157,11,42,41,175,99,229,183,47,230,145,248,250,93,204,155,62,83,204,43,156,208,28,19,63,115,128,196,64,229,225,180,30,103,190,240,195,136,124,64,72,64,99,51,75,79,211,55,104,106,65,81,141,178,216,247,50,83,247,148,247,22,122,147,253,28,75,194,178,241,42,107,134,113,241,139,160,164,104,169,167,109,204,172,90,177,189,141,186,95,136,201,152,137,244,169,195,70,217,9,213,97,235,249,165,39,147,118,140,203,97,222,177,205,30,181,247,143,21,180,21,3,41,230,33,117,109,176,234,42,123,42,61,130,52,88,120,7,117,89,157,179,24,75,14,115,124,194,173,203,6,3,217,10,52,218,104,239,200,237,218,223,21,32,85,66,80,145,0,73,42,240,67,113,21,170,151,145,166,19,24,118,161,23,238,88,188,73,238,201,132,158,170,29,82,158,39,126,57,136,17,52,241,139,159,155,192,241,17,123,121,92,128,49,126,60,43,100,222,24,184,161,156,37,32,56,154,51,46,99,209,77,8,55,34,253,10,158,65,224,156,241,42,113,123,7,97,206,121,204,44,95,224,36,101,149,49,189,154,161,22,142,69,218,108,83,234,217,128,254,242,4,8,113,244,8,156,26,148,89,236,27,191,107,139,175,18,36,110,28,223,103,174,176,43,4,42,210,22,13,176,51,252,62,129,68,26,222,58,233,149,196,105,168,131,144,100,243,225,33,144,241,236,43,64,102,42,180,89,80,113,245,10,22,242,175,132,141,92,204,197,65,102,129,116,64,157,20,130,210,136,94,166,126,42,15,179,61,244,193,130,224,162,133,107,10,107,126,189,49,110,251,168,41,100,66,140,213,14,95,12,236,0,44,185,64,189,0,63,35,36,118,152,30,156,7,127,106,252,209,242,199,47,58,164,225,97,142,15,61,210,134,144,124,104,10,83,100,189,129,230,40,42,165,104,216,5,149,179,132,208,146,202,66,234,255,216,52,74,231,171,54,191,67,68,183,98,222,191,226,105,80,79,37,3,18,222,255,244,76,216,45,95,23,37,117,246,152,27,210,3,79,54,60,113,9,41,144,39,83,49,41,51,72,23,225,102,128,195,22,209,245,216,99,18,227,78,120,72,4,12,161,8,168,73,68,114,2,186,20,80,47,79,226,44,137,41,253,213,143,62,177,248,85,2,68,32,171,55,59,30,173,121,184,230,241,29,251,40,169,253,46,16,170,192,200,38,47,239,116,44,195,141,234,21,248,77,191,69,64,6,167,113,204,173,221,38,125,237,109,76,42,119,173,157,38,140,99,30,9,232,33,106,255,54,15,26,58,143,21,31,62,202,162,30,2,213,67,143,166,6,61,246,205,104,194,248,177,203,150,184,97,186,211,58,227,179,102,125,11,232,117,52,56,54,242,158,42,237,85,85,135,23,207,179,63,239,138,28,56,138,209,214,166,171,242,173,247,35,182,142,169,97,246,70,186,148,63,140,42,228,98,38,123,8,173,234,138,20,155,140,0,99,28,137,203,12,1,141,84,149,149,9,213,6,45,198,179,87,11,228,150,79,141,186,85,105,102,135,126,117,61,193,68,159,82,71,104,202,74,29,17,24,232,35,107,144,164,252,62,203,111,95,243,143,83,71,78,239,71,243,255,187,23,181,164,167,86,181,188,171,48,178,119,240,245,229,112,108,11,113,44,191,26,201,202,107,227,16,195,252,36,159,209,241,87,141,67,124,62,130,240,249,200,60,157,227,233,248,58,95,207,156,245,242,92,248,208,204,172,230,241,173,196,163,30,199,146,213,101,139,99,93,246,61,207,21,47,91,4,48,91,181,142,136,130,135,157,238,41,45,235,182,22,137,207,186,51,233,251,253,169,52,215,21,239,18,135,192,160,62,9,33,79,220,35,91,150,185,20,188,179,93,142,82,207,14,142,130,215,197,67,160,169,219,31,45,88,158,88,228,179,206,249,255,29,239,128,159,178,221,190,172,123,86,119,45,3,80,80,119,161,39,230,247,199,209,125,111,49,217,115,115,106,94,18,102,2,120,221,214,170,218,99,99,159,8,101,172,199,118,236,230,110,226,107,176,217,212,174,19,249,178,94,21,186,231,206,222,183,102,153,167,87,126,134,170,196,250,74,66,163,5,131,240,221,67,134,129,1,164,43,83,240,206,88,225,212,7,213,214,219,148,202,204,176,33,25,39,126,152,114,133,193,240,251,232,32,76,67,44,197,176,140,130,254,168,174,216,116,169,156,30,49,6,8,197,95,129,57,172,10,128,213,20,86,159,18,203,251,160,124,80,200,6,223,162,207,118,65,97,137,159,213,155,194,81,17,100,0,220,183,169,210,53,186,138,122,38,105,15,242,214,108,219,62,246,69,247,153,44,106,185,38,21,125,67,75,74,111,197,37,10,206,65,163,233,174,91,184,101,214,147,236,130,44,96,19,30,32,84,243,72,143,45,0,121,97,101,193,6,7,206,121,179,57,110,247,96,107,213,182,123,204,232,74,247,120,254,73,144,104,25,221,179,39,72,102,95,120,69,193,202,114,76,226,41,110,0,90,49,213,126,143,208,232,243,91,229,205,43,66,238,69,89,148,22,241,197,39,14,237,233,45,151,73,133,249,140,95,215,1,200,70,71,213,125,54,104,203,41,85,250,94,149,75,99,132,155,248,166,251,46,20,23,196,1,86,100,91,216,216,0,120,180,15,208,149,115,255,25,40,194,33,16,198,170,13,30,226,35,132,89,135,145,135,62,129,140,205,6,91,67,180,115,200,169,48,152,176,106,151,182,233,66,189,16,34,70,186,85,187,59,199,170,250,117,142,247,194,109,151,219,80,142,31,216,236,183,32,87,165,173,202,180,33,214,125,35,195,86,152,25,35,175,222,231,118,146,26,249,184,119,178,98,108,1,162,134,163,65,157,4,173,2,96,84,179,199,193,141,40,24,51,204,202,78,24,214,34,94,44,88,77,119,120,252,217,50,135,207,239,96,180,201,1,34,8,178,196,184,100,168,165,163,168,138,232,122,154,172,72,54,176,60,120,214,82,17,125,205,19,28,219,184,255,105,156,106,109,134,196,253,213,47,105,117,74,48,105,159,54,129,192,134,180,9,140,139,109,191,5,19,210,65,93,190,95,19,210,123,23,81,201,193,133,110,174,102,46,221,208,42,74,143,7,75,104,21,197,104,236,72,206,114,175,38,193,36,149,218,105,31,237,252,9,105,25,0,113,135,176,251,75,154,236,3,147,42,36,93,88,130,53,15,111,68,166,16,56,226,223,36,226,176,59,130,105,202,204,76,110,215,29,12,191,130,44,6,174,206,50,206,102,244,238,29,210,228,170,41,72,183,156,51,207,107,157,47,138,98,59,62,64,146,15,115,243,204,166,235,34,31,155,216,177,7,68,66,235,24,210,89,85,167,218,64,179,218,167,254,2,2,72,146,0,255,150,136,11,176,174,144,12,93,78,72,98,105,213,192,240,78,144,69,32,236,84,32,121,130,214,217,252,94,136,218,179,127,245,144,21,40,10,130,126,138,190,206,44,140,246,104,93,39,245,68,242,118,143,123,210,252,101,176,151,33,128,246,141,83,24,44,175,115,15,126,14,46,31,64,132,214,229,51,142,39,139,228,44,116,199,205,94,245,108,198,166,70,238,38,134,51,119,203,162,87,173,248,165,13,214,94,111,142,222,47,70,171,27,207,3,223,190,212,178,34,65,76,19,128,102,134,116,69,231,23,206,184,167,1,142,68,40,2,162,200,139,167,64,74,52,247,66,28,208,173,85,161,46,127,155,221,82,178,20,30,113,71,1,20,125,240,36,132,200,186,61,130,254,152,170,163,236,78,186,162,3,253,248,44,26,64,145,34,27,238,16,244,10,244,210,253,173,81,222,173,71,239,7,69,166,14,17,130,120,175,178,179,154,92,229,131,198,69,87,70,144,178,79,66,15,167,225,251,235,99,191,141,33,8,238,245,5,69,29,218,96,163,66,216,0,161,35,132,15,73,218,37,73,92,204,14,70,123,170,55,192,109,145,219,68,67,236,13,39,64,70,17,241,17,228,51,49,47,114,184,172,118,247,254,167,54,94,122,71,128,237,51,66,56,217,21,250,178,184,187,251,151,99,27,126,124,251,242,238,247,59,113,127,183,188,219,196,210,69,29,171,169,9,170,114,199,101,128,70,166,173,34,55,81,38,177,121,158,48,162,149,5,190,64,219,29,32,58,244,208,70,39,73,108,149,229,15,16,234,246,62,78,52,41,76,202,254,75,244,224,6,218,126,127,193,249,6,234,230,24,234,130,138,51,172,65,39,202,237,168,246,60,232,234,88,34,153,230,43,129,192,217,54,3,225,32,110,144,22,56,87,92,21,80,29,215,110,119,1,113,192,58,180,85,17,212,37,233,93,85,28,37,36,126,237,254,13,65,78,20,168,179,64,164,9,79,227,197,49,51,136,177,164,200,117,71,77,217,56,23,94,95,125,14,215,194,155,114,116,7,114,92,67,43,35,148,8,237,253,7,173,17,67,232,210,36,172,26,7,205,47,202,117,64,16,40,148,29,200,212,226,152,54,96,111,116,141,74,34,209,40,88,140,37,131,62,150,105,176,98,189,14,179,91,172,129,42,30,194,34,10,71,161,203,90,245,216,240,60,184,60,139,238,125,55,251,45,171,217,161,76,181,27,169,228,224,67,122,234,69,178,180,213,1,197,124,83,140,207,42,5,58,64,132,64,114,208,106,121,110,30,91,55,203,80,192,87,193,24,75,255,25,44,150,35,169,122,135,35,83,133,204,160,74,27,178,254,224,97,161,43,106,130,133,117,144,156,1,192,149,78,128,13,224,72,224,13,21,42,209,109,132,128,144,178,59,4,160,193,10,178,115,40,27,66,104,188,5,32,26,48,60,3,2,32,47,18,64,50,44,91,23,108,54,93,38,81,136,150,72,62,235,88,184,78,144,235,64,136,33,246,203,143,74,176,231,159,65,39,166,45,22,192,50,41,51,107,15,139,19,60,234,137,10,192,132,210,17,92,66,117,187,240,8,14,55,146,233,101,252,164,212,217,59,211,253,194,229,136,93,19,235,69,29,88,73,60,224,128,89,232,29,79,125,35,40,167,163,200,180,243,224,40,176,129,217,130,248,48,87,20,176,97,251,101,123,110,5,45,173,20,134,135,82,57,95,245,41,210,54,217,102,14,59,38,12,167,158,135,140,93,5,196,118,99,40,197,49,220,66,104,43,167,245,83,48,38,175,80,21,215,166,129,187,205,167,246,191,219,120,125,16,115,184,126,1,29,183,196,62,98,9,142,113,4,220,197,179,160,128,79,121,102,22,114,60,207,22,45,231,132,101,46,130,75,184,110,121,236,139,243,18,227,53,91,141,43,33,62,5,104,167,23,183,81,180,246,206,119,73,47,27,84,50,114,158,2,160,128,93,121,158,230,57,152,84,83,172,80,177,73,197,64,3,6,27,241,96,199,167,35,86,238,25,254,16,20,209,41,188,121,208,106,65,73,134,32,123,213,135,105,60,212,55,48,210,246,2,187,93,75,201,152,96,22,188,19,66,202,223,52,70,189,18,219,29,92,146,156,56,149,149,94,244,4,47,144,244,160,87,163,160,220,42,37,58,245,157,199,55,118,216,143,230,196,222,77,198,175,105,184,68,105,153,155,159,141,206,15,185,197,228,56,144,169,90,4,131,91,103,9,114,205,186,151,157,21,153,162,129,30,0,34,227,157,236,232,42,84,189,232,145,182,177,61,182,25,6,58,141,23,250,189,102,144,7,209,145,50,129,66,225,148,14,6,152,34,114,44,46,15,28,164,213,112,136,100,48,205,163,98,128,175,17,86,135,184,31,156,16,163,1,237,221,13,223,47,61,196,65,235,209,10,6,235,229,23,21,171,165,120,77,175,117,189,112,35,150,49,192,151,93,17,161,162,69,108,184,14,0,221,134,202,3,64,136,153,22,11,1,158,194,70,172,53,0,141,109,167,181,46,14,48,102,53,17,63,24,31,112,33,135,111,177,36,116,78,101,2,169,244,6,182,88,230,155,108,135,221,113,40,68,204,51,163,73,143,33,142,233,232,203,147,86,70,9,4,25,47,238,120,78,24,176,75,195,84,3,165,215,168,197,180,63,30,164,118,190,85,236,247,50,90,179,123,44,192,40,228,232,36,149,46,198,173,64,200,110,146,147,129,31,55,201,76,190,121,66,66,171,25,82,236,208,100,43,42,95,107,219,167,107,20,116,88,10,67,77,50,184,4,37,172,130,233,52,35,167,59,121,245,170,160,201,93,0,25,1,179,110,117,92,145,47,163,27,188,46,197,92,9,45,29,4,89,39,156,63,92,105,99,128,20,0,61,6,120,98,159,61,93,168,115,71,197,31,40,123,228,184,118,159,34,21,6,155,20,221,19,205,170,188,54,39,115,117,185,85,154,13,132,135,36,1,44,55,181,86,134,140,72,108,96,213,203,225,17,38,121,114,148,156,229,39,217,189,36,51,186,35,89,157,86,239,186,149,81,37,235,70,146,51,221,201,94,184,253,111,181,52,189,21,77,219,238,245,37,190,232,6,199,198,123,74,151,49,15,22,204,88,109,141,238,116,212,193,216,26,219,202,184,18,102,65,73,73,242,124,207,181,60,172,135,196,88,77,131,180,43,14,17,24,210,211,120,65,67,168,115,29,72,134,48,106,18,65,94,17,140,20,198,80,175,196,113,224,208,210,7,51,33,195,90,188,190,42,136,47,144,29,123,154,148,205,197,216,100,88,128,254,128,179,159,134,177,67,21,201,118,252,190,107,185,34,63,174,116,2,63,235,88,58,91,128,72,67,147,34,139,104,220,154,2,58,202,102,31,137,150,52,22,157,192,234,195,72,228,32,217,225,169,135,20,107,92,45,22,35,193,248,53,246,235,97,179,64,43,212,138,113,206,44,0,100,205,39,232,50,184,72,138,126,1,123,237,86,173,63,173,89,69,208,243,236,155,176,114,140,144,249,181,98,36,142,75,58,78,98,89,141,227,69,220,42,67,176,223,174,239,105,180,165,72,131,177,18,94,31,180,10,156,87,241,102,142,57,168,3,208,43,30,227,219,90,127,157,129,88,153,144,189,133,25,135,77,86,82,51,204,145,190,100,3,8,216,213,34,195,155,152,229,8,177,192,110,231,237,122,202,236,87,100,103,32,74,57,99,232,109,164,63,90,21,51,80,67,213,204,24,119,173,32,112,51,60,15,100,184,43,209,94,136,124,192,109,61,75,30,153,2,240,74,248,162,241,177,48,251,187,102,184,158,39,59,182,45,233,143,4,226,196,155,9,132,31,88,143,52,189,36,150,128,10,228,245,164,75,93,10,69,151,75,113,216,54,156,192,77,113,185,186,148,209,113,98,218,154,224,132,144,121,219,10,73,15,100,141,73,248,152,19,109,177,15,145,231,242,11,242,179,225,11,134,232,5,244,220,114,158,196,114,125,81,77,148,184,65,71,100,185,182,9,200,205,96,25,143,100,159,53,228,239,40,232,4,82,141,23,153,84,211,36,58,56,249,72,238,83,192,25,118,178,79,40,153,4,118,241,72,129,117,122,238,165,50,156,180,123,7,134,74,38,205,46,111,160,209,203,138,66,94,222,8,132,146,64,112,129,150,147,140,8,4,196,205,54,226,164,22,207,180,61,99,119,188,223,73,7,145,19,171,3,220,218,104,144,243,152,69,18,158,89,27,39,41,202,180,67,93,98,241,159,73,153,6,38,207,205,69,132,180,202,136,214,37,242,164,142,193,200,59,99,206,166,202,191,212,1,70,140,247,71,224,129,185,38,48,234,188,96,251,1,170,62,105,26,110,149,83,56,120,129,223,209,34,203,21,49,66,1,32,144,82,35,7,166,244,213,126,106,132,188,91,237,230,56,35,78,164,126,123,30,22,106,167,138,53,122,238,233,57,108,39,101,155,5,28,186,10,82,125,103,242,48,100,223,147,89,79,136,157,56,108,4,102,102,191,58,112,57,105,141,67,221,62,116,230,9,181,134,105,180,11,85,108,242,160,44,24,34,163,86,191,115,174,44,62,120,3,178,195,140,1,73,161,203,251,159,139,248,55,52,194,161,149,237,94,123,25,186,234,232,116,100,225,6,63,242,144,215,104,210,129,30,96,201,130,53,232,162,36,96,133,5,143,21,14,109,60,102,89,249,206,203,128,145,180,227,37,162,192,138,136,166,198,208,22,137,203,40,129,249,24,75,129,209,22,65,48,134,141,213,80,161,28,16,230,33,171,33,81,32,61,16,210,220,110,16,175,64,228,239,151,157,236,128,190,245,67,236,153,76,68,129,9,56,176,17,9,68,132,170,21,138,103,240,212,201,122,144,201,80,83,115,71,239,29,63,112,7,212,41,189,147,62,209,70,116,243,102,133,128,133,59,54,111,4,1,47,113,120,169,164,242,33,5,211,209,172,81,147,253,207,40,137,129,49,41,0,153,254,110,129,24,164,5,182,64,172,187,48,142,37,21,38,97,133,79,47,160,226,214,53,96,11,81,200,219,253,4,205,113,42,175,32,228,135,208,17,146,127,174,99,128,253,76,114,244,50,248,39,110,43,39,195,162,54,142,73,68,81,114,173,46,176,74,124,48,171,50,73,185,88,148,32,42,227,133,224,141,236,247,250,202,42,248,226,118,123,156,240,120,19,224,214,20,219,220,164,200,132,66,151,94,249,70,76,250,110,189,148,33,207,122,193,23,190,203,56,168,23,185,24,57,198,148,98,228,33,188,124,166,230,200,251,45,247,185,172,119,92,25,21,188,209,65,217,36,138,172,6,90,45,12,121,115,4,48,8,205,179,246,27,111,225,49,38,160,40,16,0,70,57,69,84,217,5,239,33,153,198,226,162,205,106,231,207,98,33,154,169,32,145,237,196,15,238,196,251,32,53,99,243,180,70,81,53,128,46,21,90,170,30,132,162,153,96,53,93,167,225,70,11,99,202,169,17,134,190,222,62,112,70,182,17,229,34,76,233,171,229,30,148,139,46,68,39,35,90,89,217,203,72,74,71,67,221,118,65,62,95,8,201,110,63,93,184,102,20,208,57,233,136,79,19,18,234,48,51,192,93,141,52,48,6,241,25,97,224,150,223,51,23,79,136,33,135,157,156,132,33,137,121,252,140,225,140,18,234,40,108,123,30,161,128,10,5,113,112,173,247,171,156,143,79,93,200,232,36,64,221,199,88,163,87,138,246,32,135,221,238,46,32,191,243,187,3,146,176,81,142,231,74,16,148,3,137,65,130,36,183,155,189,91,198,22,220,20,42,16,169,5,136,74,203,145,59,64,101,95,21,241,188,127,147,98,166,35,187,129,222,76,131,252,119,212,204,19,24,47,26,132,167,36,52,19,167,45,196,34,186,213,245,69,111,241,204,254,210,250,252,45,230,97,231,48,65,52,66,145,224,4,82,238,76,242,21,186,182,58,76,93,197,238,178,211,142,87,3,23,2,1,94,236,195,93,64,151,157,119,186,69,218,133,82,102,235,20,4,85,137,246,8,190,17,29,36,210,51,80,131,204,0,179,30,141,200,57,201,90,80,56,115,55,224,62,177,9,74,81,213,229,88,123,249,88,91,61,230,14,129,107,223,116,45,167,106,136,182,255,3,217,20,214,126,75,64,196,249,66,179,43,2,166,225,68,101,64,201,101,215,192,0,144,38,190,59,128,212,153,1,19,192,194,42,153,52,110,202,247,232,122,189,13,23,135,9,144,131,94,56,244,76,129,8,82,45,0,174,138,115,95,19,83,42,92,107,241,113,35,74,106,205,99,83,56,192,99,196,216,2,178,49,14,18,199,30,18,86,21,32,247,18,209,35,180,15,211,85,203,155,100,29,190,241,235,236,101,228,213,166,122,16,45,79,49,135,147,40,12,120,7,106,68,210,226,169,84,39,53,77,64,48,153,151,166,49,100,252,213,29,217,25,205,150,30,66,81,219,120,212,77,84,30,87,43,232,112,159,13,72,141,238,101,194,236,110,152,223,156,189,79,35,254,229,225,48,38,13,119,46,213,41,140,15,234,77,89,12,84,250,115,104,25,65,102,208,110,107,46,22,40,92,69,191,210,193,118,248,61,179,27,171,54,255,26,53,244,214,228,163,221,176,45,23,59,99,8,46,101,210,134,108,196,96,151,74,31,132,188,19,198,115,174,98,102,224,253,83,178,79,17,155,199,71,196,252,217,211,103,83,157,221,171,227,237,8,128,37,18,154,138,104,42,227,136,144,166,81,23,100,204,145,58,79,15,61,205,140,40,171,34,191,134,52,107,186,125,69,219,29,249,119,12,34,232,212,97,120,120,14,130,195,50,217,3,101,185,99,192,66,21,155,141,184,48,48,233,11,54,110,24,189,19,5,20,238,222,255,181,54,104,191,154,241,178,242,134,6,89,6,200,234,110,19,235,102,121,172,246,50,30,46,106,61,169,88,138,251,239,252,172,43,155,57,240,0,244,159,5,112,111,127,151,79,122,153,113,113,144,105,28,143,50,201,37,254,97,231,16,76,238,201,159,22,59,191,246,175,198,191,232,150,109,28,100,142,71,190,216,54,108,7,190,123,51,60,28,61,207,23,136,66,64,54,44,85,201,218,20,46,131,107,253,118,213,177,45,95,190,184,155,80,56,210,30,206,86,36,16,59,110,172,121,118,196,211,61,203,215,66,129,23,27,140,92,17,9,30,117,160,53,199,121,39,39,52,64,200,199,184,200,3,94,132,49,244,62,54,166,22,183,138,217,109,248,70,4,71,110,195,42,181,118,158,184,246,97,94,204,2,124,5,129,229,70,23,145,142,69,224,230,234,49,116,29,14,46,24,191,155,161,90,132,171,181,42,42,217,79,9,230,32,156,242,229,139,13,49,43,91,133,140,161,90,123,27,204,216,175,87,48,164,112,224,128,9,30,81,20,30,5,156,246,254,167,101,42,107,89,252,242,138,71,255,201,183,2,218,186,78,250,173,128,99,242,102,150,101,114,86,150,223,66,218,11,50,4,188,223,180,23,223,95,10,120,163,175,47,135,99,107,136,99,249,213,72,86,94,249,82,192,17,63,131,241,250,142,191,191,20,240,198,47,5,144,124,217,222,188,125,152,95,61,215,249,216,243,49,207,203,193,233,233,115,217,202,54,47,203,177,108,73,82,249,167,125,94,246,109,173,107,229,92,234,167,160,147,210,89,42,29,101,219,56,187,61,241,226,246,18,239,163,206,215,229,172,153,75,77,144,27,255,100,72,235,154,83,78,91,45,242,126,65,94,183,115,36,107,41,105,12,169,165,119,47,41,175,107,202,156,11,159,124,169,199,135,252,56,125,255,188,47,251,90,203,178,141,236,248,243,118,142,104,62,102,157,210,191,44,39,252,168,243,174,50,203,159,32,147,93,159,228,146,187,253,243,65,223,251,125,200,103,199,115,25,83,60,89,250,113,28,103,23,53,151,156,142,145,233,126,158,183,53,157,115,222,207,191,32,139,255,177,173,186,62,123,179,247,103,150,253,28,116,157,231,125,222,118,78,200,255,234,185,231,19,56,48,134,47,158,238,79,188,212,112,110,121,206,251,186,152,29,175,203,182,100,245,112,196,185,225,101,219,247,180,11,94,158,35,201,91,206,176,103,119,79,121,223,240,244,249,168,190,239,123,222,101,50,175,194,244,222,121,121,229,115,2,254,128,126,91,201,171,72,124,63,196,148,218,165,113,201,81,124,255,220,135,186,76,161,0,252,104,250,193,41,29,196,250,43,47,204,117,37,154,67,229,68,167,62,232,202,67,107,179,199,167,21,169,77,185,33,235,216,143,22,22,192,117,251,171,239,61,195,50,197,38,12,5,97,69,85,253,14,32,241,124,247,201,26,143,113,169,186,55,58,116,155,141,238,228,83,242,44,54,170,140,133,217,63,160,82,212,163,17,110,42,201,104,237,235,217,67,19,247,254,49,180,65,178,232,29,90,121,130,39,199,111,188,94,100,255,201,253,119,86,92,251,168,215,241,254,130,40,93,43,63,192,80,108,173,202,81,221,186,229,103,21,35,191,206,221,112,123,64,154,243,181,175,41,196,28,16,96,25,144,89,3,186,197,238,144,57,178,163,154,223,253,237,24,37,9,26,111,7,71,144,84,154,140,13,154,121,105,229,120,13,212,42,149,96,45,41,158,104,239,123,189,198,71,196,108,163,223,102,133,5,1,150,104,44,10,208,76,161,161,67,82,141,196,26,203,195,131,160,247,176,239,124,91,129,32,63,219,83,234,35,159,83,165,63,230,110,171,211,10,228,49,20,77,209,32,27,236,155,242,185,210,174,51,214,36,206,99,59,190,187,159,66,92,105,68,243,208,1,192,177,45,210,220,42,144,113,51,200,100,64,82,113,239,108,245,197,91,183,209,59,200,92,14,2,120,200,218,176,171,9,220,100,52,108,255,86,227,51,158,134,210,12,20,77,141,120,29,178,244,1,105,92,249,144,29,170,36,121,58,157,139,221,65,223,186,173,225,20,108,167,119,110,107,120,231,167,175,14,51,219,136,105,169,42,90,101,176,56,176,114,243,193,144,123,103,147,152,25,225,27,174,174,37,104,164,27,173,217,91,76,153,121,96,16,197,143,139,174,47,245,4,16,227,216,50,0,35,64,143,113,4,145,223,12,183,33,157,77,147,40,79,67,86,129,16,255,228,112,84,90,24,114,233,225,133,120,146,148,231,197,142,141,109,196,45,79,141,252,21,221,36,216,205,26,217,141,8,118,42,76,248,33,191,2,165,156,213,87,223,130,2,63,79,66,72,139,236,143,208,229,202,75,7,23,21,112,192,233,98,29,244,106,69,235,233,23,124,88,112,89,220,37,91,177,52,49,130,254,101,15,229,37,227,145,169,136,121,124,223,9,136,248,165,139,3,120,29,80,156,153,208,65,226,5,198,105,181,229,106,2,195,139,33,192,246,76,4,199,198,159,45,191,202,110,35,112,167,178,204,146,226,214,160,211,248,204,232,185,132,115,29,43,113,181,90,193,138,106,100,191,204,94,243,20,83,171,108,44,23,158,70,184,172,153,26,77,69,113,181,242,155,224,106,243,244,157,171,253,93,186,247,65,78,229,3,124,92,164,25,236,224,80,218,57,222,78,72,121,59,4,240,250,214,141,132,127,12,236,227,92,211,152,164,108,27,9,207,4,198,163,0,0,169,76,144,234,138,229,76,140,47,36,61,77,30,244,202,244,34,60,37,206,183,243,67,123,3,220,238,164,65,238,2,169,6,34,25,208,48,71,33,16,130,78,51,250,247,1,20,3,93,214,100,168,81,141,200,189,145,29,96,148,0,78,50,164,12,237,27,75,97,114,75,162,231,165,67,10,247,186,192,183,242,30,46,172,254,85,183,27,176,62,116,129,138,31,188,199,248,184,89,86,72,152,36,103,114,99,21,151,61,139,108,178,33,237,111,103,31,44,208,120,82,84,143,15,0,192,45,236,32,210,105,235,0,140,132,228,4,33,5,144,21,90,2,213,14,154,165,33,198,165,21,218,38,208,192,241,253,3,46,223,29,210,95,21,64,20,223,56,237,233,112,148,175,236,194,239,241,234,28,120,204,140,69,32,172,75,207,156,21,176,7,84,207,125,20,120,137,177,143,2,164,68,52,17,23,89,125,201,34,194,161,0,227,70,52,96,38,34,189,92,202,184,13,190,102,15,6,92,95,50,168,144,100,107,229,172,28,100,55,128,157,37,171,201,46,144,246,79,120,154,179,191,109,0,207,93,16,138,68,144,98,32,242,60,155,26,11,157,117,62,128,42,211,29,137,75,112,53,232,176,32,83,51,245,125,167,205,22,50,184,142,48,130,89,64,227,218,23,80,189,100,118,228,142,142,211,32,13,197,55,159,0,247,48,104,175,142,139,105,112,98,121,248,152,184,147,98,36,50,130,168,177,234,139,45,0,194,62,233,86,121,139,40,194,203,237,157,164,64,208,22,229,77,201,160,34,80,212,130,78,114,220,133,83,149,167,41,11,68,69,180,48,185,238,251,190,65,35,197,64,112,128,13,181,154,245,169,53,152,227,11,201,142,222,176,189,25,140,104,57,179,145,173,65,40,85,253,33,97,75,124,18,59,165,200,20,94,8,54,209,92,152,20,102,129,144,61,59,67,33,126,139,108,144,177,204,124,236,144,225,45,212,253,216,248,128,30,6,52,19,230,153,104,82,139,32,96,129,121,174,216,63,91,43,43,128,12,36,141,66,179,128,214,5,14,1,143,188,247,87,164,169,213,172,138,30,84,39,44,158,2,92,17,137,213,65,198,161,237,210,204,129,132,254,104,224,69,0,11,225,242,32,89,252,54,12,4,213,168,118,250,161,200,124,199,64,236,99,164,64,136,196,79,59,130,167,245,160,104,180,1,216,89,243,12,32,0,162,136,182,85,218,233,73,151,32,186,44,81,100,33,24,240,50,55,181,1,8,198,173,45,254,248,202,84,26,92,68,34,212,137,239,87,68,42,37,166,57,81,46,146,247,66,177,144,184,220,88,185,117,200,55,66,193,214,17,214,5,32,42,149,92,151,56,174,125,192,96,168,156,161,59,225,10,226,66,16,13,230,114,64,131,189,212,166,133,187,72,252,67,86,227,37,72,50,171,99,192,239,104,64,101,82,81,33,181,212,15,95,24,168,210,30,230,103,2,158,183,6,176,43,166,199,204,101,18,30,163,56,4,230,127,215,171,68,11,103,121,23,115,160,106,1,186,245,23,216,20,114,51,136,13,37,241,23,19,5,73,24,31,206,37,74,187,239,45,91,35,179,196,40,85,1,160,58,99,130,71,195,65,35,219,72,103,1,87,164,57,194,176,0,72,6,155,166,18,203,15,156,193,27,47,160,179,0,209,255,77,134,193,241,235,62,166,218,81,233,96,12,36,220,231,16,205,89,64,108,105,196,83,51,4,11,219,110,97,18,78,154,13,30,63,39,235,152,41,37,216,102,144,46,7,4,22,199,36,187,187,85,71,6,43,209,60,40,210,22,121,5,51,216,202,146,34,243,217,50,233,212,113,59,147,105,20,198,58,100,133,137,29,14,178,27,226,170,102,149,0,35,178,216,43,73,212,206,130,141,221,239,168,111,53,172,4,131,176,238,76,76,105,128,184,109,204,39,160,251,107,195,123,156,35,57,148,83,214,190,116,226,87,31,81,181,219,36,66,3,60,193,40,153,203,5,130,196,193,8,13,32,14,176,238,5,242,64,32,127,120,33,37,144,100,0,45,149,220,180,163,76,100,213,70,39,73,69,226,86,32,148,149,161,216,206,2,10,228,59,88,220,212,183,158,105,175,136,138,51,147,109,38,104,128,32,132,47,68,183,19,212,225,67,155,5,228,2,130,115,97,242,80,1,2,39,187,0,18,225,89,206,114,23,120,150,246,217,218,188,225,208,113,58,13,239,41,4,89,8,237,62,172,184,66,215,14,14,75,30,68,252,24,165,136,245,9,71,22,49,43,16,87,34,110,30,48,253,72,54,8,68,8,33,88,187,7,129,166,231,148,191,64,69,220,209,248,115,73,106,35,138,60,17,201,14,9,186,39,249,200,16,12,195,136,168,48,195,58,168,4,32,179,64,90,239,245,203,61,44,31,135,64,152,21,128,8,16,136,19,20,201,142,218,235,234,65,190,169,128,155,122,150,139,124,25,221,30,124,33,78,50,51,161,13,204,139,0,145,160,16,137,19,124,60,146,107,173,104,243,29,141,29,102,232,148,253,151,228,35,16,162,22,179,97,163,8,102,193,225,13,243,154,126,85,186,181,219,159,216,136,226,44,38,131,200,204,2,65,65,244,66,84,165,117,70,65,186,116,144,4,187,204,120,179,154,69,108,149,155,134,226,24,48,169,45,121,203,102,128,80,95,82,106,101,250,83,1,68,210,35,74,52,124,103,100,248,75,55,78,45,73,204,5,208,160,83,63,39,80,132,58,157,87,252,186,17,176,58,200,44,128,238,210,43,2,232,35,5,76,218,205,247,16,102,102,15,90,61,4,58,135,89,144,212,150,59,100,208,165,202,50,80,94,96,43,144,180,145,176,134,41,35,169,39,155,68,82,103,79,234,25,75,208,157,214,221,181,0,232,166,70,144,5,201,195,91,161,76,23,15,1,87,232,182,24,26,225,25,36,184,2,211,188,255,235,153,167,84,2,97,39,15,37,54,1,140,201,240,16,128,32,27,5,20,163,131,8,178,205,14,244,142,12,84,116,140,154,138,206,22,44,76,80,200,250,73,65,235,55,31,65,62,96,199,216,188,6,242,102,110,111,10,15,236,229,129,85,61,176,189,199,22,122,234,176,216,97,107,59,82,96,110,10,132,73,220,133,22,143,239,108,244,251,88,239,62,93,94,34,137,241,236,11,68,1,168,244,53,188,40,227,162,34,88,236,133,45,104,11,191,134,176,229,80,57,9,244,248,134,79,92,61,17,74,212,134,18,161,16,35,194,4,195,35,182,125,16,77,9,214,98,118,71,214,6,168,117,97,242,23,8,142,164,155,211,140,13,206,219,242,157,129,205,153,224,118,14,30,244,118,59,128,64,71,24,52,161,89,78,104,214,152,138,230,191,17,103,10,216,23,54,175,122,68,238,20,154,100,58,125,27,242,41,233,131,24,128,51,18,116,76,194,192,160,115,166,88,48,15,170,35,183,243,24,144,144,206,202,21,109,190,236,40,155,233,89,96,192,39,21,51,13,152,173,230,198,106,165,224,197,147,11,235,129,21,124,3,233,56,114,131,4,190,18,180,50,68,118,8,109,169,40,193,144,200,153,224,37,177,88,98,139,36,59,180,39,69,22,39,101,146,66,121,116,214,124,13,135,160,134,165,44,78,90,44,141,36,215,80,182,213,102,169,106,155,53,93,37,89,222,132,210,13,5,22,37,160,203,152,168,148,85,2,52,60,172,99,192,3,180,112,26,53,80,182,6,82,83,9,74,22,231,228,219,192,115,5,182,34,111,121,217,248,118,42,90,200,58,245,173,52,11,18,102,160,17,234,28,32,61,79,245,97,90,149,132,172,163,8,47,141,44,29,5,18,57,153,196,74,45,147,182,61,21,206,0,136,161,5,237,138,1,62,92,99,28,112,222,5,70,19,223,148,192,36,99,97,7,38,173,145,204,207,219,180,34,195,151,84,35,163,150,243,236,105,187,147,2,233,71,72,157,21,43,240,9,234,246,163,80,21,216,224,219,48,148,176,63,142,29,115,124,28,59,176,82,186,194,133,63,7,166,80,18,207,92,41,181,64,63,232,194,47,108,192,66,16,211,224,98,30,116,230,80,21,48,65,20,53,10,171,224,219,21,24,95,109,131,81,124,192,138,13,105,25,198,89,64,50,62,3,2,73,212,23,94,77,217,24,38,88,7,70,65,18,121,216,88,145,97,52,199,56,253,7,236,18,210,13,246,30,17,108,118,176,145,251,63,169,211,51,202,1,94,147,169,200,234,15,124,217,130,232,81,94,96,100,138,70,29,202,4,50,211,70,162,169,132,140,120,168,172,209,127,208,122,229,162,139,92,244,131,139,143,216,70,226,197,101,64,72,253,0,113,155,168,27,136,89,45,59,227,56,91,170,159,68,56,159,132,111,103,194,96,90,189,246,151,120,149,32,211,67,16,86,165,221,122,145,227,207,248,6,185,165,200,135,136,198,187,208,192,167,76,128,44,55,80,9,136,64,131,42,196,255,9,221,248,20,246,216,76,80,183,233,98,12,108,87,251,222,160,155,9,132,178,131,146,2,237,176,189,36,166,89,35,227,172,29,172,198,229,27,249,133,71,142,104,73,54,81,100,116,102,239,26,50,180,72,134,166,29,196,241,11,89,196,250,97,250,229,59,33,16,12,69,9,29,4,141,136,157,29,3,160,124,16,84,198,64,34,37,242,66,217,228,49,149,0,54,92,34,142,37,122,93,63,52,8,240,49,17,8,45,180,32,234,76,44,159,204,135,139,57,70,177,232,141,104,224,100,119,148,238,137,159,84,25,25,227,164,122,242,216,51,116,203,243,113,5,198,118,83,210,153,118,87,227,218,69,131,54,130,153,65,124,228,115,29,194,115,19,88,200,58,112,64,5,218,72,244,59,120,131,126,96,247,215,221,147,23,3,57,9,53,54,46,192,65,99,4,2,183,137,245,71,68,94,139,208,185,129,61,146,92,16,68,88,4,7,119,210,135,219,156,126,38,254,42,232,213,25,218,156,41,206,91,235,172,69,207,69,123,232,241,38,233,9,238,61,89,226,6,136,22,89,31,181,125,146,25,93,223,45,52,207,19,161,69,183,186,55,137,70,134,83,167,88,22,11,32,242,6,202,168,151,252,189,126,16,104,17,90,215,136,181,17,17,185,65,134,77,106,115,233,209,134,205,236,102,18,75,102,28,95,146,59,72,57,53,122,49,30,205,112,134,160,123,212,248,65,2,144,247,169,68,142,23,170,24,196,18,238,166,117,61,198,32,44,70,205,46,193,206,194,78,155,88,157,32,210,229,229,80,143,197,181,165,60,14,139,153,243,149,231,66,57,60,2,199,79,224,30,10,156,72,135,244,214,55,10,198,200,141,84,196,80,42,224,188,78,213,13,7,150,16,236,194,5,22,166,162,145,37,50,48,79,198,8,125,105,168,6,128,13,117,240,225,16,81,200,196,69,88,133,214,167,139,158,133,154,87,130,229,174,222,114,161,98,81,141,101,63,180,99,89,142,171,217,114,196,182,145,173,95,242,126,28,31,105,183,94,157,7,149,63,52,9,160,205,128,170,120,195,194,181,138,236,32,224,238,110,67,65,31,12,140,174,13,189,97,234,222,239,70,181,21,140,92,10,129,175,160,56,136,61,51,145,172,16,178,244,200,227,31,185,34,112,20,196,178,180,240,60,25,209,218,9,223,129,128,238,104,180,39,228,129,101,74,91,95,192,58,83,240,119,96,14,22,41,236,198,68,254,51,207,250,3,241,128,167,210,64,143,159,38,9,229,32,82,187,125,120,140,18,235,35,169,90,73,223,129,51,72,123,139,104,31,173,75,41,218,237,24,43,130,112,17,31,83,2,243,107,199,161,71,13,181,29,81,249,225,84,206,59,175,185,123,253,62,52,3,68,246,130,200,174,64,73,21,51,218,176,51,119,129,150,125,133,84,4,227,108,229,232,250,246,198,21,194,8,87,239,64,61,130,32,96,129,225,16,35,117,13,148,86,195,206,146,22,232,254,167,143,121,22,61,33,88,215,120,33,188,33,70,219,107,98,139,14,218,124,168,33,48,12,69,150,35,99,92,194,5,80,38,40,191,146,209,122,251,125,9,182,47,222,101,181,8,13,39,155,170,212,18,149,230,61,62,168,145,245,39,54,18,69,198,36,111,116,138,80,220,239,115,140,13,1,206,116,8,250,42,40,17,204,32,173,149,197,88,48,163,69,23,200,236,53,51,246,13,108,174,169,29,197,27,94,9,229,171,152,132,108,118,8,221,24,132,24,208,108,171,233,117,22,138,209,77,30,23,60,49,50,196,133,27,230,186,243,99,138,198,93,23,3,26,45,161,154,71,129,164,2,96,188,69,247,215,74,176,85,64,172,176,161,136,210,119,161,10,196,69,199,71,119,43,131,11,152,238,146,166,94,42,194,237,23,46,44,33,168,67,34,237,4,215,29,27,107,59,37,217,92,122,14,192,96,3,163,85,87,56,69,158,44,22,19,116,9,127,159,9,0,86,193,161,149,196,17,167,197,195,2,173,207,43,135,126,167,130,237,12,55,61,194,13,131,64,1,146,5,168,168,86,238,254,99,237,172,190,45,90,91,250,240,69,52,179,76,102,45,95,92,109,199,148,129,18,132,228,194,95,93,245,87,37,66,61,83,6,169,70,29,221,59,208,1,114,29,226,85,81,115,127,0,91,107,240,251,15,157,233,149,216,196,26,240,39,235,104,49,247,103,51,140,229,54,174,216,250,91,184,230,162,174,190,202,251,2,193,182,100,221,147,254,128,63,68,76,36,144,78,188,8,3,147,111,35,239,49,201,77,212,91,47,112,45,60,74,254,196,5,7,211,159,221,11,93,188,122,211,128,164,82,183,74,63,216,4,10,64,102,101,150,114,49,170,81,32,171,50,243,132,134,32,177,19,5,84,229,254,103,109,187,212,211,96,52,117,33,60,172,206,110,22,25,215,218,38,160,97,192,88,232,84,116,72,24,61,34,193,37,72,108,180,226,238,148,123,12,237,139,130,255,188,121,36,176,52,4,214,8,23,3,224,162,4,112,85,150,177,116,47,190,60,17,123,196,38,240,186,40,175,76,23,24,3,223,13,219,197,225,165,74,246,56,64,69,202,46,143,66,178,115,234,116,2,144,219,158,84,204,134,242,92,14,171,121,36,247,128,36,86,117,178,233,62,216,177,173,242,125,116,224,183,159,241,131,38,246,61,227,199,244,121,25,63,70,6,41,142,103,97,254,92,134,8,135,241,68,11,163,112,25,117,211,176,176,242,109,143,126,184,217,37,49,234,202,163,113,179,237,152,52,127,58,87,35,180,70,62,135,243,89,52,204,145,242,103,228,54,88,224,155,60,115,43,22,225,231,92,209,117,183,64,31,106,0,66,84,162,92,148,207,230,227,113,231,115,28,68,200,198,51,219,195,121,7,125,251,71,115,123,239,71,243,107,166,179,239,60,64,231,12,255,199,133,206,159,241,203,27,64,191,220,89,72,225,89,200,175,62,12,229,117,105,247,75,42,111,213,113,125,171,142,247,168,99,206,12,235,58,158,191,96,207,95,234,109,133,167,159,56,120,63,7,250,61,64,191,49,162,242,5,158,98,24,33,190,245,149,41,226,199,115,208,159,81,113,162,59,107,175,203,73,63,222,118,230,247,11,222,154,21,119,156,32,69,252,5,172,249,94,226,123,137,175,88,226,75,137,28,61,142,224,13,24,112,62,222,72,214,201,199,27,201,58,221,232,244,38,29,199,214,143,175,208,241,241,54,29,151,244,165,58,126,86,198,106,7,181,113,174,22,178,219,254,106,54,71,253,200,82,179,35,182,192,134,102,23,238,229,238,159,107,210,229,154,205,189,101,130,92,71,185,251,231,106,158,161,170,163,220,54,202,181,187,40,242,36,85,179,98,44,65,185,251,26,173,242,88,85,121,177,156,72,42,179,46,183,235,114,242,192,85,213,229,14,93,78,232,220,162,202,213,164,203,109,191,110,185,102,172,217,85,185,229,254,175,117,215,229,154,213,181,77,33,143,114,247,127,173,135,46,215,2,123,91,83,101,148,187,255,107,147,253,109,97,45,71,80,238,190,176,155,236,111,235,50,5,229,200,118,205,229,186,119,96,34,39,56,148,107,50,159,236,111,179,199,55,102,82,116,185,251,128,54,217,223,150,62,177,52,219,219,172,11,182,107,5,139,41,88,71,193,121,20,220,71,193,135,82,236,99,145,144,189,50,205,83,242,240,121,165,99,91,150,29,159,81,202,251,82,106,94,143,67,94,185,138,96,182,38,251,214,214,39,94,241,58,142,180,204,199,178,140,215,177,238,253,214,84,142,189,174,249,200,117,188,111,21,2,131,234,149,159,93,121,230,65,169,109,95,231,109,197,103,171,206,166,211,178,213,99,201,121,147,73,71,64,95,187,185,69,31,191,160,117,156,173,165,101,205,242,132,86,127,178,106,79,185,72,107,33,40,170,59,28,146,199,19,19,174,217,191,204,118,246,179,110,71,198,29,141,96,65,229,153,227,162,143,39,38,125,34,206,156,202,102,230,156,215,165,236,115,73,106,214,14,24,84,103,99,244,19,235,253,101,119,153,93,240,79,116,124,164,121,95,207,45,27,207,180,17,114,235,9,91,64,84,143,131,241,158,67,235,99,219,114,206,231,50,194,75,112,247,131,59,31,181,236,219,120,158,238,2,24,213,175,35,71,242,43,149,210,231,41,144,173,90,199,189,153,245,153,135,8,211,86,214,89,63,3,87,150,125,63,5,56,245,244,94,4,11,106,75,216,67,121,212,247,190,158,40,121,236,242,140,96,226,59,175,237,111,251,243,50,98,130,247,71,45,111,169,110,103,69,124,59,240,30,40,152,206,205,218,150,122,238,155,16,134,11,160,171,191,72,122,174,135,139,74,253,133,143,29,134,64,156,222,253,9,185,207,157,94,58,74,217,151,60,222,43,188,154,220,158,230,186,158,100,106,221,49,105,200,51,83,11,246,44,120,190,241,241,22,62,166,123,175,66,204,185,158,196,111,95,129,250,188,136,153,191,230,129,114,140,181,19,170,115,181,43,62,28,25,66,163,234,117,120,38,31,239,206,157,203,229,101,215,76,97,131,71,70,111,14,226,43,49,225,185,199,16,60,236,239,196,181,188,239,135,188,23,121,127,88,242,108,112,174,121,78,40,18,5,208,176,62,7,146,149,135,230,191,128,197,116,86,84,75,153,215,25,48,212,3,131,186,242,48,207,175,133,28,23,22,210,227,49,61,59,15,216,190,165,189,30,43,112,160,90,79,244,86,103,225,22,66,163,234,116,247,163,133,36,63,236,123,169,167,80,161,158,35,77,199,41,202,46,243,154,213,42,59,96,84,153,226,76,158,234,249,60,204,231,217,88,245,179,165,203,169,103,203,68,110,14,18,214,43,252,194,226,227,165,222,182,249,20,214,118,120,13,246,36,49,105,95,79,33,58,45,74,10,11,160,97,253,76,111,55,110,143,103,92,143,173,148,179,201,52,195,251,180,231,153,241,175,196,6,208,176,62,221,226,78,79,205,252,164,1,243,138,106,194,57,197,186,46,203,182,14,193,238,22,1,163,202,35,205,215,51,114,87,133,62,243,201,159,182,121,93,206,153,240,203,187,183,16,170,43,206,211,51,143,225,126,238,25,116,226,25,199,107,228,103,168,228,185,73,39,135,202,181,162,36,125,210,62,133,57,14,16,213,163,172,126,233,9,6,186,23,197,248,239,107,120,50,226,186,38,115,160,34,160,171,60,222,75,120,40,213,157,10,71,205,231,153,40,21,15,105,217,150,228,38,24,2,227,250,180,214,79,240,132,253,100,37,123,50,213,79,181,123,222,79,130,184,201,163,213,23,192,168,126,102,84,126,70,81,220,206,234,139,209,20,239,12,104,119,90,106,4,140,234,211,69,174,150,32,225,87,68,210,163,206,75,45,231,220,235,42,3,159,211,73,89,79,145,1,217,73,8,140,234,83,232,110,206,79,137,46,219,97,59,191,75,143,235,126,146,211,133,161,23,64,87,153,179,120,62,215,243,81,150,50,227,235,216,109,230,39,113,175,155,146,25,34,88,84,155,110,231,249,222,95,165,254,113,202,134,199,166,160,83,208,205,118,92,39,23,40,230,25,241,91,8,13,235,243,189,224,219,19,152,179,159,52,106,46,200,12,78,25,228,20,202,151,90,15,56,3,30,232,171,114,24,122,121,60,233,109,61,255,87,238,207,193,15,110,176,206,119,11,196,221,2,115,236,194,165,3,104,80,155,3,182,203,99,62,121,234,111,39,81,222,149,216,121,42,57,167,198,81,151,147,114,101,225,89,1,52,170,206,49,197,61,64,255,171,207,27,18,106,188,197,78,63,33,30,252,58,248,221,209,251,181,36,245,53,231,242,36,137,169,30,73,11,50,119,53,107,182,234,114,8,140,234,115,242,175,231,140,180,171,197,180,59,253,92,182,124,146,111,181,59,33,48,170,207,38,188,39,230,94,15,180,7,54,129,231,84,247,170,86,140,61,200,85,156,199,133,226,103,184,239,110,229,198,83,108,60,39,85,231,188,162,69,220,195,92,213,250,196,60,63,31,59,92,77,190,37,158,159,177,142,158,186,197,172,20,148,83,94,217,79,222,107,81,205,67,163,234,35,233,234,51,125,239,70,4,63,215,242,88,146,82,77,44,40,220,23,202,107,247,148,167,99,61,234,142,230,178,116,202,141,101,59,117,16,49,90,220,66,168,175,204,185,237,242,115,142,157,122,106,179,235,121,46,65,187,204,105,182,70,113,11,10,107,142,148,48,79,118,29,77,186,150,77,203,181,30,24,79,249,53,29,239,107,61,105,193,182,161,106,242,236,38,155,154,55,122,13,56,63,105,125,95,79,106,87,55,180,96,190,18,177,77,125,192,236,87,107,134,175,59,145,139,241,127,180,65,174,181,236,69,29,22,15,138,234,102,194,209,167,220,67,231,66,236,115,173,155,90,159,165,236,203,90,193,232,235,33,81,77,206,209,148,151,167,12,67,235,41,72,40,99,67,195,200,195,88,218,60,36,170,73,121,162,243,242,140,153,228,228,139,219,177,236,40,238,156,130,206,185,182,139,48,18,7,240,181,56,163,197,115,125,58,114,115,20,103,75,13,129,166,42,231,186,184,47,242,187,222,222,99,241,150,212,167,113,218,84,29,201,13,30,123,91,31,31,196,183,11,207,212,97,114,255,224,95,95,46,28,240,173,226,241,243,151,10,7,124,54,98,75,45,98,81,95,243,87,254,210,81,224,139,250,90,191,206,215,223,31,167,195,22,166,215,27,126,199,237,186,39,104,240,41,216,148,117,75,59,40,210,167,18,191,204,167,102,175,153,80,0,13,235,83,134,197,167,92,92,78,60,184,147,220,99,155,15,235,135,13,160,97,253,145,9,239,149,110,46,74,60,245,148,32,103,39,124,181,54,207,47,88,79,137,249,208,53,126,37,138,5,75,243,236,122,21,190,109,206,19,103,180,253,177,145,61,139,177,127,246,140,165,23,28,4,233,167,63,125,154,74,250,191,31,255,231,231,251,127,167,249,108,46,125,250,203,95,255,246,225,63,255,244,233,95,127,250,248,135,31,127,250,143,31,127,249,235,143,127,248,233,79,63,76,75,103,76,247,162,237,159,191,155,230,223,159,255,250,249,175,127,62,43,253,176,180,250,255,135,91,251,221,253,115,107,191,83,235,191,191,255,191,215,104,61,252,237,113,15,109,200,220,94,175,218,86,60,253,169,221,215,229,14,250,36,104,178,52,137,141,202,255,239,95,254,250,211,29,250,3,254,220,255,127,22,130,81,234,234,255,246,227,167,191,124,248,243,79,31,63,254,242,67,251,231,47,63,254,252,199,143,255,245,195,189,252,63,141,138,247,41,165,12,3,227,169,253,242,241,227,167,15,255,249,241,211,199,127,254,249,143,255,254,233,227,127,247,206,127,247,89,179,207,106,230,229,87,144,57,152,151,124,189,43,175,57,135,188,238,215,97,117,95,132,184,231,148,248,109,109,240,34,234,51,216,111,176,67,195,237,231,255,15,126,12,50,41],"type":"zlib"} \ No newline at end of file From b433e55f333a1729c89b641f7ccd59be16f064c7 Mon Sep 17 00:00:00 2001 From: ienaga Date: Wed, 11 Feb 2026 10:51:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?player=E3=81=AEreference=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cn/reference/player/events/index.html | 225 ++++-- .../cn/reference/player/movie-clip/index.html | 5 +- docs/cn/reference/player/shape/index.html | 13 +- docs/cn/reference/player/sprite/index.html | 12 +- docs/cn/reference/player/tween/index.html | 685 ++++++++++-------- docs/cn/reference/player/video/index.html | 193 +++-- docs/en/reference/player/events/index.html | 225 ++++-- .../en/reference/player/movie-clip/index.html | 5 +- docs/en/reference/player/shape/index.html | 13 +- docs/en/reference/player/sprite/index.html | 12 +- docs/en/reference/player/tween/index.html | 685 ++++++++++-------- docs/en/reference/player/video/index.html | 193 +++-- docs/ja/reference/player/events/index.html | 196 ++++- .../ja/reference/player/movie-clip/index.html | 3 +- docs/ja/reference/player/shape/index.html | 13 +- docs/ja/reference/player/sprite/index.html | 8 +- docs/ja/reference/player/tween/index.html | 683 +++++++++-------- docs/ja/reference/player/video/index.html | 47 +- 18 files changed, 1937 insertions(+), 1279 deletions(-) diff --git a/docs/cn/reference/player/events/index.html b/docs/cn/reference/player/events/index.html index 245cacb3..a861acb9 100644 --- a/docs/cn/reference/player/events/index.html +++ b/docs/cn/reference/player/events/index.html @@ -5,31 +5,41 @@ gtag("config", "G-8GJWF4S3RH");

事件系统

-

Next2D Player 使用与 Flash Player 类似的事件模型。

+

Next2D Player 使用与 W3C DOM 事件模型类似的三阶段事件流机制。

EventDispatcher

所有具有事件功能的对象的基类。

addEventListener(type, listener, useCapture, priority)

注册事件侦听器。

-
displayObject.addEventListener("click", function(event) {
-    console.log("被点击");
+
const { PointerEvent } = next2d.events;
+
+displayObject.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
+    console.log("指针被按下");
 });
 
 // 在捕获阶段接收
-displayObject.addEventListener("click", handler, true);
+displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
 
 // 指定优先级
-displayObject.addEventListener("click", handler, false, 10);
+displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, false, 10);

removeEventListener(type, listener, useCapture)

移除事件侦听器。

-
displayObject.removeEventListener("click", handler);
+
displayObject.removeEventListener(PointerEvent.POINTER_DOWN, handler);
+

removeAllEventListener(type, useCapture)

+

移除特定类型的所有事件侦听器。

+
displayObject.removeAllEventListener(PointerEvent.POINTER_DOWN);

hasEventListener(type)

检查是否注册了指定类型的侦听器。

-
if (displayObject.hasEventListener("click")) {
-    console.log("已注册点击侦听器");
+
if (displayObject.hasEventListener(PointerEvent.POINTER_DOWN)) {
+    console.log("已注册指针按下侦听器");
+}
+

willTrigger(type)

+

检查此对象或祖先是否具有该事件类型的侦听器。

+
if (displayObject.willTrigger(PointerEvent.POINTER_DOWN)) {
+    console.log("此对象或祖先有侦听器");
 }

dispatchEvent(event)

派发事件。

-
const { Event } = next2d.events;
+
const { Event } = next2d.events;
 
 const event = new Event("customEvent");
 displayObject.dispatchEvent(event);
@@ -70,12 +80,7 @@

属性

- - - - - -
属性类型说明
typeString事件类型
targetObject事件源
currentTargetObject当前侦听器目标
eventPhaseNumber事件阶段
bubblesBoolean是否冒泡
cancelableBoolean是否可取消
+
属性类型说明
typeString事件类型
targetObject事件源
currentTargetObject当前侦听器目标
eventPhaseNumber事件阶段
bubblesBoolean是否冒泡

方法

@@ -94,11 +99,7 @@

方法

- - - - -
方法说明
stopPropagation()停止传播
stopImmediatePropagation()立即停止传播
preventDefault()取消默认行为
+
方法说明
stopPropagation()停止传播
stopImmediatePropagation()立即停止传播

标准事件类型

显示列表相关

@@ -127,7 +128,7 @@

显示列表相关

事件说明
added添加到 DisplayObjectContainer
addedToStage添加到舞台
removed从 DisplayObjectContainer 移除
removedFromStage从舞台移除
-
sprite.addEventListener("addedToStage", function(event) {
+
sprite.addEventListener("addedToStage", (event) => {
     console.log("添加到舞台");
 });

时间轴相关

@@ -153,7 +154,7 @@

时间轴相关

事件说明
enterFrame每帧发生
frameConstructed帧构建完成
exitFrame离开帧时
-
movieClip.addEventListener("enterFrame", function(event) {
+
movieClip.addEventListener("enterFrame", (event) => {
     // 每帧执行的处理
     updatePosition();
 });
@@ -179,24 +180,33 @@

加载相关

-
事件说明
complete加载完成
progress加载进度
ioErrorIO 错误
-
const { Loader } = next2d.display;
+
+
+
+
+
事件说明
complete加载完成
progress加载进度
ioErrorIO 错误
httpStatusHTTP 状态接收
+
const { Loader } = next2d.display;
 const { URLRequest } = next2d.net;
 
 const loader = new Loader();
 
-loader.contentLoaderInfo.addEventListener("complete", function(event) {
-    const content = event.currentTarget.content;
-    stage.addChild(content);
-});
+// 使用 async/await 加载
+await loader.load(new URLRequest("animation.json"));
+const content = loader.content;
+stage.addChild(content);
 
-loader.contentLoaderInfo.addEventListener("progress", function(event) {
+// 使用进度事件
+loader.contentLoaderInfo.addEventListener("progress", (event) => {
     const percent = (event.bytesLoaded / event.bytesTotal) * 100;
-    console.log(percent + "% 已加载");
-});
-
-loader.load(new URLRequest("animation.json"));
-

鼠标事件

+ console.log(`${percent}% 已加载`); +});
+

指针事件

+

PointerEvent 统一处理指针设备的操作(鼠标、笔、触摸)。

+ + + + + @@ -242,13 +252,19 @@

鼠标事件

-
事件说明
click点击
doubleClick双击
mouseDown鼠标按下
mouseUp鼠标释放
mouseMove鼠标移动
mouseOver鼠标移入
mouseOut鼠标移出
rollOver滚动移入
rollOut滚动移出
-
sprite.addEventListener("click", function(event) {
-    console.log("点击位置:", event.localX, event.localY);
+
事件常量说明
pointerDownPointerEvent.POINTER_DOWN按钮按下开始
pointerUpPointerEvent.POINTER_UP按钮释放
pointerMovePointerEvent.POINTER_MOVE指针坐标变化
pointerOverPointerEvent.POINTER_OVER指针进入命中测试边界
pointerOutPointerEvent.POINTER_OUT指针离开命中测试边界
pointerLeavePointerEvent.POINTER_LEAVE指针离开元素区域
pointerCancelPointerEvent.POINTER_CANCEL指针交互被取消
doubleClickPointerEvent.DOUBLE_CLICK双击/双触发生
+
const { PointerEvent } = next2d.events;
+
+sprite.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
+    console.log("指针按下:", event.localX, event.localY);
+});
+
+sprite.addEventListener(PointerEvent.POINTER_MOVE, (event) => {
+    console.log("指针移动:", event.stageX, event.stageY);
 });
 
-sprite.addEventListener("mouseMove", function(event) {
-    console.log("鼠标位置:", event.stageX, event.stageY);
+sprite.addEventListener(PointerEvent.DOUBLE_CLICK, (event) => {
+    console.log("双击");
 });

键盘事件

@@ -268,8 +284,13 @@

键盘事件

-
事件说明
keyDown按键按下
keyUp按键释放
-
stage.addEventListener("keyDown", function(event) {
+
+
+
+
事件常量说明
keyDownKeyboardEvent.KEY_DOWN按键按下
keyUpKeyboardEvent.KEY_UP按键释放
+
const { KeyboardEvent } = next2d.events;
+
+stage.addEventListener(KeyboardEvent.KEY_DOWN, (event) => {
     console.log("键码:", event.keyCode);
 
     switch (event.keyCode) {
@@ -281,8 +302,112 @@ 

键盘事件

break; } });
+

焦点事件

+ + + + + + + + + + + + + + + + + + + + +
事件常量说明
focusInFocusEvent.FOCUS_IN元素获得焦点
focusOutFocusEvent.FOCUS_OUT元素失去焦点
+
const { FocusEvent } = next2d.events;
+
+textField.addEventListener(FocusEvent.FOCUS_IN, (event) => {
+    console.log("获得焦点");
+});
+

滚轮事件

+ + + + + + + + + + + + + + + +
事件常量说明
wheelWheelEvent.WHEEL鼠标滚轮旋转
+
const { WheelEvent } = next2d.events;
+
+stage.addEventListener(WheelEvent.WHEEL, (event) => {
+    console.log("滚轮旋转");
+});
+

视频事件

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
事件常量说明
playVideoEvent.PLAY播放被请求
playingVideoEvent.PLAYING播放已开始
pauseVideoEvent.PAUSE已暂停
seekVideoEvent.SEEK跳转操作
+

作业事件

+

补间动画用的事件。

+ + + + + + + + + + + + + + + + + + + + +
事件常量说明
updateJobEvent.UPDATE属性已更新
stopJobEvent.STOP作业已停止

自定义事件

-
const { Event } = next2d.events;
+
const { Event } = next2d.events;
 
 // 定义自定义事件
 const customEvent = new Event("gameOver", true, true);
@@ -291,21 +416,23 @@ 

自定义事件

gameManager.dispatchEvent(customEvent); // 监听事件 -gameManager.addEventListener("gameOver", function(event) { +gameManager.addEventListener("gameOver", (event) => { showGameOverScreen(); });

事件传播

事件分三个阶段传播:

    -
  1. 捕获阶段:从根到目标
  2. -
  3. 目标阶段:在目标处处理
  4. -
  5. 冒泡阶段:从目标到根
  6. +
  7. 捕获阶段:从根到目标(eventPhase = 1)
  8. +
  9. 目标阶段:在目标处处理(eventPhase = 2)
  10. +
  11. 冒泡阶段:从目标到根(eventPhase = 3)
-
// 在捕获阶段处理
-parent.addEventListener("click", handler, true);
+
const { PointerEvent } = next2d.events;
+
+// 在捕获阶段处理
+parent.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
 
 // 在冒泡阶段处理(默认)
-child.addEventListener("click", handler, false);
+child.addEventListener(PointerEvent.POINTER_DOWN, handler, false);

相关

  • DisplayObject
  • diff --git a/docs/cn/reference/player/movie-clip/index.html b/docs/cn/reference/player/movie-clip/index.html index 3d1de9db..2cedd2d6 100644 --- a/docs/cn/reference/player/movie-clip/index.html +++ b/docs/cn/reference/player/movie-clip/index.html @@ -238,7 +238,8 @@

    exitFrame

    });

使用示例

基本动画控制

-
const { Loader } = next2d.display;
+
const { Loader } = next2d.display;
+const { PointerEvent } = next2d.events;
 const { URLRequest } = next2d.net;
 
 // 从 JSON 加载 MovieClip
@@ -252,7 +253,7 @@ 

基本动画控制

mc.stop(); // 点击按钮播放/暂停 -button.addEventListener("click", function() { +button.addEventListener(PointerEvent.POINTER_DOWN, () => { if (mc.isPlaying) { mc.stop(); } else { diff --git a/docs/cn/reference/player/shape/index.html b/docs/cn/reference/player/shape/index.html index aecf87ab..9b1f0fca 100644 --- a/docs/cn/reference/player/shape/index.html +++ b/docs/cn/reference/player/shape/index.html @@ -569,18 +569,17 @@

三次贝塞尔曲线

stage.addChild(shape);

位图填充

-
const { Shape, Loader } = next2d.display;
+
const { Shape } = next2d.display;
 
-const loader = new Loader();
-await loader.load("texture.png");
-
-const bitmapData = loader.contentLoaderInfo
-    .content.bitmapData;
+// 使用 Shape 的 load() 方法加载图像
+const textureShape = new Shape();
+await textureShape.load("texture.png");
 
+// 使用加载的 bitmapData 进行位图填充
 const shape = new Shape();
 const g = shape.graphics;
 
-g.beginBitmapFill(bitmapData, null, true, true);
+g.beginBitmapFill(textureShape.bitmapData, null, true, true);
 g.drawRect(0, 0, 400, 300);
 g.endFill();
 
diff --git a/docs/cn/reference/player/sprite/index.html b/docs/cn/reference/player/sprite/index.html
index 62db6514..4f5b339b 100644
--- a/docs/cn/reference/player/sprite/index.html
+++ b/docs/cn/reference/player/sprite/index.html
@@ -503,7 +503,8 @@ 

从 DisplayObject 继承的方法

方法返回类型说明getBounds(targetDisplayObject?: DisplayObject)Rectangle返回定义显示对象相对于 targetDisplayObject 坐标系统区域的矩形globalToLocal(point: Point)Point将点对象从舞台(全局)坐标转换为显示对象(本地)坐标localToGlobal(point: Point)Point将点对象从显示对象(本地)坐标转换为舞台(全局)坐标hitTestObject(target: DisplayObject)boolean评估 DisplayObject 的绘制范围是否重叠或相交hitTestPoint(x: number, y: number, shapeFlag?: boolean)boolean评估显示对象是否与 x 和 y 参数指定的点重叠或相交remove()void移除父子关系getLocalVariable(key: any)any从类的本地变量空间获取值setLocalVariable(key: any, value: any)void在类的本地变量空间中存储值hasLocalVariable(key: any)boolean确定类的本地变量空间中是否有值deleteLocalVariable(key: any)void从类的本地变量空间中删除值getGlobalVariable(key: any)any从全局变量空间获取值setGlobalVariable(key: any, value: any)void在全局变量空间中存储值hasGlobalVariable(key: any)boolean确定全局变量空间中是否有值deleteGlobalVariable(key: any)void从全局变量空间中删除值clearGlobalVariable()void清除全局变量空间中的所有值

使用示例

作为按钮使用

-
const { Sprite, Shape } = next2d.display;
+
const { Sprite, Shape } = next2d.display;
+const { PointerEvent } = next2d.events;
 
 const button = new Sprite();
 
@@ -519,7 +520,7 @@ 

作为按钮使用

button.addChild(bg); // 点击事件 -button.addEventListener("click", function() { +button.addEventListener(PointerEvent.POINTER_DOWN, () => { console.log("按钮被点击"); }); @@ -548,7 +549,8 @@

作为遮罩使用

stage.addChild(container); stage.addChild(maskShape);

拖放

-
const { Sprite, Shape } = next2d.display;
+
const { Sprite, Shape } = next2d.display;
+const { PointerEvent } = next2d.events;
 const { Rectangle } = next2d.geom;
 
 const draggable = new Sprite();
@@ -561,13 +563,13 @@ 

拖放

draggable.addChild(bg); // 开始拖动 -draggable.addEventListener("mouseDown", function() { +draggable.addEventListener(PointerEvent.POINTER_DOWN, () => { // 开始拖动(锁定中心,指定边界) draggable.startDrag(true, new Rectangle(0, 0, 400, 300)); }); // 停止拖动 -draggable.addEventListener("mouseUp", function() { +draggable.addEventListener(PointerEvent.POINTER_UP, () => { draggable.stopDrag(); }); diff --git a/docs/cn/reference/player/tween/index.html b/docs/cn/reference/player/tween/index.html index b7bd5801..12400fed 100644 --- a/docs/cn/reference/player/tween/index.html +++ b/docs/cn/reference/player/tween/index.html @@ -5,323 +5,436 @@ gtag("config", "G-8GJWF4S3RH");

补间动画

-

Next2D Player 允许您实现程序化动画(补间)。您可以平滑地动画化位置、大小和透明度等属性。

+

Next2D Player 使用 @next2d/ui 包的 Tween 系统来实现程序化动画。您可以平滑地动画化位置、大小和透明度等属性。

基本补间概念

flowchart LR
     Start["起始值"] -->|缓动函数| Progress["进度 0→1"]
     Progress --> End["结束值"]
 
     subgraph Easing["缓动"]
-        Linear["线性"]
-        EaseIn["EaseIn"]
-        EaseOut["EaseOut"]
-        EaseInOut["EaseInOut"]
+        Linear["linear"]
+        InQuad["inQuad"]
+        OutQuad["outQuad"]
+        InOutQuad["inOutQuad"]
     end
-

基本 Tween 类

-
class Tween {
-    constructor(target, options) {
-        this._target = target;
-        this._properties = {};
-        this._duration = options.duration;
-        this._easing = options.easing || Easing.linear;
-        this._startTime = 0;
-        this._isPlaying = false;
-        this._onUpdate = options.onUpdate;
-        this._onComplete = options.onComplete;
-    }
-
-    to(properties) {
-        for (const key in properties) {
-            this._properties[key] = {
-                start: this._target[key],
-                end: properties[key]
-            };
-        }
-        return this;
-    }
-
-    play() {
-        this._startTime = Date.now();
-        this._isPlaying = true;
-        this._update();
-        return this;
-    }
-
-    _update() {
-        const self = this;
-        if (!this._isPlaying) return;
-
-        const elapsed = Date.now() - this._startTime;
-        let progress = Math.min(1, elapsed / this._duration);
-        progress = this._easing(progress);
-
-        // 更新属性
-        for (const key in this._properties) {
-            const prop = this._properties[key];
-            this._target[key] = prop.start + (prop.end - prop.start) * progress;
-        }
-
-        if (this._onUpdate) {
-            this._onUpdate();
-        }
-
-        if (elapsed < this._duration) {
-            requestAnimationFrame(function() { self._update(); });
-        } else {
-            this._isPlaying = false;
-            if (this._onComplete) {
-                this._onComplete();
-            }
-        }
-    }
-
-    stop() {
-        this._isPlaying = false;
-    }
-}
+

Tween.add()

+

使用 Tween.add() 方法创建动画用的 Job 实例。

+
const { Tween, Easing } = next2d.ui;
+
+const job = Tween.add(
+    target,    // 动画目标对象
+    from,      // 起始属性值
+    to,        // 结束属性值
+    delay,     // 延迟时间(秒,默认:0)
+    duration,  // 动画持续时间(秒,默认:1)
+    ease       // 缓动函数(默认:linear)
+);
+
+// 开始动画
+job.start();
+

参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型默认值说明
targetany-动画目标对象
fromobject-起始属性值
toobject-结束属性值
delaynumber0动画开始前的延迟(秒)
durationnumber1动画持续时间(秒)
easeFunction | nullnull缓动函数(默认为 linear)
+

返回值

+

Job - 动画作业实例

+

Job 类

+

Job 类管理各个动画作业。它继承自 EventDispatcher。

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + +
方法返回值说明
start()void开始动画
stop()void停止动画
chain(nextJob: Job | null)Job | null在此作业完成后连接另一个作业
+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性类型说明
targetany目标对象
fromobject起始值
toobject结束值
delaynumber延迟时间
durationnumber持续时间
easeFunction缓动函数
currentTimenumber当前动画时间
nextJobJob | null下一个连接的作业
+

事件

+ + + + + + + + + + + + + + + + + +
事件说明
enterFrame每个动画帧触发
complete动画完成时触发

缓动函数

-
const Easing = {
-    // 线性
-    linear: function(t) { return t; },
-
-    // 加速
-    easeInQuad: function(t) { return t * t; },
-    easeInCubic: function(t) { return t * t * t; },
-    easeInQuart: function(t) { return t * t * t * t; },
-
-    // 减速
-    easeOutQuad: function(t) { return t * (2 - t); },
-    easeOutCubic: function(t) { return (--t) * t * t + 1; },
-    easeOutQuart: function(t) { return 1 - (--t) * t * t * t; },
-
-    // 加速 → 减速
-    easeInOutQuad: function(t) {
-        return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
-    },
-    easeInOutCubic: function(t) {
-        return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
-    },
-
-    // 弹跳
-    easeOutBounce: function(t) {
-        if (t < 1 / 2.75) {
-            return 7.5625 * t * t;
-        } else if (t < 2 / 2.75) {
-            return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;
-        } else if (t < 2.5 / 2.75) {
-            return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;
-        } else {
-            return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;
-        }
-    },
-
-    // Back(超调然后返回)
-    easeOutBack: function(t) {
-        const c1 = 1.70158;
-        const c3 = c1 + 1;
-        return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
-    },
-
-    // 弹性(橡皮筋般的运动)
-    easeOutElastic: function(t) {
-        if (t === 0 || t === 1) return t;
-        return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * (2 * Math.PI) / 3) + 1;
-    }
-};
+

Easing 类提供 11 种缓动类型的 In、Out、InOut 变体,共 32 种缓动函数。

+

Linear / 线性

+
    +
  • Easing.linear - 匀速
  • +
+

Quadratic (Quad) / 二次函数

+
    +
  • Easing.inQuad - 从零速度加速
  • +
  • Easing.outQuad - 减速到零速度
  • +
  • Easing.inOutQuad - 加速到中间,然后减速
  • +
+

Cubic / 三次函数

+
    +
  • Easing.inCubic / Easing.outCubic / Easing.inOutCubic
  • +
+

Quartic (Quart) / 四次函数

+
    +
  • Easing.inQuart / Easing.outQuart / Easing.inOutQuart
  • +
+

Quintic (Quint) / 五次函数

+
    +
  • Easing.inQuint / Easing.outQuint / Easing.inOutQuint
  • +
+

Sinusoidal (Sine) / 正弦波

+
    +
  • Easing.inSine / Easing.outSine / Easing.inOutSine
  • +
+

Exponential (Expo) / 指数函数

+
    +
  • Easing.inExpo / Easing.outExpo / Easing.inOutExpo
  • +
+

Circular (Circ) / 圆形

+
    +
  • Easing.inCirc / Easing.outCirc / Easing.inOutCirc
  • +
+

Elastic / 弹性

+
    +
  • Easing.inElastic / Easing.outElastic / Easing.inOutElastic
  • +
+

Back

+
    +
  • Easing.inBack / Easing.outBack / Easing.inOutBack
  • +
+

Bounce / 弹跳

+
    +
  • Easing.inBounce / Easing.outBounce / Easing.inOutBounce
  • +
+

缓动函数参数

+

所有缓动函数接受 4 个参数:

+
ease(t: number, b: number, c: number, d: number): number
+
    +
  • t - 当前时间 (0 到 d)
  • +
  • b - 起始值
  • +
  • c - 变化量(结束值 - 起始值)
  • +
  • d - 持续时间
  • +

使用示例

基本移动动画

-
const { Sprite } = next2d.display;
+
const { Tween, Easing } = next2d.ui;
 
 const sprite = new Sprite();
-sprite.x = 0;
-sprite.y = 100;
 stage.addChild(sprite);
 
-// 向右移动
-new Tween(sprite, { duration: 1000, easing: Easing.easeOutQuad })
-    .to({ x: 400 })
-    .play();
+// 在 1 秒内将 x 从 0 移动到 400 +const job = Tween.add( + sprite, + { x: 0, y: 100 }, + { x: 400, y: 100 }, + 0, + 1, + Easing.outQuad +); + +job.start();

同时多属性动画

-
// 移动 + 缩放 + 淡入
-new Tween(sprite, {
-    duration: 500,
-    easing: Easing.easeOutCubic
-})
-    .to({
-        x: 200,
-        y: 150,
-        scaleX: 2,
-        scaleY: 2,
-        alpha: 1
-    })
-    .play();
-

顺序动画

-
// 连续动画
-function sequentialAnimation(sprite) {
-    new Tween(sprite, {
-        duration: 500,
-        onComplete: function() {
-            new Tween(sprite, {
-                duration: 300,
-                onComplete: function() {
-                    new Tween(sprite, { duration: 500 })
-                        .to({ alpha: 0 })
-                        .play();
-                }
-            })
-                .to({ scaleX: 1.5, scaleY: 1.5 })
-                .play();
-        }
-    })
-        .to({ y: 100 })
-        .play();
-}
+
const { Tween, Easing } = next2d.ui;
+
+// 移动 + 缩放 + 淡入
+const job = Tween.add(
+    sprite,
+    { x: 0, y: 0, scaleX: 1, scaleY: 1, alpha: 0 },
+    { x: 200, y: 150, scaleX: 2, scaleY: 2, alpha: 1 },
+    0,
+    0.5,
+    Easing.outCubic
+);
+
+job.start();
+

动画连接 (chain)

+
const { Tween, Easing } = next2d.ui;
+
+// 第一个动画
+const job1 = Tween.add(
+    sprite,
+    { x: 0 },
+    { x: 100 },
+    0, 1,
+    Easing.outQuad
+);
+
+// 第二个动画
+const job2 = Tween.add(
+    sprite,
+    { x: 100 },
+    { x: 200 },
+    0, 1,
+    Easing.inQuad
+);
+
+// 连接并执行
+job1.chain(job2);
+job1.start();
+

延迟动画

+
const { Tween, Easing } = next2d.ui;
+
+// 延迟 0.5 秒后在 1 秒内淡出
+const job = Tween.add(
+    sprite,
+    { alpha: 1 },
+    { alpha: 0 },
+    0.5,
+    1,
+    Easing.inQuad
+);
+
+job.start();
+

使用事件

+
const { Tween, Easing } = next2d.ui;
+
+const job = Tween.add(
+    sprite,
+    { x: 0 },
+    { x: 300 },
+    0, 2,
+    Easing.inOutQuad
+);
+
+// 每帧处理
+job.addEventListener("enterFrame", (event) => {
+    console.log("进行中:", job.currentTime);
+});
+
+// 完成时处理
+job.addEventListener("complete", (event) => {
+    console.log("动画完成!");
+});
+
+job.start();

游戏示例

角色跳跃

-
function jump(character) {
+
const { Tween, Easing } = next2d.ui;
+
+function jump(character) {
     const startY = character.y;
     const jumpHeight = 100;
 
     // 上升
-    new Tween(character, {
-        duration: 300,
-        easing: Easing.easeOutQuad,
-        onComplete: function() {
-            // 下降
-            new Tween(character, {
-                duration: 300,
-                easing: Easing.easeInQuad
-            })
-                .to({ y: startY })
-                .play();
-        }
-    })
-        .to({ y: startY - jumpHeight })
-        .play();
-}
-

伤害效果

-
function damageEffect(target) {
-    const originalX = target.x;
-    let shakeCount = 0;
-
-    // 闪烁 + 震动
-    function shake() {
-        if (shakeCount >= 6) {
-            target.x = originalX;
-            target.alpha = 1;
-            return;
-        }
-
-        const offset = shakeCount % 2 === 0 ? 5 : -5;
-        target.x = originalX + offset;
-        target.alpha = shakeCount % 2 === 0 ? 0.5 : 1;
-        shakeCount++;
-
-        setTimeout(shake, 50);
-    }
-
-    shake();
-}
-

金币收集效果

-
function coinCollectEffect(coin, targetY) {
-    // 向上浮动并淡出
-    new Tween(coin, {
-        duration: 500,
-        easing: Easing.easeOutQuad,
-        onUpdate: function() {
-            // 旋转
-            coin.rotation += 15;
-        },
-        onComplete: function() {
-            if (coin.parent) {
-                coin.parent.removeChild(coin);
-            }
-        }
-    })
-        .to({
-            y: targetY,
-            alpha: 0,
-            scaleX: 0.5,
-            scaleY: 0.5
-        })
-        .play();
+    const upJob = Tween.add(
+        character,
+        { y: startY },
+        { y: startY - jumpHeight },
+        0, 0.3,
+        Easing.outQuad
+    );
+
+    // 下降
+    const downJob = Tween.add(
+        character,
+        { y: startY - jumpHeight },
+        { y: startY },
+        0, 0.3,
+        Easing.inQuad
+    );
+
+    // 连接上升 → 下降
+    upJob.chain(downJob);
+    upJob.start();
 }

UI 动画

-
function showPopup(popup) {
+
const { Tween, Easing } = next2d.ui;
+
+function showPopup(popup) {
     popup.scaleX = 0;
     popup.scaleY = 0;
     popup.alpha = 0;
 
-    new Tween(popup, {
-        duration: 400,
-        easing: Easing.easeOutBack
-    })
-        .to({ scaleX: 1, scaleY: 1, alpha: 1 })
-        .play();
-}
+    const job = Tween.add(
+        popup,
+        { scaleX: 0, scaleY: 0, alpha: 0 },
+        { scaleX: 1, scaleY: 1, alpha: 1 },
+        0, 0.4,
+        Easing.outBack
+    );
 
-function hidePopup(popup, onComplete) {
-    new Tween(popup, {
-        duration: 200,
-        easing: Easing.easeInQuad,
-        onComplete: onComplete
-    })
-        .to({ scaleX: 0, scaleY: 0, alpha: 0 })
-        .play();
-}
-

基于 enterFrame 的轻量级补间

-
// 简单的基于 enterFrame 的补间
-function tweenTo(target, property, endValue, speed) {
-    speed = speed || 0.1;
-
-    function handler(event) {
-        const current = target[property];
-        const diff = endValue - current;
-
-        if (Math.abs(diff) < 0.1) {
-            target[property] = endValue;
-            stage.removeEventListener("enterFrame", handler);
-        } else {
-            target[property] = current + diff * speed;
-        }
-    }
-
-    stage.addEventListener("enterFrame", handler);
+    job.start();
 }
 
-// 使用
-tweenTo(sprite, "x", 300, 0.15);  // 将 x 移向 300
-tweenTo(sprite, "alpha", 0, 0.05);  // 淡出
-

自定义缓动

-
// 基于贝塞尔曲线的缓动
-function bezierEasing(x1, y1, x2, y2) {
-    return function(t) {
-        // 简单的三次贝塞尔插值
-        const cx = 3 * x1;
-        const bx = 3 * (x2 - x1) - cx;
-        const ax = 1 - cx - bx;
-
-        const cy = 3 * y1;
-        const by = 3 * (y2 - y1) - cy;
-        const ay = 1 - cy - by;
-
-        function sampleCurveY(t) {
-            return ((ay * t + by) * t + cy) * t;
-        }
-
-        return sampleCurveY(t);
-    };
-}
+function hidePopup(popup) {
+    const job = Tween.add(
+        popup,
+        { scaleX: 1, scaleY: 1, alpha: 1 },
+        { scaleX: 0, scaleY: 0, alpha: 0 },
+        0, 0.2,
+        Easing.inQuad
+    );
+
+    job.addEventListener("complete", () => {
+        popup.visible = false;
+    });
 
-// CSS cubic-bezier 等效
-const customEase = bezierEasing(0.25, 0.1, 0.25, 1.0);
-

性能提示

-
    -
  1. 使用 requestAnimationFrame:比 setTimeout 更流畅
  2. -
  3. 最小化属性更改:只更新必要的属性
  4. -
  5. 对象池:为多个动画池化和重用补间
  6. -
  7. 完成后清理:移除不必要的侦听器
  8. -
+ job.start(); +}
+

金币收集效果

+
const { Tween, Easing } = next2d.ui;
+
+function coinCollectEffect(coin) {
+    const job = Tween.add(
+        coin,
+        { y: coin.y, alpha: 1, scaleX: 1, scaleY: 1 },
+        { y: coin.y - 50, alpha: 0, scaleX: 0.5, scaleY: 0.5 },
+        0, 0.5,
+        Easing.outQuad
+    );
+
+    job.addEventListener("enterFrame", () => {
+        coin.rotation += 15;
+    });
+
+    job.addEventListener("complete", () => {
+        coin.parent?.removeChild(coin);
+    });
+
+    job.start();
+}
+

停止和控制

+
const { Tween, Easing } = next2d.ui;
+
+const job = Tween.add(
+    sprite,
+    { x: 0 },
+    { x: 400 },
+    0, 2,
+    Easing.linear
+);
+
+job.start();
+
+// 中途停止
+stopButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
+    job.stop();
+});

相关

  • DisplayObject
  • diff --git a/docs/cn/reference/player/video/index.html b/docs/cn/reference/player/video/index.html index 4475fe39..4f167ddf 100644 --- a/docs/cn/reference/player/video/index.html +++ b/docs/cn/reference/player/video/index.html @@ -125,7 +125,7 @@

    属性

    -
    属性类型默认值说明
    srcstring""指定视频内容的 URL
    videoWidthnumber0指定视频宽度的整数(像素)
    videoHeightnumber0指定视频高度的整数(像素)
    durationnumber0总关键帧数(视频持续时间)
    currentTimenumber0当前关键帧(播放位置)
    volumenumber1音量,范围从 0(静音)到 1(最大音量)
    loopbooleanfalse指定是否生成视频循环
    autoPlaybooleantrue设置自动视频播放
    smoothingbooleantrue指定缩放时是否对视频进行平滑(插值)
    pausedbooleantrue返回视频是否已暂停
    mutedbooleanfalse返回视频是否已静音
    loadedbooleanfalse返回视频是否已加载
    endedbooleanfalse返回视频是否已结束
    isVideobooleantrue返回显示对象是否具有 Video 功能(只读)
    +
    属性类型默认值说明
    srcstring""指定视频内容的 URL
    videoWidthnumber0指定视频宽度的整数(像素)
    videoHeightnumber0指定视频高度的整数(像素)
    durationnumber0总关键帧数(视频持续时间)
    currentTimenumber0当前关键帧(播放位置)
    volumenumber1音量,范围从 0(静音)到 1(最大音量)
    loopbooleanfalse指定是否循环播放视频
    autoPlaybooleantrue设置自动视频播放
    smoothingbooleantrue指定缩放时是否对视频进行平滑(插值)
    pausedbooleantrue返回视频是否已暂停
    mutedbooleanfalse返回视频是否已静音
    loadedbooleanfalse返回视频是否已加载
    endedbooleanfalse返回视频是否已结束
    isVideobooleantrue返回显示对象是否具有 Video 功能(只读)

    方法

    @@ -155,60 +155,93 @@

    方法

    方法返回值说明
    play()Promise<void>播放视频文件
    pause()void暂停视频播放
    seek(offset: number)void跳转到最接近指定位置的关键帧

    使用示例

    基本视频播放

    -
    const { Video } = next2d.media;
    +
    const { Video } = next2d.media;
     
    -// 创建 Video 对象
    +// 创建 Video 对象(指定宽度、高度)
     const video = new Video(640, 360);
     
    -// 设置视频源
    +// 设置视频源(设置后自动开始加载)
     video.src = "video.mp4";
    -video.autoPlay = true;
    -video.loop = false;
    -video.volume = 0.8;
    +
    +// 属性设置
    +video.autoPlay = true;   // 自动播放
    +video.loop = false;      // 不循环
    +video.smoothing = true;  // 启用平滑
     
     // 添加到舞台
     stage.addChild(video);

    播放控制

    -
    const { Video } = next2d.media;
    +
    const { Video } = next2d.media;
    +const { PointerEvent } = next2d.events;
     
     const video = new Video(640, 360);
    +video.autoPlay = false;  // 禁用自动播放
     video.src = "video.mp4";
    +
     stage.addChild(video);
     
     // 播放按钮
    -playButton.addEventListener("click", async function() {
    +playButton.addEventListener(PointerEvent.POINTER_DOWN, async () => {
         await video.play();
     });
     
     // 暂停按钮
    -pauseButton.addEventListener("click", function() {
    +pauseButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
         video.pause();
     });
     
     // 停止按钮(暂停并返回开始)
    -stopButton.addEventListener("click", function() {
    +stopButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
         video.pause();
         video.seek(0);
     });
     
     // 快进 10 秒
    -forwardButton.addEventListener("click", function() {
    +forwardButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
         video.seek(video.currentTime + 10);
     });
     
     // 后退 10 秒
    -backButton.addEventListener("click", function() {
    +backButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
         video.seek(Math.max(0, video.currentTime - 10));
     });
    +

    事件侦听

    +
    const { Video } = next2d.media;
    +const { VideoEvent } = next2d.events;
    +
    +const video = new Video(640, 360);
    +
    +// 播放事件
    +video.addEventListener(VideoEvent.PLAY, () => {
    +    console.log("播放请求");
    +});
    +
    +// 开始播放事件
    +video.addEventListener(VideoEvent.PLAYING, () => {
    +    console.log("播放开始");
    +});
    +
    +// 暂停事件
    +video.addEventListener(VideoEvent.PAUSE, () => {
    +    console.log("已暂停");
    +});
    +
    +// 跳转事件
    +video.addEventListener(VideoEvent.SEEK, () => {
    +    console.log("跳转:", video.currentTime);
    +});
    +
    +video.src = "video.mp4";
    +stage.addChild(video);

    显示播放进度

    -
    const { Video } = next2d.media;
    +
    const { Video } = next2d.media;
     
     const video = new Video(640, 360);
     video.src = "video.mp4";
     stage.addChild(video);
     
     // 每帧更新进度
    -stage.addEventListener("enterFrame", function() {
    +stage.addEventListener("enterFrame", () => {
         if (video.duration > 0) {
             const progress = video.currentTime / video.duration;
             progressBar.scaleX = progress;
    @@ -222,115 +255,53 @@ 

    显示播放进度

    return min + ":" + sec.toString().padStart(2, '0'); }

    音量控制

    -
    const { Video } = next2d.media;
    +
    const { Video } = next2d.media;
     
     const video = new Video(640, 360);
     video.src = "video.mp4";
     video.volume = 0.5;  // 50%
    -stage.addChild(video);
     
    -// 音量滑块
    -volumeSlider.addEventListener("change", function(event) {
    -    video.volume = event.target.value;  // 0.0 ~ 1.0
    -});
    +stage.addChild(video);
     
     // 静音切换
    -let isMuted = false;
    -let previousVolume = 0.5;
    -
    -muteButton.addEventListener("click", function() {
    -    isMuted = !isMuted;
    -    if (isMuted) {
    -        previousVolume = video.volume;
    -        video.volume = 0;
    -    } else {
    -        video.volume = previousVolume;
    -    }
    +muteButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
    +    video.muted = !video.muted;
     });
    -

    全屏支持

    -
    const { Video } = next2d.media;
    +

    循环播放

    +
    const { Video } = next2d.media;
     
     const video = new Video(640, 360);
    +video.loop = true;  // 启用循环
     video.src = "video.mp4";
    -stage.addChild(video);
    -
    -// 全屏切换
    -fullscreenButton.addEventListener("click", function() {
    -    if (stage.displayState === "normal") {
    -        // 切换到全屏
    -        stage.displayState = "fullScreen";
    -        video.width = stage.stageWidth;
    -        video.height = stage.stageHeight;
    -    } else {
    -        // 返回正常显示
    -        stage.displayState = "normal";
    -        video.width = 640;
    -        video.height = 360;
    -    }
    -});
    -

    视频播放器组件

    -
    const { Sprite } = next2d.display;
    -const { Video } = next2d.media;
    -
    -class VideoPlayer extends Sprite {
    -    constructor(width, height) {
    -        super();
    -
    -        this._width = width;
    -        this._height = height;
    -
    -        this._video = new Video(width, height);
    -        this.addChild(this._video);
    -    }
    -
    -    load(url) {
    -        this._video.src = url;
    -    }
    -
    -    async play() {
    -        await this._video.play();
    -    }
    -
    -    pause() {
    -        this._video.pause();
    -    }
    -
    -    seek(time) {
    -        this._video.seek(time);
    -    }
    -
    -    get currentTime() {
    -        return this._video.currentTime;
    -    }
    -
    -    get duration() {
    -        return this._video.duration || 0;
    -    }
    -
    -    set volume(value) {
    -        this._video.volume = value;
    -    }
    -
    -    get volume() {
    -        return this._video.volume;
    -    }
    -}
    -
    -// 使用
    -const player = new VideoPlayer(640, 360);
    -stage.addChild(player);
    -player.load("video.mp4");
    -player.play();
    -

    循环播放和自动播放

    -
    const { Video } = next2d.media;
    -
    -const video = new Video(640, 360);
    -video.src = "background-video.mp4";
    -video.autoPlay = true;
    -video.loop = true;
    -video.volume = 0;  // 静音背景视频
     
     stage.addChild(video);
    +

    VideoEvent

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    事件说明
    VideoEvent.PLAY播放被请求时
    VideoEvent.PLAYING播放开始时
    VideoEvent.PAUSE暂停时
    VideoEvent.SEEK跳转时

    支持的格式

    diff --git a/docs/en/reference/player/events/index.html b/docs/en/reference/player/events/index.html index cdaa3aab..3788b373 100644 --- a/docs/en/reference/player/events/index.html +++ b/docs/en/reference/player/events/index.html @@ -5,31 +5,41 @@ gtag("config", "G-8GJWF4S3RH");

    Event System

    -

    Next2D Player uses an event model similar to Flash Player.

    +

    Next2D Player uses a three-phase event flow mechanism similar to the W3C DOM event model.

    EventDispatcher

    The base class for all event-capable objects.

    addEventListener(type, listener, useCapture, priority)

    Registers an event listener.

    -
    displayObject.addEventListener("click", function(event) {
    -    console.log("Clicked");
    +
    const { PointerEvent } = next2d.events;
    +
    +displayObject.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
    +    console.log("Pointer pressed");
     });
     
     // Receive in capture phase
    -displayObject.addEventListener("click", handler, true);
    +displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
     
     // Specify priority
    -displayObject.addEventListener("click", handler, false, 10);
    +displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, false, 10);

    removeEventListener(type, listener, useCapture)

    Removes an event listener.

    -
    displayObject.removeEventListener("click", handler);
    +
    displayObject.removeEventListener(PointerEvent.POINTER_DOWN, handler);
    +

    removeAllEventListener(type, useCapture)

    +

    Removes all event listeners of a specific type.

    +
    displayObject.removeAllEventListener(PointerEvent.POINTER_DOWN);

    hasEventListener(type)

    Checks if a listener of the specified type is registered.

    -
    if (displayObject.hasEventListener("click")) {
    -    console.log("Click listener is registered");
    +
    if (displayObject.hasEventListener(PointerEvent.POINTER_DOWN)) {
    +    console.log("Pointer down listener is registered");
    +}
    +

    willTrigger(type)

    +

    Checks if this object or any ancestor has a listener for the event type.

    +
    if (displayObject.willTrigger(PointerEvent.POINTER_DOWN)) {
    +    console.log("This object or an ancestor has a listener");
     }

    dispatchEvent(event)

    Dispatches an event.

    -
    const { Event } = next2d.events;
    +
    const { Event } = next2d.events;
     
     const event = new Event("customEvent");
     displayObject.dispatchEvent(event);
    @@ -70,12 +80,7 @@

    Properties

    - - - - - -
    PropertyTypeDescription
    typeStringEvent type
    targetObjectEvent source
    currentTargetObjectCurrent listener target
    eventPhaseNumberEvent phase
    bubblesBooleanWhether bubbles
    cancelableBooleanWhether cancelable
    +
    PropertyTypeDescription
    typeStringEvent type
    targetObjectEvent source
    currentTargetObjectCurrent listener target
    eventPhaseNumberEvent phase
    bubblesBooleanWhether bubbles

    Methods

    @@ -94,11 +99,7 @@

    Methods

    - - - - -
    MethodDescription
    stopPropagation()Stop propagation
    stopImmediatePropagation()Stop propagation immediately
    preventDefault()Cancel default behavior
    +
    MethodDescription
    stopPropagation()Stop propagation
    stopImmediatePropagation()Stop propagation immediately

    Standard Event Types

    @@ -127,7 +128,7 @@
    EventDescription
    addedAdded to DisplayObjectContainer
    addedToStageAdded to Stage
    removedRemoved from DisplayObjectContainer
    removedFromStageRemoved from Stage
    -
    sprite.addEventListener("addedToStage", function(event) {
    +
    sprite.addEventListener("addedToStage", (event) => {
         console.log("Added to stage");
     });
    @@ -153,7 +154,7 @@
    EventDescription
    enterFrameOccurs each frame
    frameConstructedFrame construction complete
    exitFrameWhen leaving frame
    -
    movieClip.addEventListener("enterFrame", function(event) {
    +
    movieClip.addEventListener("enterFrame", (event) => {
         // Processing executed every frame
         updatePosition();
     });
    @@ -179,24 +180,33 @@ -
    EventDescription
    completeLoad complete
    progressLoad progress
    ioErrorIO error
    -
    const { Loader } = next2d.display;
    +
    +
    +
    +
    +
    EventDescription
    completeLoad complete
    progressLoad progress
    ioErrorIO error
    httpStatusHTTP status received
    +
    const { Loader } = next2d.display;
     const { URLRequest } = next2d.net;
     
     const loader = new Loader();
     
    -loader.contentLoaderInfo.addEventListener("complete", function(event) {
    -    const content = event.currentTarget.content;
    -    stage.addChild(content);
    -});
    +// Loading with async/await
    +await loader.load(new URLRequest("animation.json"));
    +const content = loader.content;
    +stage.addChild(content);
     
    -loader.contentLoaderInfo.addEventListener("progress", function(event) {
    +// Using progress events
    +loader.contentLoaderInfo.addEventListener("progress", (event) => {
         const percent = (event.bytesLoaded / event.bytesTotal) * 100;
    -    console.log(percent + "% loaded");
    -});
    -
    -loader.load(new URLRequest("animation.json"));
    -

    Mouse Events

    + console.log(`${percent}% loaded`); +});
    +

    Pointer Events

    +

    PointerEvent handles pointer device interactions (mouse, pen, touch) in a unified way.

    + + + + + @@ -242,13 +252,19 @@

    Mouse Events

    -
    EventDescription
    clickClick
    doubleClickDouble click
    mouseDownMouse button pressed
    mouseUpMouse button released
    mouseMoveMouse move
    mouseOverMouse over
    mouseOutMouse out
    rollOverRoll over
    rollOutRoll out
    -
    sprite.addEventListener("click", function(event) {
    -    console.log("Click position:", event.localX, event.localY);
    +
    EventConstantDescription
    pointerDownPointerEvent.POINTER_DOWNButton press started
    pointerUpPointerEvent.POINTER_UPButton released
    pointerMovePointerEvent.POINTER_MOVEPointer coordinates changed
    pointerOverPointerEvent.POINTER_OVERPointer entered hit test boundary
    pointerOutPointerEvent.POINTER_OUTPointer left hit test boundary
    pointerLeavePointerEvent.POINTER_LEAVEPointer left element area
    pointerCancelPointerEvent.POINTER_CANCELPointer interaction canceled
    doubleClickPointerEvent.DOUBLE_CLICKDouble-click/tap occurred
    +
    const { PointerEvent } = next2d.events;
    +
    +sprite.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
    +    console.log("Pointer down:", event.localX, event.localY);
    +});
    +
    +sprite.addEventListener(PointerEvent.POINTER_MOVE, (event) => {
    +    console.log("Pointer move:", event.stageX, event.stageY);
     });
     
    -sprite.addEventListener("mouseMove", function(event) {
    -    console.log("Mouse position:", event.stageX, event.stageY);
    +sprite.addEventListener(PointerEvent.DOUBLE_CLICK, (event) => {
    +    console.log("Double click");
     });

    Keyboard Events

    @@ -268,8 +284,13 @@

    Keyboard Events

    -
    EventDescription
    keyDownKey pressed
    keyUpKey released
    -
    stage.addEventListener("keyDown", function(event) {
    +
    +
    +
    +
    EventConstantDescription
    keyDownKeyboardEvent.KEY_DOWNKey pressed
    keyUpKeyboardEvent.KEY_UPKey released
    +
    const { KeyboardEvent } = next2d.events;
    +
    +stage.addEventListener(KeyboardEvent.KEY_DOWN, (event) => {
         console.log("Key code:", event.keyCode);
     
         switch (event.keyCode) {
    @@ -281,8 +302,112 @@ 

    Keyboard Events

    break; } });
    +

    Focus Events

    + + + + + + + + + + + + + + + + + + + + +
    EventConstantDescription
    focusInFocusEvent.FOCUS_INElement received focus
    focusOutFocusEvent.FOCUS_OUTElement lost focus
    +
    const { FocusEvent } = next2d.events;
    +
    +textField.addEventListener(FocusEvent.FOCUS_IN, (event) => {
    +    console.log("Received focus");
    +});
    +

    Wheel Events

    + + + + + + + + + + + + + + + +
    EventConstantDescription
    wheelWheelEvent.WHEELMouse wheel rotated
    +
    const { WheelEvent } = next2d.events;
    +
    +stage.addEventListener(WheelEvent.WHEEL, (event) => {
    +    console.log("Wheel rotated");
    +});
    +

    Video Events

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EventConstantDescription
    playVideoEvent.PLAYPlay requested
    playingVideoEvent.PLAYINGPlayback started
    pauseVideoEvent.PAUSEPaused
    seekVideoEvent.SEEKSeek operation
    +

    Job Events

    +

    Events for Tween animations.

    + + + + + + + + + + + + + + + + + + + + +
    EventConstantDescription
    updateJobEvent.UPDATEProperty updated
    stopJobEvent.STOPJob stopped

    Custom Events

    -
    const { Event } = next2d.events;
    +
    const { Event } = next2d.events;
     
     // Define custom event
     const customEvent = new Event("gameOver", true, true);
    @@ -291,21 +416,23 @@ 

    Custom Events

    gameManager.dispatchEvent(customEvent); // Listen to event -gameManager.addEventListener("gameOver", function(event) { +gameManager.addEventListener("gameOver", (event) => { showGameOverScreen(); });

    Event Propagation

    Events propagate in three phases:

      -
    1. Capture phase: From root to target
    2. -
    3. Target phase: Processed at target
    4. -
    5. Bubbling phase: From target to root
    6. +
    7. Capture phase: From root to target (eventPhase = 1)
    8. +
    9. Target phase: Processed at target (eventPhase = 2)
    10. +
    11. Bubbling phase: From target to root (eventPhase = 3)
    -
    // Process in capture phase
    -parent.addEventListener("click", handler, true);
    +
    const { PointerEvent } = next2d.events;
    +
    +// Process in capture phase
    +parent.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
     
     // Process in bubbling phase (default)
    -child.addEventListener("click", handler, false);
    +child.addEventListener(PointerEvent.POINTER_DOWN, handler, false);
    • DisplayObject
    • diff --git a/docs/en/reference/player/movie-clip/index.html b/docs/en/reference/player/movie-clip/index.html index 7230385c..2ab7aa74 100644 --- a/docs/en/reference/player/movie-clip/index.html +++ b/docs/en/reference/player/movie-clip/index.html @@ -238,7 +238,8 @@

      exitFrame

      });

    Usage Examples

    Basic Animation Control

    -
    const { Loader } = next2d.display;
    +
    const { Loader } = next2d.display;
    +const { PointerEvent } = next2d.events;
     const { URLRequest } = next2d.net;
     
     // Load MovieClip from JSON
    @@ -252,7 +253,7 @@ 

    Basic Animation Control

    mc.stop(); // Play/pause on button click -button.addEventListener("click", function() { +button.addEventListener(PointerEvent.POINTER_DOWN, () => { if (mc.isPlaying) { mc.stop(); } else { diff --git a/docs/en/reference/player/shape/index.html b/docs/en/reference/player/shape/index.html index 4ec8a786..c74b6a9a 100644 --- a/docs/en/reference/player/shape/index.html +++ b/docs/en/reference/player/shape/index.html @@ -569,18 +569,17 @@

    Cubic Bezier Curve

    stage.addChild(shape);

    Bitmap Fill

    -
    const { Shape, Loader } = next2d.display;
    +
    const { Shape } = next2d.display;
     
    -const loader = new Loader();
    -await loader.load("texture.png");
    -
    -const bitmapData = loader.contentLoaderInfo
    -    .content.bitmapData;
    +// Load image using Shape's load() method
    +const textureShape = new Shape();
    +await textureShape.load("texture.png");
     
    +// Use the loaded bitmapData for bitmap fill
     const shape = new Shape();
     const g = shape.graphics;
     
    -g.beginBitmapFill(bitmapData, null, true, true);
    +g.beginBitmapFill(textureShape.bitmapData, null, true, true);
     g.drawRect(0, 0, 400, 300);
     g.endFill();
     
    diff --git a/docs/en/reference/player/sprite/index.html b/docs/en/reference/player/sprite/index.html
    index bc87692f..8a803ddb 100644
    --- a/docs/en/reference/player/sprite/index.html
    +++ b/docs/en/reference/player/sprite/index.html
    @@ -503,7 +503,8 @@ 

    Methods Inherited from DisplayObje
    MethodReturn TypeDescription
    getBounds(targetDisplayObject?: DisplayObject)RectangleReturns a rectangle that defines the area of the display object relative to the coordinate system of the targetDisplayObject
    globalToLocal(point: Point)PointConverts the point object from Stage (global) coordinates to the display object’s (local) coordinates
    localToGlobal(point: Point)PointConverts the point object from the display object’s (local) coordinates to Stage (global) coordinates
    hitTestObject(target: DisplayObject)booleanEvaluates the DisplayObject’s drawing range to see if it overlaps or intersects
    hitTestPoint(x: number, y: number, shapeFlag?: boolean)booleanEvaluates the display object to see if it overlaps or intersects with the point specified by x and y parameters
    remove()voidRemoves the parent-child relationship
    getLocalVariable(key: any)anyGets a value from the local variable space of the class
    setLocalVariable(key: any, value: any)voidStores a value in the local variable space of the class
    hasLocalVariable(key: any)booleanDetermines if there is a value in the local variable space of the class
    deleteLocalVariable(key: any)voidRemoves a value from the local variable space of the class
    getGlobalVariable(key: any)anyGets a value from the global variable space
    setGlobalVariable(key: any, value: any)voidStores a value in the global variable space
    hasGlobalVariable(key: any)booleanDetermines if there is a value in the global variable space
    deleteGlobalVariable(key: any)voidRemoves a value from the global variable space
    clearGlobalVariable()voidClears all values in the global variable space

    Usage Examples

    Use as Button

    -
    const { Sprite, Shape } = next2d.display;
    +
    const { Sprite, Shape } = next2d.display;
    +const { PointerEvent } = next2d.events;
     
     const button = new Sprite();
     
    @@ -519,7 +520,7 @@ 

    Use as Button

    button.addChild(bg); // Click event -button.addEventListener("click", function() { +button.addEventListener(PointerEvent.POINTER_DOWN, () => { console.log("Button clicked"); }); @@ -548,7 +549,8 @@

    Use as Mask

    stage.addChild(container); stage.addChild(maskShape);

    Drag and Drop

    -
    const { Sprite, Shape } = next2d.display;
    +
    const { Sprite, Shape } = next2d.display;
    +const { PointerEvent } = next2d.events;
     const { Rectangle } = next2d.geom;
     
     const draggable = new Sprite();
    @@ -561,13 +563,13 @@ 

    Drag and Drop

    draggable.addChild(bg); // Start drag -draggable.addEventListener("mouseDown", function() { +draggable.addEventListener(PointerEvent.POINTER_DOWN, () => { // Start dragging (lock center, specify bounds) draggable.startDrag(true, new Rectangle(0, 0, 400, 300)); }); // Stop drag -draggable.addEventListener("mouseUp", function() { +draggable.addEventListener(PointerEvent.POINTER_UP, () => { draggable.stopDrag(); }); diff --git a/docs/en/reference/player/tween/index.html b/docs/en/reference/player/tween/index.html index 849b61b0..198b2dea 100644 --- a/docs/en/reference/player/tween/index.html +++ b/docs/en/reference/player/tween/index.html @@ -5,323 +5,436 @@ gtag("config", "G-8GJWF4S3RH");

    Tween Animation

    -

    Next2D Player allows you to implement programmatic animations (Tweens). You can smoothly animate properties like position, size, and transparency.

    +

    Next2D Player allows you to implement programmatic animations using the Tween system from the @next2d/ui package. You can smoothly animate properties like position, size, and transparency.

    Basic Tween Concepts

    flowchart LR
         Start["Start Value"] -->|Easing Function| Progress["Progress 0→1"]
         Progress --> End["End Value"]
     
         subgraph Easing["Easing"]
    -        Linear["Linear"]
    -        EaseIn["EaseIn"]
    -        EaseOut["EaseOut"]
    -        EaseInOut["EaseInOut"]
    +        Linear["linear"]
    +        InQuad["inQuad"]
    +        OutQuad["outQuad"]
    +        InOutQuad["inOutQuad"]
         end
    -

    Basic Tween Class

    -
    class Tween {
    -    constructor(target, options) {
    -        this._target = target;
    -        this._properties = {};
    -        this._duration = options.duration;
    -        this._easing = options.easing || Easing.linear;
    -        this._startTime = 0;
    -        this._isPlaying = false;
    -        this._onUpdate = options.onUpdate;
    -        this._onComplete = options.onComplete;
    -    }
    -
    -    to(properties) {
    -        for (const key in properties) {
    -            this._properties[key] = {
    -                start: this._target[key],
    -                end: properties[key]
    -            };
    -        }
    -        return this;
    -    }
    -
    -    play() {
    -        this._startTime = Date.now();
    -        this._isPlaying = true;
    -        this._update();
    -        return this;
    -    }
    -
    -    _update() {
    -        const self = this;
    -        if (!this._isPlaying) return;
    -
    -        const elapsed = Date.now() - this._startTime;
    -        let progress = Math.min(1, elapsed / this._duration);
    -        progress = this._easing(progress);
    -
    -        // Update properties
    -        for (const key in this._properties) {
    -            const prop = this._properties[key];
    -            this._target[key] = prop.start + (prop.end - prop.start) * progress;
    -        }
    -
    -        if (this._onUpdate) {
    -            this._onUpdate();
    -        }
    -
    -        if (elapsed < this._duration) {
    -            requestAnimationFrame(function() { self._update(); });
    -        } else {
    -            this._isPlaying = false;
    -            if (this._onComplete) {
    -                this._onComplete();
    -            }
    -        }
    -    }
    -
    -    stop() {
    -        this._isPlaying = false;
    -    }
    -}
    +

    Tween.add()

    +

    Use the Tween.add() method to create a Job instance for animation.

    +
    const { Tween, Easing } = next2d.ui;
    +
    +const job = Tween.add(
    +    target,    // Target object to animate
    +    from,      // Starting property values
    +    to,        // Ending property values
    +    delay,     // Delay in seconds (default: 0)
    +    duration,  // Animation duration in seconds (default: 1)
    +    ease       // Easing function (default: linear)
    +);
    +
    +// Start the animation
    +job.start();
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ParameterTypeDefaultDescription
    targetany-Target object to animate
    fromobject-Starting property values
    toobject-Ending property values
    delaynumber0Delay before animation starts (seconds)
    durationnumber1Animation duration (seconds)
    easeFunction | nullnullEasing function (defaults to linear)
    +

    Return Value

    +

    Job - Animation job instance

    +

    Job Class

    +

    The Job class manages individual animation jobs. It extends EventDispatcher.

    +

    Methods

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    MethodReturnDescription
    start()voidStarts the animation
    stop()voidStops the animation
    chain(nextJob: Job | null)Job | nullChains another job to start after this one completes
    +

    Properties

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropertyTypeDescription
    targetanyTarget object
    fromobjectStart values
    toobjectEnd values
    delaynumberDelay time
    durationnumberDuration time
    easeFunctionEasing function
    currentTimenumberCurrent animation time
    nextJobJob | nullNext chained job
    +

    Events

    + + + + + + + + + + + + + + + + + +
    EventDescription
    enterFrameDispatched on each animation frame
    completeDispatched when animation completes

    Easing Functions

    -
    const Easing = {
    -    // Linear
    -    linear: function(t) { return t; },
    -
    -    // Acceleration
    -    easeInQuad: function(t) { return t * t; },
    -    easeInCubic: function(t) { return t * t * t; },
    -    easeInQuart: function(t) { return t * t * t * t; },
    -
    -    // Deceleration
    -    easeOutQuad: function(t) { return t * (2 - t); },
    -    easeOutCubic: function(t) { return (--t) * t * t + 1; },
    -    easeOutQuart: function(t) { return 1 - (--t) * t * t * t; },
    -
    -    // Acceleration → Deceleration
    -    easeInOutQuad: function(t) {
    -        return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
    -    },
    -    easeInOutCubic: function(t) {
    -        return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
    -    },
    -
    -    // Bounce
    -    easeOutBounce: function(t) {
    -        if (t < 1 / 2.75) {
    -            return 7.5625 * t * t;
    -        } else if (t < 2 / 2.75) {
    -            return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;
    -        } else if (t < 2.5 / 2.75) {
    -            return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;
    -        } else {
    -            return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;
    -        }
    -    },
    -
    -    // Back (overshoots then returns)
    -    easeOutBack: function(t) {
    -        const c1 = 1.70158;
    -        const c3 = c1 + 1;
    -        return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
    -    },
    -
    -    // Elastic (rubber-like motion)
    -    easeOutElastic: function(t) {
    -        if (t === 0 || t === 1) return t;
    -        return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * (2 * Math.PI) / 3) + 1;
    -    }
    -};
    +

    The Easing class provides 32 easing functions across 11 easing types with In, Out, and InOut variants.

    +

    Linear

    +
      +
    • Easing.linear - Constant speed
    • +
    +

    Quadratic (Quad)

    +
      +
    • Easing.inQuad - Accelerating from zero velocity
    • +
    • Easing.outQuad - Decelerating to zero velocity
    • +
    • Easing.inOutQuad - Acceleration until halfway, then deceleration
    • +
    +

    Cubic

    +
      +
    • Easing.inCubic / Easing.outCubic / Easing.inOutCubic
    • +
    +

    Quartic (Quart)

    +
      +
    • Easing.inQuart / Easing.outQuart / Easing.inOutQuart
    • +
    +

    Quintic (Quint)

    +
      +
    • Easing.inQuint / Easing.outQuint / Easing.inOutQuint
    • +
    +

    Sinusoidal (Sine)

    +
      +
    • Easing.inSine / Easing.outSine / Easing.inOutSine
    • +
    +

    Exponential (Expo)

    +
      +
    • Easing.inExpo / Easing.outExpo / Easing.inOutExpo
    • +
    +

    Circular (Circ)

    +
      +
    • Easing.inCirc / Easing.outCirc / Easing.inOutCirc
    • +
    +

    Elastic

    +
      +
    • Easing.inElastic / Easing.outElastic / Easing.inOutElastic
    • +
    +

    Back

    +
      +
    • Easing.inBack / Easing.outBack / Easing.inOutBack
    • +
    +

    Bounce

    +
      +
    • Easing.inBounce / Easing.outBounce / Easing.inOutBounce
    • +
    +

    Easing Function Parameters

    +

    All easing functions accept four parameters:

    +
    ease(t: number, b: number, c: number, d: number): number
    +
      +
    • t - Current time (0 to d)
    • +
    • b - Beginning value
    • +
    • c - Change in value (end value - beginning value)
    • +
    • d - Duration
    • +

    Usage Examples

    Basic Movement Animation

    -
    const { Sprite } = next2d.display;
    +
    const { Tween, Easing } = next2d.ui;
     
     const sprite = new Sprite();
    -sprite.x = 0;
    -sprite.y = 100;
     stage.addChild(sprite);
     
    -// Move right
    -new Tween(sprite, { duration: 1000, easing: Easing.easeOutQuad })
    -    .to({ x: 400 })
    -    .play();
    +// Move x from 0 to 400 over 1 second +const job = Tween.add( + sprite, + { x: 0, y: 100 }, + { x: 400, y: 100 }, + 0, + 1, + Easing.outQuad +); + +job.start();

    Simultaneous Multi-Property Animation

    -
    // Move + Scale + Fade in
    -new Tween(sprite, {
    -    duration: 500,
    -    easing: Easing.easeOutCubic
    -})
    -    .to({
    -        x: 200,
    -        y: 150,
    -        scaleX: 2,
    -        scaleY: 2,
    -        alpha: 1
    -    })
    -    .play();
    -

    Sequential Animation

    -
    // Consecutive animations
    -function sequentialAnimation(sprite) {
    -    new Tween(sprite, {
    -        duration: 500,
    -        onComplete: function() {
    -            new Tween(sprite, {
    -                duration: 300,
    -                onComplete: function() {
    -                    new Tween(sprite, { duration: 500 })
    -                        .to({ alpha: 0 })
    -                        .play();
    -                }
    -            })
    -                .to({ scaleX: 1.5, scaleY: 1.5 })
    -                .play();
    -        }
    -    })
    -        .to({ y: 100 })
    -        .play();
    -}
    +
    const { Tween, Easing } = next2d.ui;
    +
    +// Move + Scale + Fade in
    +const job = Tween.add(
    +    sprite,
    +    { x: 0, y: 0, scaleX: 1, scaleY: 1, alpha: 0 },
    +    { x: 200, y: 150, scaleX: 2, scaleY: 2, alpha: 1 },
    +    0,
    +    0.5,
    +    Easing.outCubic
    +);
    +
    +job.start();
    +

    Chaining Animations

    +
    const { Tween, Easing } = next2d.ui;
    +
    +// First animation
    +const job1 = Tween.add(
    +    sprite,
    +    { x: 0 },
    +    { x: 100 },
    +    0, 1,
    +    Easing.outQuad
    +);
    +
    +// Second animation
    +const job2 = Tween.add(
    +    sprite,
    +    { x: 100 },
    +    { x: 200 },
    +    0, 1,
    +    Easing.inQuad
    +);
    +
    +// Chain and start
    +job1.chain(job2);
    +job1.start();
    +

    Delayed Animation

    +
    const { Tween, Easing } = next2d.ui;
    +
    +// Fade out over 1 second after 0.5 second delay
    +const job = Tween.add(
    +    sprite,
    +    { alpha: 1 },
    +    { alpha: 0 },
    +    0.5,
    +    1,
    +    Easing.inQuad
    +);
    +
    +job.start();
    +

    Using Events

    +
    const { Tween, Easing } = next2d.ui;
    +
    +const job = Tween.add(
    +    sprite,
    +    { x: 0 },
    +    { x: 300 },
    +    0, 2,
    +    Easing.inOutQuad
    +);
    +
    +// Per-frame processing
    +job.addEventListener("enterFrame", (event) => {
    +    console.log("Progress:", job.currentTime);
    +});
    +
    +// On completion
    +job.addEventListener("complete", (event) => {
    +    console.log("Animation complete!");
    +});
    +
    +job.start();

    Game Examples

    Character Jump

    -
    function jump(character) {
    +
    const { Tween, Easing } = next2d.ui;
    +
    +function jump(character) {
         const startY = character.y;
         const jumpHeight = 100;
     
         // Ascend
    -    new Tween(character, {
    -        duration: 300,
    -        easing: Easing.easeOutQuad,
    -        onComplete: function() {
    -            // Descend
    -            new Tween(character, {
    -                duration: 300,
    -                easing: Easing.easeInQuad
    -            })
    -                .to({ y: startY })
    -                .play();
    -        }
    -    })
    -        .to({ y: startY - jumpHeight })
    -        .play();
    -}
    -

    Damage Effect

    -
    function damageEffect(target) {
    -    const originalX = target.x;
    -    let shakeCount = 0;
    -
    -    // Flash + Shake
    -    function shake() {
    -        if (shakeCount >= 6) {
    -            target.x = originalX;
    -            target.alpha = 1;
    -            return;
    -        }
    -
    -        const offset = shakeCount % 2 === 0 ? 5 : -5;
    -        target.x = originalX + offset;
    -        target.alpha = shakeCount % 2 === 0 ? 0.5 : 1;
    -        shakeCount++;
    -
    -        setTimeout(shake, 50);
    -    }
    -
    -    shake();
    -}
    -

    Coin Collect Effect

    -
    function coinCollectEffect(coin, targetY) {
    -    // Float up and fade out
    -    new Tween(coin, {
    -        duration: 500,
    -        easing: Easing.easeOutQuad,
    -        onUpdate: function() {
    -            // Rotate
    -            coin.rotation += 15;
    -        },
    -        onComplete: function() {
    -            if (coin.parent) {
    -                coin.parent.removeChild(coin);
    -            }
    -        }
    -    })
    -        .to({
    -            y: targetY,
    -            alpha: 0,
    -            scaleX: 0.5,
    -            scaleY: 0.5
    -        })
    -        .play();
    +    const upJob = Tween.add(
    +        character,
    +        { y: startY },
    +        { y: startY - jumpHeight },
    +        0, 0.3,
    +        Easing.outQuad
    +    );
    +
    +    // Descend
    +    const downJob = Tween.add(
    +        character,
    +        { y: startY - jumpHeight },
    +        { y: startY },
    +        0, 0.3,
    +        Easing.inQuad
    +    );
    +
    +    // Chain ascend -> descend
    +    upJob.chain(downJob);
    +    upJob.start();
     }

    UI Animation

    -
    function showPopup(popup) {
    +
    const { Tween, Easing } = next2d.ui;
    +
    +function showPopup(popup) {
         popup.scaleX = 0;
         popup.scaleY = 0;
         popup.alpha = 0;
     
    -    new Tween(popup, {
    -        duration: 400,
    -        easing: Easing.easeOutBack
    -    })
    -        .to({ scaleX: 1, scaleY: 1, alpha: 1 })
    -        .play();
    -}
    +    const job = Tween.add(
    +        popup,
    +        { scaleX: 0, scaleY: 0, alpha: 0 },
    +        { scaleX: 1, scaleY: 1, alpha: 1 },
    +        0, 0.4,
    +        Easing.outBack
    +    );
     
    -function hidePopup(popup, onComplete) {
    -    new Tween(popup, {
    -        duration: 200,
    -        easing: Easing.easeInQuad,
    -        onComplete: onComplete
    -    })
    -        .to({ scaleX: 0, scaleY: 0, alpha: 0 })
    -        .play();
    -}
    -

    Lightweight enterFrame-based Tween

    -
    // Simple enterFrame-based tween
    -function tweenTo(target, property, endValue, speed) {
    -    speed = speed || 0.1;
    -
    -    function handler(event) {
    -        const current = target[property];
    -        const diff = endValue - current;
    -
    -        if (Math.abs(diff) < 0.1) {
    -            target[property] = endValue;
    -            stage.removeEventListener("enterFrame", handler);
    -        } else {
    -            target[property] = current + diff * speed;
    -        }
    -    }
    -
    -    stage.addEventListener("enterFrame", handler);
    +    job.start();
     }
     
    -// Usage
    -tweenTo(sprite, "x", 300, 0.15);  // Move x toward 300
    -tweenTo(sprite, "alpha", 0, 0.05);  // Fade out
    -

    Custom Easing

    -
    // Bezier curve based easing
    -function bezierEasing(x1, y1, x2, y2) {
    -    return function(t) {
    -        // Simple cubic bezier interpolation
    -        const cx = 3 * x1;
    -        const bx = 3 * (x2 - x1) - cx;
    -        const ax = 1 - cx - bx;
    -
    -        const cy = 3 * y1;
    -        const by = 3 * (y2 - y1) - cy;
    -        const ay = 1 - cy - by;
    -
    -        function sampleCurveY(t) {
    -            return ((ay * t + by) * t + cy) * t;
    -        }
    -
    -        return sampleCurveY(t);
    -    };
    -}
    +function hidePopup(popup) {
    +    const job = Tween.add(
    +        popup,
    +        { scaleX: 1, scaleY: 1, alpha: 1 },
    +        { scaleX: 0, scaleY: 0, alpha: 0 },
    +        0, 0.2,
    +        Easing.inQuad
    +    );
    +
    +    job.addEventListener("complete", () => {
    +        popup.visible = false;
    +    });
     
    -// CSS cubic-bezier equivalent
    -const customEase = bezierEasing(0.25, 0.1, 0.25, 1.0);
    -

    Performance Tips

    -
      -
    1. Use requestAnimationFrame: Smoother than setTimeout
    2. -
    3. Minimize Property Changes: Only update necessary properties
    4. -
    5. Object Pooling: Pool and reuse tweens for many animations
    6. -
    7. Cleanup After Completion: Remove unnecessary listeners
    8. -
    + job.start(); +}
    +

    Coin Collect Effect

    +
    const { Tween, Easing } = next2d.ui;
    +
    +function coinCollectEffect(coin) {
    +    const job = Tween.add(
    +        coin,
    +        { y: coin.y, alpha: 1, scaleX: 1, scaleY: 1 },
    +        { y: coin.y - 50, alpha: 0, scaleX: 0.5, scaleY: 0.5 },
    +        0, 0.5,
    +        Easing.outQuad
    +    );
    +
    +    job.addEventListener("enterFrame", () => {
    +        coin.rotation += 15;
    +    });
    +
    +    job.addEventListener("complete", () => {
    +        coin.parent?.removeChild(coin);
    +    });
    +
    +    job.start();
    +}
    +

    Stopping and Control

    +
    const { Tween, Easing } = next2d.ui;
    +
    +const job = Tween.add(
    +    sprite,
    +    { x: 0 },
    +    { x: 400 },
    +    0, 2,
    +    Easing.linear
    +);
    +
    +job.start();
    +
    +// Stop midway
    +stopButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
    +    job.stop();
    +});
    • DisplayObject
    • diff --git a/docs/en/reference/player/video/index.html b/docs/en/reference/player/video/index.html index a09cfebf..8915cc68 100644 --- a/docs/en/reference/player/video/index.html +++ b/docs/en/reference/player/video/index.html @@ -125,7 +125,7 @@

      Properties

      -
      PropertyTypeDefaultDescription
      srcstring""Specifies the URL of the video content
      videoWidthnumber0An integer specifying the width of the video, in pixels
      videoHeightnumber0An integer specifying the height of the video, in pixels
      durationnumber0Total number of keyframes (video duration)
      currentTimenumber0Current keyframe (playback position)
      volumenumber1The volume, ranging from 0 (silent) to 1 (full volume)
      loopbooleanfalseSpecifies whether to generate a video loop
      autoPlaybooleantrueSetting up automatic video playback
      smoothingbooleantrueSpecifies whether the video should be smoothed (interpolated) when it is scaled
      pausedbooleantrueReturns whether the video is paused
      mutedbooleanfalseReturns whether the video is muted
      loadedbooleanfalseReturns whether the video has been loaded
      endedbooleanfalseReturns whether the video has ended
      isVideobooleantrueReturns whether the display object has Video functionality (read-only)
      +
      PropertyTypeDefaultDescription
      srcstring""Specifies the URL of the video content
      videoWidthnumber0An integer specifying the width of the video, in pixels
      videoHeightnumber0An integer specifying the height of the video, in pixels
      durationnumber0Total number of keyframes (video duration)
      currentTimenumber0Current keyframe (playback position)
      volumenumber1The volume, ranging from 0 (silent) to 1 (full volume)
      loopbooleanfalseSpecifies whether to loop the video
      autoPlaybooleantrueSetting up automatic video playback
      smoothingbooleantrueSpecifies whether the video should be smoothed (interpolated) when it is scaled
      pausedbooleantrueReturns whether the video is paused
      mutedbooleanfalseReturns whether the video is muted
      loadedbooleanfalseReturns whether the video has been loaded
      endedbooleanfalseReturns whether the video has ended
      isVideobooleantrueReturns whether the display object has Video functionality (read-only)

      Methods

      @@ -155,60 +155,93 @@

      Methods

      MethodReturnDescription
      play()Promise<void>Plays the video file
      pause()voidPauses the video playback
      seek(offset: number)voidSeeks the keyframe closest to the specified location

      Usage Examples

      Basic Video Playback

      -
      const { Video } = next2d.media;
      +
      const { Video } = next2d.media;
       
      -// Create Video object
      +// Create Video object (specify width, height)
       const video = new Video(640, 360);
       
      -// Set video source
      +// Set video source (loading starts automatically)
       video.src = "video.mp4";
      -video.autoPlay = true;
      -video.loop = false;
      -video.volume = 0.8;
      +
      +// Property settings
      +video.autoPlay = true;   // Auto play
      +video.loop = false;      // No loop
      +video.smoothing = true;  // Enable smoothing
       
       // Add to stage
       stage.addChild(video);

      Playback Control

      -
      const { Video } = next2d.media;
      +
      const { Video } = next2d.media;
      +const { PointerEvent } = next2d.events;
       
       const video = new Video(640, 360);
      +video.autoPlay = false;  // Disable auto play
       video.src = "video.mp4";
      +
       stage.addChild(video);
       
       // Play button
      -playButton.addEventListener("click", async function() {
      +playButton.addEventListener(PointerEvent.POINTER_DOWN, async () => {
           await video.play();
       });
       
       // Pause button
      -pauseButton.addEventListener("click", function() {
      +pauseButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
           video.pause();
       });
       
       // Stop button (pause and return to start)
      -stopButton.addEventListener("click", function() {
      +stopButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
           video.pause();
           video.seek(0);
       });
       
       // Forward 10 seconds
      -forwardButton.addEventListener("click", function() {
      +forwardButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
           video.seek(video.currentTime + 10);
       });
       
       // Back 10 seconds
      -backButton.addEventListener("click", function() {
      +backButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
           video.seek(Math.max(0, video.currentTime - 10));
       });
      +

      Event Listening

      +
      const { Video } = next2d.media;
      +const { VideoEvent } = next2d.events;
      +
      +const video = new Video(640, 360);
      +
      +// Play event
      +video.addEventListener(VideoEvent.PLAY, () => {
      +    console.log("Play requested");
      +});
      +
      +// Playing event
      +video.addEventListener(VideoEvent.PLAYING, () => {
      +    console.log("Playback started");
      +});
      +
      +// Pause event
      +video.addEventListener(VideoEvent.PAUSE, () => {
      +    console.log("Paused");
      +});
      +
      +// Seek event
      +video.addEventListener(VideoEvent.SEEK, () => {
      +    console.log("Seek:", video.currentTime);
      +});
      +
      +video.src = "video.mp4";
      +stage.addChild(video);

      Displaying Playback Progress

      -
      const { Video } = next2d.media;
      +
      const { Video } = next2d.media;
       
       const video = new Video(640, 360);
       video.src = "video.mp4";
       stage.addChild(video);
       
       // Update progress each frame
      -stage.addEventListener("enterFrame", function() {
      +stage.addEventListener("enterFrame", () => {
           if (video.duration > 0) {
               const progress = video.currentTime / video.duration;
               progressBar.scaleX = progress;
      @@ -222,115 +255,53 @@ 

      Displaying Playback Progress

      return min + ":" + sec.toString().padStart(2, '0'); }

      Volume Control

      -
      const { Video } = next2d.media;
      +
      const { Video } = next2d.media;
       
       const video = new Video(640, 360);
       video.src = "video.mp4";
       video.volume = 0.5;  // 50%
      -stage.addChild(video);
       
      -// Volume slider
      -volumeSlider.addEventListener("change", function(event) {
      -    video.volume = event.target.value;  // 0.0 ~ 1.0
      -});
      +stage.addChild(video);
       
       // Mute toggle
      -let isMuted = false;
      -let previousVolume = 0.5;
      -
      -muteButton.addEventListener("click", function() {
      -    isMuted = !isMuted;
      -    if (isMuted) {
      -        previousVolume = video.volume;
      -        video.volume = 0;
      -    } else {
      -        video.volume = previousVolume;
      -    }
      +muteButton.addEventListener(PointerEvent.POINTER_DOWN, () => {
      +    video.muted = !video.muted;
       });
      -

      Fullscreen Support

      -
      const { Video } = next2d.media;
      +

      Loop Playback

      +
      const { Video } = next2d.media;
       
       const video = new Video(640, 360);
      +video.loop = true;  // Enable loop
       video.src = "video.mp4";
      -stage.addChild(video);
      -
      -// Fullscreen toggle
      -fullscreenButton.addEventListener("click", function() {
      -    if (stage.displayState === "normal") {
      -        // Switch to fullscreen
      -        stage.displayState = "fullScreen";
      -        video.width = stage.stageWidth;
      -        video.height = stage.stageHeight;
      -    } else {
      -        // Return to normal display
      -        stage.displayState = "normal";
      -        video.width = 640;
      -        video.height = 360;
      -    }
      -});
      -

      Video Player Component

      -
      const { Sprite } = next2d.display;
      -const { Video } = next2d.media;
      -
      -class VideoPlayer extends Sprite {
      -    constructor(width, height) {
      -        super();
      -
      -        this._width = width;
      -        this._height = height;
      -
      -        this._video = new Video(width, height);
      -        this.addChild(this._video);
      -    }
      -
      -    load(url) {
      -        this._video.src = url;
      -    }
      -
      -    async play() {
      -        await this._video.play();
      -    }
      -
      -    pause() {
      -        this._video.pause();
      -    }
      -
      -    seek(time) {
      -        this._video.seek(time);
      -    }
      -
      -    get currentTime() {
      -        return this._video.currentTime;
      -    }
      -
      -    get duration() {
      -        return this._video.duration || 0;
      -    }
      -
      -    set volume(value) {
      -        this._video.volume = value;
      -    }
      -
      -    get volume() {
      -        return this._video.volume;
      -    }
      -}
      -
      -// Usage
      -const player = new VideoPlayer(640, 360);
      -stage.addChild(player);
      -player.load("video.mp4");
      -player.play();
      -

      Loop Playback and Auto Play

      -
      const { Video } = next2d.media;
      -
      -const video = new Video(640, 360);
      -video.src = "background-video.mp4";
      -video.autoPlay = true;
      -video.loop = true;
      -video.volume = 0;  // Muted background video
       
       stage.addChild(video);
      +

      VideoEvent

      + + + + + + + + + + + + + + + + + + + + + + + + + +
      EventDescription
      VideoEvent.PLAYWhen play is requested
      VideoEvent.PLAYINGWhen playback starts
      VideoEvent.PAUSEWhen paused
      VideoEvent.SEEKWhen seeking

      Supported Formats

      diff --git a/docs/ja/reference/player/events/index.html b/docs/ja/reference/player/events/index.html index 59e8aadf..c53f303e 100644 --- a/docs/ja/reference/player/events/index.html +++ b/docs/ja/reference/player/events/index.html @@ -5,27 +5,37 @@ gtag("config", "G-8GJWF4S3RH");

      イベントシステム

      -

      Next2D Playerは、Flash Playerと同様のイベントモデルを採用しています。

      +

      Next2D Playerは、W3C DOMイベントモデルと同様の3フェーズイベントフロー機構を採用しています。

      EventDispatcher

      すべてのイベント発行可能なオブジェクトの基底クラスです。

      addEventListener(type, listener, useCapture, priority)

      イベントリスナーを登録します。

      -
      displayObject.addEventListener("click", (event) => {
      -    console.log("クリックされました");
      +
      const { PointerEvent } = next2d.events;
      +
      +displayObject.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
      +    console.log("ポインターが押されました");
       });
       
       // キャプチャフェーズで受け取る
      -displayObject.addEventListener("click", handler, true);
      +displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
       
       // 優先度を指定
      -displayObject.addEventListener("click", handler, false, 10);
      +displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, false, 10);

      removeEventListener(type, listener, useCapture)

      イベントリスナーを削除します。

      -
      displayObject.removeEventListener("click", handler);
      +
      displayObject.removeEventListener(PointerEvent.POINTER_DOWN, handler);
      +

      removeAllEventListener(type, useCapture)

      +

      特定タイプのすべてのイベントリスナーを削除します。

      +
      displayObject.removeAllEventListener(PointerEvent.POINTER_DOWN);

      hasEventListener(type)

      指定タイプのリスナーが登録されているか確認します。

      -
      if (displayObject.hasEventListener("click")) {
      -    console.log("クリックリスナーが登録されています");
      +
      if (displayObject.hasEventListener(PointerEvent.POINTER_DOWN)) {
      +    console.log("ポインターダウンリスナーが登録されています");
      +}
      +

      willTrigger(type)

      +

      このオブジェクトまたは祖先がイベントタイプのリスナーを持つか確認します。

      +
      if (displayObject.willTrigger(PointerEvent.POINTER_DOWN)) {
      +    console.log("このオブジェクトまたは祖先にリスナーがあります");
       }

      dispatchEvent(event)

      イベントを発行します。

      @@ -70,12 +80,7 @@

      プロパティ

      - - - - - -
      プロパティ説明
      typeStringイベントタイプ
      targetObjectイベント発行元
      currentTargetObject現在のリスナー登録先
      eventPhaseNumberイベントフェーズ
      bubblesBooleanバブリングするか
      cancelableBooleanキャンセル可能か
      +
      プロパティ説明
      typeStringイベントタイプ
      targetObjectイベント発行元
      currentTargetObject現在のリスナー登録先
      eventPhaseNumberイベントフェーズ
      bubblesBooleanバブリングするか

      メソッド

      @@ -94,11 +99,7 @@

      メソッド

      - - - - -
      メソッド説明
      stopPropagation()伝播を停止
      stopImmediatePropagation()伝播を即座に停止
      preventDefault()デフォルト動作をキャンセル
      +
      メソッド説明
      stopPropagation()伝播を停止
      stopImmediatePropagation()伝播を即座に停止

      標準イベントタイプ

      表示リスト関連

      @@ -179,7 +180,11 @@

      ロード関連

      -
      イベント説明
      completeロード完了
      progressロード進捗
      ioErrorIOエラー
      + + + + +
      イベント説明
      completeロード完了
      progressロード進捗
      ioErrorIOエラー
      httpStatusHTTPステータス受信
      const { Loader } = next2d.display;
       const { URLRequest } = next2d.net;
       
      @@ -195,7 +200,8 @@ 

      ロード関連

      const percent = (event.bytesLoaded / event.bytesTotal) * 100; console.log(`${percent}% ロード完了`); });
      -

      マウスイベント

      +

      ポインターイベント

      +

      PointerEventはマウス、ペン、タッチなどのポインターデバイスの操作を統一的に処理します。

      @@ -241,13 +247,24 @@

      マウスイベント

      -
      イベント説明
      clickクリック
      doubleClickダブルクリック
      mouseDownマウスボタン押下
      mouseUpマウスボタン解放
      mouseMoveマウス移動
      mouseOverマウスオーバー
      mouseOutマウスアウト
      rollOverロールオーバー
      rollOutロールアウト
      -
      sprite.addEventListener("click", (event) => {
      -    console.log("クリック位置:", event.localX, event.localY);
      +
      +
      +
      +
      +
      +
      イベント定数説明
      pointerDownPointerEvent.POINTER_DOWNボタンの押下開始
      pointerUpPointerEvent.POINTER_UPボタンの解放
      pointerMovePointerEvent.POINTER_MOVEポインター座標の変化
      pointerOverPointerEvent.POINTER_OVERポインターがヒットテスト境界に入った
      pointerOutPointerEvent.POINTER_OUTポインターがヒットテスト境界を出た
      pointerLeavePointerEvent.POINTER_LEAVEポインターが要素領域を離れた
      pointerCancelPointerEvent.POINTER_CANCELポインター操作がキャンセルされた
      doubleClickPointerEvent.DOUBLE_CLICKダブルクリック/タップが発生
      +
      const { PointerEvent } = next2d.events;
      +
      +sprite.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
      +    console.log("ポインターダウン:", event.localX, event.localY);
      +});
      +
      +sprite.addEventListener(PointerEvent.POINTER_MOVE, (event) => {
      +    console.log("ポインター移動:", event.stageX, event.stageY);
       });
       
      -sprite.addEventListener("mouseMove", (event) => {
      -    console.log("マウス位置:", event.stageX, event.stageY);
      +sprite.addEventListener(PointerEvent.DOUBLE_CLICK, (event) => {
      +    console.log("ダブルクリック");
       });

      キーボードイベント

      @@ -267,8 +284,13 @@

      キーボードイベント

      -
      イベント説明
      keyDownキー押下
      keyUpキー解放
      -
      stage.addEventListener("keyDown", (event) => {
      +
      +
      +
      +
      イベント定数説明
      keyDownKeyboardEvent.KEY_DOWNキー押下
      keyUpKeyboardEvent.KEY_UPキー解放
      +
      const { KeyboardEvent } = next2d.events;
      +
      +stage.addEventListener(KeyboardEvent.KEY_DOWN, (event) => {
           console.log("キーコード:", event.keyCode);
       
           switch (event.keyCode) {
      @@ -280,6 +302,110 @@ 

      キーボードイベント

      break; } });
      +

      フォーカスイベント

      + + + + + + + + + + + + + + + + + + + + +
      イベント定数説明
      focusInFocusEvent.FOCUS_INフォーカスを受け取った
      focusOutFocusEvent.FOCUS_OUTフォーカスを失った
      +
      const { FocusEvent } = next2d.events;
      +
      +textField.addEventListener(FocusEvent.FOCUS_IN, (event) => {
      +    console.log("フォーカスを受け取りました");
      +});
      +

      ホイールイベント

      + + + + + + + + + + + + + + + +
      イベント定数説明
      wheelWheelEvent.WHEELマウスホイールが回転した
      +
      const { WheelEvent } = next2d.events;
      +
      +stage.addEventListener(WheelEvent.WHEEL, (event) => {
      +    console.log("ホイール回転");
      +});
      +

      ビデオイベント

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      イベント定数説明
      playVideoEvent.PLAY再生がリクエストされた
      playingVideoEvent.PLAYING再生が開始された
      pauseVideoEvent.PAUSE一時停止された
      seekVideoEvent.SEEKシーク操作
      +

      ジョブイベント

      +

      Tweenアニメーション用のイベントです。

      + + + + + + + + + + + + + + + + + + + + +
      イベント定数説明
      updateJobEvent.UPDATEプロパティが更新された
      stopJobEvent.STOPジョブが停止した

      カスタムイベント

      const { Event } = next2d.events;
       
      @@ -296,15 +422,17 @@ 

      カスタムイベント

      イベントの伝播

      イベントは3つのフェーズで伝播します:

        -
      1. キャプチャフェーズ: rootからtargetへ
      2. -
      3. ターゲットフェーズ: targetで処理
      4. -
      5. バブリングフェーズ: targetからrootへ
      6. +
      7. キャプチャフェーズ: rootからtargetへ(eventPhase = 1)
      8. +
      9. ターゲットフェーズ: targetで処理(eventPhase = 2)
      10. +
      11. バブリングフェーズ: targetからrootへ(eventPhase = 3)
      -
      // キャプチャフェーズで処理
      -parent.addEventListener("click", handler, true);
      +
      const { PointerEvent } = next2d.events;
      +
      +// キャプチャフェーズで処理
      +parent.addEventListener(PointerEvent.POINTER_DOWN, handler, true);
       
       // バブリングフェーズで処理(デフォルト)
      -child.addEventListener("click", handler, false);
      +child.addEventListener(PointerEvent.POINTER_DOWN, handler, false);

      関連項目

      • DisplayObject
      • diff --git a/docs/ja/reference/player/movie-clip/index.html b/docs/ja/reference/player/movie-clip/index.html index 60468c2b..3ec9a2dd 100644 --- a/docs/ja/reference/player/movie-clip/index.html +++ b/docs/ja/reference/player/movie-clip/index.html @@ -239,6 +239,7 @@

        exitFrame

        使用例

        基本的なアニメーション制御

        const { Loader, Sprite } = next2d.display;
        +const { PointerEvent } = next2d.events;
         const { URLRequest } = next2d.net;
         
         // JSONからMovieClipを読み込み
        @@ -252,7 +253,7 @@ 

        基本的なアニメーショ mc.stop(); // ボタンクリックで再生 -button.addEventListener("click", () => { +button.addEventListener(PointerEvent.POINTER_DOWN, () => { if (mc.isPlaying) { mc.stop(); } else { diff --git a/docs/ja/reference/player/shape/index.html b/docs/ja/reference/player/shape/index.html index 6bead986..7817b7cb 100644 --- a/docs/ja/reference/player/shape/index.html +++ b/docs/ja/reference/player/shape/index.html @@ -569,18 +569,17 @@

        三次ベジェ曲線

        stage.addChild(shape);

        ビットマップ塗りつぶし

        -
        const { Shape, Loader } = next2d.display;
        -
        -const loader = new Loader();
        -await loader.load("texture.png");
        +
        const { Shape } = next2d.display;
         
        -const bitmapData = loader.contentLoaderInfo
        -    .content.bitmapData;
        +// Shapeのload()メソッドで画像を読み込み
        +const textureShape = new Shape();
        +await textureShape.load("texture.png");
         
        +// 読み込んだbitmapDataを使ってビットマップ塗りつぶし
         const shape = new Shape();
         const g = shape.graphics;
         
        -g.beginBitmapFill(bitmapData, null, true, true);
        +g.beginBitmapFill(textureShape.bitmapData, null, true, true);
         g.drawRect(0, 0, 400, 300);
         g.endFill();
         
        diff --git a/docs/ja/reference/player/sprite/index.html b/docs/ja/reference/player/sprite/index.html
        index a77a6d94..1a0801d0 100644
        --- a/docs/ja/reference/player/sprite/index.html
        +++ b/docs/ja/reference/player/sprite/index.html
        @@ -504,6 +504,7 @@ 

        DisplayObjectから継

        使用例

        ボタンとして使用

        const { Sprite, Shape } = next2d.display;
        +const { PointerEvent } = next2d.events;
         
         const button = new Sprite();
         
        @@ -519,7 +520,7 @@ 

        ボタンとして使用

        button.addChild(bg); // クリックイベント -button.addEventListener("click", () => { +button.addEventListener(PointerEvent.POINTER_DOWN, () => { console.log("ボタンがクリックされました"); }); @@ -549,6 +550,7 @@

        マスクとして使用

        stage.addChild(maskShape);

        ドラッグ&ドロップ

        const { Sprite, Shape } = next2d.display;
        +const { PointerEvent } = next2d.events;
         const { Rectangle } = next2d.geom;
         
         const draggable = new Sprite();
        @@ -561,13 +563,13 @@ 

        ドラッグ&ドロップ

        draggable.addChild(bg); // ドラッグ開始 -draggable.addEventListener("mouseDown", () => { +draggable.addEventListener(PointerEvent.POINTER_DOWN, () => { // ドラッグを開始(中心をロック、境界を指定) draggable.startDrag(true, new Rectangle(0, 0, 400, 300)); }); // ドラッグ終了 -draggable.addEventListener("mouseUp", () => { +draggable.addEventListener(PointerEvent.POINTER_UP, () => { draggable.stopDrag(); }); diff --git a/docs/ja/reference/player/tween/index.html b/docs/ja/reference/player/tween/index.html index 55540e72..e4d506d3 100644 --- a/docs/ja/reference/player/tween/index.html +++ b/docs/ja/reference/player/tween/index.html @@ -5,321 +5,436 @@ gtag("config", "G-8GJWF4S3RH");

        Tweenアニメーション

        -

        Next2D Playerでは、プログラムによるアニメーション(Tween)を実装できます。位置、サイズ、透明度などのプロパティを滑らかに変化させることができます。

        +

        Next2D Playerでは、@next2d/uiパッケージのTweenシステムを使用して、プログラムによるアニメーションを実装できます。位置、サイズ、透明度などのプロパティを滑らかに変化させることができます。

        Tweenの基本概念

        flowchart LR
             Start["開始値"] -->|イージング関数| Progress["進行度 0→1"]
             Progress --> End["終了値"]
         
             subgraph Easing["イージング"]
        -        Linear["Linear"]
        -        EaseIn["EaseIn"]
        -        EaseOut["EaseOut"]
        -        EaseInOut["EaseInOut"]
        +        Linear["linear"]
        +        InQuad["inQuad"]
        +        OutQuad["outQuad"]
        +        InOutQuad["inOutQuad"]
             end
        -

        基本的なTweenクラス

        -
        class Tween {
        -    private _target;
        -    private _properties = {};
        -    private _duration;
        -    private _easing;
        -    private _startTime = 0;
        -    private _isPlaying = false;
        -    private _onUpdate;
        -    private _onComplete;
        -
        -    constructor(target, options) {
        -        this._target = target;
        -        this._duration = options.duration;
        -        this._easing = options.easing || Easing.linear;
        -        this._onUpdate = options.onUpdate;
        -        this._onComplete = options.onComplete;
        -    }
        -
        -    to(properties) {
        -        for (const key in properties) {
        -            this._properties[key] = {
        -                start: this._target[key],
        -                end: properties[key]
        -            };
        -        }
        -        return this;
        -    }
        -
        -    play() {
        -        this._startTime = Date.now();
        -        this._isPlaying = true;
        -        this._update();
        -        return this;
        -    }
        -
        -    private _update = () => {
        -        if (!this._isPlaying) return;
        -
        -        const elapsed = Date.now() - this._startTime;
        -        let progress = Math.min(1, elapsed / this._duration);
        -        progress = this._easing(progress);
        -
        -        // プロパティを更新
        -        for (const key in this._properties) {
        -            const prop = this._properties[key];
        -            this._target[key] = prop.start + (prop.end - prop.start) * progress;
        -        }
        -
        -        if (this._onUpdate) {
        -            this._onUpdate();
        -        }
        -
        -        if (elapsed < this._duration) {
        -            requestAnimationFrame(this._update);
        -        } else {
        -            this._isPlaying = false;
        -            if (this._onComplete) {
        -                this._onComplete();
        -            }
        -        }
        -    };
        -
        -    stop() {
        -        this._isPlaying = false;
        -    }
        -}
        +

        Tween.add()

        +

        Tween.add()メソッドでアニメーション用のJobインスタンスを作成します。

        +
        const { Tween, Easing } = next2d.ui;
        +
        +const job = Tween.add(
        +    target,    // アニメーション対象オブジェクト
        +    from,      // 開始プロパティ値
        +    to,        // 終了プロパティ値
        +    delay,     // 遅延時間(秒、デフォルト: 0)
        +    duration,  // アニメーション時間(秒、デフォルト: 1)
        +    ease       // イージング関数(デフォルト: linear)
        +);
        +
        +// アニメーションを開始
        +job.start();
        +

        パラメータ

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        パラメータデフォルト説明
        targetany-アニメーション対象オブジェクト
        fromobject-開始プロパティ値
        toobject-終了プロパティ値
        delaynumber0アニメーション開始前の遅延(秒)
        durationnumber1アニメーション継続時間(秒)
        easeFunction | nullnullイージング関数(デフォルトはlinear)
        +

        戻り値

        +

        Job - アニメーションジョブインスタンス

        +

        Job クラス

        +

        Jobクラスは個別のアニメーションジョブを管理します。EventDispatcherを継承しています。

        +

        メソッド

        + + + + + + + + + + + + + + + + + + + + + + + + + +
        メソッド戻り値説明
        start()voidアニメーションを開始します
        stop()voidアニメーションを停止します
        chain(nextJob: Job | null)Job | nullこのジョブの完了後に別のジョブを連結します
        +

        プロパティ

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        プロパティ説明
        targetany対象オブジェクト
        fromobject開始値
        toobject終了値
        delaynumber遅延時間
        durationnumber継続時間
        easeFunctionイージング関数
        currentTimenumber現在のアニメーション時間
        nextJobJob | null次の連結ジョブ
        +

        イベント

        + + + + + + + + + + + + + + + + + +
        イベント説明
        enterFrame各アニメーションフレームで発行
        completeアニメーション完了時に発行

        イージング関数

        -
        const Easing = {
        -    // 線形
        -    linear: (t) => t,
        -
        -    // 加速
        -    easeInQuad: (t) => t * t,
        -    easeInCubic: (t) => t * t * t,
        -    easeInQuart: (t) => t * t * t * t,
        -
        -    // 減速
        -    easeOutQuad: (t) => t * (2 - t),
        -    easeOutCubic: (t) => (--t) * t * t + 1,
        -    easeOutQuart: (t) => 1 - (--t) * t * t * t,
        -
        -    // 加速→減速
        -    easeInOutQuad: (t) =>
        -        t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t,
        -    easeInOutCubic: (t) =>
        -        t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
        -
        -    // バウンス
        -    easeOutBounce: (t) => {
        -        if (t < 1 / 2.75) {
        -            return 7.5625 * t * t;
        -        } else if (t < 2 / 2.75) {
        -            return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;
        -        } else if (t < 2.5 / 2.75) {
        -            return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;
        -        } else {
        -            return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;
        -        }
        -    },
        -
        -    // バック(行き過ぎて戻る)
        -    easeOutBack: (t) => {
        -        const c1 = 1.70158;
        -        const c3 = c1 + 1;
        -        return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
        -    },
        -
        -    // エラスティック(ゴムのような動き)
        -    easeOutElastic: (t) => {
        -        if (t === 0 || t === 1) return t;
        -        return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * (2 * Math.PI) / 3) + 1;
        -    }
        -};
        +

        Easingクラスは、11種類のイージングタイプでIn、Out、InOutのバリエーションを含む32種類のイージング関数を提供します。

        +

        Linear / リニア

        +
          +
        • Easing.linear - 一定速度
        • +
        +

        Quadratic (Quad) / 二次関数

        +
          +
        • Easing.inQuad - ゼロ速度から加速
        • +
        • Easing.outQuad - ゼロ速度まで減速
        • +
        • Easing.inOutQuad - 中間まで加速、その後減速
        • +
        +

        Cubic / 三次関数

        +
          +
        • Easing.inCubic / Easing.outCubic / Easing.inOutCubic
        • +
        +

        Quartic (Quart) / 四次関数

        +
          +
        • Easing.inQuart / Easing.outQuart / Easing.inOutQuart
        • +
        +

        Quintic (Quint) / 五次関数

        +
          +
        • Easing.inQuint / Easing.outQuint / Easing.inOutQuint
        • +
        +

        Sinusoidal (Sine) / 正弦波

        +
          +
        • Easing.inSine / Easing.outSine / Easing.inOutSine
        • +
        +

        Exponential (Expo) / 指数関数

        +
          +
        • Easing.inExpo / Easing.outExpo / Easing.inOutExpo
        • +
        +

        Circular (Circ) / 円形

        +
          +
        • Easing.inCirc / Easing.outCirc / Easing.inOutCirc
        • +
        +

        Elastic / 弾性

        +
          +
        • Easing.inElastic / Easing.outElastic / Easing.inOutElastic
        • +
        +

        Back / バック

        +
          +
        • Easing.inBack / Easing.outBack / Easing.inOutBack
        • +
        +

        Bounce / バウンス

        +
          +
        • Easing.inBounce / Easing.outBounce / Easing.inOutBounce
        • +
        +

        イージング関数のパラメータ

        +

        すべてのイージング関数は4つのパラメータを受け取ります:

        +
        ease(t: number, b: number, c: number, d: number): number
        +
          +
        • t - 現在の時間 (0 to d)
        • +
        • b - 開始値
        • +
        • c - 変化量 (終了値 - 開始値)
        • +
        • d - 継続時間
        • +

        使用例

        基本的な移動アニメーション

        -
        const { Sprite } = next2d.display;
        +
        const { Tween, Easing } = next2d.ui;
         
         const sprite = new Sprite();
        -sprite.x = 0;
        -sprite.y = 100;
         stage.addChild(sprite);
         
        -// 右に移動
        -new Tween(sprite, { duration: 1000, easing: Easing.easeOutQuad })
        -    .to({ x: 400 })
        -    .play();
        +// xを0から400に1秒かけて移動 +const job = Tween.add( + sprite, + { x: 0, y: 100 }, + { x: 400, y: 100 }, + 0, + 1, + Easing.outQuad +); + +job.start();

        複数プロパティの同時アニメーション

        -
        // 移動 + 拡大 + フェードイン
        -new Tween(sprite, {
        -    duration: 500,
        -    easing: Easing.easeOutCubic
        -})
        -    .to({
        -        x: 200,
        -        y: 150,
        -        scaleX: 2,
        -        scaleY: 2,
        -        alpha: 1
        -    })
        -    .play();
        -

        シーケンシャルアニメーション

        -
        // 連続したアニメーション
        -function sequentialAnimation(sprite) {
        -    new Tween(sprite, {
        -        duration: 500,
        -        onComplete: () => {
        -            new Tween(sprite, {
        -                duration: 300,
        -                onComplete: () => {
        -                    new Tween(sprite, { duration: 500 })
        -                        .to({ alpha: 0 })
        -                        .play();
        -                }
        -            })
        -                .to({ scaleX: 1.5, scaleY: 1.5 })
        -                .play();
        -        }
        -    })
        -        .to({ y: 100 })
        -        .play();
        -}
        +
        const { Tween, Easing } = next2d.ui;
        +
        +// 移動 + 拡大 + フェードイン
        +const job = Tween.add(
        +    sprite,
        +    { x: 0, y: 0, scaleX: 1, scaleY: 1, alpha: 0 },
        +    { x: 200, y: 150, scaleX: 2, scaleY: 2, alpha: 1 },
        +    0,
        +    0.5,
        +    Easing.outCubic
        +);
        +
        +job.start();
        +

        アニメーションの連結 (chain)

        +
        const { Tween, Easing } = next2d.ui;
        +
        +// 最初のアニメーション
        +const job1 = Tween.add(
        +    sprite,
        +    { x: 0 },
        +    { x: 100 },
        +    0, 1,
        +    Easing.outQuad
        +);
        +
        +// 2つ目のアニメーション
        +const job2 = Tween.add(
        +    sprite,
        +    { x: 100 },
        +    { x: 200 },
        +    0, 1,
        +    Easing.inQuad
        +);
        +
        +// 連結して実行
        +job1.chain(job2);
        +job1.start();
        +

        遅延付きアニメーション

        +
        const { Tween, Easing } = next2d.ui;
        +
        +// 0.5秒遅延後に1秒かけてフェードアウト
        +const job = Tween.add(
        +    sprite,
        +    { alpha: 1 },
        +    { alpha: 0 },
        +    0.5,
        +    1,
        +    Easing.inQuad
        +);
        +
        +job.start();
        +

        イベントの活用

        +
        const { Tween, Easing } = next2d.ui;
        +
        +const job = Tween.add(
        +    sprite,
        +    { x: 0 },
        +    { x: 300 },
        +    0, 2,
        +    Easing.inOutQuad
        +);
        +
        +// フレームごとの処理
        +job.addEventListener("enterFrame", (event) => {
        +    console.log("進行中:", job.currentTime);
        +});
        +
        +// 完了時の処理
        +job.addEventListener("complete", (event) => {
        +    console.log("アニメーション完了!");
        +});
        +
        +job.start();

        ゲームでの活用例

        キャラクタージャンプ

        -
        function jump(character) {
        +
        const { Tween, Easing } = next2d.ui;
        +
        +function jump(character) {
             const startY = character.y;
             const jumpHeight = 100;
         
             // 上昇
        -    new Tween(character, {
        -        duration: 300,
        -        easing: Easing.easeOutQuad,
        -        onComplete: () => {
        -            // 下降
        -            new Tween(character, {
        -                duration: 300,
        -                easing: Easing.easeInQuad
        -            })
        -                .to({ y: startY })
        -                .play();
        -        }
        -    })
        -        .to({ y: startY - jumpHeight })
        -        .play();
        -}
        -

        ダメージエフェクト

        -
        function damageEffect(target) {
        -    const originalX = target.x;
        -    let shakeCount = 0;
        -
        -    // 点滅 + 揺れ
        -    const shake = () => {
        -        if (shakeCount >= 6) {
        -            target.x = originalX;
        -            target.alpha = 1;
        -            return;
        -        }
        -
        -        const offset = shakeCount % 2 === 0 ? 5 : -5;
        -        target.x = originalX + offset;
        -        target.alpha = shakeCount % 2 === 0 ? 0.5 : 1;
        -        shakeCount++;
        -
        -        setTimeout(shake, 50);
        -    };
        -
        -    shake();
        -}
        -

        コイン取得エフェクト

        -
        function coinCollectEffect(coin, targetY) {
        -    // 上に飛んでフェードアウト
        -    new Tween(coin, {
        -        duration: 500,
        -        easing: Easing.easeOutQuad,
        -        onUpdate: () => {
        -            // 回転
        -            coin.rotation += 15;
        -        },
        -        onComplete: () => {
        -            coin.parent?.removeChild(coin);
        -        }
        -    })
        -        .to({
        -            y: targetY,
        -            alpha: 0,
        -            scaleX: 0.5,
        -            scaleY: 0.5
        -        })
        -        .play();
        +    const upJob = Tween.add(
        +        character,
        +        { y: startY },
        +        { y: startY - jumpHeight },
        +        0, 0.3,
        +        Easing.outQuad
        +    );
        +
        +    // 下降
        +    const downJob = Tween.add(
        +        character,
        +        { y: startY - jumpHeight },
        +        { y: startY },
        +        0, 0.3,
        +        Easing.inQuad
        +    );
        +
        +    // 上昇 → 下降を連結
        +    upJob.chain(downJob);
        +    upJob.start();
         }

        UI表示アニメーション

        -
        function showPopup(popup) {
        +
        const { Tween, Easing } = next2d.ui;
        +
        +function showPopup(popup) {
             popup.scaleX = 0;
             popup.scaleY = 0;
             popup.alpha = 0;
         
        -    new Tween(popup, {
        -        duration: 400,
        -        easing: Easing.easeOutBack
        -    })
        -        .to({ scaleX: 1, scaleY: 1, alpha: 1 })
        -        .play();
        -}
        +    const job = Tween.add(
        +        popup,
        +        { scaleX: 0, scaleY: 0, alpha: 0 },
        +        { scaleX: 1, scaleY: 1, alpha: 1 },
        +        0, 0.4,
        +        Easing.outBack
        +    );
         
        -function hidePopup(popup, onComplete) {
        -    new Tween(popup, {
        -        duration: 200,
        -        easing: Easing.easeInQuad,
        -        onComplete
        -    })
        -        .to({ scaleX: 0, scaleY: 0, alpha: 0 })
        -        .play();
        -}
        -

        enterFrameを使った軽量Tween

        -
        // シンプルなenterFrameベースのTween
        -function tweenTo(target, property, endValue, speed = 0.1) {
        -    const handler = (event) => {
        -        const current = target[property];
        -        const diff = endValue - current;
        -
        -        if (Math.abs(diff) < 0.1) {
        -            target[property] = endValue;
        -            stage.removeEventListener("enterFrame", handler);
        -        } else {
        -            target[property] = current + diff * speed;
        -        }
        -    };
        -
        -    stage.addEventListener("enterFrame", handler);
        +    job.start();
         }
         
        -// 使用例
        -tweenTo(sprite, "x", 300, 0.15);  // xを300に向かって移動
        -tweenTo(sprite, "alpha", 0, 0.05);  // フェードアウト
        -

        カスタムイージング

        -
        // ベジェ曲線ベースのイージング
        -function bezierEasing(x1, y1, x2, y2) {
        -    return (t) => {
        -        // 簡易的な3次ベジェ補間
        -        const cx = 3 * x1;
        -        const bx = 3 * (x2 - x1) - cx;
        -        const ax = 1 - cx - bx;
        -
        -        const cy = 3 * y1;
        -        const by = 3 * (y2 - y1) - cy;
        -        const ay = 1 - cy - by;
        -
        -        const sampleCurveY = (t) =>
        -            ((ay * t + by) * t + cy) * t;
        -
        -        return sampleCurveY(t);
        -    };
        -}
        +function hidePopup(popup) {
        +    const job = Tween.add(
        +        popup,
        +        { scaleX: 1, scaleY: 1, alpha: 1 },
        +        { scaleX: 0, scaleY: 0, alpha: 0 },
        +        0, 0.2,
        +        Easing.inQuad
        +    );
        +
        +    job.addEventListener("complete", () => {
        +        popup.visible = false;
        +    });
         
        -// CSS cubic-bezier相当
        -const customEase = bezierEasing(0.25, 0.1, 0.25, 1.0);
        -

        パフォーマンスのヒント

        -
          -
        1. requestAnimationFrame使用: setTimeoutよりもスムーズ
        2. -
        3. プロパティ変更の最小化: 必要なプロパティのみ更新
        4. -
        5. オブジェクトプール: 大量のTweenはプールして再利用
        6. -
        7. 完了後のクリーンアップ: 不要なリスナーは削除
        8. -
        + job.start(); +}
        +

        コイン取得エフェクト

        +
        const { Tween, Easing } = next2d.ui;
        +
        +function coinCollectEffect(coin) {
        +    const job = Tween.add(
        +        coin,
        +        { y: coin.y, alpha: 1, scaleX: 1, scaleY: 1 },
        +        { y: coin.y - 50, alpha: 0, scaleX: 0.5, scaleY: 0.5 },
        +        0, 0.5,
        +        Easing.outQuad
        +    );
        +
        +    job.addEventListener("enterFrame", () => {
        +        coin.rotation += 15;
        +    });
        +
        +    job.addEventListener("complete", () => {
        +        coin.parent?.removeChild(coin);
        +    });
        +
        +    job.start();
        +}
        +

        停止と制御

        +
        const { Tween, Easing } = next2d.ui;
        +
        +const job = Tween.add(
        +    sprite,
        +    { x: 0 },
        +    { x: 400 },
        +    0, 2,
        +    Easing.linear
        +);
        +
        +job.start();
        +
        +// 途中で停止
        +stopButton.addEventListener("pointerDown", () => {
        +    job.stop();
        +});

        関連項目

        • DisplayObject
        • diff --git a/docs/ja/reference/player/video/index.html b/docs/ja/reference/player/video/index.html index 034cd1f6..88aae9b4 100644 --- a/docs/ja/reference/player/video/index.html +++ b/docs/ja/reference/player/video/index.html @@ -171,7 +171,8 @@

          基本的な動画再生

          // ステージに追加 stage.addChild(video);

        再生コントロール

        -
        const { Video, VideoEvent } = next2d.media;
        +
        const { Video } = next2d.media;
        +const { PointerEvent } = next2d.events;
         
         const video = new Video(640, 360);
         video.autoPlay = false;  // 自動再生を無効化
        @@ -180,43 +181,43 @@ 

        再生コントロール

        stage.addChild(video); // 再生ボタン -playButton.addEventListener("click", async () => { +playButton.addEventListener(PointerEvent.POINTER_DOWN, async () => { await video.play(); }); // 一時停止ボタン -pauseButton.addEventListener("click", () => { +pauseButton.addEventListener(PointerEvent.POINTER_DOWN, () => { video.pause(); }); // 停止ボタン(先頭に戻って停止) -stopButton.addEventListener("click", () => { +stopButton.addEventListener(PointerEvent.POINTER_DOWN, () => { video.pause(); video.seek(0); }); // 10秒進む -forwardButton.addEventListener("click", () => { +forwardButton.addEventListener(PointerEvent.POINTER_DOWN, () => { video.seek(video.currentTime + 10); }); // 10秒戻る -backButton.addEventListener("click", () => { +backButton.addEventListener(PointerEvent.POINTER_DOWN, () => { video.seek(Math.max(0, video.currentTime - 10)); });

        イベントリスニング

        -
        const { Video, VideoEvent } = next2d.media;
        +
        const { Video } = next2d.media;
        +const { VideoEvent } = next2d.events;
         
         const video = new Video(640, 360);
         
        -// メタデータ受信イベント
        -video.addEventListener(VideoEvent.METADATA_RECEIVED, () => {
        -    console.log("Duration:", video.duration);
        -    console.log("Size:", video.videoWidth, "x", video.videoHeight);
        -});
        -
         // 再生イベント
         video.addEventListener(VideoEvent.PLAY, () => {
        +    console.log("再生リクエスト");
        +});
        +
        +// 再生開始イベント
        +video.addEventListener(VideoEvent.PLAYING, () => {
             console.log("再生開始");
         });
         
        @@ -230,15 +231,10 @@ 

        イベントリスニング

        console.log("シーク:", video.currentTime); }); -// 終了イベント -video.addEventListener(VideoEvent.ENDED, () => { - console.log("再生終了"); -}); - video.src = "video.mp4"; stage.addChild(video);

        再生進捗の表示

        -
        const { Video, VideoEvent } = next2d.media;
        +
        const { Video } = next2d.media;
         
         const video = new Video(640, 360);
         video.src = "video.mp4";
        @@ -267,13 +263,8 @@ 

        音量コントロール

        stage.addChild(video); -// 音量スライダー -volumeSlider.addEventListener("change", (event) => { - video.volume = event.target.value; // 0.0 ~ 1.0 -}); - // ミュートトグル -muteButton.addEventListener("click", () => { +muteButton.addEventListener(PointerEvent.POINTER_DOWN, () => { video.muted = !video.muted; });

        ループ再生

        @@ -310,11 +301,7 @@

        VideoEvent

        - - - - -
        イベント説明
        VideoEvent.METADATA_RECEIVEDメタデータ受信時
        VideoEvent.PLAY再生開始時
        VideoEvent.PAUSE一時停止時
        VideoEvent.SEEKシーク時
        VideoEvent.ENDED再生終了時
        +
        イベント説明
        VideoEvent.PLAY再生がリクエストされた時
        VideoEvent.PLAYING再生が開始された時
        VideoEvent.PAUSE一時停止時
        VideoEvent.SEEKシーク時

        サポートフォーマット